Esempio n. 1
0
    def test__integration(self):
        for i, (rule, wmes, exp_len, var, exp_val) in enumerate([
            (Rule(Has('spu:1', 'price', '$x'), Filter('$x>100'), Filter('$x<200')),
             [WME('spu:1', 'price', '100'), WME('spu:1', 'price', '150'), WME('spu:1', 'price', '300')],
             1,
             '$x',
             '150'),
            (Rule(Has('spu:1', 'price', '$x'), Filter('$x>200 and $x<400')),
             [WME('spu:1', 'price', '100'), WME('spu:1', 'price', '150'), WME('spu:1', 'price', '300')],
             1,
             '$x',
             '300'),
            (Rule(Has('spu:1', 'price', '$x'), Filter('$x>300')),
             [WME('spu:1', 'price', '100'), WME('spu:1', 'price', '150'), WME('spu:1', 'price', '300')],
             0,
             None,
             None),
        ]):
            with self.subTest(i=i, exp_len=exp_len, var=var, exp_val=exp_val):
                network = Network()
                production = network.add_production(rule)
                for wme in wmes:
                    network.add_wme(wme)

                assert_that(production.memory, 'filter').is_length(exp_len)
                if production.memory:
                    token = production.memory[0]
                    assert_that(token.get_binding(var), 'filter').is_equal_to(exp_val)
Esempio n. 2
0
def parse_xml(s):
    root = ET.fromstring(s)
    result = []
    for production in root:
        lhs = Rule()
        lhs.extend(parsing(production[0]))
        rhs = production[1].attrib
        result.append((lhs, rhs))
    return result
Esempio n. 3
0
    def test__integration(self):
        for i, (rule, wmes, exp_len, var, exp_val) in enumerate([
            (Rule(Has('spu:1', 'sales', '$x'), Bind('len(set($x) & set(range(1, 100)))', '$num'), Filter('$num > 0')),[WME('spu:1', 'sales', 'range(50, 110)')], 1, '$num', 50),
            (Rule(Has('spu:1', 'sales', '$x'), Bind('len(set($x) & set(range(100, 200)))', '$num'), Filter('$num > 0')),[WME('spu:1', 'sales', 'range(50, 110)')], 1, '$num', 10),
            (Rule(Has('spu:1', 'sales', '$x'), Bind('len(set($x) & set(range(300, 400)))', '$num'), Filter('$num > 0')),[WME('spu:1', 'sales', 'range(50, 110)')], 0, None, None),
        ]):
            with self.subTest(i=i, exp_len=exp_len, var=var, exp_val=exp_val):
                network = Network()
                production = network.add_production(rule)
                for wme in wmes:
                    network.add_wme(wme)

                assert_that(production.memory, 'filter').is_length(exp_len)
                if production.memory:
                    token = production.memory[0]
                    assert_that(token.get_binding(var), 'filter').is_equal_to(exp_val)
Esempio n. 4
0
def test_bind():
    net = Network()
    c0 = Has('spu:1', 'sales', '$x')
    b0 = Bind('len(set($x) & set(range(1, 100)))', '$num')
    f0 = Filter('$num > 0')
    p0 = net.add_production(Rule(c0, b0, f0))

    b1 = Bind('len(set($x) & set(range(100, 200)))', '$num')
    p1 = net.add_production(Rule(c0, b1, f0))

    b2 = Bind('len(set($x) & set(range(300, 400)))', '$num')
    p2 = net.add_production(Rule(c0, b2, f0))

    net.add_wme(WME('spu:1', 'sales', 'range(50, 110)'))

    assert len(p0.items) == 1
    assert len(p1.items) == 1
    assert len(p2.items) == 0
    t0 = p0.items[0]
    t1 = p1.items[0]
    assert t0.get_binding('$num') == 50
    assert t1.get_binding('$num') == 10
Esempio n. 5
0
    def test__parse_xml(self):
        for i, (name, exp) in enumerate([
            ('example.xml',
             Rule(Has('$x', 'on', '$y'), Bind('1+1', '$test'),
                  Filter('$y != "table"'),
                  Ncc(Has('$z', 'color', 'red'), Has('$z', 'on', '$w')))),
        ]):
            with self.subTest(i=i, name=name, exp=exp):
                with open(os.path.join(FIXTURES, 'example.xml'), 'r') as file:
                    content = file.read()
                    result = parse_xml(content)[0][0]

                    assert_that(result, 'parse_xml').is_equal_to(exp)
Esempio n. 6
0
def test_filter_compare():
    net = Network()
    c0 = Has('spu:1', 'price', '$x')
    f0 = Filter('$x>100')
    f1 = Filter('$x<200')
    f2 = Filter('$x>200 and $x<400')
    f3 = Filter('$x>300')

    p0 = net.add_production(Rule(c0, f0, f1))
    p1 = net.add_production(Rule(c0, f2))
    p2 = net.add_production(Rule(c0, f3))
    net.add_wme(WME('spu:1', 'price', '100'))
    net.add_wme(WME('spu:1', 'price', '150'))
    net.add_wme(WME('spu:1', 'price', '300'))

    assert len(p0.items) == 1
    token = p0.items.pop()
    assert token.get_binding('$x') == '150'

    assert len(p1.items) == 1
    token = p1.items.pop()
    assert token.get_binding('$x') == '300'

    assert not p2.items
Esempio n. 7
0
def test_xml():
    s = """<?xml version="1.0"?>
    <data version="0.0.2">
        <production>
            <lhs>
                <has identifier="$x" attribute="on" value="$y" />
                <bind to="$test">1+1</bind>
                <filter>$y != "table"</filter>
                <ncc>
                    <has identifier="$z" attribute="color" value="red" />
                    <has identifier="$z" attribute="on" value="$w" />
                </ncc>
            </lhs>
            <rhs></rhs>
        </production>
    </data>"""
    result = parse_xml(s)
    assert result[0][0] == Rule(
        Has('$x', 'on', '$y'), Bind('1+1', '$test'), Filter('$y != "table"'),
        Ncc(Has('$z', 'color', 'red'), Has('$z', 'on', '$w')))