import unittest

from takuzu import *

class TakuzuTestCase(unittest.TestCase):

    def test_check_is_square(self):
        self.assertTrue(check_is_square([[0, 1], [1, 0]]))
        self.assertFalse(check_is_square([[0, 1], [1, 0], [1, 1]]))
        self.assertFalse(check_is_square([[0, 1], [1, 0, 1]]))

    def test_check_only_0s_and_1s(self):
        self.assertTrue(check_only_0s_and_1s([[0, 1], [1, 0]]))
        self.assertFalse(check_only_0s_and_1s([[0, 1], [1, 2]]))

    def test_check_number_of_0s_and_1s(self):
        self.assertTrue(check_number_of_0s_and_1s([0, 1, 0, 1]))
        self.assertFalse(check_number_of_0s_and_1s([0, 1, 0, 0]))
        self.assertFalse(check_number_of_0s_and_1s([0, 1, 0, 1, 1]))

    def test_check_no_more_than_two_similar_numbers_consecutive(self):
        self.assertTrue(check_no_more_than_two_similar_numbers_consecutive([0, 1, 0, 1]))
        self.assertFalse(check_no_more_than_two_similar_numbers_consecutive([0, 1, 0, 0, 0]))
        self.assertFalse(check_no_more_than_two_similar_numbers_consecutive([0, 1, 0, 1, 1, 1]))

    def test_check_uniqueness(self):
        self.assertTrue(check_uniqueness([0, 1, 0, 1], [1, 0, 1, 0]))
        self.assertFalse(check_uniqueness([0, 1, 0, 1], [0, 1, 0, 1]))

    def test_grid_checker(self):
        self.assertTrue(grid_checker([[0, 1], [1, 0]]))
        self.assertFalse(grid_checker([[0, 1], [1, 0], [1, 1]]))
        self.assertFalse(grid_checker([[0, 1], [1, 2]]))
        self.assertFalse(grid_checker([[0, 1], [1, 0, 1]]))
        self.assertFalse(grid_checker([[0, 1, 0, 0], [1, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0]]))

if __name__ == '__main__':
    unittest.main()