2021-08-20 18:09:28 +02:00
|
|
|
#include <sstream>
|
|
|
|
|
2021-08-20 17:22:21 +02:00
|
|
|
#include <gtest/gtest.h>
|
|
|
|
|
|
|
|
#include "bignum.hh"
|
|
|
|
|
|
|
|
using namespace abacus::bignum;
|
|
|
|
|
2021-08-20 18:09:28 +02:00
|
|
|
TEST(BigNum, dump) {
|
|
|
|
auto const zero = BigNum(0);
|
|
|
|
auto const one = BigNum(1);
|
|
|
|
auto const minus_one = BigNum(-1);
|
|
|
|
auto const forty_two = BigNum(42);
|
|
|
|
|
|
|
|
auto const to_str = [](auto num) {
|
|
|
|
std::stringstream str;
|
|
|
|
str << num;
|
|
|
|
return str.str();
|
|
|
|
};
|
|
|
|
|
2021-08-20 18:34:41 +02:00
|
|
|
EXPECT_EQ(to_str(zero), "0");
|
|
|
|
EXPECT_EQ(to_str(one), "1");
|
|
|
|
EXPECT_EQ(to_str(minus_one), "-1");
|
|
|
|
EXPECT_EQ(to_str(forty_two), "42");
|
2021-08-20 18:09:28 +02:00
|
|
|
}
|
|
|
|
|
2021-08-20 17:22:21 +02:00
|
|
|
TEST(BigNum, equality) {
|
|
|
|
auto const zero = BigNum(0);
|
|
|
|
auto const one = BigNum(1);
|
|
|
|
|
2021-08-20 18:34:41 +02:00
|
|
|
EXPECT_EQ(zero, zero);
|
|
|
|
EXPECT_EQ(one, one);
|
|
|
|
EXPECT_NE(zero, one);
|
2021-08-20 17:22:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(BigNum, comparisons) {
|
|
|
|
auto const zero = BigNum(0);
|
|
|
|
auto const one = BigNum(1);
|
|
|
|
|
2021-08-20 18:34:41 +02:00
|
|
|
EXPECT_LT(zero, one);
|
|
|
|
EXPECT_LE(zero, one);
|
|
|
|
EXPECT_LE(zero, zero);
|
2021-08-20 17:22:21 +02:00
|
|
|
|
2021-08-20 18:34:41 +02:00
|
|
|
EXPECT_GT(one, zero);
|
|
|
|
EXPECT_GE(one, zero);
|
|
|
|
EXPECT_GE(one, one);
|
2021-08-20 17:22:21 +02:00
|
|
|
}
|
2021-08-20 17:27:56 +02:00
|
|
|
|
|
|
|
TEST(BigNum, unary) {
|
|
|
|
auto const zero = BigNum(0);
|
|
|
|
auto const one = BigNum(1);
|
|
|
|
|
2021-08-20 18:34:41 +02:00
|
|
|
EXPECT_EQ(zero, -zero);
|
|
|
|
EXPECT_NE(one, -one);
|
2021-08-20 17:27:56 +02:00
|
|
|
|
|
|
|
auto const minus_one = BigNum(-1);
|
2021-08-20 18:34:41 +02:00
|
|
|
EXPECT_EQ(minus_one, -one);
|
2021-08-20 17:27:56 +02:00
|
|
|
}
|