示例#1
0
 def test_bowling_example(self):
     b = Bowling()
     for i in range(10):
         b.hit(0)
     Value(b.score).should == 0
     Value(b.score).should_not == 1
     Value(b).get.score.should == 0
示例#2
0
def test_knock_some_pins():
    bowling = Bowling()

    _add_frames(bowling, 10, (6, 0))

    expected_score = 60
    assert bowling.calculate_score() == expected_score
示例#3
0
def test_frame_with_perfect_strike():
    bowling = Bowling()

    _add_frames(bowling, 9, (10, ))
    _add_frames(bowling, 1, (10, 10, 10))

    expected_score = 300
    assert bowling.calculate_score() == expected_score
示例#4
0
def test_frame_with_spare():
    bowling = Bowling()

    _add_frames(bowling, 9, (1, 9))
    _add_frames(bowling, 1, (1, 9, 1))

    expected_score = 110
    assert bowling.calculate_score() == expected_score
示例#5
0
    def test_bowling_all_9s_should_be_90(self):
        b = Bowling()
        for i in range(10):
            b.hit(9)
        Value(b.score).should == 90

        v = Value(2)
        v += 2
        v.should == 4
示例#6
0
def test_frame_with_strike():
    bowling = Bowling()

    # 10 10 10 10 10 10 10 10 10 000
    # 30 30 30 30 30 30 30 20 10 0

    _add_frames(bowling, 9, (10, ))
    _add_frames(bowling, 1, (0, 0))

    expected_score = 240
    assert bowling.calculate_score() == expected_score
示例#7
0
def test_data_extraction():
    """
        should read correct data 
    """
    assert_data = [[
        '2', '3', '5', '4', '9', '1', '2', '5', '3', '2', '4', '2', '3', '3',
        '4', '6', '10', '3', '2'
    ],
                   [
                       '10', '10', '10', '10', '10', '10', '10', '10', '10',
                       '10', '10', '10', '10', '10', '10', '10', '10', '10',
                       '10'
                   ], ['2', '3', '5', '4', '10', '10'], ['10', '10', '10']]
    game = Bowling()
    result = game.read_csv(filename='../data/test.csv')
    assert game.score_data == assert_data
示例#8
0
    def tour_result(self):
        """Выводит результат в файл tournament_result.txt"""
        winner = {"name": '', "score": 0}

        with open(file=self.file_in, mode='r', encoding='utf8') as file_in:
            with open(file=self.file_out, mode='w',
                      encoding='utf8') as file_out:
                for line in file_in:
                    line_rep = line.replace('\t', ' ')
                    line_pars = line_rep.split(' ')

                    if line_pars[0] == '###':  # Если начало тура
                        file_out.write(f'{line}')
                        winner['name'] = ''
                        winner[
                            'score'] = 0  # Обнуляет победителя тура, при начале нового

                    elif line_pars[0] == 'winner':  # Если конец тура
                        self.tour_stat[winner['name']]['winners'] += 1
                        file_out.write(f"winner is {winner['name']}")

                    elif line == '\n':  # Если пустая строка
                        continue

                    else:  # Если результа участника
                        for x in line_pars[::-1]:
                            if x == '':
                                line_pars.remove(x)

                        name = line_pars[0]
                        result = line_pars[1]
                        b = Bowling(result.replace('\n', ''))
                        score = b.get_score()

                        if score > winner['score']:
                            winner['name'] = name
                            winner['score'] = score

                        line = line_rep.replace('\n', '')
                        file_out.write(f'{line.ljust(32, " ")}{score}\n')

                        if name in self.tour_stat:
                            self.tour_stat[name]['games'] += 1
                        else:
                            self.tour_stat[name] = {'games': 1, 'winners': 0}

        self.print_term()
示例#9
0
    def game(self):

        with open(self.file, 'r', encoding='utf-8') as file:
            for line in file:
                try:
                    if line.strip():
                        if line.startswith('###'):
                            self.table_of_score.clear()
                            result = line
                            yield result

                        elif line.startswith('winner'):
                            winner = max(self.table_of_score.values())
                            final_dict = {
                                k: v
                                for k, v in self.table_of_score.items()
                                if v == winner
                            }
                            result = f'winner is {str(list(final_dict))[2:-2]}'
                            yield result
                        else:
                            string1, string2 = line.split()
                            result = Bowling(results=string2)
                            result.play_the_game()
                            self.table_of_score[string1] = result.score
                            result = f'{string1} {string2} {result.score}'
                            yield result
                    else:
                        continue
                except ValueError:
                    result = f'ОШИБКА СТРОКИ: фреймов больше, чем надо>>> {line}'
                    yield result
                except IndexError:
                    result = f'ОШИБКА СТРОКИ: символ  не может стоять вначале фрейма {line}'
                    yield result
                except TypeError as Ty:
                    result = f'ОШИБКА СТРОКИ:{Ty}'
                    yield result
                except SyntaxError:
                    result = f'ОШИБКА СТРОКИ: Недопустимые символы >>> {line} '
                    yield result
