1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
12using testing::ElementsAre;
17TEST(EccTraceGenTest, TraceGenerationAdd)
19 TestTraceContainer
trace;
22 FF p_x(
"0x04c95d1b26d63d46918a156cae92db1bcbc4072a27ec81dc82ea959abdbcf16a");
23 FF p_y(
"0x035b6dd9e63c1370462c74775765d07fc21fd1093cc988149d3aa763bb3dbb60");
25 FF q_x(
"0x009242167ec31949c00cbe441cd36757607406e87844fa2c8c4364a4403e66d7");
26 FF q_y(
"0x0fe3016d64cfa8045609f375284b6b739b5fa282e4cbb75cc7f1687ecc7420e3");
28 FF r_x(
"0x2b01df0ef6d941a826bea23bece8243cbcdc159d5e97fbaa2171f028e05ba9b6");
29 FF r_y(
"0x0cc4c71e882bc62b7b3d1964a8540cb5211339dfcddd2e095fd444bf1aed4f09");
31 builder.process_add({ { .p = p, .q = q, .result = r } },
trace);
41 ROW_FIELD_EQ(ecc_lambda, (q.y() - p.y()) / (q.x() - p.x())),
56TEST(EccTraceGenTest, TraceGenerationDouble)
58 TestTraceContainer
trace;
61 FF p_x(
"0x04c95d1b26d63d46918a156cae92db1bcbc4072a27ec81dc82ea959abdbcf16a");
62 FF p_y(
"0x035b6dd9e63c1370462c74775765d07fc21fd1093cc988149d3aa763bb3dbb60");
65 FF r_x(
"0x2b01df0ef6d941a826bea23bece8243cbcdc159d5e97fbaa2171f028e05ba9b6");
66 FF r_y(
"0x0cc4c71e882bc62b7b3d1964a8540cb5211339dfcddd2e095fd444bf1aed4f09");
69 builder.process_add({ { .p = p, .q = q, .result = r } },
trace);
79 ROW_FIELD_EQ(ecc_lambda, (p.x() * p.x() * 3) / (p.y() * 2)),
94TEST(EccTraceGenTest, TraceGenerationInfResult)
96 TestTraceContainer
trace;
99 FF p_x(
"0x04c95d1b26d63d46918a156cae92db1bcbc4072a27ec81dc82ea959abdbcf16a");
100 FF p_y(
"0x035b6dd9e63c1370462c74775765d07fc21fd1093cc988149d3aa763bb3dbb60");
106 builder.process_add({ { .p = p, .q = q, .result = r } },
trace);
131TEST(EccTraceGenTest, TraceGenerationInfAdd)
133 TestTraceContainer
trace;
136 FF p_x(
"0x04c95d1b26d63d46918a156cae92db1bcbc4072a27ec81dc82ea959abdbcf16a");
137 FF p_y(
"0x035b6dd9e63c1370462c74775765d07fc21fd1093cc988149d3aa763bb3dbb60");
144 builder.process_add({ { .p = p, .q = q, .result = r } },
trace);
154 ROW_FIELD_EQ(ecc_lambda, (q.y() - p.y()) / (q.x() - p.x())),
169TEST(EccTraceGenTest, TraceGenerationInfDouble)
171 TestTraceContainer
trace;
177 builder.process_add({ { .p = p, .q = p, .result = r } },
trace);
202TEST(EccTraceGenTest, TraceGenerationAddMemoryInfDiffInvWitnesses)
204 TestTraceContainer
trace;
207 FF p_x(
"0x04c95d1b26d63d46918a156cae92db1bcbc4072a27ec81dc82ea959abdbcf16a");
208 FF p_y(
"0x035b6dd9e63c1370462c74775765d07fc21fd1093cc988149d3aa763bb3dbb60");
210 FF q_x(
"0x009242167ec31949c00cbe441cd36757607406e87844fa2c8c4364a4403e66d7");
211 FF q_y(
"0x0fe3016d64cfa8045609f375284b6b739b5fa282e4cbb75cc7f1687ecc7420e3");
219 builder.process_add_with_memory(
221 { .execution_clk = 0, .space_id = 0, .p = p, .q = q, .result = r, .dst_address = 0x1000 },
222 { .execution_clk = 1, .space_id = 0, .p = p, .q = inf, .result = p, .dst_address = 0x1000 },
223 { .execution_clk = 2, .space_id = 0, .p = inf, .q = inf, .result = inf, .dst_address = 0x1000 },
231 ROW_FIELD_EQ(ecc_add_mem_p_x_inf_diff_inv, (p.x() - inf.x()).invert()),
232 ROW_FIELD_EQ(ecc_add_mem_p_y_inf_diff_inv, (p.y() - inf.y()).invert()),
233 ROW_FIELD_EQ(ecc_add_mem_q_x_inf_diff_inv, (q.x() - inf.x()).invert()),
234 ROW_FIELD_EQ(ecc_add_mem_q_y_inf_diff_inv, (q.y() - inf.y()).invert())),
242 ROW_FIELD_EQ(ecc_add_mem_p_x_inf_diff_inv, (p.x() - inf.x()).invert()),
243 ROW_FIELD_EQ(ecc_add_mem_p_y_inf_diff_inv, (p.y() - inf.y()).invert()),
static const StandardAffinePoint & infinity()
std::vector< AvmFullRowConstRef > as_rows() const
#define ROW_FIELD_EQ(field_name, expression)
StandardAffinePoint< AvmFlavorSettings::EmbeddedCurve::AffineElement > EmbeddedCurvePoint
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
static constexpr field zero()