$(MAKE) regresseric
$(MAKE) regresshistar
$(MAKE) regresscrypto
+ $(MAKE) unit_test
$(MAKE) regresscapi
+
+# Checks that simplifications are working.
+.PHONY: unit_test
+unit_test:
+ cd unit_test ; ./unit_test.sh
# Runs the basic tests in tests/
.PHONY: check
public static List<String> arrays = new ArrayList<String>();\r
static Random r = new Random();\r
\r
- // When we get to a nesting of 5, start to return leaf nodes (like symbols).\r
- static int MAX_DEPTH = 8;\r
- \r
+ static int MAX_DEPTH;\r
+\r
public static void main(String[] args)\r
{\r
bits.add("b1");\r
arrays.add("a2");\r
arrays.add("a3");\r
\r
+ // When we get to the nesting depth, start to return leaf nodes (like symbols).\r
+ MAX_DEPTH = r.nextInt(15) +1;\r
+\r
randomGenerate();\r
}\r
\r
\r
for (String s : bits)\r
{\r
- output.append(":extrafuns (( " + s + " BitVec[10]))\n");\r
+ output.append(":extrafuns (( " + s + " BitVec[4]))\n");\r
}\r
\r
for (String s : arrays)\r
{\r
- output.append(":extrafuns (( " + s + " Array[10:10]))\n");\r
+ output.append(":extrafuns (( " + s + " Array[4:4]))\n");\r
}\r
\r
- for (int i = 0; i < 10; i++)\r
+ int top = r.nextInt(10);\r
+ for (int i = 0; i < top+1; i++)\r
output.append(":assumption " + generateProp(0) + "\n");\r
\r
output.append(":formula true \n )\n");\r
case 1:\r
return "(= " + generateBit(depth) + " " + generateBit(depth) + " )";\r
case 2: \r
- return "(and " + generateProp(depth) + " " + generateProp(depth) + " )";\r
+ return "(or " + generateProp(depth) + " " + generateProp(depth) + " )";\r
case 3: \r
return "(bvslt " + generateBit(depth) + " " + generateBit(depth) + " )";\r
case 4: \r
--- /dev/null
+
+(set-logic QF_BV)
+(set-info :smt-lib-version 2.0)
+(set-info :category "check")
+(set-info :status unsat)
+(declare-fun v0 () (_ BitVec 1))
+
+(assert (= (concat (_ bv0 1) v0) (_ bv2 2)))
+
+
+
+
+(check-sat)
+(exit)
+
+
+;1126:(EQ
+; 24:0b01010
+; 1124:(BVCONCAT
+; 114:0b000
+; 1108:array_a2_1))
--- /dev/null
+
+(set-logic QF_BV)
+(set-info :smt-lib-version 2.0)
+(set-info :category "check")
+(set-info :status sat)
+(declare-fun v0 () (_ BitVec 2))
+
+(assert (bvsgt (_ bv0 2) (bvnot (bvand (_ bv1 2) v0)) ))
+
+
+
+
+(check-sat)
+(exit)
+
+; Something like this..
+;1498:(BVSGT
+; 1496:(BVCONCAT
+; 538:0b00000000000000
+; 1494:(ITE
+; 1486:(BVGE
+; 1482:(BVSX
+; 1480:array_a7_0
+; 62:0x00000008)
+; 12:v0)
+; 54:0b1
+; 56:0b0))
+; 286:(BVNEG
+; 284:(BVAND
+; 274:0b000000001001110
+; 20:v4)))
--- /dev/null
+(set-logic QF_BV)
+(set-info :smt-lib-version 2.0)
+(set-info :category "check")
+(set-info :status sat)
+(declare-fun v0 () (_ BitVec 2))
+(declare-fun v1 () (_ BitVec 2))
+(declare-fun v2 () (_ BitVec 2))
+
+(assert (= (bvor v0 v0) (_ bv0 2)))
+(assert (= (bvxor v1 v1) (_ bv0 2)))
+
+(check-sat)
+(exit)
--- /dev/null
+(set-logic QF_BV)
+(set-info :smt-lib-version 2.0)
+(set-info :category "check")
+(set-info :status sat)
+(declare-fun v0 () (_ BitVec 2))
+(declare-fun v1 () (_ BitVec 2))
+(assert (= (bvor v0 v0) (_ bv0 2)))
+(assert (= (bvor v1 (bvnot v1)) (_ bv3 2)))
+
+(check-sat)
+(exit)
--- /dev/null
+(set-logic QF_BV)
+(set-info :smt-lib-version 2.0)
+(set-info :category "check")
+(set-info :status sat)
+(declare-fun v0 () (_ BitVec 2))
+(assert (bvsge v0 v0))
+(check-sat)
+(exit)
--- /dev/null
+(set-logic QF_BV)
+(set-info :smt-lib-version 2.0)
+(set-info :category "check")
+(set-info :status unsat)
+(declare-fun p () Bool)
+(assert (bvsgt (_ bv4 3) (ite p (_ bv7 3)(_ bv0 3) ) ) )
+(check-sat)
+(exit)
--- /dev/null
+(set-logic QF_BV)
+(set-info :smt-lib-version 2.0)
+(set-info :category "check")
+(set-info :status sat)
+(declare-fun v0 () (_ BitVec 2))
+(declare-fun v1 () (_ BitVec 2))
+(declare-fun v2 () (_ BitVec 2))
+
+(assert (= (bvshl (_ bv0 2) v0) (_ bv0 2)))
+(check-sat)
+(exit)
--- /dev/null
+(set-logic QF_BV)
+(set-info :smt-lib-version 2.0)
+(set-info :category "check")
+(set-info :status sat)
+(declare-fun v0 () (_ BitVec 2))
+
+(assert (bvule (bvxor v0 (_ bv0 2)) v0))
+
+
+
+(check-sat)
+(exit)
+
--- /dev/null
+p cnf 1 2
+1 0
+1 0
--- /dev/null
+#!/bin/bash
+
+#Each file should be simplified down to either true or false, so the CNF generated should
+#be very small if simplifications are working as they should.
+
+rm output_*.cnf
+
+files=`ls -1 -S *.smt2`
+for f in $files; do
+ stp --output-CNF $f
+ cnf=`cat output_*.cnf | wc -l`
+ if [ $cnf -gt 3 ] ; then
+ exit 10
+ fi
+
+done
+