Project 2 - Fixed-Point Number Class
test.cpp
Go to the documentation of this file.
1 
3 #include <iostream>
4 #include <istream>
5 #include <ostream>
6 #include <sstream>
7 #include <stdexcept>
8 
9 #include "test.hpp"
10 #include "fixed.hpp"
11 
12 int main()
13 {
14  fixed f1;
15  TEST(f1.value() == 0);
16  fixed f2(1);
17  TEST(f2.value() == 10000);
18  fixed f3(3, 14162);
19  TEST(f3.value() == 31416);
20  fixed f4(2, 14159265);
21  TEST(f4.value() == 21416);
22  TEST(f2 + f4 == f1 + f3);
23  TEST(f2 + f4 <= f1 + f3);
24  TEST(f2 + f4 >= f1 + f3);
25  TEST(f1 < f2);
26  TEST(f1 <= f2);
27  TEST(f1 != f2);
28  TEST(f2 > f1);
29  TEST(f2 >= f1);
30  TEST(f2 != f1);
31 
32  TEST(f2 + f4 == f3 - f1);
33  TEST(f2 * f3 == f3);
34  TEST(f3 / f2 == f3);
35  f4 += f2;
36  TEST(f3 == f4);
37  f4 -= f1;
38  TEST(f3 == f4);
39  f4 *= f2;
40  TEST(f3 == f4);
41  f4 /= f2;
42  TEST(f3 == f4);
43 
44  TEST(-f4 == f1 - f4);
45  TEST(-(-f4) == f4);
46  --f4;
47  TEST(f4 + 1 == f3);
48  f4--;
49  TEST(f4 + 2 == f3);
50  ++f4;
51  TEST(f4 + 1 == f3);
52  f4++;
53  TEST(f4 == f3);
54  ++f3;
55  TEST(++f4 == f3);
56  TEST(f4-- == f3);
57  TEST(f4++ == --f3);
58  TEST(--f4 == f3);
59 
60  TEST(f4 / f3 == f2);
61  TEST(f4 - f3 == f1);
62 
63  TEST(f4.as_string() == "3.1416");
64  TEST(f4.integer() == 3);
65  f4 += fixed(0,4584);
66  TEST(f4 == 3.6);
67  TEST(f4.integer() == 3);
68  TEST(f4.round() == 4);
69 
70  TEST(f3.integer() == 3);
71  TEST((-f3).integer() == -3);
72  TEST(f3.fraction() == 1416);
73  TEST((-f3).fraction() == 1416);
74 
75  TEST(fixed(7,4999).round() == 7);
76  TEST(fixed(7,5000).round() == 8);
77  TEST(fixed(7,5001).round() == 8);
78  TEST(fixed(7,4999).round() == 7);
79  TEST(fixed(8,5000).round() == 8);
80  TEST(fixed(8,5001).round() == 9);
81 
82  TEST(fixed(123,2345500) == fixed(123,2346));
83  TEST(fixed(123,2345501) == fixed(123,2346));
84  TEST(fixed(123,2345499) == fixed(123,2345));
85  TEST(fixed(123,2346500) == fixed(123,2346));
86  TEST(fixed(123,2346501) == fixed(123,2347));
87  TEST(fixed(123,2346499) == fixed(123,2346));
88  TEST(fixed(123,2346400) == fixed(123,2346));
89  TEST(fixed(123,2346600) == fixed(123,2347));
90 
91  TEST(fixed(-7,4999).round() == -7);
92  TEST(fixed(-7,5000).round() == -8);
93  TEST(fixed(-7,5001).round() == -8);
94  TEST(fixed(-7,4999).round() == -7);
95  TEST(fixed(-8,5000).round() == -8);
96  TEST(fixed(-8,5001).round() == -9);
97 
98  TEST(fixed(-3.14159265).value() == -31416);
99  TEST(fixed(123,456789).value() == 1234568);
100  TEST(fixed(123,4).value() == 1230004);
101  TEST(fixed(-10,1111).value() == -101111);
102 
103  std::ostringstream out;
104  out << f3 << " 3.14159265 " << fixed(-10,12) << " 3 421.4 end";
105  fixed f5;
106  std::istringstream in(out.str());
107  TEST(in >> f5);
108  TEST(f5 == f3);
109  TEST(in >> f5);
110  TEST(f5 == f3);
111  TEST(in >> f5);
112  TEST(f5.value() == -100012);
113  TEST(in >> f5);
114  TEST(f5.value() == 30000);
115  TEST(in >> f5);
116  TEST(f5.value() == 4214000);
117  TEST(not (in >> f5));
118 
119  TEST(fixed(31.4159265) == fixed(31, 4159));
120  TEST(fixed(31.41595) == fixed(31, 4160));
121 
122  bool okay(false);
123  try {
124  fixed f6(1, -1);
125  } catch (std::invalid_argument const& ex) {
126  okay = true;
127  } catch (...) {
128  }
129  TEST(okay);
130 }
Implement a fixed-point number class. Values have places places after the decimal point...
Definition: fixed.hpp:37
value_type value() const
Return the internal value.
Definition: fixed.hpp:107
int main()
Definition: test.cpp:12
Fixed-point numbers.