예제 #1
0
 def test_run(self):
     pairs_list = self.use_case.run(
         Members([Member('a'), Member('b'),
                  Member('c')]))
     self.assertEqual(pairs_list, [
         Pairs([Pair(Member('a'), Member('b')),
                Pair(Member('c'), None)]),
         Pairs([Pair(Member('a'), Member('c')),
                Pair(Member('b'), None)]),
         Pairs([Pair(Member('b'), Member('c')),
                Pair(Member('a'), None)])
     ])
예제 #2
0
 def test_evaluate(self):
     last_pairs = Pairs([
         Pair(Member('a'), Member('b')),
         Pair(Member('c'), Member('d')),
         Pair(Member('e'), None)
     ])
     members = Members(
         [Member('a'),
          Member('b'),
          Member('c'),
          Member('d'),
          Member('e')])
     pairs = EvaluationService().evaluate([last_pairs], members)
     self.assertEqual(pairs, [
         Pairs([
             Pair(Member('a'), Member('c')),
             Pair(Member('d'), Member('e')),
             Pair(Member('b'), None)
         ]),
         Pairs([
             Pair(Member('a'), Member('d')),
             Pair(Member('c'), Member('e')),
             Pair(Member('b'), None)
         ]),
         Pairs([
             Pair(Member('a'), Member('e')),
             Pair(Member('b'), Member('c')),
             Pair(Member('d'), None)
         ]),
         Pairs([
             Pair(Member('a'), Member('e')),
             Pair(Member('b'), Member('d')),
             Pair(Member('c'), None)
         ]),
         Pairs([
             Pair(Member('b'), Member('c')),
             Pair(Member('d'), Member('e')),
             Pair(Member('a'), None)
         ]),
         Pairs([
             Pair(Member('b'), Member('d')),
             Pair(Member('c'), Member('e')),
             Pair(Member('a'), None)
         ]),
         Pairs([
             Pair(Member('b'), Member('e')),
             Pair(Member('a'), Member('c')),
             Pair(Member('d'), None)
         ]),
         Pairs([
             Pair(Member('b'), Member('e')),
             Pair(Member('a'), Member('d')),
             Pair(Member('c'), None)
         ]),
     ])
예제 #3
0
 def test_filter_same_pair2(self):
     history = [
         Pairs([Pair(Member('a'), Member('b')),
                Pair(Member('c'), None)]),
         Pairs([Pair(Member('a'), Member('c')),
                Pair(Member('b'), None)])
     ]
     pairs = PairTree.possible_pairs(self.members3.combinations())
     filtered_pairs = EvaluationService(
     ).pair_should_not_exist_same_pair_in_near_history(history, pairs)
     self.assertEqual(
         filtered_pairs,
         [Pairs([Pair(Member('b'), Member('c')),
                 Pair(Member('a'), None)])])
예제 #4
0
 def test_filter_and_empty(self):
     members = Members([Member('a'), Member('b')])
     tree = members.combinations()
     filtered = EvaluationService(
     ).pair_must_have_only_either_member_of_last_pair(
         Pairs([Pair(Member('a'), Member('b'))]), tree)
     self.assertEqual(filtered, [])
예제 #5
0
    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)))
        ]
예제 #6
0
 def test_position_filter(self):
     history = [
         Pairs([Pair(Member('a'), Member('b')),
                Pair(Member('c'), None)]),
         Pairs([Pair(Member('a'), Member('c')),
                Pair(Member('b'), None)])
     ]
     tree = self.members3.combinations()
     possible_pairs = PairTree.possible_pairs(tree)
     filtered_tree = EvaluationService(
     ).member_is_must_not_in_same_position_at_three_times(
         history, possible_pairs)
     self.assertEqual(
         filtered_tree,
         [Pairs([Pair(Member('b'), Member('c')),
                 Pair(Member('a'), None)])])
예제 #7
0
 def load(self) -> List[PairsHistory]:
     return [
         PairsHistory(
             PairsHistoryId(l[0]), Pairs.from_list(json.loads(l[1])))
         for l in list(
             self.cursor.execute(
                 'SELECT id, data FROM pairs ORDER BY created_at'))
     ]
예제 #8
0
    def test_run_with_history(self):
        self.repository.save(
            PairsHistory(
                PairsHistoryId('id'),
                Pairs(
                    [Pair(Member('a'), Member('b')),
                     Pair(Member('c'), None)])))

        pairs_list = self.use_case.run(
            Members([Member('a'), Member('b'),
                     Member('c')]))
        self.assertEqual(pairs_list, [
            Pairs([Pair(Member('a'), Member('c')),
                   Pair(Member('b'), None)]),
            Pairs([Pair(Member('b'), Member('c')),
                   Pair(Member('a'), None)])
        ])
