def test_dispatch_variadic_on_first_argument(): foo = Dispatch() foo.register(int, lambda a, b: a + b) foo.register(float, lambda a, b: a - b) assert foo(1, 2) == 3 assert foo(1., 2.) == -1
def test_dispatch_variadic_on_first_argument(): foo = Dispatch() foo.register(int, lambda a, b: a + b) foo.register(float, lambda a, b: a - b) assert foo(1, 2) == 3 assert foo(1.0, 2.0) == -1
def test_dispatch_lazy(): # this tests the recursive component of dispatch foo = Dispatch() foo.register(int, lambda a: a) import decimal # keep it outside lazy dec for test def foo_dec(a): return a + 1 @foo.register_lazy("decimal") def register_decimal(): import decimal foo.register(decimal.Decimal, foo_dec) # This test needs to be *before* any other calls assert foo.dispatch(decimal.Decimal) == foo_dec assert foo(decimal.Decimal(1)) == decimal.Decimal(2) assert foo(1) == 1
def test_dispatch(): foo = Dispatch() foo.register(int, lambda a: a + 1) foo.register(float, lambda a: a - 1) foo.register(tuple, lambda a: tuple(foo(i) for i in a)) foo.register(object, lambda a: a) class Bar(object): pass b = Bar() assert foo(1) == 2 assert foo(1.0) == 0.0 assert foo(b) == b assert foo((1, 2.0, b)) == (2, 1.0, b)
def test_dispatch(): foo = Dispatch() foo.register(int, lambda a: a + 1) foo.register(float, lambda a: a - 1) foo.register(tuple, lambda a: tuple(foo(i) for i in a)) def f(a): """ My Docstring """ return a foo.register(object, f) class Bar(object): pass b = Bar() assert foo(1) == 2 assert foo.dispatch(int)(1) == 2 assert foo(1.0) == 0.0 assert foo(b) == b assert foo((1, 2.0, b)) == (2, 1.0, b) assert foo.__doc__ == f.__doc__
def test_dispatch_kwargs(): foo = Dispatch() foo.register(int, lambda a, b=10: a + b) assert foo(1, b=20) == 21
""" hasher = _md5(str(tuple(map(normalize_token, args))).encode()) if kwargs: hasher.update(str(normalize_token(kwargs)).encode()) return hasher.hexdigest() normalize_token = Dispatch() normalize_token.register( ( int, float, str, bytes, type(None), type, slice, complex, type(Ellipsis), datetime.date, ), identity, ) @normalize_token.register(dict) def normalize_dict(d): return normalize_token(sorted(d.items(), key=str)) @normalize_token.register(OrderedDict)