added more benchmarks
authorPaul Meng <baolmeng@gmail.com>
Tue, 30 Aug 2016 18:36:58 +0000 (13:36 -0500)
committerPaul Meng <baolmeng@gmail.com>
Tue, 30 Aug 2016 18:36:58 +0000 (13:36 -0500)
18 files changed:
test/regress/regress0/sets/rels/addr_book.cvc [new file with mode: 0644]
test/regress/regress0/sets/rels/garbage_collect.cvc [new file with mode: 0644]
test/regress/regress0/sets/rels/rel_join_1_1.cvc
test/regress/regress0/sets/rels/rel_product_1_1.cvc
test/regress/regress0/sets/rels/rel_tc_10_1.cvc [new file with mode: 0644]
test/regress/regress0/sets/rels/rel_tc_11.cvc [new file with mode: 0644]
test/regress/regress0/sets/rels/rel_tc_2_1.cvc [new file with mode: 0644]
test/regress/regress0/sets/rels/rel_tc_3.cvc
test/regress/regress0/sets/rels/rel_tc_3_1.cvc [new file with mode: 0644]
test/regress/regress0/sets/rels/rel_tc_4.cvc [new file with mode: 0644]
test/regress/regress0/sets/rels/rel_tc_4_1.cvc [new file with mode: 0644]
test/regress/regress0/sets/rels/rel_tc_5_1.cvc [new file with mode: 0644]
test/regress/regress0/sets/rels/rel_tc_6.cvc [new file with mode: 0644]
test/regress/regress0/sets/rels/rel_tc_7.cvc [new file with mode: 0644]
test/regress/regress0/sets/rels/rel_tc_8.cvc [new file with mode: 0644]
test/regress/regress0/sets/rels/rel_tc_9_1.cvc [new file with mode: 0644]
test/regress/regress0/sets/rels/rel_transpose_0.cvc
test/regress/regress0/sets/rels/rel_transpose_1_1.cvc

