4#include <gmock/gmock.h>
5#include <gtest/gtest.h>
18using ::testing::ElementsAre;
19using ::testing::ReturnRef;
20using ::testing::SizeIs;
21using ::testing::StrictMock;
27TEST(DebugLogSimulationTest, Basic)
29 StrictMock<MockMemory>
memory;
30 std::vector<std::string> log_messages;
31 DebugLogger debug_logger(
32 DebugLogLevel::INFO, 9, [&log_messages](
const std::string& message) { log_messages.push_back(message); });
41 MemoryValue::from<FF>(
'H'),
42 MemoryValue::from<FF>(
'e'),
43 MemoryValue::from<FF>(
'l'),
44 MemoryValue::from<FF>(
'l'),
45 MemoryValue::from<FF>(
'o'),
50 uint32_t fields_size = fields_data.size();
54 MemoryValue fields_size_value = MemoryValue::from<uint32_t>(fields_size);
59 EXPECT_CALL(memory,
get(
message_offset + i)).WillOnce(ReturnRef(message_data[i]));
62 for (uint32_t i = 0; i < fields_size; ++i) {
63 EXPECT_CALL(memory,
get(
fields_offset + i)).WillOnce(ReturnRef(fields_data[i]));
66 debug_logger.debug_log(
69 EXPECT_THAT(log_messages, ElementsAre(
"DEBUGLOG(fatal): Hello: [0x2a, 0x7b]"));
70 EXPECT_THAT(debug_logger.dump_logs(), ElementsAre(DebugLog{ contract_address,
"fatal",
"Hello", { 42, 123 } }));
73TEST(DebugLogSimulationTest, MaxMemoryReadsExceeded)
75 StrictMock<MockMemory>
memory;
76 std::vector<std::string> log_messages;
77 DebugLogger debug_logger(
78 DebugLogLevel::INFO, 8, [&log_messages](
const std::string& message) { log_messages.push_back(message); });
86 uint32_t fields_size = 2;
90 MemoryValue fields_size_value = MemoryValue::from<uint32_t>(fields_size);
96 debug_logger.debug_log(
100 EXPECT_THAT(log_messages, SizeIs(0));
101 EXPECT_THAT(debug_logger.dump_logs(), SizeIs(0));
104TEST(DebugLogSimulationTest, CumulativeMaxMemoryReadsExceeded)
106 StrictMock<MockMemory>
memory;
107 std::vector<std::string> log_messages;
110 DebugLogger debug_logger(
111 DebugLogLevel::INFO, 9, [&log_messages](
const std::string& message) { log_messages.push_back(message); });
120 MemoryValue::from<FF>(
'H'),
121 MemoryValue::from<FF>(
'i'),
126 uint32_t fields_size = fields_data.size();
129 MemoryValue fields_size_value = MemoryValue::from<uint32_t>(fields_size);
133 EXPECT_CALL(memory,
get(
level_offset)).Times(2).WillRepeatedly(ReturnRef(level));
136 EXPECT_CALL(memory,
get(
message_offset + i)).WillOnce(ReturnRef(message_data[i]));
138 for (uint32_t i = 0; i < fields_size; ++i) {
139 EXPECT_CALL(memory,
get(
fields_offset + i)).WillOnce(ReturnRef(fields_data[i]));
143 debug_logger.debug_log(
148 debug_logger.debug_log(
153 EXPECT_THAT(log_messages, ElementsAre(
"DEBUGLOG(fatal): Hi: [0x2a]"));
154 EXPECT_THAT(debug_logger.dump_logs(), SizeIs(1));
157TEST(DebugLogSimulationTest, InvalidLevel)
159 StrictMock<MockMemory>
memory;
160 std::vector<std::string> log_messages;
161 DebugLogger debug_logger(
162 DebugLogLevel::INFO, 9, [&log_messages](
const std::string& message) { log_messages.push_back(message); });
171 MemoryValue::from<FF>(
'H'),
172 MemoryValue::from<FF>(
'e'),
173 MemoryValue::from<FF>(
'l'),
174 MemoryValue::from<FF>(
'l'),
175 MemoryValue::from<FF>(
'o'),
180 uint32_t fields_size = fields_data.size();
182 MemoryValue level = MemoryValue::from<uint8_t>(
static_cast<uint8_t
>(42));
184 MemoryValue fields_size_value = MemoryValue::from<uint32_t>(fields_size);
189 EXPECT_CALL(memory,
get(
message_offset + i)).WillOnce(ReturnRef(message_data[i]));
192 for (uint32_t i = 0; i < fields_size; ++i) {
193 EXPECT_CALL(memory,
get(
fields_offset + i)).WillOnce(ReturnRef(fields_data[i]));
197 debug_logger.debug_log(
201 EXPECT_THAT(log_messages, SizeIs(0));
202 EXPECT_THAT(debug_logger.dump_logs(), SizeIs(0));
207 StrictMock<MockMemory>
memory;
208 std::vector<std::string> log_messages;
209 DebugLogger debug_logger(
210 DebugLogLevel::INFO, 9, [&log_messages](
const std::string& message) { log_messages.push_back(message); });
219 MemoryValue::from<FF>(
'A'),
224 uint32_t fields_size = fields_data.size();
228 MemoryValue fields_size_value = MemoryValue::from<uint32_t>(fields_size);
233 EXPECT_CALL(memory,
get(
message_offset + i)).WillOnce(ReturnRef(message_data[i]));
236 for (uint32_t i = 0; i < fields_size; ++i) {
237 EXPECT_CALL(memory,
get(
fields_offset + i)).WillOnce(ReturnRef(fields_data[i]));
240 debug_logger.debug_log(
244 EXPECT_THAT(log_messages, SizeIs(0));
246 EXPECT_THAT(debug_logger.dump_logs(), ElementsAre(DebugLog{ contract_address,
"verbose",
"A", { 42 } }));
AVM range check gadget for witness generation.
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept