Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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