diff --git a/test/regress/regress0/sets/rels/addr_book.cvc b/test/regress/regress0/sets/rels/addr_book.cvc
new file mode 100644 (file)
index 0000000..fbe782a
--- /dev/null
@@ -0,0 +1,49 @@
+% EXPECT: unsat
+OPTION "logic" "ALL_SUPPORTED";
+Atom : TYPE;
+AtomTup : TYPE = [Atom];
+AtomBinTup : TYPE = [Atom, Atom];
+AtomTerTup : TYPE = [Atom, Atom, Atom];
+Target: SET OF AtomTup;
+
+Name: SET OF AtomTup;
+Addr: SET OF AtomTup;
+Book: SET OF AtomTup;
+names: SET OF AtomBinTup;
+addr: SET OF AtomTerTup;
+
+b1: Atom;
+b1_tup : AtomTup;
+ASSERT b1_tup = TUPLE(b1);
+ASSERT b1_tup IS_IN Book;
+
+b2: Atom;
+b2_tup : AtomTup;
+ASSERT b2_tup = TUPLE(b2);
+ASSERT b2_tup IS_IN Book;
+
+b3: Atom;
+b3_tup : AtomTup;
+ASSERT b3_tup = TUPLE(b3);
+ASSERT b3_tup IS_IN Book;
+
+n: Atom;
+n_tup : AtomTup;
+ASSERT n_tup = TUPLE(n);
+ASSERT n_tup IS_IN Name;
+
+t: Atom;
+t_tup : AtomTup;
+ASSERT t_tup = TUPLE(t);
+ASSERT t_tup IS_IN Target;
+
+ASSERT ((Book JOIN  addr) JOIN Target) = Name;
+ASSERT (Book JOIN names) = Name;
+ASSERT (Name & Addr) = {}::SET OF AtomTup;
+
+ASSERT ({n_tup} JOIN ({b1_tup} JOIN addr)) = {}::SET OF AtomTup;
+ASSERT ({n_tup} JOIN ({b2_tup} JOIN addr)) = ({n_tup} JOIN ({b1_tup} JOIN addr)) | {t_tup};
+ASSERT ({n_tup} JOIN ({b3_tup} JOIN addr)) = ({n_tup} JOIN ({b2_tup} JOIN addr)) - {t_tup};
+ASSERT NOT (({n_tup} JOIN ({b1_tup} JOIN addr)) = ({n_tup} JOIN ({b3_tup} JOIN addr)));
+
+CHECKSAT;
\ No newline at end of file
diff --git a/test/regress/regress0/sets/rels/garbage_collect.cvc b/test/regress/regress0/sets/rels/garbage_collect.cvc
new file mode 100644 (file)
index 0000000..dd5995c
--- /dev/null
@@ -0,0 +1,59 @@
+H_TYPE: TYPE;
+H: TYPE = [H_TYPE];
+Obj: TYPE;
+Obj_Tup: TYPE = [Obj];
+MARK_TYPE: TYPE = [H_TYPE, Obj];
+RELATE: TYPE = [Obj, Obj];
+REF_TYPE: TYPE = [H_TYPE, Obj, Obj];
+
+% Symbols h0 to h3 are constants of type H that represents the system state;
+h0: SET OF H;
+h1: SET OF H;
+h2: SET OF H;
+h3: SET OF H;
+s0: H_TYPE;
+s1: H_TYPE;
+s2: H_TYPE;
+s3: H_TYPE;
+ASSERT h0 = {TUPLE(s0)};
+ASSERT h1 = {TUPLE(s1)};
+ASSERT h2 = {TUPLE(s2)};
+ASSERT h3 = {TUPLE(s3)};
+
+% ref ⊆ H × Obj × Obj represents references between objects in each state;
+ref : SET OF REF_TYPE;
+
+% mark ⊆ H × Obj represents the marked objects in each state
+mark: SET OF MARK_TYPE;
+
+empty_obj_set: SET OF Obj_Tup;
+ASSERT empty_obj_set = {}:: SET OF Obj_Tup;
+
+% root and live are two constants of type Obj that represents objects;
+root: Obj;
+live: Obj;
+
+% The state transition (h0–h1) resets all the marks
+ASSERT (h1 JOIN mark) = empty_obj_set;
+ASSERT (h0 JOIN ref) <= (h1 JOIN ref);
+
+% (h1–h2) marks objects reachable from root
+ASSERT FORALL (n : Obj) : ((root, n) IS_IN TCLOSURE(h1 JOIN ref)) 
+                                                                                 => (TUPLE(n) IS_IN (h2 JOIN mark));
+ASSERT (h1 JOIN ref) <= (h2 JOIN ref);
+
+% (h2–h3) sweeps references of non-marked objects                                                                              
+
+ASSERT FORALL (n: Obj) : (NOT (TUPLE(n) IS_IN (h2 JOIN mark))) 
+                                                                                 => ({TUPLE(n)} JOIN (h3 JOIN ref)) = empty_obj_set;                                                                             
+
+ASSERT FORALL (n: Obj) : (TUPLE(n) IS_IN (h2 JOIN mark))
+                                                                                 => ({TUPLE(n)} JOIN (h3 JOIN ref)) = ({TUPLE(n)} JOIN (h2 JOIN ref)); 
+
+%The safety property is negated, thus it checks if
+%in the final state, there is a live object that was originally reachable from root
+%in the beginning state, but some of its references have been swept                                                                              
+ASSERT (root, live) IS_IN TCLOSURE(h0 JOIN ref);
+ASSERT NOT (({TUPLE(live)} JOIN (h0 JOIN ref)) <= ({TUPLE(live)} JOIN (h3 JOIN ref)));                                                                           
+
+CHECKSAT;
\ No newline at end of file
index 3436bd707b2466b5866564d29f2d2599907e355f..75fc08387cddcbf465a03f9442cd591507065ea9 100644 (file)
@@ -26,6 +26,6 @@ ASSERT (4, 7) IS_IN y;
 
 ASSERT z IS_IN x;
 ASSERT zt IS_IN y;
-ASSERT a IS_IN (x JOIN y);
+ASSERT r = (x JOIN y);
 
 CHECKSAT;
index 3e5280c19dbfd5458da67d9e01783f3802031c86..9559b74e14f96a0c5c6b5f10333f74463ff94e88 100644 (file)
@@ -4,17 +4,18 @@ IntPair: TYPE = [INT, INT, INT];
 IntTup: TYPE = [INT, INT, INT, INT,INT, INT];
 x : SET OF IntPair;
 y : SET OF IntPair;
