[SCCP] Avoid modifying AdditionalUsers while iterating over it
[llvm-project.git] / clang / unittests / Frontend / FixedPointString.cpp
blob755efd7fcaab24af818fc8cb5203f371a673fec2
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;
7 using llvm::APSInt;
8 using llvm::SmallString;
10 namespace {
12 TEST(FixedPointString, DifferentTypes) {
13 SmallString<64> S;
14 FixedPointValueToString(S, APSInt::get(320), 7);
15 ASSERT_STREQ(S.c_str(), "2.5");
17 S.clear();
18 FixedPointValueToString(S, APSInt::get(0), 7);
19 ASSERT_STREQ(S.c_str(), "0.0");
21 // signed short _Accum
22 S.clear();
23 FixedPointValueToString(S, APSInt::getMaxValue(16, /*Unsigned=*/false), 7);
24 ASSERT_STREQ(S.c_str(), "255.9921875");
26 // signed _Accum
27 S.clear();
28 FixedPointValueToString(S, APSInt::getMaxValue(32, /*Unsigned=*/false), 15);
29 ASSERT_STREQ(S.c_str(), "65535.999969482421875");
31 // signed long _Accum
32 S.clear();
33 FixedPointValueToString(S, APSInt::getMaxValue(64, /*Unsigned=*/false), 31);
34 ASSERT_STREQ(S.c_str(), "4294967295.9999999995343387126922607421875");
36 // unsigned short _Accum
37 S.clear();
38 FixedPointValueToString(S, APSInt::getMaxValue(16, /*Unsigned=*/true), 8);
39 ASSERT_STREQ(S.c_str(), "255.99609375");
41 // unsigned _Accum
42 S.clear();
43 FixedPointValueToString(S, APSInt::getMaxValue(32, /*Unsigned=*/true), 16);
44 ASSERT_STREQ(S.c_str(), "65535.9999847412109375");
46 // unsigned long _Accum
47 S.clear();
48 FixedPointValueToString(S, APSInt::getMaxValue(64, /*Unsigned=*/true), 32);
49 ASSERT_STREQ(S.c_str(), "4294967295.99999999976716935634613037109375");
51 // signed short _Fract
52 S.clear();
53 FixedPointValueToString(S, APSInt::getMaxValue(8, /*Unsigned=*/false), 7);
54 ASSERT_STREQ(S.c_str(), "0.9921875");
56 // signed _Fract
57 S.clear();
58 FixedPointValueToString(S, APSInt::getMaxValue(16, /*Unsigned=*/false), 15);
59 ASSERT_STREQ(S.c_str(), "0.999969482421875");
61 // signed long _Fract
62 S.clear();
63 FixedPointValueToString(S, APSInt::getMaxValue(32, /*Unsigned=*/false), 31);
64 ASSERT_STREQ(S.c_str(), "0.9999999995343387126922607421875");
66 // unsigned short _Fract
67 S.clear();
68 FixedPointValueToString(S, APSInt::getMaxValue(8, /*Unsigned=*/true), 8);
69 ASSERT_STREQ(S.c_str(), "0.99609375");
71 // unsigned _Fract
72 S.clear();
73 FixedPointValueToString(S, APSInt::getMaxValue(16, /*Unsigned=*/true), 16);
74 ASSERT_STREQ(S.c_str(), "0.9999847412109375");
76 // unsigned long _Fract
77 S.clear();
78 FixedPointValueToString(S, APSInt::getMaxValue(32, /*Unsigned=*/true), 32);
79 ASSERT_STREQ(S.c_str(), "0.99999999976716935634613037109375");
82 TEST(FixedPointString, Negative) {
83 SmallString<64> S;
84 FixedPointValueToString(S, APSInt::get(-320), 7);
85 ASSERT_STREQ(S.c_str(), "-2.5");
87 S.clear();
88 FixedPointValueToString(S, APSInt::get(-64), 7);
89 ASSERT_STREQ(S.c_str(), "-0.5");
91 // signed short _Accum
92 S.clear();
93 FixedPointValueToString(S, APSInt::getMinValue(16, /*Unsigned=*/false), 7);
94 ASSERT_STREQ(S.c_str(), "-256.0");
96 // signed _Accum
97 S.clear();
98 FixedPointValueToString(S, APSInt::getMinValue(32, /*Unsigned=*/false), 15);
99 ASSERT_STREQ(S.c_str(), "-65536.0");
101 // signed long _Accum
102 S.clear();
103 FixedPointValueToString(S, APSInt::getMinValue(64, /*Unsigned=*/false), 31);
104 ASSERT_STREQ(S.c_str(), "-4294967296.0");
107 } // namespace