1 | #include "clang/AST/Type.h" |
2 | #include "llvm/ADT/APSInt.h" |
3 | #include "llvm/ADT/SmallString.h" |
4 | #include "gtest/gtest.h" |
5 | |
6 | using clang::FixedPointValueToString; |
7 | using llvm::APSInt; |
8 | using llvm::SmallString; |
9 | |
10 | namespace { |
11 | |
12 | TEST(FixedPointString, DifferentTypes) { |
13 | SmallString<64> S; |
14 | FixedPointValueToString(S, APSInt::get(320), 7); |
15 | ASSERT_STREQ(S.c_str(), "2.5"); |
16 | |
17 | S.clear(); |
18 | FixedPointValueToString(S, APSInt::get(0), 7); |
19 | ASSERT_STREQ(S.c_str(), "0.0"); |
20 | |
21 | |
22 | S.clear(); |
23 | FixedPointValueToString(S, APSInt::getMaxValue(16, ), 7); |
24 | ASSERT_STREQ(S.c_str(), "255.9921875"); |
25 | |
26 | |
27 | S.clear(); |
28 | FixedPointValueToString(S, APSInt::getMaxValue(32, ), 15); |
29 | ASSERT_STREQ(S.c_str(), "65535.999969482421875"); |
30 | |
31 | |
32 | S.clear(); |
33 | FixedPointValueToString(S, APSInt::getMaxValue(64, ), 31); |
34 | ASSERT_STREQ(S.c_str(), "4294967295.9999999995343387126922607421875"); |
35 | |
36 | |
37 | S.clear(); |
38 | FixedPointValueToString(S, APSInt::getMaxValue(16, ), 8); |
39 | ASSERT_STREQ(S.c_str(), "255.99609375"); |
40 | |
41 | |
42 | S.clear(); |
43 | FixedPointValueToString(S, APSInt::getMaxValue(32, ), 16); |
44 | ASSERT_STREQ(S.c_str(), "65535.9999847412109375"); |
45 | |
46 | |
47 | S.clear(); |
48 | FixedPointValueToString(S, APSInt::getMaxValue(64, ), 32); |
49 | ASSERT_STREQ(S.c_str(), "4294967295.99999999976716935634613037109375"); |
50 | |
51 | |
52 | S.clear(); |
53 | FixedPointValueToString(S, APSInt::getMaxValue(8, ), 7); |
54 | ASSERT_STREQ(S.c_str(), "0.9921875"); |
55 | |
56 | |
57 | S.clear(); |
58 | FixedPointValueToString(S, APSInt::getMaxValue(16, ), 15); |
59 | ASSERT_STREQ(S.c_str(), "0.999969482421875"); |
60 | |
61 | |
62 | S.clear(); |
63 | FixedPointValueToString(S, APSInt::getMaxValue(32, ), 31); |
64 | ASSERT_STREQ(S.c_str(), "0.9999999995343387126922607421875"); |
65 | |
66 | |
67 | S.clear(); |
68 | FixedPointValueToString(S, APSInt::getMaxValue(8, ), 8); |
69 | ASSERT_STREQ(S.c_str(), "0.99609375"); |
70 | |
71 | |
72 | S.clear(); |
73 | FixedPointValueToString(S, APSInt::getMaxValue(16, ), 16); |
74 | ASSERT_STREQ(S.c_str(), "0.9999847412109375"); |
75 | |
76 | |
77 | S.clear(); |
78 | FixedPointValueToString(S, APSInt::getMaxValue(32, ), 32); |
79 | ASSERT_STREQ(S.c_str(), "0.99999999976716935634613037109375"); |
80 | } |
81 | |
82 | TEST(FixedPointString, Negative) { |
83 | SmallString<64> S; |
84 | FixedPointValueToString(S, APSInt::get(-320), 7); |
85 | ASSERT_STREQ(S.c_str(), "-2.5"); |
86 | |
87 | S.clear(); |
88 | FixedPointValueToString(S, APSInt::get(-64), 7); |
89 | ASSERT_STREQ(S.c_str(), "-0.5"); |
90 | |
91 | |
92 | S.clear(); |
93 | FixedPointValueToString(S, APSInt::getMinValue(16, ), 7); |
94 | ASSERT_STREQ(S.c_str(), "-256.0"); |
95 | |
96 | |
97 | S.clear(); |
98 | FixedPointValueToString(S, APSInt::getMinValue(32, ), 15); |
99 | ASSERT_STREQ(S.c_str(), "-65536.0"); |
100 | |
101 | |
102 | S.clear(); |
103 | FixedPointValueToString(S, APSInt::getMinValue(64, ), 31); |
104 | ASSERT_STREQ(S.c_str(), "-4294967296.0"); |
105 | } |
106 | |
107 | } |
108 | |