-r : SET OF IntPair;
+r : SET OF IntTup;
 
 z : IntPair;
 ASSERT z = (1,2,3);
 zt : IntPair;
 ASSERT zt = (3,2,1);
-v : IntTup;
-ASSERT v = (1,2,3,3,2,1);
+
 
 ASSERT z IS_IN x;
 ASSERT zt IS_IN y;
-ASSERT v IS_IN (x PRODUCT y);
+ASSERT (1,1,1,1,1,1) IS_IN r;
+ASSERT r = (x PRODUCT y);
+
 
 CHECKSAT;
diff --git a/test/regress/regress0/sets/rels/rel_tc_10_1.cvc b/test/regress/regress0/sets/rels/rel_tc_10_1.cvc
new file mode 100644 (file)
index 0000000..67c4440
--- /dev/null
@@ -0,0 +1,18 @@
+% EXPECT: sat
+OPTION "logic" "ALL_SUPPORTED";
+IntPair: TYPE = [INT, INT];
+x : SET OF IntPair;
+y : SET OF IntPair;
+a: INT;
+b:INT;
+c:INT;
+d:INT;
+ASSERT a = c;
+ASSERT a = d;
+ASSERT (1, c) IS_IN x;
+ASSERT (2, d) IS_IN x;
+ASSERT (a, 5) IS_IN y;
+ASSERT y = (TCLOSURE x);
+ASSERT ((2, 5) IS_IN y);
+
+CHECKSAT;
diff --git a/test/regress/regress0/sets/rels/rel_tc_11.cvc b/test/regress/regress0/sets/rels/rel_tc_11.cvc
new file mode 100644 (file)
index 0000000..7edeb0e
--- /dev/null
@@ -0,0 +1,18 @@
+% EXPECT: unsat
+OPTION "logic" "ALL_SUPPORTED";
+IntPair: TYPE = [INT, INT];
+IntTup: TYPE = [INT, INT, INT, INT];
+x : SET OF IntPair;
+y : SET OF IntPair;
+z : SET OF IntTup;
+ASSERT (2, 3) IS_IN x;
+ASSERT (5, 3) IS_IN x;
+ASSERT (3, 9) IS_IN x;
+ASSERT z = (x PRODUCT y);
+ASSERT (1, 2, 3, 4) IS_IN z;
+ASSERT NOT ((5, 9) IS_IN x);
+ASSERT (3, 8) IS_IN y;
+ASSERT y = (TCLOSURE x);
+ASSERT NOT ((1, 2) IS_IN y);
+
+CHECKSAT;
diff --git a/test/regress/regress0/sets/rels/rel_tc_2_1.cvc b/test/regress/regress0/sets/rels/rel_tc_2_1.cvc
new file mode 100644 (file)
index 0000000..d5d42ea
--- /dev/null
@@ -0,0 +1,28 @@
+% EXPECT: sat
+OPTION "logic" "ALL_SUPPORTED";
+IntPair: TYPE = [INT, INT];
+x : SET OF IntPair;
+y : SET OF IntPair;
+ e: INT;
+
+a : IntPair;
+ASSERT a = (1, e);
+
+d : IntPair;
+ASSERT d = (e,5);
+
+ASSERT a IS_IN x;
+ASSERT d IS_IN x;
+ASSERT NOT ((1,1) IS_IN x);
+ASSERT NOT ((1,2) IS_IN x);
+ASSERT NOT ((1,3) IS_IN x);
+ASSERT NOT ((1,4) IS_IN x);
+ASSERT NOT ((1,5) IS_IN x);
+ASSERT NOT ((1,6) IS_IN x);
+ASSERT NOT ((1,7) IS_IN x);
+
+ASSERT y = TCLOSURE(x);
+
+ASSERT (1, 5) IS_IN y;
+
+CHECKSAT;
index 79ba3244848d32931d2291e1e773eb2e0b257127..39564c4cfae7cd122f8a8fb1714ad8e97317b137 100644 (file)
@@ -12,9 +12,11 @@ ASSERT (1, c) IS_IN x;
 ASSERT (1, d) IS_IN x;
 ASSERT (b, 1) IS_IN x;
 ASSERT (b = d);
