4#include <gmock/gmock.h>
5#include <gtest/gtest.h>
21using ::testing::ElementsAre;
22using ::testing::Return;
23using ::testing::StrictMock;
27TEST(AvmSimulationAluTest, Add)
29 EventEmitter<AluEvent> alu_event_emitter;
30 StrictMock<MockGreaterThan>
gt;
31 StrictMock<MockFieldGreaterThan>
field_gt;
33 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
35 auto a = MemoryValue::from<uint32_t>(1);
36 auto b = MemoryValue::from<uint32_t>(2);
38 auto c = alu.add(
a,
b);
40 EXPECT_EQ(c, MemoryValue::from<uint32_t>(3));
42 auto events = alu_event_emitter.dump_events();
43 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::ADD, .a =
a, .b =
b, .c = c }));
46TEST(AvmSimulationAluTest, AddOverflow)
48 EventEmitter<AluEvent> alu_event_emitter;
49 StrictMock<MockGreaterThan>
gt;
50 StrictMock<MockFieldGreaterThan>
field_gt;
52 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
55 auto b = MemoryValue::from<uint32_t>(2);
57 auto c = alu.add(
a,
b);
59 EXPECT_EQ(c, MemoryValue::from<uint32_t>(1));
61 auto events = alu_event_emitter.dump_events();
62 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::ADD, .a =
a, .b =
b, .c = c }));
65TEST(AvmSimulationAluTest, NegativeAddTag)
67 EventEmitter<AluEvent> alu_event_emitter;
68 StrictMock<MockGreaterThan>
gt;
69 StrictMock<MockFieldGreaterThan>
field_gt;
71 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
73 auto a = MemoryValue::from<uint32_t>(1);
74 auto b = MemoryValue::from<uint64_t>(2);
76 EXPECT_THROW(alu.add(
a,
b), AluException);
78 auto events = alu_event_emitter.dump_events();
87TEST(AvmSimulationAluTest, Sub)
89 EventEmitter<AluEvent> alu_event_emitter;
90 StrictMock<MockGreaterThan>
gt;
91 StrictMock<MockFieldGreaterThan>
field_gt;
93 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
95 auto a = MemoryValue::from<uint32_t>(2);
96 auto b = MemoryValue::from<uint32_t>(1);
98 auto c = alu.sub(
a,
b);
100 EXPECT_EQ(c, MemoryValue::from<uint32_t>(1));
102 auto events = alu_event_emitter.dump_events();
103 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::SUB, .a =
a, .b =
b, .c = c }));
106TEST(AvmSimulationAluTest, SubUnderflow)
108 EventEmitter<AluEvent> alu_event_emitter;
109 StrictMock<MockGreaterThan>
gt;
110 StrictMock<MockFieldGreaterThan>
field_gt;
112 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
114 auto a = MemoryValue::from<uint64_t>(1);
115 auto b = MemoryValue::from<uint64_t>(2);
117 auto c = alu.sub(
a,
b);
121 auto events = alu_event_emitter.dump_events();
122 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::SUB, .a =
a, .b =
b, .c = c }));
125TEST(AvmSimulationAluTest, SubFFUnderflow)
127 EventEmitter<AluEvent> alu_event_emitter;
128 StrictMock<MockGreaterThan>
gt;
129 StrictMock<MockFieldGreaterThan>
field_gt;
131 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
133 auto a = MemoryValue::from<FF>(1);
134 auto b = MemoryValue::from<FF>(2);
136 auto c = alu.sub(
a,
b);
140 auto events = alu_event_emitter.dump_events();
141 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::SUB, .a =
a, .b =
b, .c = c }));
144TEST(AvmSimulationAluTest, NegativeSubTag)
146 EventEmitter<AluEvent> alu_event_emitter;
147 StrictMock<MockGreaterThan>
gt;
148 StrictMock<MockFieldGreaterThan>
field_gt;
150 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
152 auto a = MemoryValue::from<uint32_t>(2);
153 auto b = MemoryValue::from<uint64_t>(1);
155 EXPECT_THROW(alu.sub(
a,
b), AluException);
157 auto events = alu_event_emitter.dump_events();
166TEST(AvmSimulationAluTest, Mul)
168 EventEmitter<AluEvent> alu_event_emitter;
169 StrictMock<MockGreaterThan>
gt;
170 StrictMock<MockFieldGreaterThan>
field_gt;
172 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
174 auto a = MemoryValue::from<uint32_t>(2);
175 auto b = MemoryValue::from<uint32_t>(3);
177 auto c = alu.mul(
a,
b);
179 EXPECT_EQ(c, MemoryValue::from<uint32_t>(6));
181 auto events = alu_event_emitter.dump_events();
182 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::MUL, .a =
a, .b =
b, .c = c }));
185TEST(AvmSimulationAluTest, MulOverflow)
187 EventEmitter<AluEvent> alu_event_emitter;
188 StrictMock<MockGreaterThan>
gt;
189 StrictMock<MockFieldGreaterThan>
field_gt;
191 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
194 auto b = MemoryValue::from<uint32_t>(2);
196 auto c = alu.mul(
a,
b);
200 auto events = alu_event_emitter.dump_events();
201 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::MUL, .a =
a, .b =
b, .c = c }));
204TEST(AvmSimulationAluTest, MulOverflowU128)
206 EventEmitter<AluEvent> alu_event_emitter;
207 StrictMock<MockGreaterThan>
gt;
208 StrictMock<MockFieldGreaterThan>
field_gt;
210 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
214 auto a = MemoryValue::from<uint128_t>(max);
215 auto b = MemoryValue::from<uint128_t>(max - 3);
218 EXPECT_CALL(range_check, assert_range(_, 64)).Times(5);
220 auto c = alu.mul(
a,
b);
222 EXPECT_EQ(c, MemoryValue::from<uint128_t>(4));
224 auto events = alu_event_emitter.dump_events();
225 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::MUL, .a =
a, .b =
b, .c = c }));
228TEST(AvmSimulationAluTest, Div)
230 EventEmitter<AluEvent> alu_event_emitter;
231 StrictMock<MockGreaterThan>
gt;
232 StrictMock<MockFieldGreaterThan>
field_gt;
234 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
236 auto a = MemoryValue::from<uint32_t>(6);
237 auto b = MemoryValue::from<uint32_t>(3);
239 EXPECT_CALL(gt,
gt(
b, MemoryValue::from<uint32_t>(0))).WillOnce(Return(
true));
241 auto c = alu.div(
a,
b);
243 EXPECT_EQ(c, MemoryValue::from<uint32_t>(2));
245 auto events = alu_event_emitter.dump_events();
246 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::DIV, .a =
a, .b =
b, .c = c }));
249TEST(AvmSimulationAluTest, DivU128)
251 EventEmitter<AluEvent> alu_event_emitter;
252 StrictMock<MockGreaterThan>
gt;
253 StrictMock<MockFieldGreaterThan>
field_gt;
255 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
259 auto a = MemoryValue::from<uint128_t>(max);
260 auto b = MemoryValue::from<uint128_t>(2);
262 EXPECT_CALL(gt,
gt(
b, MemoryValue::from<uint128_t>(1))).WillOnce(Return(
true));
265 EXPECT_CALL(range_check, assert_range(_, 64)).Times(4);
267 auto c = alu.div(
a,
b);
269 EXPECT_EQ(c, MemoryValue::from<uint128_t>(max >> 1));
271 auto events = alu_event_emitter.dump_events();
272 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::DIV, .a =
a, .b =
b, .c = c }));
275TEST(AvmSimulationAluTest, DivByZero)
277 EventEmitter<AluEvent> alu_event_emitter;
278 StrictMock<MockGreaterThan>
gt;
279 StrictMock<MockFieldGreaterThan>
field_gt;
281 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
283 auto a = MemoryValue::from<uint32_t>(6);
284 auto b = MemoryValue::from<uint32_t>(0);
286 EXPECT_THROW(alu.div(
a,
b), AluException);
288 auto events = alu_event_emitter.dump_events();
294TEST(AvmSimulationAluTest, DivFFTag)
296 EventEmitter<AluEvent> alu_event_emitter;
297 StrictMock<MockGreaterThan>
gt;
298 StrictMock<MockFieldGreaterThan>
field_gt;
300 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
302 auto a = MemoryValue::from<FF>(2);
303 auto b = MemoryValue::from<FF>(2);
305 EXPECT_THROW(alu.div(
a,
b), AluException);
307 auto events = alu_event_emitter.dump_events();
316TEST(AvmSimulationAluTest, FDiv)
318 EventEmitter<AluEvent> alu_event_emitter;
319 StrictMock<MockGreaterThan>
gt;
320 StrictMock<MockFieldGreaterThan>
field_gt;
322 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
324 auto a = MemoryValue::from<FF>(FF::modulus - 4);
325 auto b = MemoryValue::from<FF>(2);
327 auto c = alu.fdiv(
a,
b);
329 EXPECT_EQ(c, MemoryValue::from<FF>(FF::modulus - 2));
331 auto events = alu_event_emitter.dump_events();
332 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::FDIV, .a =
a, .b =
b, .c = c }));
335TEST(AvmSimulationAluTest, FDivByZero)
337 EventEmitter<AluEvent> alu_event_emitter;
338 StrictMock<MockGreaterThan>
gt;
339 StrictMock<MockFieldGreaterThan>
field_gt;
341 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
343 auto a = MemoryValue::from<FF>(FF::modulus - 4);
344 auto b = MemoryValue::from<FF>(0);
346 EXPECT_THROW(alu.fdiv(
a,
b), AluException);
348 auto events = alu_event_emitter.dump_events();
354TEST(AvmSimulationAluTest, FDivNonFFTag)
356 EventEmitter<AluEvent> alu_event_emitter;
357 StrictMock<MockGreaterThan>
gt;
358 StrictMock<MockFieldGreaterThan>
field_gt;
360 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
362 auto a = MemoryValue::from<uint64_t>(2);
363 auto b = MemoryValue::from<uint64_t>(2);
365 EXPECT_THROW(alu.fdiv(
a,
b), AluException);
367 auto events = alu_event_emitter.dump_events();
376TEST(AvmSimulationAluTest,
LT)
378 EventEmitter<AluEvent> alu_event_emitter;
379 StrictMock<MockGreaterThan>
gt;
380 StrictMock<MockFieldGreaterThan>
field_gt;
382 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
384 auto a = MemoryValue::from<uint32_t>(1);
385 auto b = MemoryValue::from<uint32_t>(2);
387 EXPECT_CALL(gt,
gt(
b,
a)).WillOnce(Return(
true));
389 auto c = alu.lt(
a,
b);
391 EXPECT_EQ(c, MemoryValue::from<uint1_t>(1));
393 auto events = alu_event_emitter.dump_events();
394 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::LT, .a =
a, .b =
b, .c = c }));
397TEST(AvmSimulationAluTest, LTFF)
399 EventEmitter<AluEvent> alu_event_emitter;
400 StrictMock<MockGreaterThan>
gt;
401 StrictMock<MockFieldGreaterThan>
field_gt;
403 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
405 auto a = MemoryValue::from<FF>(FF::modulus - 3);
406 auto b = MemoryValue::from<FF>(2);
408 EXPECT_CALL(gt,
gt(
b,
a)).WillOnce(Return(
false));
410 auto c = alu.lt(
a,
b);
412 EXPECT_EQ(c, MemoryValue::from<uint1_t>(0));
414 auto events = alu_event_emitter.dump_events();
415 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::LT, .a =
a, .b =
b, .c = c }));
418TEST(AvmSimulationAluTest, NegativeLTTag)
420 EventEmitter<AluEvent> alu_event_emitter;
421 StrictMock<MockGreaterThan>
gt;
422 StrictMock<MockFieldGreaterThan>
field_gt;
424 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
426 auto a = MemoryValue::from<uint32_t>(1);
427 auto b = MemoryValue::from<uint64_t>(2);
429 EXPECT_THROW(alu.lt(
a,
b), AluException);
431 auto events = alu_event_emitter.dump_events();
442 EventEmitter<AluEvent> alu_event_emitter;
443 StrictMock<MockGreaterThan>
gt;
444 StrictMock<MockFieldGreaterThan>
field_gt;
446 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
448 auto a = MemoryValue::from<uint32_t>(1);
449 auto b = MemoryValue::from<uint32_t>(2);
451 EXPECT_CALL(gt,
gt(
a,
b)).WillOnce(Return(
false));
453 auto c = alu.lte(
a,
b);
455 EXPECT_EQ(c, MemoryValue::from<uint1_t>(1));
457 auto events = alu_event_emitter.dump_events();
458 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::LTE, .a =
a, .b =
b, .c = c }));
461TEST(AvmSimulationAluTest, LTEEq)
463 EventEmitter<AluEvent> alu_event_emitter;
464 StrictMock<MockGreaterThan>
gt;
465 StrictMock<MockFieldGreaterThan>
field_gt;
467 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
469 auto a = MemoryValue::from<uint128_t>(2);
470 auto b = MemoryValue::from<uint128_t>(2);
472 EXPECT_CALL(gt,
gt(
a,
b)).WillOnce(Return(
false));
474 auto c = alu.lte(
a,
b);
476 EXPECT_EQ(c, MemoryValue::from<uint1_t>(1));
478 auto events = alu_event_emitter.dump_events();
479 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::LTE, .a =
a, .b =
b, .c = c }));
482TEST(AvmSimulationAluTest, LTEFF)
484 EventEmitter<AluEvent> alu_event_emitter;
485 StrictMock<MockGreaterThan>
gt;
486 StrictMock<MockFieldGreaterThan>
field_gt;
488 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
490 auto a = MemoryValue::from<FF>(FF::modulus - 3);
491 auto b = MemoryValue::from<FF>(2);
493 EXPECT_CALL(gt,
gt(
a,
b)).WillOnce(Return(
true));
495 auto c = alu.lte(
a,
b);
497 EXPECT_EQ(c, MemoryValue::from<uint1_t>(0));
499 auto events = alu_event_emitter.dump_events();
500 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::LTE, .a =
a, .b =
b, .c = c }));
504TEST(AvmSimulationAluTest, NegativeLTETag)
506 EventEmitter<AluEvent> alu_event_emitter;
507 StrictMock<MockGreaterThan>
gt;
508 StrictMock<MockFieldGreaterThan>
field_gt;
510 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
512 auto a = MemoryValue::from<uint32_t>(1);
513 auto b = MemoryValue::from<uint64_t>(2);
515 EXPECT_THROW(alu.lte(
a,
b), AluException);
517 auto events = alu_event_emitter.dump_events();
522TEST(AvmSimulationAluTest, EQEquality)
524 EventEmitter<AluEvent> alu_event_emitter;
525 StrictMock<MockGreaterThan>
gt;
526 StrictMock<MockFieldGreaterThan>
field_gt;
528 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
530 auto a = MemoryValue::from<uint128_t>(123456789);
531 auto b = MemoryValue::from<uint128_t>(123456789);
533 auto c = alu.eq(
a,
b);
535 EXPECT_EQ(c, MemoryValue::from<uint1_t>(1));
537 auto events = alu_event_emitter.dump_events();
542TEST(AvmSimulationAluTest, EQInequality)
544 EventEmitter<AluEvent> alu_event_emitter;
545 StrictMock<MockGreaterThan>
gt;
546 StrictMock<MockFieldGreaterThan>
field_gt;
548 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
550 auto a = MemoryValue::from<FF>(123456789);
551 auto b = MemoryValue::from<FF>(123456788);
553 auto c = alu.eq(
a,
b);
555 EXPECT_EQ(c, MemoryValue::from<uint1_t>(0));
557 auto events = alu_event_emitter.dump_events();
562TEST(AvmSimulationAluTest, EQTagError)
564 EventEmitter<AluEvent> alu_event_emitter;
565 StrictMock<MockGreaterThan>
gt;
566 StrictMock<MockFieldGreaterThan>
field_gt;
568 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
570 auto a = MemoryValue::from<uint1_t>(1);
571 auto b = MemoryValue::from<uint8_t>(1);
573 EXPECT_THROW(alu.eq(
a,
b), AluException);
575 auto events = alu_event_emitter.dump_events();
584TEST(AvmSimulationAluTest, NotBasic)
586 EventEmitter<AluEvent> alu_event_emitter;
587 StrictMock<MockGreaterThan>
gt;
588 StrictMock<MockFieldGreaterThan>
field_gt;
590 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
592 const auto a = MemoryValue::from<uint64_t>(98321);
593 const auto b = alu.op_not(
a);
597 auto events = alu_event_emitter.dump_events();
601TEST(AvmSimulationAluTest, NotFFTagError)
603 EventEmitter<AluEvent> alu_event_emitter;
604 StrictMock<MockGreaterThan>
gt;
605 StrictMock<MockFieldGreaterThan>
field_gt;
607 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
609 auto a = MemoryValue::from<FF>(FF::modulus - 3);
611 EXPECT_THROW(alu.op_not(
a), AluException);
613 auto events = alu_event_emitter.dump_events();
621TEST(AvmSimulationAluTest, Shl)
623 EventEmitter<AluEvent> alu_event_emitter;
624 StrictMock<MockGreaterThan>
gt;
625 StrictMock<MockFieldGreaterThan>
field_gt;
627 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
629 auto a = MemoryValue::from<uint32_t>(64);
630 auto b = MemoryValue::from<uint32_t>(2);
633 EXPECT_CALL(range_check, assert_range(64, 30)).Times(1);
634 EXPECT_CALL(range_check, assert_range(0, 2)).Times(1);
636 auto c = alu.shl(
a,
b);
638 EXPECT_EQ(c, MemoryValue::from<uint32_t>(256));
640 auto events = alu_event_emitter.dump_events();
641 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::SHL, .a =
a, .b =
b, .c = c }));
644TEST(AvmSimulationAluTest, ShlOverflow)
646 EventEmitter<AluEvent> alu_event_emitter;
647 StrictMock<MockGreaterThan>
gt;
648 StrictMock<MockFieldGreaterThan>
field_gt;
650 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
652 auto a = MemoryValue::from<uint32_t>(64);
653 auto b = MemoryValue::from<uint32_t>(100);
656 EXPECT_CALL(range_check, assert_range(68, 32)).Times(1);
657 EXPECT_CALL(range_check, assert_range(0, 32)).Times(1);
659 auto c = alu.shl(
a,
b);
661 EXPECT_EQ(c, MemoryValue::from<uint32_t>(0));
663 auto events = alu_event_emitter.dump_events();
664 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::SHL, .a =
a, .b =
b, .c = c }));
667TEST(AvmSimulationAluTest, NegativeShlTagMismatch)
669 EventEmitter<AluEvent> alu_event_emitter;
670 StrictMock<MockGreaterThan>
gt;
671 StrictMock<MockFieldGreaterThan>
field_gt;
673 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
675 auto a = MemoryValue::from<uint32_t>(64);
676 auto b = MemoryValue::from<uint64_t>(2);
678 EXPECT_THROW(alu.shl(
a,
b), AluException);
680 auto events = alu_event_emitter.dump_events();
689TEST(AvmSimulationAluTest, Shr)
691 EventEmitter<AluEvent> alu_event_emitter;
692 StrictMock<MockGreaterThan>
gt;
693 StrictMock<MockFieldGreaterThan>
field_gt;
695 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
697 auto a = MemoryValue::from<uint32_t>(64);
698 auto b = MemoryValue::from<uint32_t>(2);
701 EXPECT_CALL(range_check, assert_range(0, 2)).Times(1);
702 EXPECT_CALL(range_check, assert_range(16, 30)).Times(1);
704 auto c = alu.shr(
a,
b);
706 EXPECT_EQ(c, MemoryValue::from<uint32_t>(16));
708 auto events = alu_event_emitter.dump_events();
709 EXPECT_THAT(events, ElementsAre(AluEvent{ .operation =
AluOperation::SHR, .a =
a, .b =
b, .c = c }));
712TEST(AvmSimulationAluTest, ShrFFTag)
714 EventEmitter<AluEvent> alu_event_emitter;
715 StrictMock<MockGreaterThan>
gt;
716 StrictMock<MockFieldGreaterThan>
field_gt;
718 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
720 auto a = MemoryValue::from<FF>(64);
721 auto b = MemoryValue::from<FF>(2);
723 EXPECT_THROW(alu.shr(
a,
b), AluException);
725 auto events = alu_event_emitter.dump_events();
734TEST(AvmSimulationAluTest, TruncateTrivial)
736 EventEmitter<AluEvent> alu_event_emitter;
737 StrictMock<MockGreaterThan>
gt;
738 StrictMock<MockFieldGreaterThan>
field_gt;
740 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
745 auto c = MemoryValue::from<uint16_t>(8762);
748 auto events = alu_event_emitter.dump_events();
757TEST(AvmSimulationAluTest, TruncateLess128Bits)
759 EventEmitter<AluEvent> alu_event_emitter;
760 StrictMock<MockGreaterThan>
gt;
761 StrictMock<MockFieldGreaterThan>
field_gt;
763 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
765 FF a = (1 << 16) + 12222;
767 EXPECT_CALL(range_check, assert_range(1, 112)).Times(1);
770 auto c = MemoryValue::from<uint16_t>(12222);
773 auto events = alu_event_emitter.dump_events();
782TEST(AvmSimulationAluTest, TruncateGreater128Bits)
784 EventEmitter<AluEvent> alu_event_emitter;
785 StrictMock<MockGreaterThan>
gt;
786 StrictMock<MockFieldGreaterThan>
field_gt;
788 Alu alu(gt,
field_gt, range_check, alu_event_emitter);
791 U256Decomposition decomposition_a = { .lo = (
static_cast<uint128_t>(234) << 32) + 123456789, .hi = 176 };
793 EXPECT_CALL(range_check, assert_range(234, 96)).Times(1);
794 EXPECT_CALL(
field_gt, canon_dec(
a)).Times(1).WillOnce(Return(decomposition_a));
797 auto c = MemoryValue::from<uint32_t>(123456789);
801 auto events = alu_event_emitter.dump_events();
static TaggedValue from_tag(ValueTag tag, FF value)
TEST(EmitUnencryptedLogTest, Basic)
uint256_t get_tag_max_value(ValueTag tag)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
unsigned __int128 uint128_t
NiceMock< MockFieldGreaterThan > field_gt