Example #1
0
def test_tenth_frame_spare():
    game = Game()
    for _ in range(9):
        game.add(10)
    game.add(9)
    game.add(1)
    game.add(1)
    assert game.score == 270
class BowlingTest(unittest.TestCase):
    def setUp(self):
        self.game = Game()

    def test_all_gutterballs(self):
        self.helper_test_roll(20, 0)
        self.assertEqual(0, self.game.score())

    def helper_test_roll(self, rolls, pins):
        for roll in range(rolls):
            self.game.roll(pins)

    def test_perfect_game(self):
        self.helper_test_roll(12, 10)
        self.assertEqual(300, self.game.score())
Example #3
0
def test_end_of_array():
    game = Game()
    for _ in range(9):
        game.add(0)
        game.add(0)
    game.add(2)
    game.add(8)
    game.add(10)
    assert game.score == 20
Example #4
0
def test_simple_spare():
    game = Game()
    game.add(3)
    game.add(7)
    game.add(3)
    assert game.score_for_frame(1) == 13
    assert game.current_frame == 2
Example #5
0
def test_simple_strike():
    game = Game()
    game.add(10)
    game.add(3)
    game.add(6)
    assert game.score_for_frame(1) == 19
    assert game.score_for_frame(2) == 28
    assert game.current_frame == 3
Example #6
0
def test_four_throws_no_mark():
    game = Game()
    game.add(5)
    game.add(4)
    game.add(7)
    game.add(2)

    assert game.score == 18
    assert game.score_for_frame(1) == 9
    assert game.score_for_frame(2) == 18
    assert game.current_frame == 3
Example #7
0
class BowlingTest(unittest.TestCase):
   
   def rollMany(self, n, pins):
      for i in range(n):
         self.g.roll(pins)

   def rollSpare(self):
      self.g.roll(5)
      self.g.roll(5)

   def rollStrike(self):
      self.g.roll(10)

   def setUp(self):
      self.g = Game()

   def test_gutterGame(self):
      self.rollMany(20,0)
      self.assertEqual(0, self.g.score())

   def test_allOnes(self):
      self.rollMany(20,1)
      self.assertEqual(20, self.g.score())

   def test_oneSpare(self):
      self.rollSpare()
      self.g.roll(3)
      self.rollMany(17, 0)
      self.assertEqual(16, self.g.score())

   def test_oneStrike(self):
      self.rollStrike()
      self.g.roll(3)
      self.g.roll(4)
      self.rollMany(17, 0)
      self.assertEqual(24, self.g.score())

   def test_perfectGame(self):
      self.rollMany(12, 10)
      self.assertEqual(300, self.g.score())
Example #8
0
class BowlingTest(unittest.TestCase):
    def test_gutter_game(self):
        self.__setup()
        self.__roll_many(n=20, pins=0)
        self.assertEqual(self.g.score(), 0)

    def test_all_ones(self):
        self.__setup()
        self.__roll_many(n=20, pins=1)
        self.assertEqual(self.g.score(), 20)

    def test_one_spare(self):
        self.__setup()
        self.__roll_spare()
        self.g.roll(3)
        self.__roll_many(n=17, pins=0)
        self.assertEqual(self.g.score(), 16)

    def test_one_strike(self):
        self.__setup()
        self.__roll_strike()
        self.g.roll(3)
        self.g.roll(4)
        self.__roll_many(n=16, pins=0)
        self.assertEqual(self.g.score(), 24)

    def test_perfect_game(self):
        self.__setup()
        self.__roll_many(n=12, pins=10)
        self.assertEqual(self.g.score(), 300)

    def __setup(self):
        self.g = Game()

    def __roll_many(self, n, pins):
        for i in range(n):
            self.g.roll(pins)

    def __roll_spare(self):
        self.g.roll(5)
        self.g.roll(5)

    def __roll_strike(self):
        self.g.roll(10)
Example #9
0
def test_sample_game():
    game = Game()
    game.add(1)
    game.add(4)
    game.add(4)
    game.add(5)
    game.add(6)
    game.add(4)
    game.add(5)
    game.add(5)
    game.add(10)
    game.add(0)
    game.add(1)
    game.add(7)
    game.add(3)
    game.add(6)
    game.add(4)
    game.add(10)
    game.add(2)
    game.add(8)
    game.add(6)
    assert game.score == 133
Example #10
0
 def test_perfect_game(self):
     game = Game("XXXXXXXXXXXX")
     self.assertEqual(game.score(), 300)
Example #11
0
 def setUp(self):
   self.g = Game()
Example #12
0
 def setUp(self):
     self.game = Game(1)