-ASSERT (2,3) IS_IN ((x JOIN x) JOIN x);
-ASSERT NOT (2, 3) IS_IN (TRANSCLOSURE x);
-ASSERT y = (TRANSCLOSURE x);
+ASSERT (b > (d -1));
+ASSERT (b < (d+1));
+%ASSERT (2,3) IS_IN ((x JOIN x) JOIN x);
+%ASSERT NOT (2, 3) IS_IN (TCLOSURE x);
+ASSERT y = (TCLOSURE x);
 ASSERT NOT ((1, 1) IS_IN y);
 
 CHECKSAT;
diff --git a/test/regress/regress0/sets/rels/rel_tc_3_1.cvc b/test/regress/regress0/sets/rels/rel_tc_3_1.cvc
new file mode 100644 (file)
index 0000000..e48ba4e
--- /dev/null
@@ -0,0 +1,18 @@
+% EXPECT: unsat
+OPTION "logic" "ALL_SUPPORTED";
+IntPair: TYPE = [INT, INT];
+x : SET OF IntPair;
+y : SET OF IntPair;
+a: INT;
+b:INT;
+c:INT;
+d:INT;
+ASSERT (1, a) IS_IN x;
+ASSERT (1, c) IS_IN x;
+ASSERT (1, d) IS_IN x;
+ASSERT (b, 1) IS_IN x;
+ASSERT (b = d);
+
+ASSERT y = (TCLOSURE x);
+
+CHECKSAT;
diff --git a/test/regress/regress0/sets/rels/rel_tc_4.cvc b/test/regress/regress0/sets/rels/rel_tc_4.cvc
new file mode 100644 (file)
index 0000000..decd38f
--- /dev/null
@@ -0,0 +1,19 @@
+% EXPECT: unsat
+OPTION "logic" "ALL_SUPPORTED";
+IntPair: TYPE = [INT, INT];
+x : SET OF IntPair;
+y : SET OF IntPair;
+a: INT;
+b:INT;
+c:INT;
+d:INT;
+ASSERT (1, a) IS_IN x;
+ASSERT (1, c) IS_IN x;
+ASSERT (1, d) IS_IN x;
+ASSERT (b, 1) IS_IN x;
+ASSERT (b = d);
+ASSERT (2,b) IS_IN ((x JOIN x) JOIN x);
+ASSERT NOT (2, 1) IS_IN (TCLOSURE x);
+
+
+CHECKSAT;
diff --git a/test/regress/regress0/sets/rels/rel_tc_4_1.cvc b/test/regress/regress0/sets/rels/rel_tc_4_1.cvc
new file mode 100644 (file)
index 0000000..8ee75f7
--- /dev/null
@@ -0,0 +1,10 @@
+% EXPECT: sat
+OPTION "logic" "ALL_SUPPORTED";
+IntPair: TYPE = [INT, INT];
+x : SET OF IntPair;
+y : SET OF IntPair;
+z : SET OF IntPair;
+ASSERT y = ((TCLOSURE x) JOIN x);
+ASSERT NOT (y = TCLOSURE x);
+
+CHECKSAT;
diff --git a/test/regress/regress0/sets/rels/rel_tc_5_1.cvc b/test/regress/regress0/sets/rels/rel_tc_5_1.cvc
new file mode 100644 (file)
index 0000000..fd9caea
--- /dev/null
@@ -0,0 +1,9 @@
+% EXPECT: sat
+OPTION "logic" "ALL_SUPPORTED";
+IntPair: TYPE = [INT, INT];
+x : SET OF IntPair;
+y : SET OF IntPair;
+ASSERT y = (TCLOSURE x);
+ASSERT NOT ( y = ((x JOIN x) JOIN x));
+
+CHECKSAT;
diff --git a/test/regress/regress0/sets/rels/rel_tc_6.cvc b/test/regress/regress0/sets/rels/rel_tc_6.cvc
new file mode 100644 (file)
index 0000000..4570c5a
--- /dev/null
@@ -0,0 +1,9 @@
+% EXPECT: unsat
+OPTION "logic" "ALL_SUPPORTED";
+IntPair: TYPE = [INT, INT];
+x : SET OF IntPair;
+y : SET OF IntPair;
+ASSERT y = (TCLOSURE x);
+ASSERT NOT (((x JOIN x) JOIN x) <= y);
+
+CHECKSAT;
diff --git a/test/regress/regress0/sets/rels/rel_tc_7.cvc b/test/regress/regress0/sets/rels/rel_tc_7.cvc
new file mode 100644 (file)
index 0000000..15c0510
--- /dev/null
@@ -0,0 +1,10 @@
+% EXPECT: unsat
+OPTION "logic" "ALL_SUPPORTED";
+IntPair: TYPE = [INT, INT];
+x : SET OF IntPair;
+y : SET OF IntPair;
+ASSERT y = ((TCLOSURE x) JOIN x);
+ASSERT (1,2) IS_IN ((x JOIN x) JOIN x);
+ASSERT NOT (y <= TCLOSURE x);
+
+CHECKSAT;
diff --git a/test/regress/regress0/sets/rels/rel_tc_8.cvc b/test/regress/regress0/sets/rels/rel_tc_8.cvc
new file mode 100644 (file)
index 0000000..9f5879c
--- /dev/null
@@ -0,0 +1,10 @@
+% EXPECT: unsat
+OPTION "logic" "ALL_SUPPORTED";
+IntPair: TYPE = [INT, INT];
+x : SET OF IntPair;
+y : SET OF IntPair;
+
+ASSERT (2, 2) IS_IN (TCLOSURE x);
+ASSERT x = {}::SET OF IntPair;
+
+CHECKSAT;
diff --git a/test/regress/regress0/sets/rels/rel_tc_9_1.cvc b/test/regress/regress0/sets/rels/rel_tc_9_1.cvc
new file mode 100644 (file)
index 0000000..f884349
--- /dev/null
@@ -0,0 +1,23 @@
+% EXPECT: sat
+OPTION "logic" "ALL_SUPPORTED";
+IntPair: TYPE = [INT, INT];
+x : SET OF IntPair;
+y : SET OF IntPair;
+z : SET OF IntPair;
+w : SET OF IntPair;
+
+ASSERT z = (TCLOSURE x);
+ASSERT w = (x JOIN y);
+ASSERT (2, 2) IS_IN z;
+ASSERT (0,3) IS_IN y;
+ASSERT (-1,3) IS_IN y;
+ASSERT (1,3) IS_IN y;
+ASSERT (-2,3) IS_IN y;
+ASSERT (2,3) IS_IN y;
+ASSERT (3,3) IS_IN y;
+ASSERT (4,3) IS_IN y;
+ASSERT (5,3) IS_IN y;
+ASSERT NOT (2, 3) IS_IN (x JOIN y);
+ASSERT NOT (2,1) IS_IN x;
+
+CHECKSAT;
index 6da02ea2dc8726f523b5fd0182e744c94918e30a..49fb87569e3629d2d5eaa36814965934f1afe901 100644 (file)
@@ -4,6 +4,7 @@ IntPair: TYPE = [INT, INT];
 x : SET OF IntPair;
 y : SET OF IntPair;
 
+a: INT;
 z : IntPair;
 ASSERT z = (1,2);
 zt : IntPair;
@@ -12,7 +13,6 @@ ASSERT zt = (2,1);
 ASSERT z IS_IN x;
 ASSERT NOT (zt IS_IN (TRANSPOSE x));
 
-ASSERT z IS_IN y;
-ASSERT NOT (zt IS_IN (TRANSPOSE y));
+ASSERT y = (TRANSPOSE x);
 
 CHECKSAT;
index 11653de040d8efaf47284f873ebb5ddae383b5c5..fa6ee5069f488488e032a266a14475a8861199a1 100644 (file)
@@ -4,9 +4,11 @@ IntTup: TYPE = [INT, INT, INT];
 x : SET OF IntTup;
 y : SET OF IntTup;
 z : IntTup;
-ASSERT z = (1,2,3);
+a: INT;
+ASSERT z = (1,2,a);
 zt : IntTup;
-ASSERT zt = (3,2,1);
+ASSERT zt = (3,2,2);
 ASSERT z IS_IN x;
 ASSERT zt IS_IN (TRANSPOSE x);
+ASSERT y = (TRANSPOSE x);
 CHECKSAT;