예제 #1
0
 def test_match_newtype(self):
     self.assertEqual(match_value(lol, 3), (True, [3]))
     self.assertEqual(match_value(kek, 3), (True, [3]))
     self.assertEqual(match_value(double_kek, (13, 37)), (True, [13, 37]))
     self.assertEqual(match_value(composite_kek, "Barsik"),
                      (True, ["Barsik"]))
     self.assertEqual(match_value(composite_kek, (13, 37)),
                      (True, [13, 37]))
예제 #2
0
def checkingExprStruct(expr):
    if match_value([_, _], expr)[0]:
        print('two-element-list')
    elif match_value([_, _, _], expr)[0]:
        print('three-element-list')
    elif match_value({_ : _}, expr)[0]:
        print('two-element-dict')
    else:
        print('not-match')
예제 #3
0
 def test_match_callable(self):
     self.assertEqual(match_value(Callable[[int], float], annotated),
                      (True, [annotated]))
     self.assertEqual(
         match_value(Callable[[Tuple[int, float], str, E], double_kek],
                     big_annotated), (True, [big_annotated]))
     self.assertEqual(match_value(Callable[[int], float], not_annotated),
                      (False, []))
     self.assertEqual(match_value(Callable[[Any], Any], not_annotated),
                      (True, [not_annotated]))
     self.assertEqual(match_value(Callable[[int], float], wrong_annotated),
                      (False, []))
예제 #4
0
 def test_match_mapping(self):
     self.assertEqual(match_value(Dict[str, int], {
         "a": 1,
         "b": 2
     }), (True, [{
         "a": 1,
         "b": 2
     }]))
     self.assertEqual(match_value(Mapping[str, lol], {
         "a": 1,
         "b": 2
     }), (True, [{
         "a": 1,
         "b": 2
     }]))
     self.assertEqual(match_value(Dict[str, lol], {
         "a": 1,
         "b": 2
     }), (True, [{
         "a": 1,
         "b": 2
     }]))
     self.assertEqual(match_value(Dict[str, int], {
         "a": 1.0,
         "b": 2.0
     }), (False, []))
     self.assertEqual(match_value(Dict[str, int], {
         1: 1,
         2: 2
     }), (False, []))
     self.assertEqual(match_value(Mapping[str, int], {
         1: 1,
         2: 2
     }), (False, []))
     self.assertEqual(match_value(Dict[Union[str, int], int], {
         1: 1,
         2: 2
     }), (True, [{
         1: 1,
         2: 2
     }]))
     self.assertEqual(match_value(Dict[Union[str, lol], int], {
         1: 1,
         2: 2
     }), (True, [{
         1: 1,
         2: 2
     }]))
     self.assertEqual(
         match_value(Dict[str, Callable[[int], float]], {
             "a": annotated,
             "b": annotated
         }), (True, [{
             "a": annotated,
             "b": annotated
         }]))
예제 #5
0
 def test_match_value_is_vs_equal(self):
     a = 'x' * 1000000
     b = 'x' * 1000000
     self.assertEqual(a, b)
     self.assertFalse(a is b)
     self.assertEqual(match_value(a, b), (True, []))
     self.assertEqual(match(a, b, True), True)
예제 #6
0
 def test_match_tuple(self):
     self.assertEqual(match_value(Tuple[int, str], (1, "a")),
                      (True, [1, "a"]))
     self.assertEqual(match_value(Tuple[int, str], (1, 1)), (False, []))
     self.assertEqual(
         match_value(
             Tuple[Union[int, float], Callable[[int], float],
                   Tuple[str, Type[E]]], (1.0, annotated, ("ololo", B))),
         (True, [1.0, annotated, "ololo", B]))
     self.assertEqual(
         match_value(
             Tuple[Union[int, float], Callable[[int], float],
                   Tuple[str, Type[E]]], (1.0, False, ("ololo", B))),
         (False, []))
     self.assertEqual(
         match_value(
             Tuple[Union[int, float], Callable[[int], float],
                   Tuple[str, Type[E]]], ("kek", annotated, ("ololo", B))),
         (False, []))
     self.assertEqual(
         match_value(
             Tuple[Union[int, float], Callable[[int], float],
                   Tuple[str, Type[E]]],
             (1, annotated, ("ololo", B, 1488))), (False, []))
     self.assertEqual(
         match_value(
             Tuple[Union[int, float], Callable[[int], float],
                   Tuple[str, Type[A]]], (1, annotated, ("ololo", E))),
         (True, [1, annotated, "ololo", E]))