예제 #9
0
    def setUp(self):
        self.last_pairs3 = Pairs(
            [Pair(Member('a'), Member('b')),
             Pair(Member('c'), None)])
        self.members3 = Members([Member('a'), Member('b'), Member('c')])

        self.last_pairs5 = Pairs([
            Pair(Member('a'), Member('b')),
            Pair(Member('c'), Member('d')),
            Pair(Member('e'), None)
        ])
        self.members5 = Members(
            [Member('a'),
             Member('b'),
             Member('c'),
             Member('d'),
             Member('e')])
예제 #10
0
 def test_fold2(self):
     tree = PairTree(Pair(Member('a'), Member('b')), [
         PairTree(Pair(Member('c'), Member('d')),
                  [PairTree(Pair(Member('e'), None), [])]),
         PairTree(Pair(Member('c'), Member('e')),
                  [PairTree(Pair(Member('d'), None), [])])
     ])
     self.assertEqual([
         Pairs([
             Pair(Member('a'), Member('b')),
             Pair(Member('c'), Member('d')),
             Pair(Member('e'), None)
         ]),
         Pairs([
             Pair(Member('a'), Member('b')),
             Pair(Member('c'), Member('e')),
             Pair(Member('d'), None)
         ])
     ], tree.fold())
예제 #11
0
    def test_run(self):
        save_pairs = Pairs(
            [Pair(Member('a'), Member('b')),
             Pair(Member('c'), None)])
        self.use_case.run(save_pairs)

        self.assertEqual([history.pairs for history in self.repository.list],
                         [save_pairs])
        self.assertEqual(
            [history.identity for history in self.repository.list],
            [PairsHistoryId('0')])
예제 #12
0
 def test_evaluate_four_times(self):
     history = [
         Pairs([
             Pair(Member('a'), Member('b')),
             Pair(Member('c'), Member('d')),
             Pair(Member('e'), None)
         ]),
         Pairs([
             Pair(Member('a'), Member('c')),
             Pair(Member('d'), Member('e')),
             Pair(Member('b'), None)
         ]),
         Pairs([
             Pair(Member('c'), Member('d')),
             Pair(Member('b'), Member('e')),
             Pair(Member('a'), None)
         ]),
         Pairs([
             Pair(Member('d'), Member('e')),
             Pair(Member('a'), Member('b')),
             Pair(Member('c'), None)
         ])
     ]
     members = Members(
         [Member('a'),
          Member('b'),
          Member('c'),
          Member('d'),
          Member('e')])
     pairs = EvaluationService().evaluate(history, members)
     self.assertEqual(pairs, [
         Pairs([
             Pair(Member('b'), Member('e')),
             Pair(Member('a'), Member('c')),
             Pair(Member('d'), None)
         ])
     ])
예제 #13
0
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)])))
예제 #14
0
 def test_filter_same_pair3(self):
     history = [
         Pairs([
             Pair(Member('a'), Member('c')),
             Pair(Member('d'), Member('e')),
             Pair(Member('b'), None)
         ]),
         Pairs([
             Pair(Member('a'), Member('b')),
             Pair(Member('c'), Member('d')),
             Pair(Member('e'), None)
         ])
     ]
     tree = self.members5.combinations()
     s = EvaluationService()
     filtered_pairs = s.pair_should_not_exist_same_pair_in_near_history(
         history,
         PairTree.possible_pairs(
             s.pair_must_have_only_either_member_of_last_pair(
                 history[-1], tree)))
     self.assertEqual(filtered_pairs, [
         Pairs([
             Pair(Member('a'), Member('e')),
             Pair(Member('b'), Member('c')),
             Pair(Member('d'), None)
         ]),
         Pairs([
             Pair(Member('a'), Member('e')),
             Pair(Member('b'), Member('d')),
             Pair(Member('c'), None)
         ]),
         Pairs([
             Pair(Member('b'), Member('d')),
             Pair(Member('c'), Member('e')),
             Pair(Member('a'), None)
         ]),
         Pairs([
             Pair(Member('b'), Member('e')),
             Pair(Member('a'), Member('c')),
             Pair(Member('d'), None)
         ]),
         Pairs([
             Pair(Member('b'), Member('e')),
             Pair(Member('a'), Member('d')),
             Pair(Member('c'), None)
         ])
     ])
예제 #15
0
 def load_pairs(self, message: pair_pb2.Pairs) -> Pairs:
     return Pairs([self.load_pair(pair) for pair in message.pairs])
예제 #16
0
    def save(self, *history: str) -> str:
        """e.g. pairpair.py save test1,test2 test3,test4 test5,"""

        pairs = Pairs.from_list2([list(h) for h in history])
        save_pairs_history().run(pairs)
        return str(pairs)
예제 #17
0
 def test_tail__pairs(self):
     self.assertEqual(self.pairs.tail(), Pairs([Pair(Member('c'), None)]))
예제 #18
0
 def test_tail__empty_pairs(self):
     self.assertEqual(self.one_pairs.tail(), Pairs([]))
예제 #19
0
 def test_have_same__pairs2(self):
     self.assertTrue(not self.pairs.have_same(
         Pairs([Pair(Member('x'), Member('y')),
                Pair(Member('z'), None)])))