def test_builtin_split(self):
        s.run("""Str(String a, String b, String c).
                 Str(a,b,c) :- (a,b,c) = $split("11::::22::33", "::", 3). """)

        a,b,c = s.query("Str(a,b,c)").first()
        self.assertEqual((a,b,c), ("11","","22::33"))

        s.clear("Str")

        s.run("""Str(a,b,c) :- (a,b,c) = $split("AA::BB::CC ::DD", "::", 3).""")
        a,b,c = s.query("Str(a,b,c)").first()
        self.assertEqual((a,b,c), ("AA","BB","CC ::DD"))
示例#2
0
    def test_builtin_split(self):
        s.run("""Str(String a, String b, String c).
                 Str(a,b,c) :- (a,b,c) = $split("11::::22::33", "::", 3). """)

        a, b, c = s.query("Str(a,b,c)").first()
        self.assertEqual((a, b, c), ("11", "", "22::33"))

        s.clear("Str")

        s.run(
            """Str(a,b,c) :- (a,b,c) = $split("AA::BB::CC ::DD", "::", 3).""")
        a, b, c = s.query("Str(a,b,c)").first()
        self.assertEqual((a, b, c), ("AA", "BB", "CC ::DD"))
示例#3
0
    def run_simple_rule(self):
        s.run("Qux(b, $sum(f)) :- Bar(a, f), Foo(a, b).")
        s.run("Sum(0, $sum(f)) :- Qux(b, f).")

        _, _sum = s.query("Sum(0, f)").first()

        self.assertEquals(_sum, 1945000.0)
示例#4
0
    def test_simple_iteration(self):
        s.run("Qux(a, b) :- Foo(a, b).")
        expected = [(a, b) for a in xrange(0, 10) for b in xrange(40, 45)]
        result = []
        for a,b in s.query("Qux(a,b)"):
            result.append((a,b))

        self.assertEqual(sorted(result), sorted(expected))
示例#5
0
    def test_multi_index(self):
        s.run("Qux(a, b) :- Foo(a, c), Baz(c, b).")
        expected = [(a,0) for a in xrange(0, 10)]
        result = []
        for a,b in s.query("Qux(a,b)"):
            result.append((a,b))

        self.assertEqual(sorted(result), sorted(expected))
示例#6
0
    def test_multi_index2(self):
        s.run("Qux(a, c) :- Foo(a, c), Baz(c, a).")
        expected = [(0,42)]
        result = []
        for a,b in s.query("Qux(a,b)"):
            result.append((a,b))

        self.assertEqual(sorted(result), sorted(expected))
示例#7
0
    def _testrun(self, query):
        s.run(query)

        expected = [(a, b) for a in range(150, 160) for b in range(42, 45)]
        result = []
        for a,b in s.query("Qux(a,b)"):
            result.append((a,b))

        self.assertEqual(sorted(result), sorted(expected))
示例#8
0
    def _testrun(self, query):
        s.run(query)

        expected = [(a, 1, 1, 2) for a in xrange(42, 43)]
        result = []
        for a,b,c,d in s.query("Qux(a,b,c,d)"):
            result.append((a,b,c,d))

        self.assertEqual(sorted(result), sorted(expected))
示例#9
0
    def test_groupby(self):
        s.run("Corge(a, $max(b)) :- Foo(b, a).")
        expected = [(42, 9), (41, 19)]

        result = []
        for a,b in s.query("Corge(a,b)"):
            result.append((a,b))

        self.assertEqual(sorted(result), sorted(expected))
示例#10
0
    def test_simple_iteration(self):
        s.run("Qux(a, b) :- Foo(a, b).")
        expected = [(a,42) for a in xrange(0, 10)]
        expected.extend([(a,41) for a in xrange(10, 20)])
        result = []
        for a,b in s.query("Qux(a,b)"):
            result.append((a,b))

        self.assertEqual(sorted(result), sorted(expected))
示例#11
0
    def test_sortby(self):
        s.run("Qux(a,b) :- Quux(a,b), b < 103.")
        expected = [(a, b) for a in xrange(44, 50) for b in xrange(101, 103)]

        result = []
        for a,b in s.query("Qux(a,b)"):
            result.append((a,b))

        self.assertEqual(sorted(result), sorted(expected))
示例#12
0
    def test_sortby2(self):
        s.run("Qux(a,b) :- Quux(a,b), b >= 5.")
        expected = [(a,a) for a in xrange(5, 10)]

        result = []
        for a,b in s.query("Qux(a,b)"):
            result.append((a,b))

        self.assertEqual(sorted(result), sorted(expected))
