1 #include "clang/AST/Type.h"
2 #include "llvm/ADT/APSInt.h"
3 #include "llvm/ADT/SmallString.h"
4 #include "gtest/gtest.h"
6 using clang::FixedPointValueToString
;
8 using llvm::SmallString
;
12 TEST(FixedPointString
, DifferentTypes
) {
14 FixedPointValueToString(S
, APSInt::get(320), 7);
15 ASSERT_STREQ(S
.c_str(), "2.5");
18 FixedPointValueToString(S
, APSInt::get(0), 7);
19 ASSERT_STREQ(S
.c_str(), "0.0");
21 // signed short _Accum
23 FixedPointValueToString(S
, APSInt::getMaxValue(16, /*Unsigned=*/false), 7);
24 ASSERT_STREQ(S
.c_str(), "255.9921875");
28 FixedPointValueToString(S
, APSInt::getMaxValue(32, /*Unsigned=*/false), 15);
29 ASSERT_STREQ(S
.c_str(), "65535.999969482421875");
33 FixedPointValueToString(S
, APSInt::getMaxValue(64, /*Unsigned=*/false), 31);
34 ASSERT_STREQ(S
.c_str(), "4294967295.9999999995343387126922607421875");
36 // unsigned short _Accum
38 FixedPointValueToString(S
, APSInt::getMaxValue(16, /*Unsigned=*/true), 8);
39 ASSERT_STREQ(S
.c_str(), "255.99609375");
43 FixedPointValueToString(S
, APSInt::getMaxValue(32, /*Unsigned=*/true), 16);
44 ASSERT_STREQ(S
.c_str(), "65535.9999847412109375");
46 // unsigned long _Accum
48 FixedPointValueToString(S
, APSInt::getMaxValue(64, /*Unsigned=*/true), 32);
49 ASSERT_STREQ(S
.c_str(), "4294967295.99999999976716935634613037109375");
51 // signed short _Fract
53 FixedPointValueToString(S
, APSInt::getMaxValue(8, /*Unsigned=*/false), 7);
54 ASSERT_STREQ(S
.c_str(), "0.9921875");
58 FixedPointValueToString(S
, APSInt::getMaxValue(16, /*Unsigned=*/false), 15);
59 ASSERT_STREQ(S
.c_str(), "0.999969482421875");
63 FixedPointValueToString(S
, APSInt::getMaxValue(32, /*Unsigned=*/false), 31);
64 ASSERT_STREQ(S
.c_str(), "0.9999999995343387126922607421875");
66 // unsigned short _Fract
68 FixedPointValueToString(S
, APSInt::getMaxValue(8, /*Unsigned=*/true), 8);
69 ASSERT_STREQ(S
.c_str(), "0.99609375");
73 FixedPointValueToString(S
, APSInt::getMaxValue(16, /*Unsigned=*/true), 16);
74 ASSERT_STREQ(S
.c_str(), "0.9999847412109375");
76 // unsigned long _Fract
78 FixedPointValueToString(S
, APSInt::getMaxValue(32, /*Unsigned=*/true), 32);
79 ASSERT_STREQ(S
.c_str(), "0.99999999976716935634613037109375");
82 TEST(FixedPointString
, Negative
) {
84 FixedPointValueToString(S
, APSInt::get(-320), 7);
85 ASSERT_STREQ(S
.c_str(), "-2.5");
88 FixedPointValueToString(S
, APSInt::get(-64), 7);
89 ASSERT_STREQ(S
.c_str(), "-0.5");
91 // signed short _Accum
93 FixedPointValueToString(S
, APSInt::getMinValue(16, /*Unsigned=*/false), 7);
94 ASSERT_STREQ(S
.c_str(), "-256.0");
98 FixedPointValueToString(S
, APSInt::getMinValue(32, /*Unsigned=*/false), 15);
99 ASSERT_STREQ(S
.c_str(), "-65536.0");
101 // signed long _Accum
103 FixedPointValueToString(S
, APSInt::getMinValue(64, /*Unsigned=*/false), 31);
104 ASSERT_STREQ(S
.c_str(), "-4294967296.0");