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) {
85 EXPECT_EQ(c.data[0],
a.
data[0]);
86 EXPECT_EQ(c.data[1],
a.
data[1]);
87 EXPECT_EQ(c.data[2],
a.
data[2]);
88 EXPECT_EQ(c.data[3],
a.
data[3]);
116 EXPECT_EQ(c.data[0], d.data[0]);
117 EXPECT_EQ(c.data[1], d.data[1]);
118 EXPECT_EQ(c.data[2], d.data[2]);
119 EXPECT_EQ(c.data[3], d.data[3]);
124 EXPECT_EQ(e.data[0], UINT32_MAX);
125 EXPECT_EQ(e.data[1], UINT32_MAX);
126 EXPECT_EQ(e.data[2], UINT32_MAX);
127 EXPECT_EQ(e.data[3], UINT32_MAX);
130TEST(uint128, RightShift)
132 constexpr uint128_t a{ 0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc, 0xdddddddd };
141 EXPECT_EQ(d,
uint128_t(0xbbbbbbbb, 0xcccccccc, 0xdddddddd, 0));
145 EXPECT_EQ(f,
uint128_t(0, 0xb8000000, 0xcccccccc, 0xdddddddd));
148TEST(uint128, LeftShift)
150 uint128_t a{ 0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc, 0xdddddddd };
159 EXPECT_EQ(d,
uint128_t(0, 0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc));
215 EXPECT_EQ(c.data[0], ~
a.
data[0]);
216 EXPECT_EQ(c.data[1], ~
a.
data[1]);
217 EXPECT_EQ(c.data[2], ~
a.
data[2]);
218 EXPECT_EQ(c.data[3], ~
a.
data[3]);
221TEST(uint128, LogicNot)
234TEST(uint128, Equality)
238 EXPECT_EQ(
a ==
b,
true);
241 EXPECT_EQ(
a ==
b,
false);
244 EXPECT_EQ(
a ==
b,
false);
247 EXPECT_EQ(
a ==
b,
false);
251 EXPECT_EQ(
a ==
b,
false);
254TEST(uint128, NotEqual)
258 EXPECT_EQ(
a !=
b,
false);
261 EXPECT_EQ(
a !=
b,
true);
264 EXPECT_EQ(
a !=
b,
true);
267 EXPECT_EQ(
a !=
b,
true);
271 EXPECT_EQ(
a !=
b,
true);
274TEST(uint128, GreaterThan)
276 constexpr uint128_t a{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX };
277 constexpr uint128_t b{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX };
278 EXPECT_EQ(
a >
b,
false);
280 constexpr uint128_t c =
uint128_t{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX - 1 };
281 EXPECT_EQ(
a > c,
true);
283 constexpr uint128_t d =
uint128_t{ UINT32_MAX, UINT32_MAX, UINT32_MAX - 1, UINT32_MAX };
284 EXPECT_EQ(
a > d,
true);
286 constexpr uint128_t e =
uint128_t{ UINT32_MAX, UINT32_MAX - 1, UINT32_MAX, UINT32_MAX };
287 EXPECT_EQ(
a > e,
true);
289 constexpr uint128_t f =
uint128_t{ UINT32_MAX - 1, UINT32_MAX, UINT32_MAX, UINT32_MAX };
290 EXPECT_EQ(
a > f,
true);
293TEST(uint128, GeaterThanOrEqual)
295 uint128_t a{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX - 1 };
296 uint128_t b{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX };
297 EXPECT_EQ(
a >=
b,
false);
299 b =
uint128_t{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX - 1 };
300 EXPECT_EQ(
a >
b,
false);
301 EXPECT_EQ(
a >=
b,
true);
303 b =
uint128_t{ UINT32_MAX, UINT32_MAX, UINT32_MAX - 1, UINT32_MAX };
304 EXPECT_EQ(
a >=
b,
false);
306 a =
uint128_t{ UINT32_MAX, UINT32_MAX - 1, UINT32_MAX - 1, UINT32_MAX };
307 EXPECT_EQ(
a >=
b,
false);
309 b =
uint128_t{ UINT32_MAX - 1, UINT32_MAX, UINT32_MAX, UINT32_MAX };
310 EXPECT_EQ(
a >=
b,
false);
313TEST(uint128, ToFromBuffer)
317 auto b = from_buffer<uint128_t>(
buf);
TEST(acir_formal_proofs, uint_terms_add)
Tests 127-bit unsigned addition Verifies that the ACIR implementation of addition is correct Executio...
const std::vector< FF > data
Entry point for Barretenberg command-line interface.
std::vector< uint8_t > to_buffer(T const &value)
unsigned __int128 uint128_t