コード例 #1
0
ファイル: test_core.py プロジェクト: jdmcbr/logpy
def test_fact():
    rel = Relation()
    fact(rel, 1, 2)
    assert (1, 2) in rel.facts
    assert (10, 10) not in rel.facts

    facts(rel, (2, 3), (3, 4))
    assert (2, 3) in rel.facts
    assert (3, 4) in rel.facts
コード例 #2
0
ファイル: test_assoccomm.py プロジェクト: PhoenixBureau/logpy
def test_eq_assoccomm():
    x, y = var(), var()
    eqac = eq_assoccomm
    ac = 'commassoc_op'
    fact(commutative, ac)
    fact(associative, ac)
    assert results(eqac((ac, (ac, 1, x), y), (ac, 2, (ac, 3, 1))))
    assert results((eqac, 1, 1))
    assert results(eqac((a, (a, 1, 2), 3), (a, 1, 2, 3)))
    assert results(eqac((ac, (ac, 1, 2), 3), (ac, 1, 2, 3)))
    assert results(eqac((ac, 3, (ac, 1, 2)), (ac, 1, 2, 3)))
    assert run(0, x, eqac((ac, 3, (ac, 1, 2)), (ac, 1, x, 3))) == (2,)
コード例 #3
0
ファイル: test_assoccomm.py プロジェクト: PhoenixBureau/logpy
def test_expr():
    add = 'add'
    mul = 'mul'
    fact(commutative, add)
    fact(associative, add)
    fact(commutative, mul)
    fact(associative, mul)

    x, y = var('x'), var('y')

    pattern = (mul, (add, 1, x), y)                # (1 + x) * y
    expr    = (mul, 2, (add, 3, 1))                # 2 * (3 + 1)
    assert run(0, (x,y), eq_assoccomm(pattern, expr)) == ((3, 2),)
コード例 #4
0
ファイル: test_assoccomm.py プロジェクト: jdmcbr/logpy
from logpy.assoccomm import (
    unify_assoc,
    unify_comm,
    eq_assoc,
    eq_comm,
    operation,
    associative,
    commutative,
    eq_assoccomm,
    conde,
)

a = "assoc_op"
c = "comm_op"
x = var()
fact(associative, a)
fact(commutative, c)


def test_assoc():
    assert tuple(unify_assoc((a, 1, 2, 3), (a, 1, 2, 3), {}))
    assert tuple(unify_assoc((a, 1, 2, 3), (a, (a, 1, 2), 3), {}))
    assert tuple(unify_assoc((a, 1, 2, 3), (a, 1, x, 3), {})) == ({x: 2},)
    assert tuple(unify_assoc((a, 1, 2, 3), (a, 1, x), {})) == ({x: (a, 2, 3)},)
    assert tuple(unify_assoc((a, 1, 2, 3), (a, x, 3), {})) == ({x: (a, 1, 2)},)
    assert tuple(unify_assoc((a, x, 3), (a, 1, 2, 3), {})) == ({x: (a, 1, 2)},)


def test_eq_assoccomm():
    A, B = ((a, 1, 2), 3), ((a, 1, 2), 3)
    assert tuple(eq_assoccomm((a, 1, 2), (a, 1, 2))({}))
コード例 #5
0
ファイル: test_core.py プロジェクト: jdmcbr/logpy
def test_relation():
    parent = Relation()
    fact(parent, "Homer", "Bart")
    fact(parent, "Homer", "Lisa")
    fact(parent, "Marge", "Bart")
    fact(parent, "Marge", "Lisa")
    fact(parent, "Abe", "Homer")
    fact(parent, "Jackie", "Marge")

    x = var('x')
    assert set(run(5, x, parent("Homer", x))) == set(("Bart", "Lisa"))
    assert set(run(5, x, parent(x, "Bart")))  == set(("Homer", "Marge"))

    def grandparent(x, z):
        y = var()
        return conde((parent(x, y), parent(y, z)))

    assert set(run(5, x, grandparent(x, "Bart") )) == set(("Abe", "Jackie"))