示例#13
0
    def test_aggr_trailing_args(self):
        s.run("Bar(a,b,$min(c), d) :- a=10, b=10, c=10, d=10.")
        s.run("Bar(a,b,$min(c), d) :- a=10, b=10, c=0, d=20.")

        expected = [(10, 10, 0, 20)]
        result = []
        for a, b, c, d in s.query("Bar(a,b,c,d)"):
            result.append((a, b, c, d))

        self.assertEqual(sorted(result), sorted(expected))
示例#14
0
    def test_aggr_trailing_args(self):
        s.run("Bar(a,b,$min(c), d) :- a=10, b=10, c=10, d=10.")
        s.run("Bar(a,b,$min(c), d) :- a=10, b=10, c=0, d=20.")

        expected = [(10,10,0,20)]
        result = []
        for a,b,c,d in s.query("Bar(a,b,c,d)"):
            result.append((a,b,c,d))

        self.assertEqual(sorted(result), sorted(expected))
示例#15
0
    def test_groupby(self):
        s.run("Corge(a, 0, $sum(b)) :- Foo(b, a).")
        expected = [(42, 0, sum(range(0, 20000))), (41, 0, sum(range(20000, 40000))), 
                    (21, 0, sum(range(40000,60000))), (91, 0, sum(range(60000, 80000)))]

        result = []
        for a,b,c in s.query("Corge(a,b,c)"):
            result.append((a,b,c))

        self.assertEqual(sorted(result), sorted(expected))
示例#16
0
    def test_multiple_aggr(self):
        s.run("Bar(a,b,$min(c), $max(d)) :- a=10, b=10, c=20, d=10.")
        s.run("Bar(a,b,$min(c), $max(d)) :- a=10, b=10, c=10, d=20.")
        s.run("Bar(a,b,$min(c), $max(d)) :- a=10, b=10, c=10, d=30.")

        expected = [(10, 10, 10, 30)]
        result = []
        for a, b, c, d in s.query("Bar(a,b,c,d)"):
            result.append((a, b, c, d))

        self.assertEqual(sorted(result), sorted(expected))
示例#17
0
    def test_groupby(self):
        s.run("Corge(a, 0, $max(b)) :- Foo(b, a).")
        s.run("Corge(a, 1, $min(b)) :- Foo(b, a).")
        expected = [(a, 0, 9) for a in xrange(40, 45)]
        expected.extend([(a, 1, 0) for a in xrange(40, 45)])

        result = []
        for a,b,c in s.query("Corge(a,b,c)"):
            result.append((a,b,c))

        self.assertEqual(sorted(result), sorted(expected))
示例#18
0
    def test_multiple_aggr(self):
        s.run("Bar(a,$min(b), $max(c)) :- a=10, b=10, c=10.")
        s.run("Bar(a,$min(b), $max(c)) :- a=10, b=1, c=100.")
        s.run("Bar(a,$min(b), $max(c)) :- a=10, b=100, c=1.")

        expected = [(10, 1, 100)]
        result = []
        for a, b, c in s.query("Bar(a,b,c)"):
            result.append((a, b, c))

        self.assertEqual(sorted(result), sorted(expected))
示例#19
0
    def test_aggr_trailing_args(self):
        s.run("Bar(a,$min(b), c) :- a=10, b=10, c=10.")
        s.run("Bar(a,$min(b), c) :- a=10, b=10, c=20.")
        s.run("Bar(a,$min(b), c) :- a=10, b=1, c=1.")

        expected = [(10, 1, 1)]
        result = []
        for a, b, c in s.query("Bar(a,b,c)"):
            result.append((a, b, c))

        self.assertEqual(sorted(result), sorted(expected))
示例#20
0
    def test_aggr_trailing_args(self):
        s.run("Bar(a,$min(b), c) :- a=10, b=10, c=10.")
        s.run("Bar(a,$min(b), c) :- a=10, b=10, c=20.")
        s.run("Bar(a,$min(b), c) :- a=10, b=1, c=1.")

        expected = [(10,1, 1)]
        result = []
        for a,b,c in s.query("Bar(a,b,c)"):
            result.append((a,b,c))

        self.assertEqual(sorted(result), sorted(expected))
示例#21
0
    def test_multiple_aggr(self):
        s.run("Bar(a,b,$min(c), $max(d)) :- a=10, b=10, c=20, d=10.")
        s.run("Bar(a,b,$min(c), $max(d)) :- a=10, b=10, c=10, d=20.")
        s.run("Bar(a,b,$min(c), $max(d)) :- a=10, b=10, c=10, d=30.")

        expected = [(10,10,10,30)]
        result = []
        for a,b,c,d in s.query("Bar(a,b,c,d)"):
            result.append((a,b,c,d))

        self.assertEqual(sorted(result), sorted(expected))
