3#include <gmock/gmock.h>
4#include <gtest/gtest.h>
9using ::testing::ElementsAre;
12TEST(PublicLogsTest, DefaultConstructor)
14 PublicLogs public_logs;
15 EXPECT_EQ(public_logs.length, 0);
19 EXPECT_EQ(public_logs.payload[i],
FF(0));
23TEST(PublicLogsTest, ConstructorWithLengthAndPayload)
25 std::array<FF, FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH> payload{};
27 payload[1] =
FF(0x1234);
33 PublicLogs public_logs(
length, payload);
35 EXPECT_EQ(public_logs.length,
length);
36 EXPECT_EQ(public_logs.payload[0],
FF(3));
37 EXPECT_EQ(public_logs.payload[1],
FF(0x1234));
38 EXPECT_EQ(public_logs.payload[2],
FF(100));
39 EXPECT_EQ(public_logs.payload[3],
FF(200));
40 EXPECT_EQ(public_logs.payload[4],
FF(300));
43TEST(PublicLogsTest, ConstructorFromEmptyVector)
46 PublicLogs public_logs(logs);
48 EXPECT_EQ(public_logs.length, 0);
50 EXPECT_TRUE(recovered_logs.empty());
53TEST(PublicLogsTest, ConstructorFromSingleLog)
56 std::vector<FF> fields = {
FF(1),
FF(2),
FF(3) };
60 PublicLogs public_logs(logs);
63 EXPECT_EQ(public_logs.payload[0],
FF(fields.size()));
65 EXPECT_EQ(public_logs.payload[2],
FF(1));
66 EXPECT_EQ(public_logs.payload[3],
FF(2));
67 EXPECT_EQ(public_logs.payload[4],
FF(3));
70TEST(PublicLogsTest, ConstructorFromMultipleLogs)
77 PublicLog{ {
FF(1),
FF(2),
FF(3) }, addr1 },
78 PublicLog{ {
FF(4),
FF(5) }, addr2 },
79 PublicLog{ {
FF(6) }, addr3 },
82 PublicLogs public_logs(logs);
88 EXPECT_EQ(public_logs.length, 12);
91 EXPECT_EQ(public_logs.payload[0],
FF(3));
92 EXPECT_EQ(public_logs.payload[1], addr1);
93 EXPECT_EQ(public_logs.payload[2],
FF(1));
94 EXPECT_EQ(public_logs.payload[3],
FF(2));
95 EXPECT_EQ(public_logs.payload[4],
FF(3));
98 EXPECT_EQ(public_logs.payload[5],
FF(2));
99 EXPECT_EQ(public_logs.payload[6], addr2);
100 EXPECT_EQ(public_logs.payload[7],
FF(4));
101 EXPECT_EQ(public_logs.payload[8],
FF(5));
104 EXPECT_EQ(public_logs.payload[9],
FF(1));
105 EXPECT_EQ(public_logs.payload[10], addr3);
106 EXPECT_EQ(public_logs.payload[11],
FF(6));
109TEST(PublicLogsTest, AddLogToEmpty)
111 PublicLogs public_logs;
113 std::vector<FF> fields = {
FF(10),
FF(20) };
116 public_logs.add_log(log);
119 EXPECT_EQ(public_logs.payload[0],
FF(fields.size()));
121 EXPECT_EQ(public_logs.payload[2],
FF(10));
122 EXPECT_EQ(public_logs.payload[3],
FF(20));
125TEST(PublicLogsTest, AddMultipleLogs)
127 PublicLogs public_logs;
130 PublicLog log1{ {
FF(1),
FF(2) }, addr1 };
131 public_logs.add_log(log1);
134 PublicLog log2{ {
FF(3),
FF(4),
FF(5) }, addr2 };
135 public_logs.add_log(log2);
137 EXPECT_EQ(public_logs.length, 2 + 2 + 2 + 3);
140 EXPECT_EQ(public_logs.payload[0],
FF(2));
141 EXPECT_EQ(public_logs.payload[1], addr1);
142 EXPECT_EQ(public_logs.payload[2],
FF(1));
143 EXPECT_EQ(public_logs.payload[3],
FF(2));
146 EXPECT_EQ(public_logs.payload[4],
FF(3));
147 EXPECT_EQ(public_logs.payload[5], addr2);
148 EXPECT_EQ(public_logs.payload[6],
FF(3));
149 EXPECT_EQ(public_logs.payload[7],
FF(4));
150 EXPECT_EQ(public_logs.payload[8],
FF(5));
153TEST(PublicLogsTest, AddLogWithEmptyFields)
155 PublicLogs public_logs;
159 public_logs.add_log(log);
162 EXPECT_EQ(public_logs.payload[0],
FF(0));
166TEST(PublicLogsTest, FromLogsStaticMethod)
169 PublicLog{ {
FF(1) },
FF(0x1111) },
170 PublicLog{ {
FF(2),
FF(3) },
FF(0x2222) },
175 EXPECT_EQ(public_logs.length, 1 + 2 + 2 + 2);
176 EXPECT_EQ(public_logs.payload[0],
FF(1));
177 EXPECT_EQ(public_logs.payload[1],
FF(0x1111));
178 EXPECT_EQ(public_logs.payload[2],
FF(1));
179 EXPECT_EQ(public_logs.payload[3],
FF(2));
180 EXPECT_EQ(public_logs.payload[4],
FF(0x2222));
181 EXPECT_EQ(public_logs.payload[5],
FF(2));
182 EXPECT_EQ(public_logs.payload[6],
FF(3));
185TEST(PublicLogsTest, ToLogsEmpty)
187 PublicLogs public_logs;
189 EXPECT_TRUE(logs.empty());
192TEST(PublicLogsTest, ToLogsSingle)
194 PublicLogs public_logs;
196 std::vector<FF> fields = {
FF(42),
FF(43) };
198 public_logs.add_log(original_log);
202 ASSERT_EQ(recovered_logs.size(), 1);
204 EXPECT_THAT(recovered_logs[0].fields, ElementsAre(
FF(42),
FF(43)));
207TEST(PublicLogsTest, ToLogsMultiple)
210 PublicLog{ {
FF(1),
FF(2),
FF(3) },
FF(0x1111) },
211 PublicLog{ {
FF(4),
FF(5) },
FF(0x2222) },
212 PublicLog{ {
FF(6) },
FF(0x3333) },
215 PublicLogs public_logs(original_logs);
218 ASSERT_EQ(recovered_logs.size(), 3);
221 EXPECT_THAT(recovered_logs[0].fields, ElementsAre(
FF(1),
FF(2),
FF(3)));
224 EXPECT_THAT(recovered_logs[1].fields, ElementsAre(
FF(4),
FF(5)));
227 EXPECT_THAT(recovered_logs[2].fields, ElementsAre(
FF(6)));
230TEST(PublicLogsTest, RoundTripConversion)
233 PublicLog{ {
FF(10),
FF(20),
FF(30) },
FF(0xaaaa) },
234 PublicLog{ {
FF(40),
FF(50) },
FF(0xbbbb) },
235 PublicLog{ {
FF(60) },
FF(0xcccc) },
236 PublicLog{ {},
FF(0xdddd) },
239 PublicLogs public_logs(original_logs);
242 ASSERT_EQ(recovered_logs.size(), original_logs.size());
244 for (
size_t i = 0; i < original_logs.size(); ++i) {
246 EXPECT_EQ(recovered_logs[i].fields.size(), original_logs[i].fields.size());
247 for (
size_t j = 0; j < original_logs[i].fields.size(); ++j) {
248 EXPECT_EQ(recovered_logs[i].fields[j], original_logs[i].fields[j]);
253TEST(PublicLogsTest, EqualityOperator)
256 PublicLog{ {
FF(1),
FF(2) },
FF(0x1111) },
257 PublicLog{ {
FF(3) },
FF(0x2222) },
260 PublicLogs public_logs1(logs);
261 PublicLogs public_logs2(logs);
263 EXPECT_EQ(public_logs1, public_logs2);
266TEST(PublicLogsTest, EqualityOperatorDifferentLength)
268 PublicLogs public_logs1;
269 public_logs1.add_log(PublicLog{ {
FF(1) },
FF(0x1111) });
271 PublicLogs public_logs2;
272 public_logs2.add_log(PublicLog{ {
FF(1) },
FF(0x1111) });
273 public_logs2.add_log(PublicLog{ {
FF(2) },
FF(0x2222) });
275 EXPECT_NE(public_logs1, public_logs2);
278TEST(PublicLogsTest, EqualityOperatorDifferentPayload)
280 PublicLogs public_logs1;
281 public_logs1.add_log(PublicLog{ {
FF(1) },
FF(0x1111) });
283 PublicLogs public_logs2;
284 public_logs2.add_log(PublicLog{ {
FF(2) },
FF(0x1111) });
286 EXPECT_NE(public_logs1, public_logs2);
289TEST(PublicLogsTest, EqualityOperatorDifferentContractAddress)
291 PublicLogs public_logs1;
292 public_logs1.add_log(PublicLog{ {
FF(1) },
FF(0x1111) });
294 PublicLogs public_logs2;
295 public_logs2.add_log(PublicLog{ {
FF(1) },
FF(0x2222) });
297 EXPECT_NE(public_logs1, public_logs2);
300TEST(PublicLogsTest, LargeLog)
302 std::vector<FF> large_fields;
303 for (uint32_t i = 0; i < 100; ++i) {
304 large_fields.push_back(
FF(i));
310 PublicLogs public_logs;
311 public_logs.add_log(large_log);
314 EXPECT_EQ(public_logs.payload[0],
FF(large_fields.size()));
317 for (
size_t i = 0; i < large_fields.size(); ++i) {
322 ASSERT_EQ(recovered_logs.size(), 1);
323 EXPECT_EQ(recovered_logs[0].fields.size(), large_fields.size());
324 for (
size_t i = 0; i < large_fields.size(); ++i) {
325 EXPECT_EQ(recovered_logs[0].fields[i],
FF(i));
329TEST(PublicLogsTest, ManySmallLogs)
331 PublicLogs public_logs;
332 const uint32_t num_logs = 50;
334 for (uint32_t i = 0; i < num_logs; ++i) {
337 public_logs.add_log(log);
341 ASSERT_EQ(recovered_logs.size(), num_logs);
343 for (uint32_t i = 0; i < num_logs; ++i) {
345 EXPECT_THAT(recovered_logs[i].fields, ElementsAre(
FF(i * 10),
FF(i * 10 + 1)));
#define FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH
#define PUBLIC_LOG_HEADER_LENGTH
AztecAddress contract_address
uint8_t const size_t length
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static PublicLogs from_logs(const std::vector< PublicLog > &logs)