Skip to content

Commit

Permalink
chore(avm): Add a boolean to toggle proving in AVM unit tests (#5667)
Browse files Browse the repository at this point in the history
Resolves #5663
  • Loading branch information
jeanmon authored Apr 10, 2024
1 parent 8f8ad56 commit ec122c9
Show file tree
Hide file tree
Showing 8 changed files with 89 additions and 82 deletions.
102 changes: 51 additions & 51 deletions barretenberg/cpp/src/barretenberg/vm/tests/avm_arithmetic.test.cpp

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ TEST_P(AvmBitwiseTestsNot, ParamTest)
FF ff_a = FF(uint256_t::from_uint128(a));
FF ff_output = FF(uint256_t::from_uint128(output));
common_validate_op_not(trace, ff_a, ff_output, FF(0), FF(1), mem_tag);
validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}

INSTANTIATE_TEST_SUITE_P(AvmBitwiseTests,
Expand All @@ -377,7 +377,7 @@ TEST_P(AvmBitwiseTestsAnd, AllAndTest)
FF ff_output = FF(uint256_t::from_uint128(output));
// EXPECT_EQ(1, 2) << "a ^ b " << (a ^ b) << '\n';
common_validate_bit_op(trace, 0, ff_a, ff_b, ff_output, FF(0), FF(1), FF(2), mem_tag);
validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}
INSTANTIATE_TEST_SUITE_P(AvmBitwiseTests,
AvmBitwiseTestsAnd,
Expand All @@ -398,7 +398,7 @@ TEST_P(AvmBitwiseTestsOr, AllOrTest)
FF ff_output = FF(uint256_t::from_uint128(output));

common_validate_bit_op(trace, 1, ff_a, ff_b, ff_output, FF(0), FF(1), FF(2), mem_tag);
validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}
INSTANTIATE_TEST_SUITE_P(AvmBitwiseTests,
AvmBitwiseTestsOr,
Expand All @@ -419,7 +419,7 @@ TEST_P(AvmBitwiseTestsXor, AllXorTest)
FF ff_output = FF(uint256_t::from_uint128(output));

common_validate_bit_op(trace, 2, ff_a, ff_b, ff_output, FF(0), FF(1), FF(2), mem_tag);
validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}

INSTANTIATE_TEST_SUITE_P(AvmBitwiseTests,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ TEST_F(AvmControlFlowTests, simpleCall)
EXPECT_EQ(halt_row->avm_main_pc, FF(CALL_ADDRESS));
EXPECT_EQ(halt_row->avm_main_internal_return_ptr, FF(AvmTraceBuilder::CALLSTACK_OFFSET + 1));
}
validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}

TEST_F(AvmControlFlowTests, simpleJump)
Expand Down Expand Up @@ -87,7 +87,7 @@ TEST_F(AvmControlFlowTests, simpleJump)
EXPECT_TRUE(halt_row != trace.end());
EXPECT_EQ(halt_row->avm_main_pc, FF(JUMP_ADDRESS));
}
validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}

TEST_F(AvmControlFlowTests, simpleCallAndReturn)
Expand Down Expand Up @@ -137,7 +137,7 @@ TEST_F(AvmControlFlowTests, simpleCallAndReturn)
EXPECT_EQ(halt_row->avm_main_pc, FF(RETURN_ADDRESS));
}

validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}

TEST_F(AvmControlFlowTests, multipleCallsAndReturns)
Expand Down Expand Up @@ -280,6 +280,6 @@ TEST_F(AvmControlFlowTests, multipleCallsAndReturns)
EXPECT_TRUE(halt_row != trace.end());
EXPECT_EQ(halt_row->avm_main_pc, FF(1));

validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}
} // namespace tests_avm
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ TEST_F(AvmIndirectMemTests, allIndirectAdd)
EXPECT_EQ(row->avm_main_mem_op_b, FF(1));
EXPECT_EQ(row->avm_main_mem_op_c, FF(1));

validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}

// Testing a subtraction operation with direct input operands a, b, and an indirect
Expand Down Expand Up @@ -109,7 +109,7 @@ TEST_F(AvmIndirectMemTests, indirectOutputSub)
EXPECT_EQ(row->avm_main_mem_op_b, FF(1));
EXPECT_EQ(row->avm_main_mem_op_c, FF(1));

validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}

// Testing a multiplication operation with indirect input operand a,
Expand Down Expand Up @@ -155,7 +155,7 @@ TEST_F(AvmIndirectMemTests, indirectInputAMul)
EXPECT_EQ(row->avm_main_mem_op_b, FF(1));
EXPECT_EQ(row->avm_main_mem_op_c, FF(1));

validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}

} // namespace tests_avm
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ class AvmMemOpcodeTests : public ::testing::Test {
Field(&Row::avm_mem_ind_op_c, 1)));
}

validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}
};

Expand Down Expand Up @@ -230,7 +230,7 @@ TEST_F(AvmMemOpcodeTests, indirectMovInvalidAddressTag)
Field(&Row::avm_mem_r_in_tag, static_cast<uint32_t>(AvmMemoryTag::U32)),
Field(&Row::avm_mem_ind_op_c, 1)));

validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}

