def pair_must_have_only_either_member_of_last_pair( self, last_pairs: Pairs, pair_trees: List[PairTree]) -> List[PairTree]: if not last_pairs: return pair_trees return [ PairTree( tree.pair, self.pair_must_have_only_either_member_of_last_pair( last_pairs.tail(), tree.remainder)) for tree in pair_trees if tree.pair.only_has_either(last_pairs[0]) and ( not last_pairs.tail() or (last_pairs.tail( ) and self.pair_must_have_only_either_member_of_last_pair( last_pairs.tail(), tree.remainder))) ]
class PairsTest(TestCase): def setUp(self): self.pairs = Pairs( [Pair(Member('a'), Member('b')), Pair(Member('c'), None)]) self.one_pairs = Pairs([Pair(Member('a'), Member('b'))]) self.empty_pairs = Pairs([]) def test_getitem__pairs(self): self.assertEqual(self.pairs[1], Pair(Member('c'), None)) def test_tail__pairs(self): self.assertEqual(self.pairs.tail(), Pairs([Pair(Member('c'), None)])) def test_tail__one_pairs(self): self.assertEqual(self.one_pairs.tail(), Pairs([])) def test_tail__empty_pairs(self): self.assertEqual(self.one_pairs.tail(), Pairs([])) def test_in__pairs(self): self.assertTrue(Pair(Member('c'), None) in self.pairs) def test_have_same__pairs(self): self.assertTrue( self.pairs.have_same( Pairs( [Pair(Member('x'), Member('y')), Pair(Member('c'), None)]))) def test_have_same__pairs2(self): self.assertTrue(not self.pairs.have_same( Pairs([Pair(Member('x'), Member('y')), Pair(Member('z'), None)])))