예제 #7
0
 def test_match_union(self):
     self.assertEqual(match_value(Union[int, str], 3), (True, [3]))
     self.assertEqual(match_value(Union[int, str], 'ok'), (True, ['ok']))
     self.assertEqual(match_value(Union[int, str, float], 5.25),
                      (True, [5.25]))
     self.assertEqual(match_value(Optional[int], None), (True, [None]))
     self.assertEqual(match_value(Optional[int], 1), (True, [1]))
     self.assertEqual(match_value(Optional[int], 1.0), (False, []))
예제 #8
0
 def match_value_bool(pat, var):
     return match_value(pat, var)[0]
예제 #9
0
    def test_match_value_callable_pattern(self):
        self.assertEqual(match_value(3, lambda: True), (False, []))

        func = lambda x: True
        self.assertEqual(match_value(callable, func), (True, [func]))
예제 #10
0
 def test_match_value_var_extraction(self):
     self.assertEqual(match_value(3, 3), (True, []))
     self.assertEqual(match_value(_, 3), (True, [3]))
     self.assertEqual(match_value(_, 'ok'), (True, ['ok']))
예제 #11
0
 def test_equality_comparison_should_be_strict(self):
     self.assertEqual(match_value(1, True), (False, []))
     self.assertEqual(match_value(0, False), (False, []))
     self.assertEqual(match_value(1.0, 1), (False, []))
     self.assertEqual(match_value(0.0, 0), (False, []))
     self.assertEqual(match_value(1.0, 1), (False, []))
예제 #12
0
 def test_match_value_None(self):
     self.assertEqual(match_value(None, None), (True, []))
예제 #13
0
 def is_defined_at(self, a: T) -> bool:
     return any([match_value(p, a)[0] for p in self.__whens()])
예제 #14
0
    def test_match_type(self):
        self.assertEqual(match_value(Type[int], int), (True, [int]))
        self.assertEqual(match_value(Type[int], 1), (False, []))
        self.assertEqual(match_value(Type[E], "cat"), (False, []))
        self.assertEqual(match_value(Type[A], "cat"), (False, []))

        self.assertEqual(match_value(Type[lol], int), (True, [int]))
        self.assertEqual(match_value(Type[kek], int), (True, [int]))
        self.assertEqual(match_value(Type[kek], str), (False, []))

        self.assertEqual(match_value(Type[A], A), (True, [A]))
        self.assertEqual(match_value(Type[A], B), (True, [B]))
        self.assertEqual(match_value(Type[B], C), (False, []))
        self.assertEqual(match_value(Type[E], B), (True, [B]))

        self.assertEqual(match_value(Type[A], E), (True, [E]))

        self.assertEqual(match_value(Type[E], C), (False, []))
        self.assertEqual(match_value(Type[C], A), (False, []))

        self.assertEqual(match_value(Type[Any], A), (True, [A]))
        self.assertEqual(match_value(Type[Any], Z), (True, [Z]))
        self.assertEqual(match_value(Type[Any], int), (True, [int]))
예제 #15
0
 def test_match_any(self):
     self.assertEqual(match_value(Any, 3), (True, [3]))
     self.assertEqual(match_value(Any, 'ok'), (True, ['ok']))
예제 #16
0
 def test_match_iterable(self):
     self.assertEqual(match_value(List[int], [1, 2, 3]),
                      (True, [[1, 2, 3]]))
     self.assertEqual(match_value(List[int], range(10)), (False, []))
     self.assertEqual(match_value(Iterable[int], [1, 2, 3]),
                      (True, [[1, 2, 3]]))
     self.assertEqual(match_value(Iterable[int], range(10)),
                      (True, [range(10)]))
     self.assertEqual(match_value(List[lol], [1, 2, 3]),
                      (True, [[1, 2, 3]]))
     self.assertEqual(match_value(List[str], [1, 2, 3]), (False, []))
     self.assertEqual(match_value(Iterable[str], [1, 2, 3]), (False, []))
     a_vals = [B(), C(), B()]
     self.assertEqual(match_value(List[A], a_vals), (True, [a_vals]))
     self.assertEqual(match_value(List[str], ["lol", "kek"]),
                      (True, [["lol", "kek"]]))
     self.assertEqual(match_value(List[Union[str, int]], ["lol", "kek"]),
                      (True, [["lol", "kek"]]))
     self.assertEqual(match_value(List[Union[str, int]], [1, 2, 3]),
                      (True, [[1, 2, 3]]))
     self.assertEqual(match_value(List[int], {1, 2, 3}), (False, []))
     self.assertEqual(match_value(Set[int], {1, 2, 3}), (True, [{1, 2, 3}]))
     self.assertEqual(match_value(FrozenSet[int], frozenset([1, 2, 3])),
                      (True, [frozenset([1, 2, 3])]))