コード例 #1
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)
コード例 #2
0
ファイル: test_tables.py プロジェクト: neuliangsiyu/socialite
    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))
コード例 #3
0
ファイル: test_tables.py プロジェクト: neuliangsiyu/socialite
    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))
コード例 #4
0
ファイル: test_tables.py プロジェクト: neuliangsiyu/socialite
    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
ファイル: test_tables.py プロジェクト: neuliangsiyu/socialite
    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))
コード例 #6
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))
コード例 #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
ファイル: test_tables.py プロジェクト: neuliangsiyu/socialite
    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))
コード例 #9
0
ファイル: test_tables.py プロジェクト: neuliangsiyu/socialite
    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
ファイル: test_tables.py プロジェクト: neuliangsiyu/socialite
    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_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))
コード例 #12
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))
コード例 #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
ファイル: test_tables.py プロジェクト: neuliangsiyu/socialite
    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))
コード例 #15
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))
コード例 #16
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"))
コード例 #17
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))
コード例 #18
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))
コード例 #19
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"))
コード例 #20
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))
コード例 #21
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))
コード例 #22
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))
コード例 #23
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))
コード例 #24
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))
コード例 #25
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))
コード例 #26
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))
コード例 #27
0
ファイル: test_tables.py プロジェクト: neuliangsiyu/socialite
 def initTables(cls):
     s.run("""Foo(a, b) :- a=$range(0, 10), b=42.""")
     s.run("""Foo(a, b) :- a=$range(10, 20), b=41.""")
     s.run("""Bar(a, b) :- a=42, b=0.""")
     s.run("""Bar(a, b) :- a=43, b=1.""")
     s.run("""Baz(a, b) :- a=42, b=0.""")
     s.run("""Baz(a, b) :- a=43, b=1.""")
     for i in xrange(10):
         s.run("""Quux(a, b) :- a={a}, b={b}.""".format(a=i, b=i))
コード例 #28
0
 def setUpClass(cls):
     s.run("Bar(int a:0..1000, int b).")
     s.run("Qux(int a:0..2000, int b) groupby(1).")
     s.run("Sum(int i:0..0, int sum) groupby(1).")
     cls.setUpMoreClass()
     cls.initTables()
コード例 #29
0
 def setUpMoreClass(cls):
     s.run("Foo(int a:0..1000, (int b)) shardby b, sortby b.")
コード例 #30
0
 def initTables(cls):
     s.run("""Foo(a, b) :- a=$range(0, 20000), b=42.""")
     s.run("""Foo(a, b) :- a=$range(20000, 40000), b=41.""")
     s.run("""Foo(a, b) :- a=$range(40000, 60000), b=21.""")
     s.run("""Foo(a, b) :- a=$range(60000, 80000), b=91.""")
コード例 #31
0
 def initTables(cls):
     s.run("Bar(a,b,c,d) :- a=$range(0,1000), b=1, c=1, d=2.")
     s.run("BarArr(a,b,c,d) :- a=$range(0,1000), b=1, c=1, d=2.")
     s.run("Foo(a,b,c,d) :- a=$range(42, 43), b=1, c=1, d=2.")
     s.run("FooArr(a,b,c,d) :- a=$range(42, 43), b=1, c=1, d=2.")
コード例 #32
0
 def initTables(cls):
     s.run("Foo(a,b) :- a=$range(0,160), b=$range(42, 45).")
     s.run("FooArr(a,b) :- a=$range(0,160), b=$range(42, 45).")
     s.run("FooArrArr(a,b) :- a=$range(0,160), b=$range(42, 45).")
     s.run("Bar(a,b) :- a=$range(150,200), b=$range(42, 45).")
     s.run("BarArr(a,b) :- a=$range(150,200), b=$range(42, 45).")
     s.run("BarArrArr(a,b) :- a=$range(150,200), b=$range(42, 45).")
コード例 #33
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))
コード例 #34
0
    def initTables(cls):
        s.run("Foo(a,b) :- a=$range(10, 20), b=$range(0, 1000).")
        s.run("Foo(a,b) :- a=$range(20, 30), b=$range(1000, 2000).")
        s.run("Foo(a,b) :- a=$range(30, 40), b=$range(1000, 2000).")
        s.run("Foo(a,b) :- a=$range(40, 50), b=$range(0, 1000).")

        s.run("Bar(a,b) :- a=$range(10,20), b=a+11.")
        s.run("Bar(a,b) :- a=$range(30,40), b=a+37.")
        s.run("Bar(a,b) :- a=$range(40,50), b=a+53.")
        s.run("Bar(a,b) :- a=$range(50,100), b=a+97.")
コード例 #35
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))
コード例 #36
0
 def setUpMoreClass(cls):
     s.run("Foo(int a:0..1000, (int b)).")
コード例 #37
0
 def initTables(cls):
     s.run("""Foo(a, b) :- a=$range(0, 20000), b=42.""")
     s.run("""Foo(a, b) :- a=$range(20000, 40000), b=41.""")
     s.run("""Foo(a, b) :- a=$range(40000, 60000), b=21.""")
     s.run("""Foo(a, b) :- a=$range(60000, 80000), b=91.""")
コード例 #38
0
ファイル: test_tables.py プロジェクト: neuliangsiyu/socialite
 def initTables(cls):
     s.run("""Foo(a, b) :- a=$range(0, 10), b=$range(40, 45).""")
     s.run("""Bar(a, b) :- a=42, b=$range(101, 105).""")
     s.run("""Baz(a, b) :- a=$range(43, 50), b=$range(101, 105).""")
     s.run("""Quux(a, b) :- a=$range(44, 50), b=$range(101, 105).""")