34 std::vector<std::string> special_names;
35 info(
"Saving bug for op ", instruction_name);
51 for (uint i = 0; i < witness.size(); i++) {
65TEST(acir_formal_proofs, uint_terms_add)
67 std::string TESTNAME =
"Binary::Add_Unsigned_128_Unsigned_128";
83TEST(acir_formal_proofs, uint_terms_and)
85 std::string TESTNAME =
"Binary::And_Unsigned_128_Unsigned_128";
101TEST(acir_formal_proofs, uint_terms_and32)
103 std::string TESTNAME =
"Binary::And_Unsigned_32_Unsigned_32";
118TEST(acir_formal_proofs, uint_terms_div)
120 std::string TESTNAME =
"Binary::Div_Unsigned_128_Unsigned_128";
138TEST(acir_formal_proofs, uint_terms_eq)
140 std::string TESTNAME =
"Binary::Eq_Unsigned_128_Unsigned_128";
168TEST(acir_formal_proofs, uint_terms_lt)
170 std::string TESTNAME =
"Binary::Lt_Unsigned_128_Unsigned_128";
175 bool res1 =
verify_lt(&solver1, circuit1);
184 bool res2 =
verify_gt(&solver2, circuit2);
196TEST(acir_formal_proofs, uint_terms_mod)
198 std::string TESTNAME =
"Binary::Mod_Unsigned_128_Unsigned_128";
215TEST(acir_formal_proofs, uint_terms_mul)
217 std::string TESTNAME =
"Binary::Mul_Unsigned_128_Unsigned_128";
232TEST(acir_formal_proofs, uint_terms_or)
234 std::string TESTNAME =
"Binary::Or_Unsigned_128_Unsigned_128";
250TEST(acir_formal_proofs, uint_terms_or32)
252 std::string TESTNAME =
"Binary::Or_Unsigned_32_Unsigned_32";
269TEST(acir_formal_proofs, uint_terms_shl8)
271 std::string TESTNAME =
"Binary::Shl_Unsigned_8_Unsigned_8";
288TEST(acir_formal_proofs, uint_terms_shl32)
290 std::string TESTNAME =
"Binary::Shl_Unsigned_32_Unsigned_8";
307TEST(acir_formal_proofs, uint_terms_shr)
309 std::string TESTNAME =
"Binary::Shr_Unsigned_64_Unsigned_8";
325TEST(acir_formal_proofs, uint_terms_sub)
327 std::string TESTNAME =
"Binary::Sub_Unsigned_128_Unsigned_128";
342TEST(acir_formal_proofs, uint_terms_xor)
344 std::string TESTNAME =
"Binary::Xor_Unsigned_128_Unsigned_128";
359TEST(acir_formal_proofs, uint_terms_xor32)
361 std::string TESTNAME =
"Binary::Xor_Unsigned_32_Unsigned_32";
377TEST(acir_formal_proofs, uint_terms_not)
379 std::string TESTNAME =
"Not_Unsigned_128";
395TEST(acir_formal_proofs, field_terms_add)
397 std::string TESTNAME =
"Binary::Add_Field_0_Field_0";
413TEST(acir_formal_proofs, field_terms_div)
415 std::string TESTNAME =
"Binary::Div_Field_0_Field_0";
433TEST(acir_formal_proofs, field_terms_eq)
435 std::string TESTNAME =
"Binary::Eq_Field_0_Field_0";
461TEST(acir_formal_proofs, field_terms_mul)
463 std::string TESTNAME =
"Binary::Mul_Field_0_Field_0";
479TEST(acir_formal_proofs, integer_terms_div)
481 std::string TESTNAME =
"Binary::Div_Signed_64_Signed_64";
496TEST(acir_formal_proofs, non_uniqueness_for_truncate_field_to_u64)
498 std::string TESTNAME =
"Truncate_Field_0";
509TEST(acir_formal_proofs, non_uniqueness_for_truncate_u64_to_u8)
511 std::string TESTNAME =
"Truncate_Unsigned_64";
522TEST(acir_formal_proofs, non_uniqueness_for_truncate_i64_to_u8)
524 std::string TESTNAME =
"Truncate_Signed_64";
535TEST(AcirFormalProofs, SignedAdd)
537 std::string TESTNAME =
"Binary::Add_Signed_64_Signed_64";
552TEST(AcirFormalProofs, SignedAnd)
554 std::string TESTNAME =
"Binary::And_Signed_64_Signed_64";
569TEST(AcirFormalProofs, SignedEq)
571 std::string TESTNAME =
"Binary::Eq_Signed_64_Signed_64";
591TEST(AcirFormalProofs, SignedMod)
593 std::string TESTNAME =
"Binary::Mod_Signed_64_Signed_64";
608TEST(AcirFormalProofs, SignedMul)
610 std::string TESTNAME =
"Binary::Mul_Signed_64_Signed_64";
625TEST(AcirFormalProofs, SignedOr)
627 std::string TESTNAME =
"Binary::Or_Signed_64_Signed_64";
642TEST(AcirFormalProofs, SignedShl)
644 std::string TESTNAME =
"Binary::Shl_Signed_8_Signed_8";
659TEST(AcirFormalProofs, SignedShr)
661 std::string TESTNAME =
"Binary::Shr_Signed_8_Signed_8";
676TEST(AcirFormalProofs, SignedSub)
678 std::string TESTNAME =
"Binary::Sub_Signed_64_Signed_64";
693TEST(AcirFormalProofs, SignedXor)
695 std::string TESTNAME =
"Binary::Xor_Signed_64_Signed_64";
707TEST(AcirFormalProofs, SignedNot)
709 std::string TESTNAME =
"Not_Signed_64";
bool verify_buggy_witness(std::string instruction_name)
Verifies a previously saved witness file for correctness.
TEST(acir_formal_proofs, uint_terms_add)
Tests 128-bit unsigned addition Verifies that the ACIR implementation of addition is correct Executio...
const std::string ARTIFACTS_PATH
void save_buggy_witness(std::string instruction_name, smt_circuit::UltraCircuit circuit)
Saves witness data when a bug is found during verification.
Class for loading ACIR (Arithmetic Circuit Intermediate Representation) programs and converting them ...
smt_solver::Solver get_smt_solver()
Gets an SMT solver instance.
smt_circuit::UltraCircuit get_field_smt_circuit(smt_solver::Solver *solver)
Creates an SMT circuit for field operations.
bb::UltraCircuitBuilder get_circuit_builder()
Creates a circuit builder for the loaded program.
smt_circuit::UltraCircuit get_bitvec_smt_circuit(smt_solver::Solver *solver)
Creates an SMT circuit for bitvector operations.
smt_circuit::UltraCircuit get_integer_smt_circuit(smt_solver::Solver *solver)
Creates an SMT circuit for integer operations.
void set_variable(const uint32_t index, const FF &value)
Set the value of the variable pointed to by a witness index.
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
Symbolic Circuit class for Standard Circuit Builder.
std::vector< bb::fr > default_model_single(const std::vector< std::string > &special, smt_circuit::CircuitBase &c, const std::string &fname, bool pack)
Get pretty formatted result of the solver work.
std::vector< bb::fr > import_witness_single(const std::string &fname)
Import witness, obtained by solver, from file.