4#include <gmock/gmock.h>
5#include <gtest/gtest.h>
17using ::testing::AllOf;
18using ::testing::ElementsAre;
19using ::testing::Field;
20using ::testing::Return;
21using ::testing::SizeIs;
22using ::testing::StrictMock;
27TEST(AvmSimulationToRadixTest, BasicBits)
29 EventEmitter<ToRadixEvent> to_radix_event_emitter;
30 NoopEventEmitter<ToRadixMemoryEvent> to_radix_mem_event_emitter;
33 StrictMock<MockGreaterThan>
gt;
36 auto [bits, truncated] = to_radix.to_le_bits(
FF::one(), 254);
42 EXPECT_FALSE(truncated);
43 EXPECT_THAT(to_radix_event_emitter.dump_events(),
50TEST(AvmSimulationToRadixTest, ShortBits)
52 EventEmitter<ToRadixEvent> to_radix_event_emitter;
53 NoopEventEmitter<ToRadixMemoryEvent> to_radix_mem_event_emitter;
56 StrictMock<MockGreaterThan>
gt;
59 auto [bits, truncated] = to_radix.to_le_bits(
FF::one(), 1);
64 EXPECT_FALSE(truncated);
66 EXPECT_THAT(to_radix_event_emitter.dump_events(),
70TEST(AvmSimulationToRadixTest, DecomposeOneBitLargeValue)
72 EventEmitter<ToRadixEvent> to_radix_event_emitter;
73 NoopEventEmitter<ToRadixMemoryEvent> to_radix_mem_event_emitter;
76 StrictMock<MockGreaterThan>
gt;
79 auto [bits, truncated] = to_radix.to_le_bits(
FF::neg_one(), 1);
85 EXPECT_TRUE(truncated);
88 EXPECT_THAT(to_radix_event_emitter.dump_events(),
92TEST(AvmSimulationToRadixTest, BasicRadix)
94 EventEmitter<ToRadixEvent> to_radix_event_emitter;
95 NoopEventEmitter<ToRadixMemoryEvent> to_radix_mem_event_emitter;
98 StrictMock<MockGreaterThan>
gt;
101 auto [limbs, truncated] = to_radix.to_le_radix(
FF::one(), 32, 256);
107 EXPECT_FALSE(truncated);
109 EXPECT_THAT(to_radix_event_emitter.dump_events(),
116TEST(AvmSimulationToRadixTest, ShortRadix)
118 EventEmitter<ToRadixEvent> to_radix_event_emitter;
119 NoopEventEmitter<ToRadixMemoryEvent> to_radix_mem_event_emitter;
122 StrictMock<MockGreaterThan>
gt;
125 auto [limbs, truncated] = to_radix.to_le_radix(
FF::one(), 1, 256);
130 EXPECT_FALSE(truncated);
132 EXPECT_THAT(to_radix_event_emitter.dump_events(),
136TEST(AvmSimulationToRadixTest, DecomposeOneRadixLargerValue)
138 EventEmitter<ToRadixEvent> to_radix_event_emitter;
139 NoopEventEmitter<ToRadixMemoryEvent> to_radix_mem_event_emitter;
142 StrictMock<MockGreaterThan>
gt;
145 auto [limbs, truncated] = to_radix.to_le_radix(
FF::neg_one(), 1, 256);
151 EXPECT_TRUE(truncated);
154 EXPECT_THAT(to_radix_event_emitter.dump_events(),
158TEST(AvmSimulationToRadixTest, DecomposeInDecimal)
160 EventEmitter<ToRadixEvent> to_radix_event_emitter;
161 NoopEventEmitter<ToRadixMemoryEvent> to_radix_mem_event_emitter;
164 StrictMock<MockGreaterThan>
gt;
167 auto [limbs, truncated] = to_radix.to_le_radix(1337, 4, 10);
172 EXPECT_FALSE(truncated);
175TEST(AvmSimulationToRadixMemoryTest, BasicTest)
177 EventEmitter<ToRadixEvent> to_radix_event_emitter;
178 EventEmitter<ToRadixMemoryEvent> to_radix_mem_event_emitter;
187 const uint32_t radix = 10;
188 const uint32_t num_limbs = 4;
189 bool is_output_bits =
false;
192 to_radix.to_be_radix(memory,
value, radix, num_limbs, is_output_bits,
dst_addr);
194 std::vector<uint8_t> output;
195 output.reserve(num_limbs);
197 for (uint32_t i = 0; i < num_limbs; ++i) {
205TEST(AvmSimulationToRadixMemoryTest, DstOutOfRange)
207 EventEmitter<ToRadixEvent> to_radix_event_emitter;
208 EventEmitter<ToRadixMemoryEvent> to_radix_mem_event_emitter;
217 const uint32_t radix = 10;
218 const uint32_t num_limbs = 4;
219 bool is_output_bits =
false;
220 uint32_t num_writes = num_limbs - 1;
224 EXPECT_THROW(to_radix.to_be_radix(memory,
value, radix, num_limbs, is_output_bits,
dst_addr), ToRadixException);
227TEST(AvmSimulationToRadixMemoryTest, InvalidRadixValue)
229 EventEmitter<ToRadixEvent> to_radix_event_emitter;
230 EventEmitter<ToRadixMemoryEvent> to_radix_mem_event_emitter;
239 const uint32_t radix = 1;
240 const uint32_t num_limbs = 4;
241 bool is_output_bits =
false;
244 EXPECT_THROW(to_radix.to_be_radix(memory,
value, radix, num_limbs, is_output_bits,
dst_addr), ToRadixException);
247TEST(AvmSimulationToRadixMemoryTest, TruncationError)
249 EventEmitter<ToRadixEvent> to_radix_event_emitter;
250 EventEmitter<ToRadixMemoryEvent> to_radix_mem_event_emitter;
259 const uint32_t radix = 10;
260 const uint32_t num_limbs = 3;
261 bool is_output_bits =
false;
268 MemoryValue::from<uint8_t>(3),
269 MemoryValue::from<uint8_t>(3),
270 MemoryValue::from<uint8_t>(7),
273 EXPECT_THAT(to_radix_mem_event_emitter.dump_events(),
#define AVM_HIGHEST_MEM_ADDRESS
const MemoryValue & get(MemoryAddress index) const override
ExecutionIdManager execution_id_manager
#define EXPECT_THROW_WITH_MESSAGE(code, expectedMessage)
TEST(EmitUnencryptedLogTest, Basic)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::vector< uint8_t > limbs
std::vector< MemoryValue > limbs
static constexpr field neg_one()
static constexpr field one()