示例#10
0
def run():

    parser = argparse.ArgumentParser()

    parser.add_argument('result',
                        type=str,
                        help='Результат игры из 10 фреймов')
    args = parser.parse_args()
    game_score_result = Bowling(args.result)
    print(
        f'В результате счета игры: {args.result}, вы набрали {game_score_result.analyzing_result()} очков!'
    )
示例#11
0
def test_spare_calculation():
    """
        should print correct result for the last data
    """
    assert_data = {
        1: (2, 3, ' ', 5),
        2: (5, 4, ' ', 14),
        3: (9, '/', ' ', 26),
        4: (2, 5, ' ', 33),
        5: (3, 2, ' ', 38),
        6: (4, 2, ' ', 44),
        7: (3, 3, ' ', 50),
        8: (4, '/', ' ', 70),
        9: ('X', ' ', ' ', 85),
        10: (3, 2, ' ', 90)
    }
    assert_score = 90
    game = Bowling()
    game.read_csv(filename='../data/test_spare.csv')
    result = game.calculate_score()
    assert game.table_content == assert_data
    assert game.final_score_frame == assert_score
示例#12
0
def test_score_calculation():
    """
        should print correct result for the last data
    """
    assert_data = {
        1: ('X', ' ', ' ', 30),
        2: ('X', ' ', ' ', 30),
        3: ('X', ' ', ' ', 30),
        4: None,
        5: None,
        6: None,
        7: None,
        8: None,
        9: None,
        10: None
    }
    game = Bowling()
    assert_score = 30
    game.read_csv(filename='../data/test.csv')
    result = game.calculate_score()
    assert game.final_score_frame == assert_score
    assert game.table_content == assert_data
示例#13
0
def test_strike_calculation():
    """
        should print correct result for the last data
    """
    assert_data = {
        1: ('X', ' ', ' ', 30),
        2: ('X', ' ', ' ', 60),
        3: ('X', ' ', ' ', 90),
        4: ('X', ' ', ' ', 120),
        5: ('X', ' ', ' ', 150),
        6: ('X', ' ', ' ', 180),
        7: ('X', ' ', ' ', 210),
        8: ('X', ' ', ' ', 240),
        9: ('X', ' ', ' ', 270),
        10: ('X', 'X', 'X', 300)
    }
    assert_score = 300
    game = Bowling()
    game.read_csv(filename='../data/test_strike.csv')
    result = game.calculate_score()
    assert game.table_content == assert_data
    assert game.final_score_frame == assert_score
