def test_get_all_combinations_from_leaves(self):
     s = solution(["01", "29"])
     filtered = s.getAllCombinationsFromLeaves()
     assert not CubesPair(Cube([0, 6, 9]), Cube([1, 2])) in filtered
     assert CubesPair(Cube([0, 2]), Cube([1, 6])) in filtered
     assert CubesPair(Cube([0, 2]), Cube([1, 9])) in filtered
     assert CubesPair(Cube([0, 6]), Cube([1, 2])) in filtered
     assert CubesPair(Cube([0, 9]), Cube([1, 2])) in filtered
 def test_solution_missing(self):
     s = solution(solution.SQUARES)
     res = s.getAllCombinations()
     assert (CubesPair(Cube([0, 1, 2, 7, 8, 9]), Cube([0, 1, 3, 4, 5,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 7, 8, 9]), Cube([0, 3, 4, 5, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 7, 8, 9]), Cube([1, 3, 4, 5, 7,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 7, 8, 9]), Cube([1, 3, 4, 5, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 7, 8]), Cube([0, 1, 3, 4, 5,
                                                       7]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 7, 8]), Cube([1, 3, 4, 5, 6,
                                                       7]))) in res
     assert (CubesPair(Cube([0, 4, 5, 6, 7, 8]), Cube([1, 2, 3, 4, 6,
                                                       7]))) in res
     assert (CubesPair(Cube([0, 4, 5, 6, 7, 8]), Cube([1, 2, 3, 4, 6,
                                                       7]))) in res
 def test_is_proper_pair(self):
     s = solution(solution.SQUARES)
     assert s.isProperPair(
         CubesPair(Cube([0, 1, 2, 7, 8, 9]), Cube([0, 1, 3, 4, 5, 7])))
     assert s.isProperPair(
         CubesPair(Cube([0, 1, 2, 7, 8, 9]), Cube([0, 1, 3, 4, 5, 8])))
     assert s.isProperPair(
         CubesPair(Cube([0, 1, 2, 7, 8, 9]), Cube([0, 3, 4, 5, 8, 9])))
     assert s.isProperPair(
         CubesPair(Cube([0, 1, 2, 7, 8, 9]), Cube([1, 3, 4, 5, 7, 9])))
     assert s.isProperPair(
         CubesPair(Cube([0, 1, 2, 7, 8, 9]), Cube([1, 3, 4, 5, 8, 9])))
     assert s.isProperPair(
         CubesPair(Cube([0, 1, 2, 6, 7, 8]), Cube([0, 1, 3, 4, 5, 7])))
     assert s.isProperPair(
         CubesPair(Cube([0, 1, 2, 6, 7, 8]), Cube([1, 3, 4, 5, 6, 7])))
     assert s.isProperPair(
         CubesPair(Cube([0, 4, 5, 6, 7, 8]), Cube([1, 2, 3, 4, 6, 7])))
     assert s.isProperPair(
         CubesPair(Cube([0, 4, 5, 6, 7, 8]), Cube([1, 2, 3, 4, 6, 7])))
     assert s.isProperPair(
         CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 2, 3, 8, 9])))
 def test_digit_map(self):
     """ This test shows what is wrong with my solution"""
     s = solution(["01", "69"])
     # assert s.digitMap == {0: 1, 1: 1, 6: 1, 9: 1}
     assert s.digitMap == {0: 1, 1: 1, 6: 2}
 def test_possible_solutions(self):
     s = solution(solution.SQUARES)
     res = s.getAllCombinations()
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 2, 3, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 2, 4, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 2, 3, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 2, 4, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 2, 5, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 2, 7, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 2, 6, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 3, 5, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 4, 5, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 5, 7, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 5, 6, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 2, 3, 4, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 2, 3, 5, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 2, 3, 7, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 2, 3, 6, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 5, 6, 9]), Cube([1, 3, 4, 5, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 7, 8, 9]), Cube([0, 1, 3, 4, 5,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 7, 8, 9]), Cube([1, 2, 3, 4, 5,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 7, 8, 9]), Cube([1, 3, 4, 5, 6,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 7, 9]), Cube([0, 1, 3, 4, 5,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 7, 9]), Cube([0, 3, 4, 5, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 7, 9]), Cube([1, 3, 4, 5, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 8, 9]), Cube([0, 1, 3, 4, 5,
                                                       7]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 8, 9]), Cube([0, 1, 3, 4, 5,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 8, 9]), Cube([0, 1, 3, 4, 5,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 8, 9]), Cube([0, 3, 4, 5, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 3, 4, 7,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 3, 4, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 3, 4, 6,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 4, 5, 7,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 4, 5, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 4, 5, 6,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 4, 7, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 4, 6, 7,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 4, 6, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 4, 5, 6, 7, 8]), Cube([1, 2, 3, 4, 5,
                                                       6]))) in res
     assert (CubesPair(Cube([0, 4, 5, 6, 7, 8]), Cube([1, 2, 3, 4, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 4, 5, 6, 7, 8]), Cube([1, 2, 3, 4, 6,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 2, 3, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 2, 4, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 2, 5, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 2, 6, 7,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 3, 5, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 4, 5, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 5, 6, 7,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 2, 3, 4, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 2, 3, 5, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 2, 3, 6, 7,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 5, 6, 9]), Cube([1, 3, 4, 5, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 7, 8]), Cube([0, 1, 3, 4, 5,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 7, 8]), Cube([0, 1, 3, 4, 5,
                                                       6]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 7, 8]), Cube([0, 3, 4, 5, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 7, 8]), Cube([1, 2, 3, 4, 5,
                                                       6]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 7, 8]), Cube([1, 3, 4, 5, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 7, 8]), Cube([1, 3, 4, 5, 6,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 7, 9]), Cube([0, 3, 4, 5, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 7, 9]), Cube([1, 3, 4, 5, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 8, 9]), Cube([0, 1, 3, 4, 5,
                                                       6]))) in res
     assert (CubesPair(Cube([0, 1, 2, 6, 8, 9]), Cube([0, 3, 4, 5, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 3, 4, 6,
                                                       7]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 3, 4, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 3, 4, 6,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 4, 5, 6,
                                                       7]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 4, 5, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 4, 5, 6,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 4, 6, 7,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 4, 6, 7,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 3, 5, 6, 8, 9]), Cube([1, 2, 4, 6, 8,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 4, 5, 6, 7, 8]), Cube([1, 2, 3, 4, 5,
                                                       6]))) in res
     assert (CubesPair(Cube([0, 4, 5, 6, 7, 8]), Cube([1, 2, 3, 4, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 4, 5, 6, 7, 8]), Cube([1, 2, 3, 4, 6,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 4, 5, 6, 8, 9]), Cube([1, 2, 3, 4, 5,
                                                       6]))) in res
     assert (CubesPair(Cube([0, 4, 5, 6, 8, 9]), Cube([1, 2, 3, 4, 6,
                                                       7]))) in res
     assert (CubesPair(Cube([0, 4, 5, 6, 8, 9]), Cube([1, 2, 3, 4, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 4, 5, 6, 8, 9]), Cube([1, 2, 3, 4, 6,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 5, 6, 7, 8, 9]), Cube([1, 2, 3, 4, 5,
                                                       9]))) in res
     assert (CubesPair(Cube([0, 5, 6, 7, 8, 9]), Cube([1, 2, 3, 4, 6,
                                                       7]))) in res
     assert (CubesPair(Cube([0, 5, 6, 7, 8, 9]), Cube([1, 2, 3, 4, 6,
                                                       8]))) in res
     assert (CubesPair(Cube([0, 5, 6, 7, 8, 9]), Cube([1, 2, 3, 4, 6,
                                                       9]))) in res
 def test_get_all_combinations_from_leaves_exclude(self):
     s = solution(["06", "29"])
     filtered = s.getAllCombinationsFromLeaves()
     assert not CubesPair(Cube([9, 9]), Cube([0, 2])) in filtered
 def test_possible_solutions_from_small_set(self):
     s = solution(["01", "29"])
     res = s.getAllCombinations()
     assert (CubesPair(Cube([0, 1, 2, 3, 4, 5]), Cube([0, 1, 2, 3, 8,
                                                       9]))) in res
 def test_possible_solutions_excluded(self):
     s = solution(solution.SQUARES)
     res = s.getAllCombinations()
     assert not (CubesPair(Cube([1, 2, 4, 8, 9, 9]), Cube(
         [0, 1, 3, 5, 6, 9]))) in res