1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
21using tracegen::BitwiseTraceBuilder;
22using tracegen::TestTraceContainer;
27using tracegen::PrecomputedTraceBuilder;
29TEST(BitwiseConstrainingTest, EmptyRow)
35TEST(BitwiseConstrainingTest, AndWithTracegen)
37 TestTraceContainer
trace;
45 .a = MemoryValue::from<uint8_t>(85),
46 .b = MemoryValue::from<uint8_t>(175),
49 .a = MemoryValue::from<uint16_t>(5323),
50 .b = MemoryValue::from<uint16_t>(321),
53 .a = MemoryValue::from<uint32_t>(13793),
54 .b = MemoryValue::from<uint32_t>(10590617),
57 .a = MemoryValue::from<uint64_t>(0x7bff744e3cdf79LLU),
58 .b = MemoryValue::from<uint64_t>(0x14ccccccccb6LLU),
59 .res = 0x14444c0ccc30LLU },
61 .a = MemoryValue::from<uint128_t>((
uint128_t{ 0xb900000000000001 } << 64)),
62 .b = MemoryValue::from<uint128_t>((
uint128_t{ 0x1006021301080000 } << 64) +
63 uint128_t{ 0x000000000000001080876844827 }),
64 .res =
uint128_t{ 0x1000000000000000 } << 64 }
70 check_relation<bitwise>(
trace);
74TEST(BitwiseConstrainingTest, OrWithTracegen)
76 TestTraceContainer
trace;
84 .a = MemoryValue::from<uint8_t>(128),
85 .b = MemoryValue::from<uint8_t>(127),
88 .a = MemoryValue::from<uint16_t>(5323),
89 .b = MemoryValue::from<uint16_t>(321),
92 .a = MemoryValue::from<uint32_t>(13793),
93 .b = MemoryValue::from<uint32_t>(10590617),
96 .a = MemoryValue::from<uint64_t>(0x7bff744e3cdf79LLU),
97 .b = MemoryValue::from<uint64_t>(0x14ccccccccb6LLU),
98 .res = 0x7bfffccefcdfffLLU },
100 .a = MemoryValue::from<uint128_t>((
uint128_t{ 0xb900000000000000 } << 64)),
101 .b = MemoryValue::from<uint128_t>((
uint128_t{ 0x1006021301080000 } << 64) +
102 uint128_t{ 0x000000000000001080876844827 }),
109 check_relation<bitwise>(
trace);
113TEST(BitwiseConstrainingTest, XorWithTracegen)
115 TestTraceContainer
trace;
124 .a = MemoryValue::from<uint8_t>(85),
125 .b = MemoryValue::from<uint8_t>(175),
128 .a = MemoryValue::from<uint16_t>(5323),
129 .b = MemoryValue::from<uint16_t>(321),
132 .a = MemoryValue::from<uint32_t>(13793),
133 .b = MemoryValue::from<uint32_t>(10590617),
136 .a = MemoryValue::from<uint64_t>(0x7bff744e3cdf79LLU),
137 .b = MemoryValue::from<uint64_t>(0x14ccccccccb6LLU),
138 .res = 0x7bebb882f013cfLLU },
140 .a = MemoryValue::from<uint128_t>((
uint128_t{ 0xb900000000000001 } << 64)),
141 .b = MemoryValue::from<uint128_t>((
uint128_t{ 0x1006021301080000 } << 64) +
142 uint128_t{ 0x000000000000001080876844827 }),
149 check_relation<bitwise>(
trace);
152TEST(BitwiseConstrainingTest, MixedOperationsWithTracegen)
154 TestTraceContainer
trace;
162 .a = MemoryValue::from<uint32_t>(13793),
163 .b = MemoryValue::from<uint32_t>(10590617),
166 .a = MemoryValue::from<uint16_t>(5323),
167 .b = MemoryValue::from<uint16_t>(321),
170 .a = MemoryValue::from<uint32_t>(13793),
171 .b = MemoryValue::from<uint32_t>(10590617),
174 .a = MemoryValue::from<uint8_t>(85),
175 .b = MemoryValue::from<uint8_t>(175),
178 .a = MemoryValue::from<uint8_t>(85),
179 .b = MemoryValue::from<uint8_t>(175),
186 check_relation<bitwise>(
trace);
189TEST(BitwiseConstrainingTest, NegativeWrongInit)
193 .bitwise_acc_ia = 25,
194 .bitwise_acc_ib = 25,
195 .bitwise_acc_ic = 25,
196 .bitwise_ia_byte = 25,
197 .bitwise_ib_byte = 25,
198 .bitwise_ic_byte = 25,
205 trace.
set(C::bitwise_ia_byte, 0, 24);
206 trace.
set(C::bitwise_ib_byte, 0, 27);
207 trace.
set(C::bitwise_ic_byte, 0, 28);
214TEST(BitwiseConstrainingTest, NegativeTruncateCtr)
246TEST(BitwiseConstrainingTest, NegativeGapCtr)
265TEST(BitwiseConstrainingTest, NegativeLastSetBeforeEnd)
270 .bitwise_ctr_min_one_inv =
FF(7).invert(),
275 .bitwise_ctr_min_one_inv =
FF(6).invert(),
281 .bitwise_ctr_min_one_inv =
FF(5).invert(),
289 "BITW_LAST_FOR_CTR_ONE");
292TEST(BitwiseConstrainingTest, NegativeDeactivateRow)
297 .bitwise_ctr_inv =
FF(8).invert(),
302 .bitwise_ctr_inv =
FF(7).invert(),
307 .bitwise_ctr_inv =
FF(6).invert(),
315 "BITW_SEL_CTR_NON_ZERO");
318TEST(BitwiseConstrainingTest, NegativeChangeOpIDBeforeEnd)
338TEST(BitwiseConstrainingTest, NegativeWrongAccumulation)
342 .bitwise_acc_ia = 0xaa11,
343 .bitwise_acc_ib = 0xbb22,
344 .bitwise_acc_ic = 0xcc33,
345 .bitwise_ia_byte = 0x11,
346 .bitwise_ib_byte = 0x22,
347 .bitwise_ic_byte = 0x33,
350 .bitwise_acc_ia = 0xaa,
351 .bitwise_acc_ib = 0xbb,
352 .bitwise_acc_ic = 0xcc,
359 trace.
set(C::bitwise_acc_ia, 0, 0xaa1f);
360 trace.
set(C::bitwise_acc_ib, 0, 0xbb2f);
361 trace.
set(C::bitwise_acc_ic, 0, 0xcc3f);
368TEST(BitwiseConstrainingTest, MixedOperationsInteractions)
370 TestTraceContainer
trace;
379 .a = MemoryValue::from<uint32_t>(13793),
380 .b = MemoryValue::from<uint32_t>(10590617),
383 .a = MemoryValue::from<uint16_t>(5323),
384 .b = MemoryValue::from<uint16_t>(321),
387 .a = MemoryValue::from<uint32_t>(13793),
388 .b = MemoryValue::from<uint32_t>(10590617),
391 .a = MemoryValue::from<uint8_t>(85),
392 .b = MemoryValue::from<uint8_t>(175),
395 .a = MemoryValue::from<uint8_t>(85),
396 .b = MemoryValue::from<uint8_t>(175),
406 check_all_interactions<BitwiseTraceBuilder>(
trace);
407 check_relation<bitwise>(
trace);
410TEST(BitwiseConstrainingTest, BitwiseExecInteraction)
414 .bitwise_acc_ia = 0x01,
415 .bitwise_acc_ib = 0x01,
416 .bitwise_acc_ic = 0x00,
425 .execution_mem_tag_reg_0_ =
static_cast<uint8_t
>(
ValueTag::FF),
426 .execution_mem_tag_reg_1_ =
static_cast<uint8_t
>(
ValueTag::U8),
427 .execution_mem_tag_reg_2_ =
static_cast<uint8_t
>(
ValueTag::U8),
428 .execution_register_0_ = 0x01,
429 .execution_register_1_ = 0x01,
430 .execution_register_2_ = 0x00,
431 .execution_sel_execute_bitwise = 1,
432 .execution_sel_opcode_error = 1,
436 check_interaction<BitwiseTraceBuilder, lookup_bitwise_dispatch_exec_bitwise_settings>(
trace);
439TEST(BitwiseConstrainingTest, InvalidBitwiseExecInteraction)
443 .bitwise_acc_ia = 0x01,
444 .bitwise_acc_ib = 0x01,
445 .bitwise_acc_ic = 0x00,
453 .execution_mem_tag_reg_0_ =
static_cast<uint8_t
>(
ValueTag::U8),
454 .execution_mem_tag_reg_1_ =
static_cast<uint8_t
>(
ValueTag::U16),
455 .execution_mem_tag_reg_2_ =
static_cast<uint8_t
>(
ValueTag::U8),
456 .execution_register_0_ = 0x01,
457 .execution_register_1_ = 0x01,
458 .execution_register_2_ = 0x00,
459 .execution_sel_execute_bitwise = 1,
464 (check_interaction<BitwiseTraceBuilder, lookup_bitwise_dispatch_exec_bitwise_settings>(
trace)),
465 "Failed.*BITWISE_DISPATCH_EXEC_BITWISE. Could not find tuple in destination.");
468TEST(BitwiseConstrainingTest, ErrorHandlingInputFF)
470 TestTraceContainer
trace;
484 check_relation<bitwise>(
trace);
487TEST(BitwiseConstrainingTest, ErrorHandlingInputTagMismatch)
489 TestTraceContainer
trace;
500 check_relation<bitwise>(
trace);
501 check_all_interactions<BitwiseTraceBuilder>(
trace);
504TEST(BitwiseConstrainingTest, ErrorHandlingMultiple)
506 TestTraceContainer
trace;
517 check_relation<bitwise>(
trace);
static TaggedValue from(T value)
static TaggedValue from_tag(ValueTag tag, FF value)
static constexpr size_t SR_BITW_CTR_DECREMENT
static constexpr size_t SR_BITW_LAST_FOR_CTR_ONE
static constexpr size_t SR_BITW_OP_ID_REL
static constexpr size_t SR_BITW_ACC_REL_C
static constexpr size_t SR_BITW_ACC_REL_B
static constexpr size_t SR_BITW_ACC_REL_A
static constexpr size_t SR_BITW_INIT_C
static constexpr size_t SR_BITW_INIT_B
static constexpr size_t SR_BITW_INIT_A
static constexpr size_t SR_BITW_SEL_CTR_NON_ZERO
static TestTraceContainer from_rows(const std::vector< AvmFullRow > &rows)
uint32_t get_num_rows() const
void set(Column col, uint32_t row, const FF &value)
PrecomputedTraceBuilder precomputed_builder
#define EXPECT_THROW_WITH_MESSAGE(code, expectedMessage)
TEST(TxExecutionConstrainingTest, WriteTreeValue)
TestTraceContainer empty_trace()
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
unsigned __int128 uint128_t