|
@@ -1,10 +1,10 @@
|
|
#include <library/cpp/testing/unittest/registar.h>
|
|
#include <library/cpp/testing/unittest/registar.h>
|
|
#include <library/cpp/int128/int128.h>
|
|
#include <library/cpp/int128/int128.h>
|
|
-
|
|
|
|
|
|
+
|
|
#include "int128_ut_helpers.h"
|
|
#include "int128_ut_helpers.h"
|
|
|
|
|
|
-class TUInt128Test: public TTestBase {
|
|
|
|
- UNIT_TEST_SUITE(TUInt128Test);
|
|
|
|
|
|
+class TUInt128Test: public TTestBase {
|
|
|
|
+ UNIT_TEST_SUITE(TUInt128Test);
|
|
UNIT_TEST(Create);
|
|
UNIT_TEST(Create);
|
|
UNIT_TEST(Minus);
|
|
UNIT_TEST(Minus);
|
|
UNIT_TEST(Plus);
|
|
UNIT_TEST(Plus);
|
|
@@ -16,100 +16,100 @@ class TUInt128Test: public TTestBase {
|
|
#if defined(Y_HAVE_INT128)
|
|
#if defined(Y_HAVE_INT128)
|
|
UNIT_TEST(FromSystemUint128);
|
|
UNIT_TEST(FromSystemUint128);
|
|
#endif
|
|
#endif
|
|
- UNIT_TEST_SUITE_END();
|
|
|
|
-
|
|
|
|
-private:
|
|
|
|
- void Create();
|
|
|
|
- void Minus();
|
|
|
|
- void Plus();
|
|
|
|
- void Shift();
|
|
|
|
- void Overflow();
|
|
|
|
- void Underflow();
|
|
|
|
|
|
+ UNIT_TEST_SUITE_END();
|
|
|
|
+
|
|
|
|
+private:
|
|
|
|
+ void Create();
|
|
|
|
+ void Minus();
|
|
|
|
+ void Plus();
|
|
|
|
+ void Shift();
|
|
|
|
+ void Overflow();
|
|
|
|
+ void Underflow();
|
|
void ToStringTest();
|
|
void ToStringTest();
|
|
void FromStringTest();
|
|
void FromStringTest();
|
|
#if defined(Y_HAVE_INT128)
|
|
#if defined(Y_HAVE_INT128)
|
|
void FromSystemUint128();
|
|
void FromSystemUint128();
|
|
#endif
|
|
#endif
|
|
-};
|
|
|
|
-
|
|
|
|
-UNIT_TEST_SUITE_REGISTRATION(TUInt128Test);
|
|
|
|
-
|
|
|
|
-void TUInt128Test::Create() {
|
|
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+UNIT_TEST_SUITE_REGISTRATION(TUInt128Test);
|
|
|
|
+
|
|
|
|
+void TUInt128Test::Create() {
|
|
const ui128 n1 = 10;
|
|
const ui128 n1 = 10;
|
|
- UNIT_ASSERT_EQUAL(n1, 10);
|
|
|
|
-
|
|
|
|
|
|
+ UNIT_ASSERT_EQUAL(n1, 10);
|
|
|
|
+
|
|
const ui128 n2 = n1;
|
|
const ui128 n2 = n1;
|
|
- UNIT_ASSERT_EQUAL(n2, 10);
|
|
|
|
-
|
|
|
|
|
|
+ UNIT_ASSERT_EQUAL(n2, 10);
|
|
|
|
+
|
|
const ui128 n3(10);
|
|
const ui128 n3(10);
|
|
- UNIT_ASSERT_EQUAL(n3, 10);
|
|
|
|
-}
|
|
|
|
-void TUInt128Test::Minus() {
|
|
|
|
|
|
+ UNIT_ASSERT_EQUAL(n3, 10);
|
|
|
|
+}
|
|
|
|
+void TUInt128Test::Minus() {
|
|
const ui128 n2 = 20;
|
|
const ui128 n2 = 20;
|
|
const ui128 n3 = 30;
|
|
const ui128 n3 = 30;
|
|
-
|
|
|
|
|
|
+
|
|
ui128 n4 = n3 - n2;
|
|
ui128 n4 = n3 - n2;
|
|
- UNIT_ASSERT_EQUAL(n4, 10);
|
|
|
|
-
|
|
|
|
- n4 = n4 - 2;
|
|
|
|
- UNIT_ASSERT_EQUAL(n4, 8);
|
|
|
|
-
|
|
|
|
- n4 -= 2;
|
|
|
|
- UNIT_ASSERT_EQUAL(n4, 6);
|
|
|
|
-
|
|
|
|
- n4 = 10 - n4;
|
|
|
|
- UNIT_ASSERT_EQUAL(n4, 4);
|
|
|
|
-}
|
|
|
|
-void TUInt128Test::Plus() {
|
|
|
|
|
|
+ UNIT_ASSERT_EQUAL(n4, 10);
|
|
|
|
+
|
|
|
|
+ n4 = n4 - 2;
|
|
|
|
+ UNIT_ASSERT_EQUAL(n4, 8);
|
|
|
|
+
|
|
|
|
+ n4 -= 2;
|
|
|
|
+ UNIT_ASSERT_EQUAL(n4, 6);
|
|
|
|
+
|
|
|
|
+ n4 = 10 - n4;
|
|
|
|
+ UNIT_ASSERT_EQUAL(n4, 4);
|
|
|
|
+}
|
|
|
|
+void TUInt128Test::Plus() {
|
|
const ui128 n2 = 20;
|
|
const ui128 n2 = 20;
|
|
const ui128 n3 = 30;
|
|
const ui128 n3 = 30;
|
|
-
|
|
|
|
|
|
+
|
|
ui128 n4 = n3 + n2;
|
|
ui128 n4 = n3 + n2;
|
|
- UNIT_ASSERT_EQUAL(n4, 50);
|
|
|
|
-
|
|
|
|
- n4 = n4 + 2;
|
|
|
|
- UNIT_ASSERT_EQUAL(n4, 52);
|
|
|
|
-
|
|
|
|
- n4 += 2;
|
|
|
|
- UNIT_ASSERT_EQUAL(n4, 54);
|
|
|
|
-
|
|
|
|
- n4 = 10 + n4;
|
|
|
|
- UNIT_ASSERT_EQUAL(n4, 64);
|
|
|
|
-}
|
|
|
|
-void TUInt128Test::Shift() {
|
|
|
|
|
|
+ UNIT_ASSERT_EQUAL(n4, 50);
|
|
|
|
+
|
|
|
|
+ n4 = n4 + 2;
|
|
|
|
+ UNIT_ASSERT_EQUAL(n4, 52);
|
|
|
|
+
|
|
|
|
+ n4 += 2;
|
|
|
|
+ UNIT_ASSERT_EQUAL(n4, 54);
|
|
|
|
+
|
|
|
|
+ n4 = 10 + n4;
|
|
|
|
+ UNIT_ASSERT_EQUAL(n4, 64);
|
|
|
|
+}
|
|
|
|
+void TUInt128Test::Shift() {
|
|
ui128 n = 1;
|
|
ui128 n = 1;
|
|
-
|
|
|
|
|
|
+
|
|
const ui128 n4 = n << 4;
|
|
const ui128 n4 = n << 4;
|
|
UNIT_ASSERT_EQUAL(n4, ui128(0x0, 0x0000000000000010));
|
|
UNIT_ASSERT_EQUAL(n4, ui128(0x0, 0x0000000000000010));
|
|
- UNIT_ASSERT_EQUAL(n4 >> 4, 1);
|
|
|
|
-
|
|
|
|
|
|
+ UNIT_ASSERT_EQUAL(n4 >> 4, 1);
|
|
|
|
+
|
|
const ui128 n8 = n << 8;
|
|
const ui128 n8 = n << 8;
|
|
UNIT_ASSERT_EQUAL(n8, ui128(0x0, 0x0000000000000100));
|
|
UNIT_ASSERT_EQUAL(n8, ui128(0x0, 0x0000000000000100));
|
|
- UNIT_ASSERT_EQUAL(n8 >> 8, 1);
|
|
|
|
-
|
|
|
|
|
|
+ UNIT_ASSERT_EQUAL(n8 >> 8, 1);
|
|
|
|
+
|
|
const ui128 n60 = n << 60;
|
|
const ui128 n60 = n << 60;
|
|
UNIT_ASSERT_EQUAL(n60, ui128(0x0, 0x1000000000000000));
|
|
UNIT_ASSERT_EQUAL(n60, ui128(0x0, 0x1000000000000000));
|
|
- UNIT_ASSERT_EQUAL(n60 >> 60, 1);
|
|
|
|
-
|
|
|
|
|
|
+ UNIT_ASSERT_EQUAL(n60 >> 60, 1);
|
|
|
|
+
|
|
const ui128 n64 = n << 64;
|
|
const ui128 n64 = n << 64;
|
|
UNIT_ASSERT_EQUAL(n64, ui128(0x1, 0x0000000000000000));
|
|
UNIT_ASSERT_EQUAL(n64, ui128(0x1, 0x0000000000000000));
|
|
- UNIT_ASSERT_EQUAL(n64 >> 64, 1);
|
|
|
|
-
|
|
|
|
|
|
+ UNIT_ASSERT_EQUAL(n64 >> 64, 1);
|
|
|
|
+
|
|
const ui128 n124 = n << 124;
|
|
const ui128 n124 = n << 124;
|
|
UNIT_ASSERT_EQUAL(n124, ui128(0x1000000000000000, 0x0000000000000000));
|
|
UNIT_ASSERT_EQUAL(n124, ui128(0x1000000000000000, 0x0000000000000000));
|
|
- UNIT_ASSERT_EQUAL(n124 >> 124, 1);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void TUInt128Test::Overflow() {
|
|
|
|
|
|
+ UNIT_ASSERT_EQUAL(n124 >> 124, 1);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void TUInt128Test::Overflow() {
|
|
ui128 n = ui128(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF);
|
|
ui128 n = ui128(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF);
|
|
const ui128 n2 = n + 2;
|
|
const ui128 n2 = n + 2;
|
|
- UNIT_ASSERT_EQUAL(n2, 1);
|
|
|
|
-}
|
|
|
|
-void TUInt128Test::Underflow() {
|
|
|
|
|
|
+ UNIT_ASSERT_EQUAL(n2, 1);
|
|
|
|
+}
|
|
|
|
+void TUInt128Test::Underflow() {
|
|
ui128 n = 1;
|
|
ui128 n = 1;
|
|
const ui128 n128 = n - 2;
|
|
const ui128 n128 = n - 2;
|
|
UNIT_ASSERT_EQUAL(n128, ui128(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF));
|
|
UNIT_ASSERT_EQUAL(n128, ui128(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF));
|
|
-}
|
|
|
|
|
|
+}
|
|
|
|
|
|
void TUInt128Test::ToStringTest() {
|
|
void TUInt128Test::ToStringTest() {
|
|
ui128 n(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF);
|
|
ui128 n(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF);
|