2#include "../random/engine.hpp"
3#include <gtest/gtest.h>
10auto&
engine = numeric::get_debug_randomness();
15 constexpr uint128_t a{ 0b0110011001110010011001100,
16 0b1001011101101010101010100,
17 0b0101010010010101111100001,
18 0b0101011010101010100010001 };
21 for (
size_t i = 0; i < 128; ++i) {
36 EXPECT_EQ(c.data[0], 6ULL);
37 EXPECT_EQ(c.data[1], 8ULL);
38 EXPECT_EQ(c.data[2], 10ULL);
39 EXPECT_EQ(c.data[3], 12ULL);
40 EXPECT_EQ(d.data[0], 6ULL);
41 EXPECT_EQ(d.data[1], 8ULL);
42 EXPECT_EQ(d.data[2], 10ULL);
43 EXPECT_EQ(d.data[3], 12ULL);
53 EXPECT_EQ(
a.get_msb(), 96ULL);
54 EXPECT_EQ(
b.get_msb(), 64ULL);
55 EXPECT_EQ(c.get_msb(), 32ULL);
56 EXPECT_EQ(d.get_msb(), 0ULL);
66 EXPECT_EQ(c.data[0], d.data[0]);
67 EXPECT_EQ(c.data[1], d.data[1]);
68 EXPECT_EQ(c.data[2], d.data[2]);
69 EXPECT_EQ(c.data[3], d.data[3]);
72TEST(uint128, DivAndMod)
74 for (
size_t i = 0; i < 128; ++i) {
88 EXPECT_EQ(c.data[0],
a.
data[0]);
89 EXPECT_EQ(c.data[1],
a.
data[1]);
90 EXPECT_EQ(c.data[2],
a.
data[2]);
91 EXPECT_EQ(c.data[3],
a.
data[3]);
111 EXPECT_EQ(c.data[0], d.data[0]);
112 EXPECT_EQ(c.data[1], d.data[1]);
113 EXPECT_EQ(c.data[2], d.data[2]);
114 EXPECT_EQ(c.data[3], d.data[3]);
119 EXPECT_EQ(e.data[0], UINT32_MAX);
120 EXPECT_EQ(e.data[1], UINT32_MAX);
121 EXPECT_EQ(e.data[2], UINT32_MAX);
122 EXPECT_EQ(e.data[3], UINT32_MAX);
125TEST(uint128, RightShift)
127 constexpr uint128_t a{ 0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc, 0xdddddddd };
136 EXPECT_EQ(d,
uint128_t(0xbbbbbbbb, 0xcccccccc, 0xdddddddd, 0));
140 EXPECT_EQ(f,
uint128_t(0, 0xb8000000, 0xcccccccc, 0xdddddddd));
143TEST(uint128, LeftShift)
145 uint128_t a{ 0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc, 0xdddddddd };
154 EXPECT_EQ(d,
uint128_t(0, 0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc));
210 EXPECT_EQ(c.data[0], ~
a.
data[0]);
211 EXPECT_EQ(c.data[1], ~
a.
data[1]);
212 EXPECT_EQ(c.data[2], ~
a.
data[2]);
213 EXPECT_EQ(c.data[3], ~
a.
data[3]);
216TEST(uint128, LogicNot)
229TEST(uint128, Equality)
233 EXPECT_EQ(
a ==
b,
true);
236 EXPECT_EQ(
a ==
b,
false);
239 EXPECT_EQ(
a ==
b,
false);
242 EXPECT_EQ(
a ==
b,
false);
246 EXPECT_EQ(
a ==
b,
false);
249TEST(uint128, NotEqual)
253 EXPECT_EQ(
a !=
b,
false);
256 EXPECT_EQ(
a !=
b,
true);
259 EXPECT_EQ(
a !=
b,
true);
262 EXPECT_EQ(
a !=
b,
true);
266 EXPECT_EQ(
a !=
b,
true);
269TEST(uint128, GreaterThan)
271 constexpr uint128_t a{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX };
272 constexpr uint128_t b{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX };
273 EXPECT_EQ(
a >
b,
false);
275 constexpr uint128_t c =
uint128_t{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX - 1 };
276 EXPECT_EQ(
a > c,
true);
278 constexpr uint128_t d =
uint128_t{ UINT32_MAX, UINT32_MAX, UINT32_MAX - 1, UINT32_MAX };
279 EXPECT_EQ(
a > d,
true);
281 constexpr uint128_t e =
uint128_t{ UINT32_MAX, UINT32_MAX - 1, UINT32_MAX, UINT32_MAX };
282 EXPECT_EQ(
a > e,
true);
284 constexpr uint128_t f =
uint128_t{ UINT32_MAX - 1, UINT32_MAX, UINT32_MAX, UINT32_MAX };
285 EXPECT_EQ(
a > f,
true);
288TEST(uint128, GeaterThanOrEqual)
290 uint128_t a{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX - 1 };
291 uint128_t b{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX };
292 EXPECT_EQ(
a >=
b,
false);
294 b =
uint128_t{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX - 1 };
295 EXPECT_EQ(
a >
b,
false);
296 EXPECT_EQ(
a >=
b,
true);
298 b =
uint128_t{ UINT32_MAX, UINT32_MAX, UINT32_MAX - 1, UINT32_MAX };
299 EXPECT_EQ(
a >=
b,
false);
301 a =
uint128_t{ UINT32_MAX, UINT32_MAX - 1, UINT32_MAX - 1, UINT32_MAX };
302 EXPECT_EQ(
a >=
b,
false);
304 b =
uint128_t{ UINT32_MAX - 1, UINT32_MAX, UINT32_MAX, UINT32_MAX };
305 EXPECT_EQ(
a >=
b,
false);
308TEST(uint128, ToFromBuffer)
312 auto b = from_buffer<uint128_t>(buf);
TEST(acir_formal_proofs, uint_terms_add)
Tests 128-bit unsigned addition Verifies that the ACIR implementation of addition is correct Executio...
const std::vector< MemoryValue > data
Entry point for Barretenberg command-line interface.
std::vector< uint8_t > to_buffer(T const &value)
unsigned __int128 uint128_t