Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
gt.test.cpp
Go to the documentation of this file.
7
8#include <gmock/gmock.h>
9#include <gtest/gtest.h>
10
11namespace bb::avm2::simulation {
12
13using ::testing::ElementsAre;
14using ::testing::Return;
15using ::testing::StrictMock;
16
17namespace {
18
19TEST(AvmSimulationGTTest, GTTrue)
20{
21 EventEmitter<GreaterThanEvent> gt_event_emitter;
22 StrictMock<MockRangeCheck> range_check;
23 StrictMock<MockFieldGreaterThan> field_gt;
24 GreaterThan gt(field_gt, range_check, gt_event_emitter);
25
26 uint128_t a = 2;
27 uint128_t b = 1;
28
29 EXPECT_CALL(range_check, assert_range(0, /*num_bits=*/16));
30
31 auto c = gt.gt(a, b);
32
33 EXPECT_EQ(c, true);
34
35 auto events = gt_event_emitter.dump_events();
36 EXPECT_THAT(events, ElementsAre(GreaterThanEvent{ .a = a, .b = b, .result = c }));
37}
38
39TEST(AvmSimulationGTTest, GTTrueDiffPowerOf2To16)
40{
41 EventEmitter<GreaterThanEvent> gt_event_emitter;
42 StrictMock<MockRangeCheck> range_check;
43 StrictMock<MockFieldGreaterThan> field_gt;
44 GreaterThan gt(field_gt, range_check, gt_event_emitter);
45
46 uint128_t a = (1 << 16) + 23;
47 uint128_t b = 22; // a - b - 1 == 1 << 16
48
49 EXPECT_CALL(range_check, assert_range(1 << 16, /*num_bits=*/32));
50
51 auto c = gt.gt(a, b);
52
53 EXPECT_EQ(c, true);
54
55 auto events = gt_event_emitter.dump_events();
56 EXPECT_THAT(events, ElementsAre(GreaterThanEvent{ .a = a, .b = b, .result = c }));
57}
58
59TEST(AvmSimulationGTTest, GTFalse)
60{
61 EventEmitter<GreaterThanEvent> gt_event_emitter;
62 StrictMock<MockRangeCheck> range_check;
63 StrictMock<MockFieldGreaterThan> field_gt;
64 GreaterThan gt(field_gt, range_check, gt_event_emitter);
65
66 uint128_t u128_max = static_cast<uint128_t>((uint256_t(1) << 128) - 1);
67
68 uint128_t a = 2;
69 uint128_t b = u128_max;
70
71 EXPECT_CALL(range_check, assert_range(u128_max - 2, /*num_bits=*/128));
72
73 auto c = gt.gt(a, b);
74
75 EXPECT_EQ(c, false);
76
77 auto events = gt_event_emitter.dump_events();
78 EXPECT_THAT(events, ElementsAre(GreaterThanEvent{ .a = a, .b = b, .result = c }));
79}
80
81TEST(AvmSimulationGTTest, GTFF)
82{
83 EventEmitter<GreaterThanEvent> gt_event_emitter;
84 StrictMock<MockRangeCheck> range_check;
85 StrictMock<MockFieldGreaterThan> field_gt;
86 GreaterThan gt(field_gt, range_check, gt_event_emitter);
87
88 FF a = 2;
89 FF b = FF::modulus - 3;
90
91 EXPECT_CALL(field_gt, ff_gt(FF(2), FF(FF::modulus - 3))).WillOnce(Return(false));
92 EXPECT_FALSE(gt.gt(a, b));
93
94 EXPECT_CALL(field_gt, ff_gt(FF(FF::modulus - 3), FF(2))).WillOnce(Return(true));
95 EXPECT_TRUE(gt.gt(b, a));
96}
97
98TEST(AvmSimulationGTTest, GTMemoryValue)
99{
100 EventEmitter<GreaterThanEvent> gt_event_emitter;
101 StrictMock<MockRangeCheck> range_check;
102 StrictMock<MockFieldGreaterThan> field_gt;
103 GreaterThan gt(field_gt, range_check, gt_event_emitter);
104
105 auto a = MemoryValue::from<uint64_t>(2);
106 auto b = MemoryValue::from<uint64_t>(1);
107
108 EXPECT_CALL(range_check, assert_range(0, /*num_bits=*/16));
109 EXPECT_TRUE(gt.gt(a, b));
110
111 auto a_ff = MemoryValue::from<FF>(1);
112 auto b_ff = MemoryValue::from<FF>(2);
113
114 EXPECT_CALL(field_gt, ff_gt(FF(1), FF(2))).WillOnce(Return(false));
115 EXPECT_FALSE(gt.gt(a_ff, b_ff));
116}
117
118} // namespace
119} // namespace bb::avm2::simulation
bool gt(const FF &a, const FF &b) override
Definition gt.cpp:10
EventEmitter< GreaterThanEvent > gt_event_emitter
RangeCheck range_check
GreaterThan gt
FF a
FF b
TEST(EmitUnencryptedLogTest, Basic)
typename Flavor::FF FF
unsigned __int128 uint128_t
Definition serialize.hpp:44
NiceMock< MockFieldGreaterThan > field_gt