class GameTest(unittest.TestCase):

    def setUp(self):
        self.g = Game()

    def roll_many(self, n, pins):
        for i in range(n):
            self.g.roll(pins)

    def spare(self):
        self.roll_many(2, 5)

    def test_gutter_game(self):
        self.roll_many(20, 0)
        self.assertEqual(0, self.g.score())

    def test_all_ones(self):
        self.roll_many(20, 1)
        self.assertEqual(20, self.g.score())

    def test_spare(self):
        self.spare()
        self.g.roll(3)
        self.roll_many(17, 0)
        self.assertEqual(16, self.g.score())

    def test_no_spare(self):
        self.g.roll(2)
        self.g.roll(6)
        self.g.roll(4)
        self.roll_many(17, 0)
        self.assertEqual(12, self.g.score())

    def test_strike(self):
        self.g.roll(10)
        self.g.roll(6)
        self.g.roll(3)
        self.assertEqual(28, self.g.score())

    def test_perfect_game(self):
        self.roll_many(12, 10)
        self.assertEqual(300, self.g.score())
Example #14
0
def test_two_throws_no_mark():
    game = Game()
    game.add(5)
    game.add(4)
    assert game.score == 9
    assert game.current_frame == 2
Example #15
0
def test_heart_break():
    game = Game()
    for _ in range(11):
        game.add(10)
    game.add(9)
    assert game.score == 299
Example #16
0
 def test_gutter_game(self):
     game = Game(roll_many("-", 20))
     self.assertEqual(game.score(), 0)
Example #17
0
 def test_all_ones(self):
     game = Game(roll_many("1", 20))
     self.assertEqual(game.score(), 20)
Example #18
0
 def test_spare_game(self):
     game = Game("5/5/5/5/5/5/5/5/5/5/5")
     self.assertEqual(game.score(), 150)
Example #19
0
 def test_heartbreak_game(self):
     game = Game("9-9-9-9-9-9-9-9-9-9-")
     self.assertEqual(game.score(), 90)
Example #20
0
 def setUp(self):
     """ Pretty much every single test is going to require a game, so we set one up by default."""
     self.game = Game()
Example #21
0
class TestBowling(unittest.TestCase):
    """
    Unit tests for a bowling game.
    """
    def setUp(self):
        self.game = Game()

    def test_number_of_pins_down(self):
        """
        Tests the number of pins down in a roll.
        The number of pins down can't be less than zero and greater than ten.
        """
        self.assertRaises(PinsDownError, self.game.roll, -1)
        self.assertRaises(PinsDownError, self.game.roll, 11)
        self.game.roll(5)
        self.assertEqual(self.game.score, 5)
        self.assertRaises(PinsDownError, self.game.roll, 6)
        self.game.roll(4)
        self.assertEqual(self.game.score, 9)

    def test_number_of_frames(self):
        """
        Tests the number of frames and rolls in a game.
        A bowling game has ten frames, and each frame has two rolls.
        """
        for i in range(10):
            self.game.roll(1)
            self.game.roll(1)
            self.assertEqual(len(self.game.frames[i]), 2)

        self.assertEqual(len(self.game.frames), 10)
        self.assertRaises(NumberOfFramesError, self.game.roll, 1)

    def test_frame_with_strike(self):
        """
        Tests a frame with an strike.
        When the bowler gets an strike, the frame is over.
        """
        self.game.roll(10)
        self.assertEqual(len(self.game.frames), 1)
        self.assertEqual(len(self.game.frames[0]), 1)

    def test_final_score_without_strikes_and_spares(self):
        """
        Tests the final score of a game without any strike or spare.
        """
        for i in range(10):
            self.game.roll(1)
            self.game.roll(1)

        self.assertEqual(self.game.score, 20)

    def test_spare_score(self):
        """
        Tests the partial score of an spare.
        The score of an spare is ten plus the score of the following roll.
        """
        self.game.roll(9)
        self.game.roll(1)
        self.game.roll(1)
        self.assertEqual(self.game.score, 12)

    def test_strike_score(self):
        """
        Tests the partial score of an strike.
        The score of an strike is ten plus the score of the following two rolls.
        """
        self.game.roll(10)
        self.game.roll(1)
        self.game.roll(1)
        self.assertEqual(self.game.score, 14)

    def test_final_score_with_all_spares(self):
        """
        Tests the final score of a bowling game with all spares.
        """
        for i in range(10):
            self.game.roll(1)
            self.game.roll(9)

        self.assertEqual(self.game.score, 109)
        # When the last frame is an spare, bowler gets an extra roll
        self.game.roll(1)
        self.assertEqual(self.game.score, 110)

    def test_final_score_with_all_strikes(self):
        """
        Tests the final score of a bowling game with all strikes.
        """
        for i in range(10):
            self.game.roll(10)

        self.assertEqual(self.game.score, 270)
        # When the last frame is an strike, bowler gets two extra rolls
        self.game.roll(10)
        self.game.roll(10)
        self.assertEqual(self.game.score, 300)
