int main() { VC vc1 = vc_createValidityChecker(); VC vc2 = vc_createValidityChecker(); vc_Destroy(vc1); vc_Destroy(vc2); }
TEST(push_pop, one) { VC vc = vc_createValidityChecker(); //vc_setFlags(vc, 'n'); vc_setFlags(vc, 'd'); //vc_setFlags(vc, 'p'); // vc_setFlags(vc,'v'); // vc_setFlags(vc,'s'); Type bv8 = vc_bvType(vc, 8); Expr a = vc_varExpr(vc, "a", bv8); Expr ct_0 = vc_bvConstExprFromInt(vc, 8, 0); Expr a_eq_0 = vc_eqExpr(vc, a, ct_0); int query = vc_query(vc, a_eq_0); ASSERT_FALSE(query); vc_push(vc); query = vc_query(vc, a_eq_0); ASSERT_FALSE(query); vc_pop(vc); vc_DeleteExpr(a_eq_0); vc_DeleteExpr(a); vc_Destroy(vc); }
TEST(push_pop, two) { VC vc = vc_createValidityChecker(); //vc_setFlags(vc, 'n'); vc_setFlags(vc, 'd'); //vc_setFlags(vc, 'p'); //vc_setFlags(vc, 'v'); //vc_setFlags(vc, 's'); vc_setFlags(vc, 'c'); vc_push(vc); Type bv8 = vc_bvType(vc, 8); Expr a = vc_varExpr(vc, "a", bv8); Expr ct_0 = vc_bvConstExprFromInt(vc, 8, 0); Expr a_eq_0 = vc_eqExpr(vc, a, ct_0); vc_assertFormula(vc, a_eq_0); vc_printAsserts(vc); vc_push(vc); Expr queryexp = vc_eqExpr(vc, a, vc_bvConstExprFromInt(vc, 8, 0)); //vc_printExpr(vc, queryexp); int query; query = vc_query(vc, queryexp); vc_printCounterExample(vc); vc_pop(vc); vc_pop(vc); ASSERT_TRUE(query); }
int main() { VC vc = vc_createValidityChecker(NULL); /* Prove that for integers x and y: * x > 0 AND y > 0 => 2x + y >= 3 */ Type integer = vc_intType(vc); Expr x = vc_varExpr(vc, "x", integer); Expr y = vc_varExpr(vc, "y", integer); Expr zero = vc_ratExpr(vc, 0, 1); Expr x_positive = vc_gtExpr(vc, x, zero); Expr y_positive = vc_gtExpr(vc, y, zero); Expr two = vc_ratExpr(vc, 2, 1); Expr twox = vc_multExpr(vc, two, x); Expr twox_plus_y = vc_plusExpr(vc, twox, y); Expr three = vc_ratExpr(vc, 3, 1); Expr twox_plus_y_geq_3 = vc_geExpr(vc, twox_plus_y, three); Expr formula = vc_impliesExpr(vc, vc_andExpr(vc, x_positive, y_positive), twox_plus_y_geq_3); char* formulaString = vc_printExprString(vc, formula); printf("Checking validity of formula %s with CVC4.\n", formulaString); printf("CVC4 should return 1 (meaning VALID).\n"); printf("Result from CVC4 is: %d\n", vc_query(vc, formula)); free(formulaString); return 0; }
TEST(push_pop, one) { VC vc = vc_createValidityChecker(); vc_setFlags(vc, 'n'); vc_setFlags(vc, 'd'); vc_setFlags(vc, 'p'); // vc_setFlags(vc,'v'); // vc_setFlags(vc,'s'); Type bv8 = vc_bvType(vc, 8); Expr a = vc_varExpr(vc, "a", bv8); Expr ct_0 = vc_bvConstExprFromInt(vc, 8, 0); Expr a_eq_0 = vc_eqExpr(vc, a, ct_0); int query = vc_query(vc, a_eq_0); printf("query = %d\n", query); vc_push(vc); query = vc_query(vc, a_eq_0); vc_pop(vc); printf("query = %d\n", query); vc_DeleteExpr(a_eq_0); vc_DeleteExpr(a); vc_Destroy(vc); // FIXME: Actually test something // ASSERT_TRUE(false && "FIXME: Actually test something"); }
TEST(getbv, INT64) { ASSERT_EQ(64, sizeof(uint64_t) * 8); for (uint64_t j = 1; j < UINT64_MAX; j |= (j << 1)) { VC vc = vc_createValidityChecker(); ASSERT_NE(vc, (void*)0); vc_setFlags(vc, 'n'); vc_setFlags(vc, 'd'); vc_setFlags(vc, 'p'); vc_setFlags(vc, 'x'); Type bv8 = vc_bvType(vc, 8); // Why do we need this? ASSERT_NE(bv8, (void*)0); Expr a = vc_bvCreateMemoryArray(vc, "a"); // Why do we need this? ASSERT_NE(a, (void*)0); Expr index_3 = vc_bvConstExprFromLL(vc, 64, j); ASSERT_NE(index_3, (void*)0); uint64_t print_index = getBVUnsignedLongLong(index_3); ASSERT_EQ(print_index, j); vc_DeleteExpr(a); vc_DeleteExpr(index_3); vc_Destroy(vc); } }
int main() { VC vc = vc_createValidityChecker(); vc_setFlags(vc,'n'); vc_setFlags(vc,'d'); vc_setFlags(vc,'p'); vc_setFlags(vc,'m'); Expr q; Expr asserts; const char* s = "(benchmark fg.smt\n" ":logic QF_AUFBV\n" ":extrafuns ((x_32 BitVec[32]))\n" ":extrafuns ((y32 BitVec[32]))\n" ":assumption true\n)\n"; vc_parseMemExpr(vc,s,&q,&asserts); vc_printExpr(vc, q); vc_printExpr(vc, asserts); printf("\n"); vc_Destroy(vc); return 0; }
int main() { VC vc = vc_createValidityChecker(); vc_setFlags(vc,'n'); vc_setFlags(vc,'c'); vc_setFlags(vc,'d'); vc_setFlags(vc,'p'); Type bv8 = vc_bvType(vc, 8); Expr a = vc_varExpr(vc, "a", bv8); Expr ct_0 = vc_bvConstExprFromInt(vc, 8, 0); Expr a_eq_0 = vc_eqExpr(vc, a, ct_0); /* Query 1 */ vc_push(vc); int query = vc_query(vc, a_eq_0); vc_pop(vc); printf("query = %d\n", query); /* Query 2 */ Expr a_neq_0 = vc_notExpr(vc, a_eq_0); vc_push(vc); query = vc_query(vc, a_neq_0); vc_pop(vc); printf("query = %d\n", query); vc_Destroy(vc); return 0; }
void test5() { Flags flags = vc_createFlags(); VC vc; Type r; Expr x, xEQx, p; // vc_setBoolFlag(flags, "proofs", TRUE); vc = vc_createValidityChecker(flags); r = vc_realType(vc); x = vc_varExpr(vc, "x", r); xEQx = vc_eqExpr(vc, x, x); vc_query(vc, xEQx); // p = vc_getProof(vc); // vc_printExpr(vc, p); vc_deleteType(r); vc_deleteExpr(x); vc_deleteExpr(xEQx); // vc_deleteExpr(p); vc_destroyValidityChecker(vc); vc_deleteFlags(flags); }
void test6() { Flags flags = vc_createFlags(); VC vc; Expr p, p3, p32; char *x; // vc_setBoolFlag(flags, "proofs", 1); vc_setBoolFlag(flags, "dagify-exprs", 0); vc = vc_createValidityChecker(flags); // p = vc_getProofOfFile(vc,"benchmarks/add1.cvc"); check_error("Failed to check file"); // vc_deleteExpr(p); vc_destroyValidityChecker(vc); vc_deleteFlags(flags); /* p3 = getChild(p,3); */ /* p32 = getChild(p3,2); */ /* if (isLambda(p32)) */ /* printf("The expression is Lambda\n"); */ /* else */ /* printf("The expression is not Lambda\n"); */ /* x = exprString(p32); */ /* printf("Test expr,%s",x);*/ }
int main() { VC vc = vc_createValidityChecker(); vc_setFlags('n'); vc_setFlags('d'); //vc_setFlags('p'); Type bv8 = vc_bvType(vc, 8); Expr a = vc_bvCreateMemoryArray(vc, "a"); Expr index_3 = vc_bvConstExprFromInt(vc, 32, 3); Expr a_of_0 = vc_readExpr(vc, a, index_3); int i; for (i = 2; i >= 0; i--) a_of_0 = vc_bvConcatExpr(vc, a_of_0, vc_readExpr(vc, a, vc_bvConstExprFromInt(vc, 32, i))); Expr ct_5 = vc_bvConstExprFromInt(vc, 32, 5); Expr a_of_0_div_5 = vc_bvDivExpr(vc, 32, a_of_0, ct_5); Expr a_of_0_div_5_eq_5 = vc_eqExpr(vc, a_of_0_div_5, ct_5); vc_printExpr(vc, a_of_0_div_5_eq_5); printf("\n"); /* Query 1 */ vc_push(vc); int query = vc_query(vc, a_of_0_div_5_eq_5); vc_pop(vc); printf("query = %d\n", query); vc_assertFormula(vc, a_of_0_div_5_eq_5); vc_printExpr(vc, a_of_0_div_5_eq_5); /* query(false) */ vc_push(vc); query = vc_query(vc, vc_falseExpr(vc)); vc_pop(vc); printf("query = %d\n", query); assert(!query); assert(vc_counterexample_size(vc)); int* a_val = (int*) malloc(sizeof *a_val); char *p = (char*) a_val; //a_of_1 = vc_simplify(vc, a_of_1); // BUG here for (i=0; i<=3; i++) { Expr elem = vc_readExpr(vc, a, vc_bvConstExprFromInt(vc, 32, i)); Expr ce = vc_getCounterExample(vc, elem); unsigned long long v = getBVUnsigned(ce); fprintf(stderr, "a[%d] = %ld\n", i, v); *p = v; p++; } printf("a = %d\n", *a_val); assert((*a_val)/5 == 5); vc_Destroy(vc); }
int main() { for(int j=0;j < 3; j++) { VC vc = vc_createValidityChecker(); vc_setFlags(vc,'n'); vc_setFlags(vc,'d'); vc_setFlags(vc,'p'); vc_setFlags(vc,'x'); Type bv8 = vc_bvType(vc, 8); Expr a = vc_bvCreateMemoryArray(vc, "a"); Expr index_3 = vc_bvConstExprFromLL(vc, 32, 3); Expr a_of_0 = vc_readExpr(vc, a, index_3); int i; for (i = 2; i >= 0; i--) a_of_0 = vc_bvConcatExpr(vc, a_of_0, vc_readExpr(vc, a, vc_bvConstExprFromInt(vc, 32, i))); Expr cast_32_to_8 = vc_bvExtract(vc, a_of_0, 7, 0); Expr cast_8_to_32 = vc_bvSignExtend(vc, cast_32_to_8, 32); vc_printExpr(vc, cast_8_to_32); cast_8_to_32 = vc_simplify(vc, cast_8_to_32); vc_Destroy(vc); } }
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); }
TEST(multiple_queries,one) { VC vc = vc_createValidityChecker(); vc_setFlags(vc,'n'); vc_setFlags(vc,'c'); vc_setFlags(vc,'d'); vc_setFlags(vc,'p'); Type bv8 = vc_bvType(vc, 8); Expr a = vc_varExpr(vc, "a", bv8); Expr ct_0 = vc_bvConstExprFromInt(vc, 8, 0); Expr a_eq_0 = vc_eqExpr(vc, a, ct_0); /* Query 1 */ vc_push(vc); int query = vc_query(vc, a_eq_0); vc_pop(vc); printf("query = %d\n", query); /* Query 2 */ Expr a_neq_0 = vc_notExpr(vc, a_eq_0); vc_push(vc); query = vc_query(vc, a_neq_0); vc_pop(vc); printf("query = %d\n", query); vc_Destroy(vc); ASSERT_TRUE(false && "FIXME: Actually test something"); }
TEST(Leaks, boolean) { VC vc; vc = vc_createValidityChecker(); Expr x = vc_varExpr(vc, "x", vc_boolType(vc)); Expr y = vc_varExpr(vc, "y", vc_boolType(vc)); Expr x_and_y = vc_andExpr(vc, x, y); Expr not_x_and_y = vc_notExpr(vc, x_and_y); Expr not_x = vc_notExpr(vc, x); Expr not_y = vc_notExpr(vc, y); Expr not_x_or_not_y = vc_orExpr(vc, not_x, not_y); Expr equiv = vc_iffExpr(vc, not_x_and_y, not_x_or_not_y); printf("%d\n", vc_query(vc, equiv)); vc_DeleteExpr(equiv); vc_DeleteExpr(not_x_or_not_y); vc_DeleteExpr(not_y); vc_DeleteExpr(not_x); vc_DeleteExpr(not_x_and_y); vc_DeleteExpr(x_and_y); vc_DeleteExpr(y); vc_DeleteExpr(x); vc_Destroy(vc); }
STPSolverImpl::STPSolverImpl(bool _useForkedSTP, bool _optimizeDivides) : vc(vc_createValidityChecker()), builder(new STPBuilder(vc, _optimizeDivides)), timeout(0.0), useForkedSTP(_useForkedSTP), runStatusCode(SOLVER_RUN_STATUS_FAILURE) { assert(vc && "unable to create validity checker"); assert(builder && "unable to create STPBuilder"); // In newer versions of STP, a memory management mechanism has been // introduced that automatically invalidates certain C interface // pointers at vc_Destroy time. This caused double-free errors // due to the ExprHandle destructor also attempting to invalidate // the pointers using vc_DeleteExpr. By setting EXPRDELETE to 0 // we restore the old behaviour. vc_setInterfaceFlags(vc, EXPRDELETE, 0); make_division_total(vc); vc_registerErrorHandler(::stp_error_handler); if (useForkedSTP) { assert(shared_memory_id == 0 && "shared memory id already allocated"); shared_memory_id = shmget(IPC_PRIVATE, shared_memory_size, IPC_CREAT | 0700); if (shared_memory_id < 0) llvm::report_fatal_error("unable to allocate shared memory region"); shared_memory_ptr = (unsigned char *)shmat(shared_memory_id, NULL, 0); if (shared_memory_ptr == (void *)-1) llvm::report_fatal_error("unable to attach shared memory region"); shmctl(shared_memory_id, IPC_RMID, NULL); } }
void test2() { VC vc = vc_createValidityChecker(NULL); // Check x = y -> g(x,y) = g(y,x) Type r = vc_realType(vc); Expr x = vc_varExpr(vc, "x", r); Expr y = vc_varExpr(vc, "y", r); Type realxreal2real = vc_funType2(vc, r, r, r); Op g = vc_createOp(vc, "g", realxreal2real); Expr gxy = vc_funExpr2(vc, g, x, y); Expr gyx = vc_funExpr2(vc, g, y, x); Expr xeqy = vc_eqExpr(vc, x, y); Expr gxyeqgyx = vc_eqExpr(vc, gxy, gyx); Expr e = vc_impliesExpr(vc, xeqy, gxyeqgyx); Type v[2]; Op h; Expr hxy, hyx, hxyeqhyx; int res; res = check(vc, e); FatalAssert(res == 1, "Expected Valid"); vc_deleteType(realxreal2real); vc_deleteOp(g); vc_deleteExpr(gxy); vc_deleteExpr(gyx); vc_deleteExpr(gxyeqgyx); vc_deleteExpr(e); v[0] = r; v[1] = r; realxreal2real = vc_funTypeN(vc, v, r, 2); h = vc_createOp(vc, "h", realxreal2real); hxy = vc_funExpr2(vc, h, x, y); hyx = vc_funExpr2(vc, h, y, x); hxyeqhyx = vc_eqExpr(vc, hxy, hyx); e = vc_impliesExpr(vc, xeqy, hxyeqhyx); res = check(vc, e); FatalAssert(res == 1, "Expected Valid"); vc_deleteType(r); vc_deleteExpr(x); vc_deleteExpr(y); vc_deleteType(realxreal2real); vc_deleteExpr(hxy); vc_deleteExpr(hxyeqhyx); vc_deleteExpr(e); vc_destroyValidityChecker(vc); }
TEST(getbv, INT32) { ASSERT_EQ(32, sizeof(int32_t) * 8); for (uint32_t j = 1; j < UINT32_MAX; j |= (j << 1)) { VC vc = vc_createValidityChecker(); ASSERT_NE(vc, (void*)0); vc_setFlags(vc, 'n'); vc_setFlags(vc, 'd'); vc_setFlags(vc, 'p'); vc_setFlags(vc, 'x'); Type bv8 = vc_bvType(vc, 8); ASSERT_NE(bv8, (void*)0); Expr a = vc_bvCreateMemoryArray(vc, "a"); // Why do we need this? ASSERT_NE(a, (void*)0); Expr index_3 = vc_bvConstExprFromInt(vc, 32, j); ASSERT_NE(index_3, (void*)0); uint32_t print_index = getBVUnsignedLongLong(index_3); ASSERT_EQ(print_index, j); vc_DeleteExpr(a); // vc_DeleteExpr(index_3); - Urgh... STP's C API is inconsistent regarding // what we should delete ourselves and what vc_Destroy() will do for us. vc_Destroy(vc); } }
void initialize() { //hashmap_init(&id2Constraint, 0, NULL, NULL, NULL, NULL); hashmap_init(&vars, 0, hash_str, cmp_str, NULL, NULL); linkedlist_init(&exprPool, 0, NULL); stack_init(&pcids, 0, NULL); vc = vc_createValidityChecker(NULL); intType = vc_intType(vc); realType = vc_realType(vc); }
int main () { VC vc; int query_result; int count = 0; vc = vc_createValidityChecker (); Type type64 = vc_boolType (vc); vc_Destroy (vc); }
TEST(stp_bool, one) { VC vc; int query_result; int count = 0; vc = vc_createValidityChecker(); Type type64 = vc_boolType(vc); vc_Destroy(vc); // FIXME: Actually test something // ASSERT_TRUE(false && "FIXME: Actually test something"); }
JNIEXPORT void JNICALL Java_gov_nasa_jpf_symbolic_dp_NativeInterface_initializeCVCL (JNIEnv *env, jclass cls) { // initialize stuff hashmap_init(&vars, 0, hash_str, cmp_str, NULL, NULL); linkedlist_init(&exprPool, 0, NULL); //flags = vc_createFlags(); //vc_setStringFlag(flags, "dump-log", "test1.cvc"); //vc = vc_createValidityChecker(flags); vc = vc_createValidityChecker(NULL); intType = vc_intType(vc); realType = vc_realType(vc); }
int main() { VC vc = vc_createValidityChecker(); vc_setFlags(vc,'n'); vc_setFlags(vc,'d'); vc_setFlags(vc,'p'); Expr ct_3 = vc_bvConstExprFromStr(vc, "00000000000000000000000000000011"); vc_printExpr(vc, ct_3); printf("\n"); ct_3 = vc_bvConstExprFromInt(vc, 32, 5); vc_printExpr(vc, ct_3); printf("\n"); vc_Destroy(vc); }
TEST(multiprint, one) { VC vc = vc_createValidityChecker(); VC vc2 = vc_createValidityChecker(); vc_setFlags(vc, 'n'); vc_setFlags(vc, 'd'); vc_setFlags(vc, 'p'); Expr ct_3 = vc_bvConstExprFromStr(vc, "00000000000000000000000000000011"); vc_printExpr(vc, ct_3); printf("\n"); ct_3 = vc_bvConstExprFromInt(vc, 32, 5); vc_printExpr(vc, ct_3); printf("\n"); vc_Destroy(vc); vc_setFlags(vc2, 'n'); vc_setFlags(vc2, 'd'); vc_setFlags(vc2, 'p'); ct_3 = vc_bvConstExprFromStr(vc2, "00000000000000000000000000000011"); vc_printExpr(vc2, ct_3); printf("\n"); ct_3 = vc_bvConstExprFromInt(vc2, 32, 5); vc_printExpr(vc2, ct_3); printf("\n"); vc_Destroy(vc2); // 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"); }
void test11() { Flags flags = vc_createFlags(); VC vc = vc_createValidityChecker(flags); Type a = vc_createType(vc, "a"); Type aa = vc_funType1(vc, a, a); Op f = vc_createOp(vc, "f", aa); Expr x = vc_varExpr(vc, "x", a); Expr fx = vc_funExpr1(vc, f, x); Expr ffx = vc_funExpr1(vc, f, fx); Expr e = vc_eqExpr(vc, x, fx); Expr expectE = vc_eqExpr(vc, fx, ffx); Expr newE = vc_substExpr(vc, e, &x, 1, &fx, 1); FatalAssert(expectE == newE, "Expected equal"); vc_destroyValidityChecker(vc); }
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); }
TEST(parsefile,CVC) { VC vc = vc_createValidityChecker(); vc_setFlags(vc,'n'); vc_setFlags(vc,'d'); vc_setFlags(vc,'p'); // CVC_FILE is a macro that expands to a file path Expr c = vc_parseExpr(vc, CVC_FILE); // FIXME: We shouldn't trigger an exit on failure. Libraries DON'T DO THAT! vc_printExpr(vc, c); vc_DeleteExpr(c); printf("\n"); vc_Destroy(vc); ASSERT_TRUE(false && "FIXME: We should actually test something!"); }
// 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"); }
// FIXME: Pick a sensible testname that actually means something! TEST(array_cvcl02,one) { VC vc = vc_createValidityChecker(); vc_setFlag(vc,'n'); vc_setFlag(vc,'d'); vc_setFlag(vc,'p'); Expr cvcl_array = vc_varExpr1(vc, "a",32,32); Expr i = vc_varExpr1(vc, "i", 0, 8); Expr i32 = vc_bvConcatExpr(vc, vc_bvConstExprFromStr(vc, "000000000000000000000000"), i); Expr no_underflow = vc_bvLeExpr(vc, vc_bvConstExprFromInt(vc, 32, 0), i32); Expr no_overflow = vc_bvLeExpr(vc, i32, vc_bvConstExprFromInt(vc, 32, 9)); Expr in_bounds = vc_andExpr(vc, no_underflow, no_overflow); Expr a_of_i = vc_bvSignExtend(vc, vc_readExpr(vc,cvcl_array,i32), 32); Expr a_of_i_eq_11 = vc_eqExpr(vc, vc_bvConcatExpr(vc,i32,a_of_i), vc_bvConstExprFromInt(vc, 64, 11)); vc_assertFormula(vc, in_bounds); vc_assertFormula(vc, a_of_i_eq_11); vc_query(vc, vc_falseExpr(vc)); long long v; Expr pre = vc_bvConstExprFromInt(vc,24,0); int j; for(j=0;j<10;j++) { Expr exprj = vc_bvConstExprFromInt(vc,8,j); Expr index = vc_bvConcatExpr(vc, pre, exprj); index = vc_simplify(vc,index); Expr a_of_j = vc_readExpr(vc, cvcl_array, index); Expr ce = vc_getCounterExample(vc,a_of_j); } vc_Destroy(vc); //vc_printCounterExample(vc); // FIXME: Actually test something //ASSERT_TRUE(false && "FIXME: Actually test something"); }