NewLang Project
Yet another programm language
Loading...
Searching...
No Matches
rational_test.cpp
Go to the documentation of this file.
1#ifdef BUILD_UNITTEST
2
3#include "warning_push.h"
4#include <gtest/gtest.h>
5#include "warning_pop.h"
6
7
8#include "rational.h"
9
10using namespace newlang;
11
12TEST(ObjTest, BigNum) {
13
14 BigNum dec;
15
16 ASSERT_TRUE(dec.value);
17
18 dec.SetFromString("123456789");
19 ASSERT_TRUE(dec.value);
20
21 ASSERT_STREQ("123456789", dec.GetAsString().c_str());
22 ASSERT_EQ(123456789, dec.GetAsInteger());
23 ASSERT_EQ(123456789, dec.GetAsNumber());
24
25 BigNum dec2;
26 dec2.SetFromString("-123456789");
27 ASSERT_STREQ("-123456789", dec2.GetAsString().c_str());
28 ASSERT_EQ(-123456789, dec2.GetAsInteger());
29 ASSERT_EQ(-123456789, dec2.GetAsNumber());
30
31 dec.add(dec2);
32 ASSERT_STREQ("0", dec.GetAsString().c_str());
33 ASSERT_EQ(0, dec.GetAsInteger());
34
35 dec.sub(dec2);
36 ASSERT_STREQ("123456789", dec.GetAsString().c_str());
37 ASSERT_EQ(123456789, dec.GetAsInteger());
38
39
40 BigNum dec3;
41 dec3.SetFromString("123");
42 ASSERT_STREQ("123", dec3.GetAsString().c_str());
43 ASSERT_EQ(123, dec3.GetAsInteger());
44
45 dec.mul(dec3);
46 ASSERT_STREQ("15185185047", dec.GetAsString().c_str());
47 ASSERT_EQ(15185185047, dec.GetAsInteger());
48
49 dec.div(dec2, dec3);
50 ASSERT_STREQ("-123", dec.GetAsString().c_str());
51 ASSERT_EQ(-123, dec.GetAsInteger());
52
53 ASSERT_STREQ("0", dec3.GetAsString().c_str());
54 ASSERT_EQ(0, dec3.GetAsInteger());
55
56
57 dec.SetFromString("123456789123456789123456789123456789");
58 ASSERT_STREQ("123456789123456789123456789123456789", dec.GetAsString().c_str());
59 ASSERT_ANY_THROW(dec.GetAsInteger());
60 ASSERT_DOUBLE_EQ(1.23456789123456789e+35, dec.GetAsNumber());
61
62}
63
64#endif
Definition nlc.h:59
BigNum & div(const BigNum &val, BigNum &rem)
Definition rational.cpp:164
bool SetFromString(const std::string_view str)
Definition rational.cpp:121
BigNum & mul(const BigNum &val)
Definition rational.cpp:155
std::string GetAsString() const
Definition rational.cpp:131
BigNum & sub(const BigNum &val)
Definition rational.cpp:147
double GetAsNumber() const
Definition rational.cpp:88
BigNum & add(const BigNum &val)
Definition rational.cpp:139
int64_t GetAsInteger() const
Definition rational.cpp:72