Example #22
0
 def test_strike(self):
     game = Game("X34" + roll_many("-", 16))
     self.assertEqual(game.score(), 24)
Example #23
0
class PythonBowlingGame(unittest.TestCase):
    # initialise game in setup, exit in tear town
    def setUp(self):
        self.game = Game(1)

    def test_gutter_game(self):
        self.roll_many(20, 0)
        self.assertEqual(0, self.game.score()[0])

    def test_all_ones(self):
        self.roll_many(20, 1)
        self.assertEqual(20, self.game.score()[0])

    def test_one_spare(self):
        self.game.roll(5)
        self.game.roll(5)
        self.game.roll(3)
        self.roll_many(17,0)
        self.assertEqual(16, self.game.score()[0])

    def test_one_strike(self):
        self.game.roll(10)
        self.game.roll(3)
        self.game.roll(4)
        self.roll_many(16, 0)
        self.assertEqual(24, self.game.score()[0])

    def test_perfect_game(self):
        self.roll_many(12,10)
        self.assertEqual(300, self.game.score()[0])

    # may also be worth testing that the maximum number of rolls on last turn is 3

    def roll_many(self, n, pins):
        for i in range(n):
            self.game.roll(pins)
Example #24
0
 def test_spare(self):
     game = Game("4/34" + roll_many("-", 16))
     self.assertEqual(game.score(), 20)
Example #25
0
def game():
    return Game()
Example #26
0
 def setUp(self):
     super(GameTestCase, self).setUp()
     self.game = Game()
Example #27
0
class BowlingGameTest(unittest.TestCase):

  def setUp(self):
    self.g = Game()

  def testGutterGame(self):
    self.__rollMany(0,0)
  
  def testAllOnes(self):
    self.__rollMany(1,20)

  def testAddFrame(self):
    self.g.add_frame(Frame())
    self.assertEquals(1, len(self.g.frames))

  def testBuildFramesWhileRolling(self):
    self.g.roll(10)
    self.assertEqual([[10]], self.g.frames_to_list())
    self.g.roll(2)
    self.assertEqual([[10], [2]], self.g.frames_to_list())
    self.g.roll(4)
    self.assertEqual([[10], [2,4]], self.g.frames_to_list())
    self.g.roll(10)
    self.assertEqual([[10], [2,4], [10]], self.g.frames_to_list())

  def testSpare(self):
    self.g.roll(4)
    self.g.roll(6)
    self.g.roll(4)
    self.assertEqual(14+4, self.g.get_score())

  def testStrike(self):
    self.g.roll(10)
    self.g.roll(2)
    self.g.roll(4)
    self.assertEqual(10+6+6, self.g.get_score())

  def testShouldNotAddMoreThenTenFrames(self):
    for i in range(10):
      self.g.add_frame(Frame())
    self.assertFalse(self.g.add_frame(Frame()))
    self.assertEqual(10, len(self.g.frames))

  def testPerfectGame(self):
    for i in range(12):
      self.g.roll(10)
    self.assertEqual(300, self.g.get_score())

  def __rollMany(self, pins, expected_score):
    for i in range(20):
      self.g.roll(pins)
    self.assertEqual(expected_score, self.g.get_score()) 
Example #28
0
class BowlingGameTest(unittest.TestCase):
    def setUp(self):
        self.g = Game()

    def testGutterGame(self):
        self.__rollMany(0, 0)

    def testAllOnes(self):
        self.__rollMany(1, 20)

    def testAddFrame(self):
        self.g.add_frame(Frame())
        self.assertEquals(1, len(self.g.frames))

    def testBuildFramesWhileRolling(self):
        self.g.roll(10)
        self.assertEqual([[10]], self.g.frames_to_list())
        self.g.roll(2)
        self.assertEqual([[10], [2]], self.g.frames_to_list())
        self.g.roll(4)
        self.assertEqual([[10], [2, 4]], self.g.frames_to_list())
        self.g.roll(10)
        self.assertEqual([[10], [2, 4], [10]], self.g.frames_to_list())

    def testSpare(self):
        self.g.roll(4)
        self.g.roll(6)
        self.g.roll(4)
        self.assertEqual(14 + 4, self.g.get_score())

    def testStrike(self):
        self.g.roll(10)
        self.g.roll(2)
        self.g.roll(4)
        self.assertEqual(10 + 6 + 6, self.g.get_score())

    def testShouldNotAddMoreThenTenFrames(self):
        for i in range(10):
            self.g.add_frame(Frame())
        self.assertFalse(self.g.add_frame(Frame()))
        self.assertEqual(10, len(self.g.frames))

    def testPerfectGame(self):
        for i in range(12):
            self.g.roll(10)
        self.assertEqual(300, self.g.get_score())

    def __rollMany(self, pins, expected_score):
        for i in range(20):
            self.g.roll(pins)
        self.assertEqual(expected_score, self.g.get_score())
