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)
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))
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))
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))
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))
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))
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))
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))
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))
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))
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))
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))
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))
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))
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))
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"))
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))
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))
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"))
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))
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))
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))
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))
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))
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))
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))
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))
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()
def setUpMoreClass(cls): s.run("Foo(int a:0..1000, (int b)) shardby b, sortby b.")
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.""")
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.")
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).")
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))
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.")
def setUpMoreClass(cls): s.run("Foo(int a:0..1000, (int b)).")
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).""")