108 lines · cpp
1#include "clang/AST/Type.h"2#include "llvm/ADT/APSInt.h"3#include "llvm/ADT/SmallString.h"4#include "gtest/gtest.h"5 6using clang::FixedPointValueToString;7using llvm::APSInt;8using llvm::SmallString;9 10namespace {11 12TEST(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 // signed short _Accum22 S.clear();23 FixedPointValueToString(S, APSInt::getMaxValue(16, /*Unsigned=*/false), 7);24 ASSERT_STREQ(S.c_str(), "255.9921875");25 26 // signed _Accum27 S.clear();28 FixedPointValueToString(S, APSInt::getMaxValue(32, /*Unsigned=*/false), 15);29 ASSERT_STREQ(S.c_str(), "65535.999969482421875");30 31 // signed long _Accum32 S.clear();33 FixedPointValueToString(S, APSInt::getMaxValue(64, /*Unsigned=*/false), 31);34 ASSERT_STREQ(S.c_str(), "4294967295.9999999995343387126922607421875");35 36 // unsigned short _Accum37 S.clear();38 FixedPointValueToString(S, APSInt::getMaxValue(16, /*Unsigned=*/true), 8);39 ASSERT_STREQ(S.c_str(), "255.99609375");40 41 // unsigned _Accum42 S.clear();43 FixedPointValueToString(S, APSInt::getMaxValue(32, /*Unsigned=*/true), 16);44 ASSERT_STREQ(S.c_str(), "65535.9999847412109375");45 46 // unsigned long _Accum47 S.clear();48 FixedPointValueToString(S, APSInt::getMaxValue(64, /*Unsigned=*/true), 32);49 ASSERT_STREQ(S.c_str(), "4294967295.99999999976716935634613037109375");50 51 // signed short _Fract52 S.clear();53 FixedPointValueToString(S, APSInt::getMaxValue(8, /*Unsigned=*/false), 7);54 ASSERT_STREQ(S.c_str(), "0.9921875");55 56 // signed _Fract57 S.clear();58 FixedPointValueToString(S, APSInt::getMaxValue(16, /*Unsigned=*/false), 15);59 ASSERT_STREQ(S.c_str(), "0.999969482421875");60 61 // signed long _Fract62 S.clear();63 FixedPointValueToString(S, APSInt::getMaxValue(32, /*Unsigned=*/false), 31);64 ASSERT_STREQ(S.c_str(), "0.9999999995343387126922607421875");65 66 // unsigned short _Fract67 S.clear();68 FixedPointValueToString(S, APSInt::getMaxValue(8, /*Unsigned=*/true), 8);69 ASSERT_STREQ(S.c_str(), "0.99609375");70 71 // unsigned _Fract72 S.clear();73 FixedPointValueToString(S, APSInt::getMaxValue(16, /*Unsigned=*/true), 16);74 ASSERT_STREQ(S.c_str(), "0.9999847412109375");75 76 // unsigned long _Fract77 S.clear();78 FixedPointValueToString(S, APSInt::getMaxValue(32, /*Unsigned=*/true), 32);79 ASSERT_STREQ(S.c_str(), "0.99999999976716935634613037109375");80}81 82TEST(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 // signed short _Accum92 S.clear();93 FixedPointValueToString(S, APSInt::getMinValue(16, /*Unsigned=*/false), 7);94 ASSERT_STREQ(S.c_str(), "-256.0");95 96 // signed _Accum97 S.clear();98 FixedPointValueToString(S, APSInt::getMinValue(32, /*Unsigned=*/false), 15);99 ASSERT_STREQ(S.c_str(), "-65536.0");100 101 // signed long _Accum102 S.clear();103 FixedPointValueToString(S, APSInt::getMinValue(64, /*Unsigned=*/false), 31);104 ASSERT_STREQ(S.c_str(), "-4294967296.0");105}106 107} // namespace108