Example #29
0
 def __setup(self):
     self.g = Game()
Example #30
0
class TestGame(TestCase):
    def setUp(self):
        """ Pretty much every single test is going to require a game, so we set one up by default."""
        self.game = Game()

    def test_perfect_game(self):
        """If all 10 frames in a game are strike, we should have a perfect game and should score 300."""
        for _ in range(9):
            self.game.add_frame(Frame(10))
        self.game.add_frame(Frame(10, 10, 10))
        self.assertTrue(self.game.is_perfect_game)
        self.assertEqual(self.game.total_score, 300)
        self.assertFalse(self.game.is_gutter_game)

    def test_gutter_game(self):
        """If no pins were down in the entire game, we should have a gutter game."""
        for _ in range(10):
            self.game.add_frame(Frame(0, 0))

        self.assertTrue(self.game.is_gutter_game)
        self.assertFalse(self.game.is_perfect_game)

    def test_fill_allowed_if_strike(self):
        """Ensure fill frames are allowed is a strike is rolled on the last frame."""
        for _ in range(9):
            self.game.add_frame(Frame(0, 0))
        self.game.add_frame(
            (Frame(10, 10,
                   10)))  # Last frame has extra rolls because it's a strike

    def test_fill_allowed_if_spare(self):
        """Ensure fill frames are allowed is a spare is rolled on the last frame."""
        for _ in range(9):
            self.game.add_frame(Frame(0, 0))
        self.game.add_frame((Frame(7, 3, 5)))

    def test_fill_not_allowed_if_not_all_down(self):
        """Fill frames are only allowed if all 10 pins come down in the first 2 rolls."""
        for _ in range(9):
            self.game.add_frame(Frame(0, 0))
        with self.assertRaises(AttributeError):
            self.game.add_frame(Frame(2, 3, 9))

    def test_fill_not_allowed_if_not_last(self):
        """Test that a fill frame is only allowed if it's the last roll."""
        self.game.add_frame(Frame(5, 3))
        with self.assertRaises(AttributeError):
            self.game.add_frame(Frame(10, 10, 10))

    def test_addiing_11_frames(self):
        """Only 11 frames are allowed in any one game of 10-pin bowling"""
        for _ in range(10):
            self.game.add_frame(Frame(4, 3))
        # Adding the 11th frame should raise an exception
        with self.assertRaises(IndexError):
            self.game.add_frame(Frame(10))

    def test_score_with_strike(self):
        """Basic test to ensure strikes are calculated correctly.
        This is test by rolling a strike, followed by a (5, 3) and a (6, 3).
        We should have (10 + 5 + 3) + 8 + 9 points == 35"""
        self.game.add_frame(Frame(10))  # Strike
        self.game.add_frame(Frame(5, 3))
        self.game.add_frame(Frame(6, 3))
        self.assertEqual(self.game.total_score, 35)

    def test_consecutive_strikes(self):
        """
        Ensure score is calculated correctly if we roll several strikes in a row.
        The score should be  (10 + 10 + 10) + (10 + 10 + 5) + (10 + 5 + 3) + 8 + 9 == 90.
        """
        self.game.add_frame(Frame(10))  # Strike
        self.game.add_frame(Frame(10))  # Strike
        self.game.add_frame(Frame(10))  # Strike
        self.game.add_frame(Frame(5, 3))
        self.game.add_frame(Frame(6, 3))
        self.assertEqual(self.game.total_score, 90)

    def test_score_with_spare(self):
        """Basic test to ensure spares are calculated correctly.
        This is done by rolling a spare (10 points) + 8 pins.
        We should end up with (10 + 5) + 8 points.
        """
        self.game.add_frame(Frame(6, 4))  # Spare
        self.game.add_frame(Frame(5, 3))
        self.assertEqual(self.game.total_score, 23)

    def test_score_with_consecutive_spares(self):
        """
        Ensure score is calculated correctly if we roll several spares in a row.
        The score should be  (10 + 2) + (10 + 7) + (10 + 5) + 8 == 66.
        """
        self.game.add_frame(Frame(6, 4))  # Spare
        self.game.add_frame(Frame(2, 8))  # Spare
        self.game.add_frame(Frame(7, 3))  # Spare
        self.game.add_frame(Frame(5, 3))
        self.assertEqual(self.game.total_score, 52)

    def test_score_with_strike_spare_combo(self):
        """
        Ensure score is calculated correctly if we mix spares and strikes in consecutive frames.
        The score should be  (10 + 10) + (10 + 7 + 3) + (10 + 10) (10 + 5 + 5) + 10 == 100.
        """
        self.game.add_frame(Frame(6, 4))  # Spare
        self.game.add_frame(Frame(10))  # Strike
        self.game.add_frame(Frame(7, 3))  # Spare
        self.game.add_frame(Frame(10))  # Strike
        self.game.add_frame(Frame(5, 5))  # Spare
        self.assertEqual(self.game.total_score, 90)

    def test_score_with_regular_simple_scores(self):
        """
        This is to test the scoring works with some regular casual rolls.
        Game and score was created using https://www.bowlinggenius.com/.
        """
        self.game.add_frame(Frame(8, 2))
        self.game.add_frame(Frame(6, 4))
        self.game.add_frame(Frame(3, 2))
        self.game.add_frame(Frame(6, 2))
        self.game.add_frame(Frame(1, 3))
        self.game.add_frame(Frame(4, 5))
        self.game.add_frame(Frame(4, 3))
        self.game.add_frame(Frame(9, 1))
        self.game.add_frame(Frame(10))
        self.game.add_frame(Frame(0, 2))
        self.assertEqual(self.game.total_score, 96)
