class BowlingTest(unittest.TestCase):
	def setUp(self):
		self.b = Bowling()

	def tearDown(self):
		del self.b

	def test_one_throw_11_pins(self):
		self.assertRaises(ValueError, self.b.throw, 11)

	def test_two_throw_13_pins_in_total(self):
		self.b.throw(3)
		self.assertRaises(ValueError, self.b.throw, 10)

	def test_one_throw(self):
		self.b.throw(3)
		self.assertEqual(self.b.num_pins_remained, 7)
		self.assertFalse(self.b.new_frame)
		self.assertEqual(self.b.current_frame, 0)
		self.assertEqual(self.b.get_score(), 3)

	def test_two_throws(self):
		self.b.throw(3)
		self.b.throw(4)
		self.assertEqual(self.b.num_pins_remained, 10)
		self.assertTrue(self.b.new_frame)
		self.assertEqual(self.b.current_frame, 1)
		self.assertEqual(self.b.get_score(), 7)
		self.assertEqual(self.b.score[0], 7)

	def test_three_throw(self):
		self.b.throw(3)
		self.b.throw(4)
		self.b.throw(7)
		self.assertEqual(self.b.num_pins_remained, 3)
		self.assertFalse(self.b.new_frame)
		self.assertEqual(self.b.current_frame, 1)
		self.assertEqual(self.b.get_score(), 14)
		self.assertEqual(self.b.score[0], 7)
		self.assertEqual(self.b.score[1], 7)

	def test_spare_counts_next_frame_score(self):
		self.b.throw(3)
		self.b.throw(7)
		self.b.throw(7)
		self.b.throw(2)
		self.assertEqual(self.b.num_pins_remained, 10)
		self.assertTrue(self.b.new_frame)
		self.assertEqual(self.b.current_frame, 2)
		self.assertEqual(self.b.get_score(), 28)
		self.assertEqual(self.b.score[0], 19)
		self.assertEqual(self.b.score[1], 9)

	def test_spare_counts_next_frame_score_advance_to_next_frame(self):
		self.b.throw(3)
		self.b.throw(7)
		self.b.throw(7)
		self.b.throw(2)
		self.assertEqual(self.b.num_pins_remained, 10)
		self.assertTrue(self.b.new_frame)
		self.assertEqual(self.b.current_frame, 2)
		self.assertEqual(self.b.score[0], 19)
		self.assertEqual(self.b.score[1], 9)
		self.assertEqual(self.b.get_score(), 28)

	def test_strike_moves_to_next_frame(self):
		self.b.throw(10)
		self.assertEqual(self.b.num_pins_remained, 10)
		self.assertTrue(self.b.new_frame)
		self.assertEqual(self.b.current_frame, 1)
		self.assertEqual(self.b.get_score(), 10)
		self.assertEqual(self.b.score[0], 10)

	def test_strike_counts_next_frame_scores(self):
		self.b.throw(10)
		self.assertTrue(self.b.strike[1])
		self.assertFalse(self.b.strike[0])
		self.b.throw(7)
		self.b.throw(3)
		self.assertFalse(self.b.strike[1])
		self.assertTrue(self.b.strike[0])
		self.b.throw(7)
		self.b.throw(3)
		self.assertFalse(self.b.strike[1])
		self.assertFalse(self.b.strike[0])
		self.assertEqual(self.b.num_pins_remained, 10)
		self.assertTrue(self.b.new_frame)
		self.assertEqual(self.b.current_frame, 3)
		self.assertEqual(self.b.score[0], 30)
		self.assertEqual(self.b.score[1], 20)
		self.assertEqual(self.b.score[2], 10)
		self.assertEqual(self.b.get_score(), 60)

	def test_spare_on_last_frame(self):
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(0)
		self.b.throw(10)
		self.assertRaises(ValueError, self.b.throw, 3)
		self.assertEqual(self.b.get_score(), 270)

	def test_strike_on_last_frames_and_throw_11th_frame(self):
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.b.throw(10)
		self.assertRaises(ValueError, self.b.throw, 3)
		self.assertEqual(self.b.get_score(), 270)