TEST_F(AvmMemOpcodeTests, directSet)
Expand All @@ -257,7 +257,7 @@ TEST_F(AvmMemOpcodeTests, directSet)
Field(&Row::avm_mem_rw, 1),
Field(&Row::avm_mem_ind_op_c, 0)));

validate_trace_proof(std::move(trace));
validate_trace(std::move(trace));
}

TEST_F(AvmMemOpcodeTests, indirectSet)
Expand Down Expand Up @@ -297,7 +297,7 @@ TEST_F(AvmMemOpcodeTests, indirectSet)
Field(&Row::avm_mem_r_in_tag, static_cast<uint32_t>(AvmMemoryTag::U32)),
Field(&Row::avm_mem_tag, static_cast<uint32_t>(AvmMemoryTag::U32))));

validate_trace_proof(std::move(trace));
validate_trace(std::move(trace));
}

TEST_F(AvmMemOpcodeTests, indirectSetWrongTag)
Expand Down Expand Up @@ -327,7 +327,7 @@ TEST_F(AvmMemOpcodeTests, indirectSetWrongTag)
Field(&Row::avm_mem_tag, static_cast<uint32_t>(AvmMemoryTag::U8)),
Field(&Row::avm_mem_tag_err, 1)));

validate_trace_proof(std::move(trace));
validate_trace(std::move(trace));
}

/******************************************************************************
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ TEST_F(AvmMemoryTests, mismatchedTagAddOperation)
EXPECT_EQ(row->avm_mem_r_in_tag, FF(static_cast<uint32_t>(AvmMemoryTag::U8)));
EXPECT_EQ(row->avm_mem_tag, FF(static_cast<uint32_t>(AvmMemoryTag::FF)));

validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}

// Testing an equality operation with a mismatched memory tag.
Expand Down Expand Up @@ -112,7 +112,7 @@ TEST_F(AvmMemoryTests, mismatchedTagEqOperation)
EXPECT_EQ(row->avm_mem_r_in_tag, FF(static_cast<uint32_t>(AvmMemoryTag::U32)));
EXPECT_EQ(row->avm_mem_tag, FF(static_cast<uint32_t>(AvmMemoryTag::U16)));

validate_trace_check_circuit(std::move(trace));
validate_trace(std::move(trace));
}

// Testing violation that m_lastAccess is a delimiter for two different addresses
Expand Down
25 changes: 13 additions & 12 deletions barretenberg/cpp/src/barretenberg/vm/tests/helpers.test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,37 @@

namespace tests_avm {
/**
* @brief Helper routine proving and verifying a proof based on the supplied trace
* @brief Helper routine checking the circuit constraints without proving
*
* @param trace The execution trace
*/
void validate_trace_check_circuit(std::vector<Row>&& trace)
{
auto circuit_builder = AvmCircuitBuilder();
circuit_builder.set_trace(std::move(trace));
EXPECT_TRUE(circuit_builder.check_circuit());
validate_trace(std::move(trace), false);
};

/**
* @brief Helper routine proving and verifying a proof based on the supplied trace
* @brief Helper routine which checks the circuit constraints and depending on
* the boolean with_proof value performs a proof generation and verification.
*
* @param trace The execution trace
*/
void validate_trace_proof(std::vector<Row>&& trace)
void validate_trace(std::vector<Row>&& trace, bool with_proof)
{
auto circuit_builder = AvmCircuitBuilder();
circuit_builder.set_trace(std::move(trace));
EXPECT_TRUE(circuit_builder.check_circuit());

auto composer = AvmComposer();
auto prover = composer.create_prover(circuit_builder);
auto proof = prover.construct_proof();
if (with_proof) {
auto composer = AvmComposer();
auto prover = composer.create_prover(circuit_builder);
auto proof = prover.construct_proof();

auto verifier = composer.create_verifier(circuit_builder);
bool verified = verifier.verify_proof(proof);
auto verifier = composer.create_verifier(circuit_builder);
bool verified = verifier.verify_proof(proof);

EXPECT_TRUE(verified);
EXPECT_TRUE(verified);
}
};

/**
Expand Down
8 changes: 7 additions & 1 deletion barretenberg/cpp/src/barretenberg/vm/tests/helpers.test.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,14 @@ using Flavor = bb::AvmFlavor;
using FF = Flavor::FF;
using Row = bb::AvmFullRow<bb::fr>;

// To toggle all relevant unit tests with proving, set the env variable "AVM_TESTS_ENABLE_PROVING".
static const bool ENABLE_PROVING = std::getenv("AVM_TESTS_ENABLE_PROVING") != nullptr;

// If the test is expecting a relation to fail, then use validate_trace_check_circuit.
// Otherwise, use validate_trace with a single argument. If the proving needs to be
// enabled all the time in a given test, use validate_trace with setting with_proof = true.
void validate_trace_check_circuit(std::vector<Row>&& trace);
void validate_trace_proof(std::vector<Row>&& trace);
void validate_trace(std::vector<Row>&& trace, bool with_proof = ENABLE_PROVING);
void mutate_ic_in_trace(std::vector<Row>& trace,
std::function<bool(Row)>&& selectRow,
FF const& newValue,
Expand Down

0 comments on commit ec122c9

Please sign in to comment.