示例#22
0
    def test_multiple_aggr(self):
        s.run("Bar(a,$min(b), $max(c)) :- a=10, b=10, c=10.")
        s.run("Bar(a,$min(b), $max(c)) :- a=10, b=1, c=100.")
        s.run("Bar(a,$min(b), $max(c)) :- a=10, b=100, c=1.")

        expected = [(10,1, 100)]
        result = []
        for a,b,c in s.query("Bar(a,b,c)"):
            result.append((a,b,c))

        self.assertEqual(sorted(result), sorted(expected))
示例#23
0
    def test_aggr(self):
        s.run("Foo(a,b,$min(c)) :- a=10, b=10, c=30.")
        s.run("Foo(a,b,$min(c)) :- a=10, b=10, c=20.")
        s.run("Foo(a,b,$min(c)) :- a=10, b=10, c=10.")
        s.run("Foo(a,b,$min(c)) :- a=10, b=20, c=50.")
        s.run("Foo(a,b,$min(c)) :- a=10, b=20, c=20.")

        expected = [(10, 10, 10), (10, 20, 20)]
        result = []
        for a, b, c in s.query("Foo(a,b,c)"):
            result.append((a, b, c))
        self.assertEqual(sorted(result), sorted(expected))
示例#24
0
    def test_min(self):
        s.run("Edge(s,t) :- s=0, t=1.")
        s.run("Edge(s,t) :- s=0, t=2.")
        s.run("Edge(s,t) :- s=0, t=3.")
        s.run("Edge(s,t) :- s=1, t=2.")
        s.run("Edge(s,t) :- s=1, t=3.")
        s.run("Edge(s,t) :- s=2, t=4.")
        s.run("Edge(s,t) :- s=4, t=5.")

        s.run("""Path(n,$min(d)) :- n=0, d=0;
                                 :- Path(s, d1), Edge(s,n), d=d1+1.""")
        self.assertEqual(s.query("Path(5, d)").first(), (5, 3))
示例#25
0
    def test_min(self):
        s.run("Edge(s,t) :- s=0, t=1.")
        s.run("Edge(s,t) :- s=0, t=2.")
        s.run("Edge(s,t) :- s=0, t=3.")
        s.run("Edge(s,t) :- s=1, t=2.")
        s.run("Edge(s,t) :- s=1, t=3.")
        s.run("Edge(s,t) :- s=2, t=4.")
        s.run("Edge(s,t) :- s=4, t=5.")

        s.run("""Path(n,$min(d)) :- n=0, d=0;
                                 :- Path(s, d1), Edge(s,n), d=d1+1.""")
        self.assertEqual(s.query("Path(5, d)").first(), (5, 3))
示例#26
0
    def test_aggr(self):
        s.run("Foo(a,b,$min(c)) :- a=10, b=10, c=30.")
        s.run("Foo(a,b,$min(c)) :- a=10, b=10, c=20.")
        s.run("Foo(a,b,$min(c)) :- a=10, b=10, c=10.")
        s.run("Foo(a,b,$min(c)) :- a=10, b=20, c=50.")
        s.run("Foo(a,b,$min(c)) :- a=10, b=20, c=20.")

        expected = [(10,10,10), (10,20,20)]
        result = []
        for a,b,c in s.query("Foo(a,b,c)"):
            result.append((a,b,c))
        self.assertEqual(sorted(result), sorted(expected))
示例#27
0
    def test_aggr(self):
        s.run("Foo(a,$min(b)) :- a=10, b=20.")
        s.run("Foo(a,$min(b)) :- a=10, b=30.")
        s.run("Foo(a,$min(b)) :- a=10, b=10.")
        s.run("Foo(a,$min(b)) :- a=20, b=100.")
        s.run("Foo(a,$min(b)) :- a=20, b=10.")

        expected = [(10,10), (20, 10)]
        result = []
        for a,b in s.query("Foo(a,b)"):
            result.append((a,b))

        self.assertEqual(sorted(result), sorted(expected))
示例#28
0
    def test_aggr(self):
        s.run("Foo(a,$min(b)) :- a=10, b=20.")
        s.run("Foo(a,$min(b)) :- a=10, b=30.")
        s.run("Foo(a,$min(b)) :- a=10, b=10.")
        s.run("Foo(a,$min(b)) :- a=20, b=100.")
        s.run("Foo(a,$min(b)) :- a=20, b=10.")

        expected = [(10, 10), (20, 10)]
        result = []
        for a, b in s.query("Foo(a,b)"):
            result.append((a, b))

        self.assertEqual(sorted(result), sorted(expected))