Example #2
0
class BowlingTest(unittest.TestCase):
	def setUp(self):
		self.bowling = Bowling()
	
	def tearDown(self):
		del self.bowling
			
	def testOneThrow(self):
		self.bowling.throw(3)
		self.assertEqual(self.bowling.score[0], 3)
		self.assertFalse(self.bowling.first_throw)
		self.assertEqual(self.bowling.frame, 0)
		
	def testTwoThrows(self):
		self.bowling.throw(3)
		self.bowling.throw(5)
		self.assertEqual(self.bowling.score[0], 8)
		self.assertTrue(self.bowling.first_throw)
		self.assertEqual(self.bowling.frame, 1)
		
	def testThreeThrows(self):
		self.bowling.throw(3)
		self.bowling.throw(5)
		self.bowling.throw(7)
		self.assertEqual(self.bowling.score[0], 8)
		self.assertEqual(self.bowling.score[1], 7)
		self.assertFalse(self.bowling.first_throw)
		self.assertEqual(self.bowling.frame, 1)
		
	def testSpareCountsNextFrameScore(self):
		self.bowling.throw(4)
		self.bowling.throw(6)
		self.bowling.throw(8)
		self.bowling.throw(1)
		self.assertEqual(self.bowling.score[0], 19)
		self.assertEqual(self.bowling.score[1], 9)
		self.assertTrue(self.bowling.first_throw)
		self.assertEqual(self.bowling.frame, 2)
		
	def testStrikeMovesToNextFrame(self):
		self.assertTrue(self.bowling.first_throw)
		self.bowling.throw(10)
		self.assertTrue(self.bowling.first_throw)
		self.bowling.throw(2)
		self.assertFalse(self.bowling.first_throw)
		
	def testStrikeCountsNextFrameScore(self):
		self.bowling.throw(10)
		self.bowling.throw(2)
		self.bowling.throw(3)
		self.bowling.throw(4)
		self.bowling.throw(5)
		
		self.assertEqual(self.bowling.score[0], 24)
		self.assertEqual(self.bowling.score[1], 5)
		self.assertEqual(self.bowling.score[2], 9)
		
	def testSpareOn10thFrame(self):
		for x in range(0, 9):
			self.bowling.throw(2)
			self.bowling.throw(2)
			
		self.bowling.throw(4)
		self.assertEqual(self.bowling.score[9], 4)
		self.bowling.throw(6)
		self.assertEqual(self.bowling.score[9], 10)
		
	def testStrikeOn8thFrame(self):
		for x in range(0, 7):
			self.bowling.throw(2)
			self.bowling.throw(2)
			
		self.assertTrue(self.bowling.first_throw)
		self.bowling.throw(10)
		self.bowling.throw(2)
		self.bowling.throw(3)
		self.bowling.throw(4)
		self.bowling.throw(5)
		self.assertEqual(self.bowling.score[7], 24)
		
	def testStrikeOn9thFrame(self):
		for x in range(0, 8):
			self.bowling.throw(2)
			self.bowling.throw(2)
			
		self.bowling.throw(10)
		self.bowling.throw(2)
		self.bowling.throw(3)
		self.assertEqual(self.bowling.score[8], 15)
		self.assertEqual(self.bowling.score[9], 5)
		
		
	def testStrikeOn10thFrame(self):
		for x in range(0, 9):
			self.bowling.throw(2)
			self.bowling.throw(2)
			
		self.assertTrue(self.bowling.first_throw)
		self.bowling.throw(10)
		self.assertEqual(self.bowling.score[9], 10)
				
	def testThrowOn11thFrame(self):
		for x in range(0, 10):
			self.bowling.throw(2)
			self.bowling.throw(2)
			
		self.assertTrue(self.bowling.first_throw)
		with self.assertRaises(ValueError):
			self.bowling.throw(4)
			
	def testThrowLessThanZero(self):
		with self.assertRaises(ValueError):
			self.bowling.throw(-1)
			
	def testThrowMoreThanTen(self):
		with self.assertRaises(ValueError):
			self.bowling.throw(11)
			
	def testPerfectGame(self):
		self.bowling.throw(10)
		self.bowling.throw(10)
		self.bowling.throw(10)
		self.bowling.throw(10)
		self.bowling.throw(10)
		self.bowling.throw(10)
		self.bowling.throw(10)
		self.bowling.throw(10)
		self.bowling.throw(10)
		self.bowling.throw(10)
		
		total = 0
		for i in self.bowling.score:
			total += i
		self.assertEqual(total, 270)
		
	def testAllSpares(self):
		for x in range(0, 20):
			self.bowling.throw(5)
				
		total = 0
		for i in self.bowling.score:
			total = total + i
			
		self.assertEqual(total, 190)
			
	def testFirstFrameStrike(self):
		self.bowling.throw(10)
		self.bowling.throw(10)
		self.bowling.throw(10)
		
		self.assertEqual(self.bowling.score[0], 30)
		
	def testFirstFrameSpare(self):
		self.bowling.throw(5)
		self.bowling.throw(5)
		self.bowling.throw(10)
		
		self.assertEqual(self.bowling.score[0], 20)
		
	def testSimple1(self):
		self.bowling.throw(3)
		self.bowling.throw(5)
		self.bowling.throw(10)
		self.bowling.throw(5)
		self.bowling.throw(5)
		self.bowling.throw(10)
		
		self.assertEqual(self.bowling.score[0], 8)
		self.assertEqual(self.bowling.score[1], 30)
		self.assertEqual(self.bowling.score[2], 20)
		self.assertEqual(self.bowling.score[3], "X")
			
	def testSimple2(self):
		self.bowling.throw(3)
		self.bowling.throw(5)
		self.bowling.throw(10)
		self.bowling.throw(5)
		self.bowling.throw(5)
		self.bowling.throw(3)
		self.bowling.throw(3)
		
		self.assertEqual(self.bowling.score[0], 8)
		self.assertEqual(self.bowling.score[1], 26)
		self.assertEqual(self.bowling.score[2], 16)
		self.assertEqual(self.bowling.score[3], 6)
	
	'''	
	def testRandomGames(self):
		n = 10
		for i in range(0, 10):
			self.setUp()
			while(self.bowling.frame < 10):
				if self.bowling.first_throw:
					m = random.randint(7, 10)
				else:
					m = random.randint(0, 10 - n)
				self.bowling.throw(m)
				n = m
	'''
				
	def testRandomGeneration1(self):
		self.bowling.throw(2)
		self.bowling.throw(8)
		self.bowling.throw(10)
		self.bowling.throw(1)
		self.bowling.throw(7)
		self.bowling.throw(2)
		self.bowling.throw(1)
		self.bowling.throw(10)
		self.bowling.throw(8)
		self.bowling.throw(0)
		self.bowling.throw(5)
		self.bowling.throw(2)
		self.bowling.throw(6)
		self.bowling.throw(2)
		self.bowling.throw(1)
		self.bowling.throw(0)
		self.bowling.throw(8)
		self.bowling.throw(0)
		
		self.assertEqual(self.bowling.score[0], 20)
		self.assertEqual(self.bowling.score[1], 21)
		self.assertEqual(self.bowling.score[2], 8)
		self.assertEqual(self.bowling.score[3], 3)
		self.assertEqual(self.bowling.score[4], 25)
		self.assertEqual(self.bowling.score[5], 8)
		self.assertEqual(self.bowling.score[6], 7)
		self.assertEqual(self.bowling.score[7], 8)
		self.assertEqual(self.bowling.score[8], 1)
		self.assertEqual(self.bowling.score[9], 8)
		
	def testRandomGeneration2(self):
		self.bowling.throw(1)
		self.bowling.throw(9)
		self.bowling.throw(9)
		self.bowling.throw(1)
		self.bowling.throw(0)
		self.bowling.throw(1)
		self.bowling.throw(8)
		self.bowling.throw(0)
		self.bowling.throw(3)
		self.bowling.throw(7)
		self.bowling.throw(5)
		self.bowling.throw(0)
		self.bowling.throw(10)
		self.bowling.throw(9)
		self.bowling.throw(1)
		self.bowling.throw(9)
		self.bowling.throw(1)
		self.bowling.throw(2)
		self.bowling.throw(1)
		
		self.assertEqual(self.bowling.score[0], 20)
		self.assertEqual(self.bowling.score[1], 11)
		self.assertEqual(self.bowling.score[2], 1)
		self.assertEqual(self.bowling.score[3], 8)
		self.assertEqual(self.bowling.score[4], 15)
		self.assertEqual(self.bowling.score[5], 5)
		self.assertEqual(self.bowling.score[6], 30)
		self.assertEqual(self.bowling.score[7], 20)
		self.assertEqual(self.bowling.score[8], 13)
		self.assertEqual(self.bowling.score[9], 3)
			
	def testRandomGeneration3(self):
		self.bowling.throw(8)
		self.bowling.throw(1)
		self.bowling.throw(10)
		self.bowling.throw(10)
		self.bowling.throw(9)
		self.bowling.throw(0)
		self.bowling.throw(9)
		self.bowling.throw(0)
		self.bowling.throw(10)
		self.bowling.throw(10)
		self.bowling.throw(10)
		self.bowling.throw(10)
		self.bowling.throw(0)
		self.bowling.throw(0)
		
		self.assertEqual(self.bowling.score[0], 9)
		self.assertEqual(self.bowling.score[1], 29)
		self.assertEqual(self.bowling.score[2], 28)
		self.assertEqual(self.bowling.score[3], 9)
		self.assertEqual(self.bowling.score[4], 9)
		self.assertEqual(self.bowling.score[5], 30)
		self.assertEqual(self.bowling.score[6], 30)
		self.assertEqual(self.bowling.score[7], 20)
		self.assertEqual(self.bowling.score[8], 10)
		self.assertEqual(self.bowling.score[9], 0)