class BowlingTestSuite(unittest.TestCase):
    def setUp(self):
        self.uut = Bowling()

    def test_roll_gutter_game(self):
        self.roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
        self.assertEqual(self.uut.score(), 0)

    def test_roll_all_ones(self):
        self.roll([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
        self.assertEqual(self.uut.score(), 20)

    def test_roll_spare_followed_by_five(self):
        """
        First frame is worth 15 points, second frame adds 5
        for 20 total
        """
        self.roll([7, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
        self.assertEqual(20, self.uut.score())

    def test_roll_strike_followed_by_two_and_three(self):
        """
        As the first ball of frame one is a strike, the total
        for the frame should be the sum of the strike plus the next two rolls.

        Frame one is worth 15 points, frame 2 is worth 5 points, for 20 total
        Returns:

        """
        self.roll([10, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
        self.assertEqual(20, self.uut.score())

    def test_played_perfect_game(self):
        self.roll([10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10])
        self.assertEqual(300, self.uut.score())

    def test_sample_game_scores(self):
        self.roll([1, 4, 4, 5, 6, 4, 5, 5, 10, 0, 1, 7, 3, 6, 4, 10, 2, 8, 6])
        self.assertEqual(133, self.uut.score())

    def roll(self, pins_down: list):
        for i in pins_down:
            self.uut.roll(i)
示例#15
0
 def go_bowling(self):
     self.place = Bowling(self)
示例#16
0
from __future__ import with_statement
from bowling import Bowling
from spyce import description, example
from should_dsl import should_be

with description(Bowling) as context:
    bowling = Bowling()

    with example("should score 0 for gutter game"):
        bowling.score |should_be| 0

    with example("should score 13 if I get a spare with 6 and 7"):
        bowling.hit(6)
        bowling.hit(7)
        bowling.score |should_be| 13
 def setUp(self):
     self.uut = Bowling()
示例#18
0
 def test_case_spare_in_extra_balls_after_strike_in_last_frame_version4(self):
     game = "XXXXXXXXXX91"
     game_score = 8*30 + 1*(10+10+9) + 1*(10+9+1)
     bowling_game = Bowling()
     total_score = bowling_game.evaluate(game)
     self.assertEqual(total_score, game_score)
示例#19
0
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)
示例#20
0
 def setUp(self):
     self.bowling = Bowling()
 def setUp(self):
     self.game = Bowling()
示例#22
0
 def setUp(self):
     # given
     self.b = Bowling()
示例#23
0
class Test(unittest.TestCase):
    def setUp(self):
        # given
        self.b = Bowling()

    def tearDown(self):
        pass

    def _repeatRoll(self, n, pins):
        for i in range(n):
            self.b.roll(pins)
        


    # 문제에서 기본으로 주어진 테스트
    def testOneStrike(self):
        # when
        self.b.roll(10)
        # then
        self.assertEqual(['X','','','','','','','','','','','','','','','','','','','',''], self.b.getSymbols())
        self.assertEqual(['','','','','','','','','',''], self.b.getScores())

    def testNormals(self):
        # when
        self.b.roll(10)
        self.b.roll(7)
        self.b.roll(2)
        # then
        self.assertEqual(['X','',7,2,'','','','','','','','','','','','','','','','',''], self.b.getSymbols())
        self.assertEqual([19,28,'','','','','','','',''], self.b.getScores())
        
    def testSpare(self):
        # when
        self.b.roll(10)
        self.b.roll(7)
        self.b.roll(2)
        self.b.roll(7)
        self.b.roll(3)
        #then
        self.assertEqual(['X','',7,2,7,'/','','','','','','','','','','','','','','',''], self.b.getSymbols())
        self.assertEqual([19,28,'','','','','','','',''], self.b.getScores())
        
    def testLastSpare(self):
        # when
        self.b.roll(10)
        self.b.roll(7)
        self.b.roll(2)
        self.b.roll(7)
        self.b.roll(3)
        self.b.roll(9)
        self.b.roll(0)
        #then
        self.assertEqual(['X','',7,2,7,'/',9,'-','','','','','','','','','','','','',''], self.b.getSymbols())
        self.assertEqual([19,28,47,56,'','','','','',''], self.b.getScores())

    def testFoul(self):
        # when
        self.b.roll(10)
        self.b.roll(7)
        self.b.roll(2)
        self.b.roll(7)
        self.b.roll(3)
        self.b.roll(9)
        self.b.roll(0)
        self.b.roll(8)
        self.b.roll(2)
        self.b.roll(10)
        self.b.roll(7)
        self.b.roll(1)
        self.b.roll(9)
        self.b.roll(0)
        self.b.roll(9)
        self.b.roll('F')
        #then
        self.assertEqual(['X','',7,2,7,'/',9,'-',8,'/','X','',7,1,9,'-',9,'F','','',''], self.b.getSymbols())
        self.assertEqual([19,28,47,56,76,94,102,111,120,''], self.b.getScores())
        
    def testFinish(self):
        # when
        self.b.roll(10)
        self.b.roll(7)
        self.b.roll(2)
        self.b.roll(7)
        self.b.roll(3)
        self.b.roll(9)
        self.b.roll(0)
        self.b.roll(8)
        self.b.roll(2)
        self.b.roll(10)
        self.b.roll(7)
        self.b.roll(1)
        self.b.roll(9)
        self.b.roll(0)
        self.b.roll(9)
        self.b.roll('F')
        self.b.roll(9)
        self.b.roll(1)
        self.b.roll(9)
        #then
        print self.b.getSymbols()
        self.assertEqual(['X','',7,2,7,'/',9,'-',8,'/','X','',7,1,9,'-',9,'F',9,'/',9], self.b.getSymbols())
        self.assertEqual([19,28,47,56,76,94,102,111,120,139], self.b.getScores())

    # 개인적으로 추가해본 테스트케이스들
    def testTurkey(self):
        # when
        self._repeatRoll(3, 10)
        # then
        self.assertEqual(['X','','X','','X','','','','','','','','','','','','','','','',''], self.b.getSymbols())
        self.assertEqual([30,'','','','','','','','',''], self.b.getScores())
    def test9Combo(self):
        # when
        self._repeatRoll(9, 10)
        # then
        self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','','','',''], self.b.getSymbols())
        self.assertEqual([30,60,90,120,150,180,210,'','',''], self.b.getScores())
    def test10Combo(self):
        # when
        self._repeatRoll(10, 10)
        # then
        self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','','X','',''], self.b.getSymbols())
        self.assertEqual([30,60,90,120,150,180,210,240,'',''], self.b.getScores())
    def test11Combo(self):
        # when
        self._repeatRoll(11, 10)
        # then
        self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','','X','X',''], self.b.getSymbols())
        self.assertEqual([30,60,90,120,150,180,210,240,270,''], self.b.getScores())
    def testPerfectGame(self):
        # when
        self._repeatRoll(12, 10)
        # then
        self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','','X','X','X'], self.b.getSymbols())
        self.assertEqual([30,60,90,120,150,180,210,240,270,300], self.b.getScores())
    def testMissOne(self):
        # when
        self._repeatRoll(11, 10)
        self.b.roll(9)

        # then
        self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','','X','X',9], self.b.getSymbols())
        self.assertEqual([30,60,90,120,150,180,210,240,270,299], self.b.getScores())        
    def testLastNoBonus(self):
        # when
        self._repeatRoll(9, 10)
        self.b.roll(9)
        self.b.roll(0)

        # then
        self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','',9,'-',''], self.b.getSymbols())
        self.assertEqual([30,60,90,120,150,180,210,239,258,267], self.b.getScores())        
    def testLastStrikeSpare(self):
        # when
        self._repeatRoll(10, 10)
        self.b.roll(5)
        self.b.roll(5)

        # then
        self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','','X',5,'/'], self.b.getSymbols())
        self.assertEqual([30,60,90,120,150,180,210,240,265,285], self.b.getScores())        
    def testLastSpareStrike(self):
        # when
        self._repeatRoll(9, 10)
        self.b.roll(5)
        self.b.roll(5)
        self.b.roll(10)

        # then
        self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','',5,'/','X'], self.b.getSymbols())
        self.assertEqual([30,60,90,120,150,180,210,235,255,275], self.b.getScores())
    def testNineSpareTenStrikes(self):
        # when
        self._repeatRoll(8, 10)
        self.b.roll(5)
        self.b.roll(5)
        self._repeatRoll(9, 10) # 3번만 해도 되는데 게임 끝났는지 로직이 잘되나 확인.
        # then
        self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','',5,'/','X','X','X'], self.b.getSymbols())
        self.assertEqual([30,60,90,120,150,180,205,225,245,275], self.b.getScores())

    # 잘못된 수를 넣었을 때 Exception이 발생하는 지 여부.
    # 참조 : http://stackoverflow.com/questions/156503/how-do-you-assert-that-a-certain-exception-is-thrown-in-junit-4-tests
    # 질문 부분만 소스에서 참조함.
    def testValueError(self):
        thrown = False
        try:
            self.b.roll(-1)
            self.b.roll(11)
        except Exception:
            thrown = True
        self.assertTrue(thrown)
    def testValueError2(self):
        thrown = False
        try:
            self.b.roll('G')
        except Exception:
            thrown = True
        self.assertTrue(thrown)
    def testSpareError(self):
        thrown = False
        try:
            self.b.roll(5)
            self.b.roll(6)
        except Exception:
            thrown = True
        self.assertTrue(thrown)
    def testLastSpareError(self):
        thrown = False
        self._repeatRoll(10, 10)
        try:
            self.b.roll(5)
            self.b.roll(6)
        except Exception:
            thrown = True
        self.assertTrue(thrown)
示例#24
0
 def test_case_a_miss_after_a_strike(self):
     game = "9-9-X9-9-9-9-9-9-9-"
     game_score = 9*(9+0) + 1*(10+9+0)
     bowling_game = Bowling()
     total_score = bowling_game.evaluate(game)
     self.assertEqual(total_score, game_score)
示例#25
0
 def test_case_nine_pins_in_all_frames(self):
     game = "9-9-9-9-9-9-9-9-9-9-"
     game_score = 10*9
     bowling_game = Bowling()
     total_score = bowling_game.evaluate(game)
     self.assertEqual(total_score, game_score)
示例#26
0
 def test_case_all_strikes(self):
     game = "XXXXXXXXXXXX"
     game_score = 10*30
     bowling_game = Bowling()
     total_score = bowling_game.evaluate(game)
     self.assertEqual(total_score, game_score)
示例#27
0
def test_empty_calculation():
    """
        should raise error for value not present in the file
    """
    with pytest.raises(ValueError):
        Bowling().read_csv(filename='../data/test_empty.csv')
示例#28
0
def test_no_file():
    """
        should throw IOError when no file is present 
    """
    with pytest.raises(IOError):
        Bowling().read_csv(filename='incorrectfile.csv')
示例#29
0
 def test_case_two_strikes_in_three_frames(self):
     single_frame = "X17X44"
     single_frame_score = 1*(10+1+7) + 1*(1+7) + 1*(10+4+4)
     bowling_game = Bowling()
     total_score = bowling_game.evaluate(single_frame)
     self.assertEqual(total_score, single_frame_score)
示例#30
0
class TestBowling(unittest.TestCase):

    def setUp(self):
        self.bowling = Bowling()

    def test_gutter(self):
        self.bowling.roll(0)
        self.assertEqual(self.bowling.score(), 0)

    def test_one_roll(self):
        self.bowling.roll(7)
        self.assertEqual(self.bowling.score(), 7)

    def test_two_rolls(self):
        self.bowling.roll(2)
        self.bowling.roll(3)
        self.assertEqual(self.bowling.score(), 5)

    def test_two_rolls_with_spare(self):
        self.bowling.roll(3)
        self.bowling.roll(7)
        self.assertEqual(self.bowling.score(), 10)
        self.bowling.roll(1)
        self.assertEqual(self.bowling.score(), 12)

    def test_two_rolls_with_strike(self):
        self.bowling.roll(10)
        self.assertEqual(self.bowling.score(), 10)
        self.bowling.roll(1)
        self.bowling.roll(3)
        self.assertEqual(self.bowling.score(), 18)

    def test_two_rolls_with_2_strike(self):
        self.bowling.roll(10)
        self.assertEqual(self.bowling.score(), 10)
        self.bowling.roll(10)
        self.assertEqual(self.bowling.score(), 30)
        self.bowling.roll(1)
        self.bowling.roll(3)
        self.assertEqual(self.bowling.score(), 38)

    def test_frame(self):
        self.bowling.roll(1)
        self.bowling.roll(2)
        self.assertEqual(self.bowling.frames, [[1,2]])
示例#31
0
 def __init__(self, name):
     self.name = name
     self.batting = Batting()
     self.bowling = Bowling()
示例#32
0
 def test_case_spare_before_last_frame(self):
     game = "9-9-9-9-9-9-9-9-9/9-"
     game_score = 8*9 + 1*(10+9) + 1*9
     bowling_game = Bowling()
     total_score = bowling_game.evaluate(game)
     self.assertEqual(total_score, game_score)
示例#33
0
 def test_case_strike_in_extra_ball_after_spare_in_last_frame(self):
     game = "XXXXXXXXX1/X"
     game_score = 7*30 + 1*(10+10+1) + 1*(10+1+9) + 1*(1+9) + 10
     bowling_game = Bowling()
     total_score = bowling_game.evaluate(game)
     self.assertEqual(total_score, game_score)
示例#34
0
 def test_case_all_zeros(self):
     game = "--------------------"
     game_score = 0
     bowling_game = Bowling()
     total_score = bowling_game.evaluate(game)
     self.assertEqual(total_score, game_score)
示例#35
0
 def test_case_150_points(self):
     game = "5/5/5/5/5/5/5/5/5/5/5"
     game_score = 10*15
     bowling_game = Bowling()
     total_score = bowling_game.evaluate(game)
     self.assertEqual(total_score, game_score)
示例#36
0
def test_zero_points():
    bowling = Bowling()

    _add_frames(bowling, 10, (0, 0))

    assert bowling.calculate_score() == 0
示例#37
0
 def test_case_all_strikes_in_single_frame(self):
     single_frame = "XXX"
     single_frame_score = 10 + 10 + 10
     bowling_game = Bowling()
     total_score = bowling_game.evaluate(single_frame)
     self.assertEqual(total_score, single_frame_score)
示例#38
0
def _add_frames(bowling: Bowling, num_frames: int, score: tuple):
    for frame in range(num_frames):
        bowling.add_frame(*score)
示例#39
0
文件: tester.py 项目: koszuta/Lab10
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)