int main(int argc, char *argv[]) { VC vc = vc_createValidityChecker(); vc_setFlags('n'); vc_setFlags('d'); vc_setFlags('p'); Expr nresp1 = vc_varExpr(vc, "nresp1", vc_bv32Type(vc)); Expr packet_get_int0 = vc_varExpr(vc, "packet_get_int0", vc_bv32Type(vc)); Expr exprs[] = { // nresp1 == packet_get_int0 vc_eqExpr(vc, nresp1, packet_get_int0), // nresp1 > 0 vc_bvGtExpr(vc, nresp1, vc_bv32ConstExprFromInt(vc, 0)) }; Expr res = vc_andExprN(vc, exprs, sizeof(exprs)/sizeof(exprs[0])); vc_printExpr(vc, res); int x = vc_query(vc, res); printf("vc_query result = %d\n", x); vc_printCounterExample(vc); Expr cex = vc_getCounterExample(vc, res); //vc_printExpr(vc, cex); }
// FIXME: this test name sucks! TEST(x,one) { VC vc = vc_createValidityChecker(); vc_setFlags(vc,'n'); vc_setFlags(vc,'d'); vc_setFlags(vc,'p'); Expr nresp1 = vc_varExpr(vc, "nresp1", vc_bv32Type(vc)); Expr packet_get_int0 = vc_varExpr(vc, "packet_get_int0", vc_bv32Type(vc)); Expr sz = vc_varExpr(vc, "sz", vc_bv32Type(vc)); Expr d0,d1,d2; Expr exprs[] = { // nresp1 == packet_get_int0 vc_eqExpr(vc, nresp1, packet_get_int0), // nresp1 > 0 vc_bvGtExpr(vc, nresp1, vc_bv32ConstExprFromInt(vc, 0)), // sz == nresp1 * 4 vc_eqExpr(vc, sz, d0=vc_bv32MultExpr(vc, nresp1, vc_bv32ConstExprFromInt(vc, 4))), // sz > nresp1 || sz < 0 vc_orExpr(vc, d1=vc_sbvGeExpr(vc, sz, nresp1), d2=vc_sbvLtExpr(vc, sz, vc_bv32ConstExprFromInt(vc, 0))), }; Expr res = vc_andExprN(vc, exprs, sizeof(exprs)/sizeof(exprs[0])); //vc_printExpr(vc, res); vc_query(vc,res); vc_DeleteExpr(nresp1); vc_DeleteExpr(packet_get_int0); vc_DeleteExpr(sz); vc_DeleteExpr(d0); vc_DeleteExpr(d1); vc_DeleteExpr(d2); vc_DeleteExpr(exprs[0]); vc_DeleteExpr(exprs[1]); vc_DeleteExpr(exprs[2]); vc_DeleteExpr(exprs[3]); vc_DeleteExpr(res); vc_Destroy(vc); // FIXME: Actually test something //ASSERT_TRUE(false && "FIXME: Actually test something"); }
TEST(sbdiv, one) { VC vc = vc_createValidityChecker(); vc_setFlags(vc, 'p'); Type int_type = vc_bv32Type(vc); Expr zero = vc_bv32ConstExprFromInt(vc, 0); Expr int_max = vc_bvConstExprFromInt(vc, 32, 0x7fffffff); Expr a = vc_varExpr(vc, "a", int_type); Expr b = vc_varExpr(vc, "b", int_type); vc_assertFormula(vc, vc_sbvGtExpr(vc, b, zero)); vc_assertFormula(vc, vc_sbvLeExpr(vc, a, vc_sbvDivExpr(vc, 32, int_max, b))); std::cout << vc_query(vc, vc_falseExpr(vc)) << std::endl; // FIXME: Actually test something // ASSERT_TRUE(false && "FIXME: Actually test something"); }
TEST(sbdiv, one) { VC vc = vc_createValidityChecker(); //vc_setFlags(vc, 'p'); vc_setFlags(vc, 'd'); Type int_type = vc_bv32Type(vc); Expr zero = vc_bv32ConstExprFromInt(vc, 0); Expr int_max = vc_bvConstExprFromInt(vc, 32, 0x7fffffff); Expr a = vc_varExpr(vc, "a", int_type); Expr b = vc_varExpr(vc, "b", int_type); vc_assertFormula(vc, vc_sbvGtExpr(vc, b, zero)); vc_assertFormula(vc, vc_sbvLeExpr(vc, a, vc_sbvDivExpr(vc, 32, int_max, b))); int query = vc_query(vc, vc_falseExpr(vc)); ASSERT_FALSE(query); }
value caml_vc_bv32ConstExprFromInt(value vc, value i) { CAMLparam2(vc,i); CAMLreturn(alloc_Expr(vc_bv32ConstExprFromInt(VC_val(vc),Int_val(i)))); }