Example #31
0
class GameTestCase(TestCase):
    def setUp(self):
        super(GameTestCase, self).setUp()
        self.game = Game()

    def tearDown(self):
        super(GameTestCase, self).tearDown()

    def testAllGutter(self):
        self.rollMany(20, 0)
        self.assertEqual(0, self.game.score())

    def testAllOne(self):
        self.rollMany(20, 1)
        self.assertEqual(20, self.game.score())

    def testOneSpare(self):
        self.rollSpare()
        self.game.roll(3)
        self.rollMany(17, 0)
        self.assertEqual(16, self.game.score())

    def testAllStrikeButLastFrame(self):
        self.rollMany(9, 10)
        self.rollMany(2, 0)
        self.assertEquals(240, self.game.score())

    def testAllStrikeButLastThrow(self):
        self.rollMany(11, 10)
        self.game.roll(9)
        self.assertEquals(299, self.game.score())

    def testAllStrikeButFirstFrameIsSpare(self):
        self.rollSpare()
        self.rollMany(11, 10)
        self.assertEquals(290, self.game.score())

    def testAllStrikeButFirstFrameIsNotSpare(self):
        self.game.roll(5)
        self.game.roll(4)
        self.rollMany(11, 10)
        self.assertEquals(279, self.game.score())

    def testTwoSpares(self):
        self.rollSpare()
        self.rollSpare()
        self.game.roll(3)
        self.game.roll(3)
        self.rollMany(14, 0)
        self.assertEqual(15 + 13 + 6, self.game.score())

    def testOneStrike(self):
        self.rollStrike()
        self.game.roll(3)
        self.game.roll(4)
        self.rollMany(16, 0)
        self.assertEqual(24, self.game.score())

    def testPerfectGame(self):
        self.rollMany(12, 10)
        self.assertEqual(300, self.game.score())

    def rollStrike(self):
        self.game.roll(10)

    def rollSpare(self):
        self.game.roll(5)
        self.game.roll(5) #spare

    def rollMany(self, n, pins):
        map(lambda x: self.game.roll(pins=pins), range(0, n))
Example #32
0
 def test_always_normal(self):
     game = Game("12345123451234512345")
     self.assertEqual(game.score(), 60)
Example #33
0
 def setUp(self):
     self.game = Game()
Example #34
0
def test_perfect_game():
    game = Game()
    for _ in range(12):
        game.add(10)
    assert game.score == 300
    assert game.current_frame == 11
Example #35
0
 def setUp(self):
     self.g = Game()
 def test_functional_2_hit(self):
     game = Game(game_result='12')
     result = game.calculate_result()
     self.assertEqual(
         result, 3,
         'Не верно рассчитываются очки за 2 попадания 2 бросками !')