Пример #1
0
def test_ordering():
    x = var('x')
    y = var('y')
    o = ordering([(1,), (x,), (2,), (y,), (x, x), (1, x), (x, 1), (1, 2)])
    print("Ordering:", o)

    for a, b in zip(o, o[1:]):
        assert supercedes(a, b) or not supercedes(b, a)
Пример #2
0
def test_ordering():
    x = var('x')
    y = var('y')
    o = ordering([(1, ), (x, ), (2, ), (y, ), (x, x), (1, x), (x, 1), (1, 2)])
    print("Ordering:", o)

    for a, b in zip(o, o[1:]):
        assert supercedes(a, b) or not supercedes(b, a)
Пример #3
0
def test_dict():
    d = Dispatcher('d')
    x = var('x')
    y = var('y')

    d.add(({'x': x, 'key': 1},), identity)

    d({'x': 1, 'key': 1}) == {'x': 1, 'key': 1}
Пример #4
0
def test_dict():
    d = Dispatcher('d')
    x = var('x')
    y = var('y')

    d.add(({'x': x, 'key': 1}, ), identity)

    d({'x': 1, 'key': 1}) == {'x': 1, 'key': 1}
Пример #5
0
def test_supercedes():
    x, y, z = var('x'), var('y'), var('z')
    assert not supercedes(1, 2)
    assert supercedes(1, x)
    assert not supercedes(x, 1)
    assert supercedes((1, 2), (1, x))
    assert not supercedes((1, x), (1, 2))
    assert supercedes((1, x), (y, z))
    assert supercedes(x, y)
    assert supercedes((1, (x, 3)), (1, y))
    assert not supercedes((1, y), (1, (x, 3)))
Пример #6
0
def test_supercedes():
    x, y, z = var('x'), var('y'), var('z')
    assert not supercedes(1, 2)
    assert supercedes(1, x)
    assert not supercedes(x, 1)
    assert supercedes((1, 2), (1, x))
    assert not supercedes((1, x), (1, 2))
    assert supercedes((1, x), (y, z))
    assert supercedes(x, y)
    assert supercedes((1, (x, 3)), (1, y))
    assert not supercedes((1, y), (1, (x, 3)))
Пример #7
0
def test_VarDispatcher():
    d = VarDispatcher('d')
    x, y, z = var('x'), var('y'), var('z')

    @d.register(x, y)
    def swap(y, x):
        return y, x

    assert d(1, 2) == (2, 1)

    @d.register((1, z), 2)
    def foo(z):
        return z

    assert d((1, 3), 2) == 3
Пример #8
0
def test_VarDispatcher():
    d = VarDispatcher('d')
    x, y, z = var('x'), var('y'), var('z')

    @d.register(x, y)
    def swap(y, x):
        return y, x

    assert d(1, 2) == (2, 1)

    @d.register((1, z), 2)
    def foo(z):
        return z

    assert d((1, 3), 2) == 3
Пример #9
0
def test_complex():
    d = Dispatcher('d')
    x = var('x')
    y = var('y')

    d.add((1,), inc)
    d.add((x,), inc)
    d.add((x, 1), add)
    d.add((y, y), mul)
    d.add((x, (x, x)), foo)

    assert d(1) == 2
    assert d(2) == 3
    assert d(2, 1) == 3
    assert d(10, 10) == 100
    assert d(10, (10, 10)) == (10, (10, 10))
    assert raises(NotImplementedError, lambda : d(1, 2))
Пример #10
0
def test_complex():
    d = Dispatcher('d')
    x = var('x')
    y = var('y')

    d.add((1, ), inc)
    d.add((x, ), inc)
    d.add((x, 1), add)
    d.add((y, y), mul)
    d.add((x, (x, x)), foo)

    assert d(1) == 2
    assert d(2) == 3
    assert d(2, 1) == 3
    assert d(10, 10) == 100
    assert d(10, (10, 10)) == (10, (10, 10))
    assert raises(NotImplementedError, lambda: d(1, 2))
Пример #11
0
def test_dispatcher():
    x = var('x')
    @match(1)
    def fib(x):
        return 1

    @match(0)
    def fib(x):
        return 0

    @match(x)
    def fib(n):
        return fib(n - 1) + fib(n - 2)

    assert [fib(i) for i in range(10)] == \
            [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
Пример #12
0
def test_dispatcher():
    x = var('x')

    @match(1)
    def fib(x):
        return 1

    @match(0)
    def fib(x):
        return 0

    @match(x)
    def fib(n):
        return fib(n - 1) + fib(n - 2)

    assert [fib(i) for i in range(10)] == \
            [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
Пример #13
0
def test_supercedes_more():
    x, y, z = var('x'), var('y'), var('z')
    assert supercedes((1, x), (y, y))
    assert supercedes((1, x), (x, x))
Пример #14
0
def test_supercedes_more():
    x, y, z = var('x'), var('y'), var('z')
    assert supercedes((1, x), (y, y))
    assert supercedes((1, x), (x, x))