Example #1
0
    def test_init(self, ticket_numbers):
        # ensure _check is called
        with pytest.raises(AssertionError,
                           match="Number of rows not equal to 3"):
            Cells._check([])

        # ensure Cell::__init__ is called
        with pytest.raises(AssertionError, match="Number less than 1"):
            _numbers = [
                [
                    0, 10, 20, 30, 40, NO_NUMBER, NO_NUMBER, NO_NUMBER,
                    NO_NUMBER
                ],
                [
                    2, 11, 21, 31, 41, NO_NUMBER, NO_NUMBER, NO_NUMBER,
                    NO_NUMBER
                ],
                [
                    3, 12, 22, 32, 42, NO_NUMBER, NO_NUMBER, NO_NUMBER,
                    NO_NUMBER
                ],
            ]
            Cells(_numbers)

        try:
            cells = Cells(ticket_numbers)
            for i, row in enumerate(ticket_numbers):
                for j, column in enumerate(row):
                    assert column == cells._cells[i][j].get_number()
        except AssertionError:
            pytest.fail("Unexpected AssertionError!")
Example #2
0
    def test_find_row_and_column(self, ticket_numbers):
        cells = Cells(ticket_numbers)

        cells.find_row_and_column(1) == (1, 1)
        cells.find_row_and_column(43) == (3, 5)

        with pytest.raises(NoSuchNumber):
            cells.find_row_and_column(100)
Example #3
0
    def test_iter(self, ticket_numbers):
        cells = Cells(ticket_numbers)
        expected = [
            Cell(1),
            Cell(11),
            Cell(21),
            Cell(31),
            Cell(41),
            Cell("*"),
            Cell("*"),
            Cell("*"),
            Cell("*"),
            Cell(2),
            Cell(12),
            Cell(22),
            Cell(32),
            Cell(42),
            Cell("*"),
            Cell("*"),
            Cell("*"),
            Cell("*"),
            Cell(3),
            Cell(13),
            Cell(23),
            Cell(33),
            Cell(43),
            Cell("*"),
            Cell("*"),
            Cell("*"),
            Cell("*"),
        ]

        assert list(cells) == expected
Example #4
0
    def test_сell_at(self, ticket_numbers):
        cells = Cells(ticket_numbers)

        with pytest.raises(AssertionError, match="Incorrect row or column"):
            cells.cell_at(0, 1)

        cells.cell_at(1, 1) == Cell(1)
Example #5
0
 def test_contains(self, ticket_numbers):
     cells = Cells(ticket_numbers)
     assert (33 in cells) is True
     assert (100 in cells) is False
Example #6
0
 def test_str(self, ticket_numbers, stringified_ticket_numbers):
     assert str(Cells(ticket_numbers)) == stringified_ticket_numbers
Example #7
0
 def test_eq(self, ticket_numbers, other_ticket_numbers):
     assert Ticket(ticket_numbers) != Cells(ticket_numbers)
     assert Ticket(ticket_numbers) != Ticket(other_ticket_numbers)
     assert Ticket(ticket_numbers) == Ticket(ticket_numbers)
Example #8
0
 def test_init(self, ticket_numbers):
     assert Ticket()._cells is not None
     assert Ticket()._cells != ticket_numbers
     assert Ticket(ticket_numbers)._cells == Cells(ticket_numbers)
Example #9
0
 def test_eq(self, ticket_numbers, other_ticket_numbers):
     assert Cells(ticket_numbers) != Cell(MIN_NUMBER)
     assert Cells(ticket_numbers) != Cells(other_ticket_numbers)
     assert Cells(ticket_numbers) == Cells(ticket_numbers)
Example #10
0
    def test_check(self, ticket_numbers):

        with pytest.raises(AssertionError,
                           match="Number of rows not equal to 3"):
            Cells._check([])

        with pytest.raises(AssertionError,
                           match="Number of columns not equal to 9"):
            Cells._check([[], [], []])

        with pytest.raises(
                AssertionError,
                match="Incorrect column for 10: must be 1 instead of 0"):
            _numbers = [
                [
                    10,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                ],
                [],
                [],
            ]
            Cells._check(_numbers)

        with pytest.raises(
                AssertionError,
                match="Incorrect column for 90: must be 8 instead of 7"):
            _numbers = [
                [
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    90,
                    NO_NUMBER,
                ],
                [],
                [],
            ]
            Cells._check(_numbers)

        with pytest.raises(AssertionError, match="Must be 5 numbers per row"):
            _numbers = [
                [
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                    NO_NUMBER,
                ],
                [],
                [],
            ]
            Cells._check(_numbers)

        with pytest.raises(AssertionError, match="Must be 5 numbers per row"):
            _numbers = [
                [
                    1, 10, 20, 30, 40, NO_NUMBER, NO_NUMBER, NO_NUMBER,
                    NO_NUMBER
                ],
                [
                    2, 11, 21, 31, 41, NO_NUMBER, NO_NUMBER, NO_NUMBER,
                    NO_NUMBER
                ],
                [
                    3, 12, 22, 32, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER,
                    NO_NUMBER
                ],
            ]
            Cells._check(_numbers)

        try:
            Cells._check(ticket_numbers)
        except AssertionError:
            pytest.fail("Unexpected AssertionError!")