OSDN Git Service

157bf7e6939fc4ab8e49e17680cdb4f949470c61
[simplecms/utakata.git] / test / bignum_test.cpp.bk
1 #include <iostream>
2 #include <sstream>
3 #include <string>
4 #include <functional>
5
6 #include "../simpletest.h"
7
8 #include "../bignum.h"
9
10 using namespace utakata;
11
12 bool bignum_test(smart_ptr<simpletest::SimpleTestAsserter> asserter)
13 {
14     // メモリの許す限り桁数を維持する整数オブジェクトのテストを行う。
15     numeric::Bignum a("1000");
16     numeric::Bignum b("2000");
17
18     numeric::Bignum c;
19
20     asserter->check(a < b, true , "failure less than");
21     asserter->check(a > b, false, "failure greater than");
22     asserter->check(a <= b, true, "failure less equal");
23     asserter->check(a >= b, false, "failure greater equal");
24     asserter->check(a == b, false, "failure equal");
25     asserter->check(a != b, true, "failure not equal");
26     c = a + b;
27     asserter->check(a.to_str(), "1000", "error to_str 1000");
28     asserter->check(b.to_str(), "2000", "error to_str 2000");
29     asserter->check(c.to_str(), "3000", "error to_str 3000");
30
31     c = a - b;
32     asserter->check(c.to_str(), "-1000");
33     c = c + a;
34     asserter->check(c.to_str(), "0");
35
36     c = a * b;
37     asserter->check(c.to_str(), "2000000");
38
39     c = a / b;
40     asserter->check(c.to_str(), "0");
41     c = b / a;
42     asserter->check(c.to_str(), "2");
43
44     // 巨大数の取り扱い。
45     // 1000億
46     a = numeric::Bignum("100000000000");
47     b = numeric::Bignum("200100200032");
48
49     c = a + b;
50     asserter->check(c.to_str(), "300100200032", "failure plus result not equal 300100200032");
51
52     c = a - b;
53     asserter->check(c.to_str(), "-100100200032", "failure minus result not equal -100100200032");
54
55     c = a * b;
56     asserter->check(c.to_str(), "20010020003200000000000");
57
58     c = a / b;
59     asserter->check(c.to_str(), "0");
60     c = b / a;
61     asserter->check(c.to_str(), "2");
62     
63     return asserter->isOk();
64 }
65
66 int main(int argc, char *argv[])
67 {
68     simpletest::SimpleTestSuite suite("bignum test");
69     suite.addTester(sfcr::screate(bignum_test, suite.getAsserter()));
70     return suite.run();
71
72 }