515 lines · cpp
1// RUN: %check_clang_tidy -check-suffix=ALL -std=c++20 %s modernize-use-std-numbers %t2// RUN: %check_clang_tidy -check-suffix=ALL,IMPRECISE -std=c++20 %s modernize-use-std-numbers %t -- -config="{CheckOptions: { modernize-use-std-numbers.DiffThreshold: 0.01 }}"3 4// CHECK-FIXES-ALL: #include <numbers>5 6namespace bar {7 double sqrt(double Arg);8 float sqrt(float Arg);9 template <typename T>10 auto sqrt(T val) { return sqrt(static_cast<double>(val)); }11 12 float sqrtf(float Arg);13 long double sqrtl(long double Arg);14 15 static constexpr double e = 2.718281828459045235360287471352662497757247093;16 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:33: warning: prefer 'std::numbers::e' to this literal, differs by '0.00e+00' [modernize-use-std-numbers]17 // CHECK-FIXES-ALL: static constexpr double e = std::numbers::e;18}19 20float expf(float Arg);21double exp(double Arg);22long double expl(long double Arg);23double log(double Arg);24 25double log2(double Arg);26float log2(float Arg);27template <typename T>28auto log2(T val) { return log2(static_cast<double>(val)); }29 30double log10(double Arg);31 32template<typename T>33void sink(T&&) { }34 35void floatSink(float) {}36 37#define MY_PI 3.141592638 39#define INV_SQRT3 1 / bar::sqrt(3)40#define NOT_INV_SQRT3 1 / bar::sqrt(3) + 141 42using my_double = double;43using my_float = float;44 45void foo(){46 static constexpr double Pi = 3.1415926;47 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:34: warning: prefer 'std::numbers::pi' to this literal, differs by '5.36e-08' [modernize-use-std-numbers]48 // CHECK-FIXES-ALL: static constexpr double Pi = std::numbers::pi;49 50 static constexpr double Euler = 2.7182818;51 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:37: warning: prefer 'std::numbers::e' to this literal, differs by '2.85e-08' [modernize-use-std-numbers]52 // CHECK-FIXES-ALL: static constexpr double Euler = std::numbers::e;53 54 static constexpr double Phi = 1.6180339;55 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:35: warning: prefer 'std::numbers::phi' to this literal, differs by '8.87e-08' [modernize-use-std-numbers]56 // CHECK-FIXES-ALL: static constexpr double Phi = std::numbers::phi;57 58 static constexpr double PiCopy = Pi;59 static constexpr double PiDefineFromMacro = MY_PI;60 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:49: warning: prefer 'std::numbers::pi' to this macro, differs by '5.36e-08' [modernize-use-std-numbers]61 // CHECK-FIXES-ALL: static constexpr double PiDefineFromMacro = std::numbers::pi;62 63 static constexpr double Pi2 = 3.14;64 // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:35: warning: prefer 'std::numbers::pi' to this literal, differs by '1.59e-03' [modernize-use-std-numbers]65 // CHECK-FIXES-IMPRECISE: static constexpr double Pi2 = std::numbers::pi;66 static constexpr double Euler2 = 2.71;67 // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:38: warning: prefer 'std::numbers::e' to this literal, differs by '8.28e-03' [modernize-use-std-numbers]68 // CHECK-FIXES-IMPRECISE: static constexpr double Euler2 = std::numbers::e;69 static constexpr double Phi2 = 1.61;70 // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:36: warning: prefer 'std::numbers::phi' to this literal, differs by '8.03e-03' [modernize-use-std-numbers]71 // CHECK-FIXES-IMPRECISE: static constexpr double Phi2 = std::numbers::phi;72 73 static constexpr double Pi3 = 3.1415926L;74 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:35: warning: prefer 'std::numbers::pi_v<long double>' to this literal, differs by '5.36e-08' [modernize-use-std-numbers]75 // CHECK-FIXES-ALL: static constexpr double Pi3 = std::numbers::pi_v<long double>;76 77 static constexpr double Euler3 = 2.7182818L;78 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:38: warning: prefer 'std::numbers::e_v<long double>' to this literal, differs by '2.85e-08' [modernize-use-std-numbers]79 // CHECK-FIXES-ALL: static constexpr double Euler3 = std::numbers::e_v<long double>;80 81 static constexpr double Phi3 = 1.6180339L;82 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:36: warning: prefer 'std::numbers::phi_v<long double>' to this literal, differs by '8.87e-08' [modernize-use-std-numbers]83 // CHECK-FIXES-ALL: static constexpr double Phi3 = std::numbers::phi_v<long double>;84 85 static constexpr long double Pi4 = 3.1415926L;86 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:40: warning: prefer 'std::numbers::pi_v<long double>' to this literal, differs by '5.36e-08' [modernize-use-std-numbers]87 // CHECK-FIXES-ALL: static constexpr long double Pi4 = std::numbers::pi_v<long double>;88 89 static constexpr long double Euler4 = 2.7182818L;90 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:43: warning: prefer 'std::numbers::e_v<long double>' to this literal, differs by '2.85e-08' [modernize-use-std-numbers]91 // CHECK-FIXES-ALL: static constexpr long double Euler4 = std::numbers::e_v<long double>;92 93 static constexpr long double Phi4 = 1.6180339L;94 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:41: warning: prefer 'std::numbers::phi_v<long double>' to this literal, differs by '8.87e-08' [modernize-use-std-numbers]95 // CHECK-FIXES-ALL: static constexpr long double Phi4 = std::numbers::phi_v<long double>;96 97 static constexpr my_double Euler5 = 2.7182818;98 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:41: warning: prefer 'std::numbers::e' to this literal, differs by '2.85e-08' [modernize-use-std-numbers]99 // CHECK-FIXES-ALL: static constexpr my_double Euler5 = std::numbers::e;100 101 static constexpr my_float Euler6 = 2.7182818;102 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:40: warning: prefer 'std::numbers::e' to this literal, differs by '2.85e-08' [modernize-use-std-numbers]103 // CHECK-FIXES-ALL: static constexpr my_float Euler6 = std::numbers::e;104 105 static constexpr int NotEuler7 = 2.7182818;106 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:38: warning: prefer 'std::numbers::e' to this literal, differs by '2.85e-08' [modernize-use-std-numbers]107 // CHECK-FIXES-ALL: static constexpr int NotEuler7 = std::numbers::e;108 109 static constexpr double InvPi = 1.0 / Pi;110 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:37: warning: prefer 'std::numbers::inv_pi' to this formula [modernize-use-std-numbers]111 // CHECK-FIXES-ALL: static constexpr double InvPi = std::numbers::inv_pi;112 113 static constexpr my_float Actually2MyFloat = 2;114 bar::sqrt(Actually2MyFloat);115 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2_v<float>' to this formula [modernize-use-std-numbers]116 // CHECK-FIXES-ALL: std::numbers::sqrt2_v<float>;117 118 bar::sqrtf(2.0F);119 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2_v<float>' to this formula [modernize-use-std-numbers]120 // CHECK-FIXES-ALL: std::numbers::sqrt2_v<float>;121 122 bar::sqrtl(2.0);123 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2_v<long double>' to this formula [modernize-use-std-numbers]124 // CHECK-FIXES-ALL: std::numbers::sqrt2_v<long double>;125 126 sink(MY_PI);127 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::pi' to this macro, differs by '5.36e-08' [modernize-use-std-numbers]128 // CHECK-FIXES-ALL: sink(std::numbers::pi);129 130 auto X = 42.0;131 auto Y = X * 3.14;132 // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:18: warning: prefer 'std::numbers::pi' to this literal, differs by '1.59e-03' [modernize-use-std-numbers]133 // CHECK-FIXES-IMPRECISE: auto Y = X * std::numbers::pi;134 135 constexpr static auto One = 1;136 constexpr static auto Two = 2;137 138 bar::sqrt(2);139 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]140 // CHECK-FIXES-ALL: std::numbers::sqrt2;141 142 bar::sqrt(Two);143 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]144 // CHECK-FIXES-ALL: std::numbers::sqrt2;145 146 bar::sqrt(2.0);147 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]148 // CHECK-FIXES-ALL: std::numbers::sqrt2;149 150 auto Not2 = 2;151 Not2 = 42;152 bar::sqrt(Not2);153 154 const auto Actually2 = 2;155 bar::sqrt(Actually2);156 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]157 // CHECK-FIXES-ALL: std::numbers::sqrt2;158 159 exp(1);160 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]161 // CHECK-FIXES-ALL: std::numbers::e;162 163 exp(One);164 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]165 // CHECK-FIXES-ALL: std::numbers::e;166 167 exp(1.00000000000001);168 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]169 // CHECK-FIXES-ALL: std::numbers::e;170 171 expf(1);172 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e_v<float>' to this formula [modernize-use-std-numbers]173 // CHECK-FIXES-ALL: std::numbers::e_v<float>;174 175 expl(1);176 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e_v<long double>' to this formula [modernize-use-std-numbers]177 // CHECK-FIXES-ALL: std::numbers::e_v<long double>;178 179 log2(exp(1));180 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]181 // CHECK-MESSAGES-ALL: :[[@LINE-2]]:10: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]182 // CHECK-FIXES-ALL: std::numbers::log2e;183 184 log2(Euler);185 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]186 // CHECK-FIXES-ALL: std::numbers::log2e;187 188 log2(bar::e);189 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]190 // CHECK-FIXES-ALL: std::numbers::log2e;191 192 log2(Euler5);193 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]194 // CHECK-FIXES-ALL: std::numbers::log2e;195 196 log2(Euler6);197 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e_v<float>' to this formula [modernize-use-std-numbers]198 // CHECK-FIXES-ALL: std::numbers::log2e_v<float>;199 200 log2(NotEuler7);201 202 auto log2e = 1.4426950;203 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:18: warning: prefer 'std::numbers::log2e' to this literal, differs by '4.09e-08' [modernize-use-std-numbers]204 // CHECK-FIXES-ALL: auto log2e = std::numbers::log2e;205 206 floatSink(log2(Euler));207 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]208 // CHECK-FIXES-ALL: floatSink(std::numbers::log2e);209 210 floatSink(static_cast<float>(log2(Euler)));211 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v<float>' to this formula [modernize-use-std-numbers]212 // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v<float>);213 214 floatSink(1.4426950);215 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e' to this literal, differs by '4.09e-08' [modernize-use-std-numbers]216 // CHECK-FIXES-ALL: floatSink(std::numbers::log2e);217 218 floatSink(static_cast<float>(1.4426950));219 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v<float>' to this literal, differs by '4.09e-08' [modernize-use-std-numbers]220 // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v<float>);221 222 floatSink(log2(static_cast<float>(Euler)));223 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v<float>' to this formula [modernize-use-std-numbers]224 // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v<float>);225 226 floatSink(static_cast<float>(log2(static_cast<float>(Euler))));227 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v<float>' to this formula [modernize-use-std-numbers]228 // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v<float>);229 230 floatSink(static_cast<float>(log2(static_cast<int>(Euler))));231 232 floatSink(static_cast<int>(log2(static_cast<float>(Euler))));233 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:32: warning: prefer 'std::numbers::log2e_v<float>' to this formula [modernize-use-std-numbers]234 // CHECK-FIXES-ALL: floatSink(static_cast<int>(std::numbers::log2e_v<float>));235 236 floatSink(1.4426950F);237 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v<float>' to this literal, differs by '1.93e-08' [modernize-use-std-numbers]238 // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v<float>);239 240 floatSink(static_cast<double>(1.4426950F));241 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e' to this literal, differs by '1.93e-08' [modernize-use-std-numbers]242 // CHECK-FIXES-ALL: floatSink(std::numbers::log2e);243 244 floatSink(static_cast<int>(1.4426950F));245 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:32: warning: prefer 'std::numbers::log2e_v<float>' to this literal, differs by '1.93e-08' [modernize-use-std-numbers]246 // CHECK-FIXES-ALL: floatSink(static_cast<int>(std::numbers::log2e_v<float>));247 248 log10(exp(1));249 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers]250 // CHECK-MESSAGES-ALL: :[[@LINE-2]]:11: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]251 // CHECK-FIXES-ALL: std::numbers::log10e;252 253 log10(Euler);254 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers]255 // CHECK-FIXES-ALL: std::numbers::log10e;256 257 log10(bar::e);258 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers]259 // CHECK-FIXES-ALL: std::numbers::log10e;260 261 auto log10e = .434294;262 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:19: warning: prefer 'std::numbers::log10e' to this literal, differs by '4.82e-07' [modernize-use-std-numbers]263 // CHECK-FIXES-ALL: auto log10e = std::numbers::log10e;264 265 auto egamma = 0.5772156 * 42;266 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:19: warning: prefer 'std::numbers::egamma' to this literal, differs by '6.49e-08' [modernize-use-std-numbers]267 // CHECK-FIXES-ALL: auto egamma = std::numbers::egamma * 42;268 269 sink(InvPi);270 271 sink(1 / Pi);272 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_pi' to this formula [modernize-use-std-numbers]273 // CHECK-FIXES-ALL: sink(std::numbers::inv_pi);274 275 sink(1 / bar::sqrt(Pi));276 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrtpi' to this formula [modernize-use-std-numbers]277 // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrtpi);278 279 sink(1 / bar::sqrt(MY_PI));280 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrtpi' to this formula [modernize-use-std-numbers]281 // CHECK-MESSAGES-ALL: :[[@LINE-2]]:24: warning: prefer 'std::numbers::pi' to this macro, differs by '5.36e-08' [modernize-use-std-numbers]282 // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrtpi);283 284 log(2);285 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::ln2' to this formula [modernize-use-std-numbers]286 // CHECK-FIXES-ALL: std::numbers::ln2;287 288 log(10);289 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::ln10' to this formula [modernize-use-std-numbers]290 // CHECK-FIXES-ALL: std::numbers::ln10;291 292 bar::sqrt(2);293 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]294 // CHECK-FIXES-ALL: std::numbers::sqrt2;295 296 sink(1 / bar::sqrt(3));297 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrt3' to this formula [modernize-use-std-numbers]298 // CHECK-MESSAGES-ALL: :[[@LINE-2]]:14: warning: prefer 'std::numbers::sqrt3' to this formula [modernize-use-std-numbers]299 // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrt3);300 301 sink(INV_SQRT3);302 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrt3' to this macro [modernize-use-std-numbers]303 // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrt3);304 305 sink(NOT_INV_SQRT3);306 307 const auto inv_sqrt3f = .577350269F;308 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:29: warning: prefer 'std::numbers::inv_sqrt3_v<float>' to this literal, differs by '1.04e-08' [modernize-use-std-numbers]309 // CHECK-FIXES-ALL: const auto inv_sqrt3f = std::numbers::inv_sqrt3_v<float>;310 311 bar::sqrt(3);312 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt3' to this formula [modernize-use-std-numbers]313 // CHECK-FIXES-ALL: std::numbers::sqrt3;314 315 auto somePhi = 1.6180339;316 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:20: warning: prefer 'std::numbers::phi' to this literal, differs by '8.87e-08' [modernize-use-std-numbers]317 // CHECK-FIXES-ALL: auto somePhi = std::numbers::phi;318 319 sink(Phi);320 321 sink((42 + bar::sqrt(5)) / 2);322 323 sink((1 + bar::sqrt(5)) / 2);324 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::phi' to this formula [modernize-use-std-numbers]325 // CHECK-FIXES-ALL: sink(std::numbers::phi);326 327 sink((bar::sqrt(5.0F) + 1) / 2);328 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::phi_v<float>' to this formula [modernize-use-std-numbers]329 // CHECK-FIXES-ALL: sink(std::numbers::phi_v<float>);330}331 332 333 334template <typename T>335void baz(){336 static constexpr T Pi = 3.1415926;337 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:29: warning: prefer 'std::numbers::pi' to this literal, differs by '5.36e-08' [modernize-use-std-numbers]338 // CHECK-FIXES-ALL: static constexpr T Pi = std::numbers::pi;339 340 static constexpr T Euler = 2.7182818;341 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:32: warning: prefer 'std::numbers::e' to this literal, differs by '2.85e-08' [modernize-use-std-numbers]342 // CHECK-FIXES-ALL: static constexpr T Euler = std::numbers::e;343 344 static constexpr T Phi = 1.6180339;345 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:30: warning: prefer 'std::numbers::phi' to this literal, differs by '8.87e-08' [modernize-use-std-numbers]346 // CHECK-FIXES-ALL: static constexpr T Phi = std::numbers::phi;347 348 static constexpr T PiCopy = Pi;349 static constexpr T PiDefineFromMacro = MY_PI;350 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:44: warning: prefer 'std::numbers::pi' to this macro, differs by '5.36e-08' [modernize-use-std-numbers]351 // CHECK-FIXES-ALL: static constexpr T PiDefineFromMacro = std::numbers::pi;352 353 static constexpr T Pi2 = 3.14;354 // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:30: warning: prefer 'std::numbers::pi' to this literal, differs by '1.59e-03' [modernize-use-std-numbers]355 // CHECK-FIXES-IMPRECISE: static constexpr T Pi2 = std::numbers::pi;356 static constexpr T Euler2 = 2.71;357 // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:33: warning: prefer 'std::numbers::e' to this literal, differs by '8.28e-03' [modernize-use-std-numbers]358 // CHECK-FIXES-IMPRECISE: static constexpr T Euler2 = std::numbers::e;359 static constexpr T Phi2 = 1.61;360 // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:31: warning: prefer 'std::numbers::phi' to this literal, differs by '8.03e-03' [modernize-use-std-numbers]361 // CHECK-FIXES-IMPRECISE: static constexpr T Phi2 = std::numbers::phi;362 363 static constexpr T Pi3 = 3.1415926L;364 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:30: warning: prefer 'std::numbers::pi_v<long double>' to this literal, differs by '5.36e-08' [modernize-use-std-numbers]365 // CHECK-FIXES-ALL: static constexpr T Pi3 = std::numbers::pi_v<long double>;366 367 static constexpr T Euler3 = 2.7182818L;368 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:33: warning: prefer 'std::numbers::e_v<long double>' to this literal, differs by '2.85e-08' [modernize-use-std-numbers]369 // CHECK-FIXES-ALL: static constexpr T Euler3 = std::numbers::e_v<long double>;370 371 static constexpr T Phi3 = 1.6180339L;372 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:31: warning: prefer 'std::numbers::phi_v<long double>' to this literal, differs by '8.87e-08' [modernize-use-std-numbers]373 // CHECK-FIXES-ALL: static constexpr T Phi3 = std::numbers::phi_v<long double>;374 375 static constexpr my_float Actually2MyFloat = 2;376 bar::sqrt(Actually2MyFloat);377 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2_v<float>' to this formula [modernize-use-std-numbers]378 // CHECK-FIXES-ALL: std::numbers::sqrt2_v<float>;379 380 constexpr static T One = 1;381 constexpr static T Two = 2;382 383 bar::sqrt(2);384 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]385 // CHECK-FIXES-ALL: std::numbers::sqrt2;386 387 bar::sqrt(Two);388 389 bar::sqrt(2.0);390 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]391 // CHECK-FIXES-ALL: std::numbers::sqrt2;392 393 T Not2 = 2;394 Not2 = 42;395 bar::sqrt(Not2);396 397 const T Actually2 = 2;398 bar::sqrt(Actually2);399 400 exp(1);401 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]402 // CHECK-FIXES-ALL: std::numbers::e;403 404 exp(One);405 406 exp(1.00000000000001);407 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]408 // CHECK-FIXES-ALL: std::numbers::e;409 410 log2(exp(1));411 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]412 // CHECK-MESSAGES-ALL: :[[@LINE-2]]:10: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]413 // CHECK-FIXES-ALL: std::numbers::log2e;414 415 log2(Euler);416 417 log2(bar::e);418 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]419 // CHECK-FIXES-ALL: std::numbers::log2e;420 421 T log2e = 1.4426950;422 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e' to this literal, differs by '4.09e-08' [modernize-use-std-numbers]423 // CHECK-FIXES-ALL: T log2e = std::numbers::log2e;424 425 log10(exp(1));426 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers]427 // CHECK-MESSAGES-ALL: :[[@LINE-2]]:11: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]428 // CHECK-FIXES-ALL: std::numbers::log10e;429 430 log10(Euler);431 432 log10(bar::e);433 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers]434 // CHECK-FIXES-ALL: std::numbers::log10e;435 436 T log10e = .434294;437 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:16: warning: prefer 'std::numbers::log10e' to this literal, differs by '4.82e-07' [modernize-use-std-numbers]438 // CHECK-FIXES-ALL: T log10e = std::numbers::log10e;439 440 T egamma = 0.5772156 * 42;441 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:16: warning: prefer 'std::numbers::egamma' to this literal, differs by '6.49e-08' [modernize-use-std-numbers]442 // CHECK-FIXES-ALL: T egamma = std::numbers::egamma * 42;443 444 sink(1 / Pi);445 446 sink(1 / bar::sqrt(Pi));447 448 sink(1 / bar::sqrt(MY_PI));449 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrtpi' to this formula [modernize-use-std-numbers]450 // CHECK-MESSAGES-ALL: :[[@LINE-2]]:24: warning: prefer 'std::numbers::pi' to this macro, differs by '5.36e-08' [modernize-use-std-numbers]451 // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrtpi);452 453 454 log(2);455 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::ln2' to this formula [modernize-use-std-numbers]456 // CHECK-FIXES-ALL: std::numbers::ln2;457 458 log(10);459 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::ln10' to this formula [modernize-use-std-numbers]460 // CHECK-FIXES-ALL: std::numbers::ln10;461 462 bar::sqrt(2);463 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]464 // CHECK-FIXES-ALL: std::numbers::sqrt2;465 466 sink(1 / bar::sqrt(3));467 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrt3' to this formula [modernize-use-std-numbers]468 // CHECK-MESSAGES-ALL: :[[@LINE-2]]:14: warning: prefer 'std::numbers::sqrt3' to this formula [modernize-use-std-numbers]469 // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrt3);470 471 bar::sqrt(3);472 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt3' to this formula [modernize-use-std-numbers]473 // CHECK-FIXES-ALL: std::numbers::sqrt3;474 475 T phi = 1.6180339;476 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:13: warning: prefer 'std::numbers::phi' to this literal, differs by '8.87e-08' [modernize-use-std-numbers]477 // CHECK-FIXES-ALL: T phi = std::numbers::phi;478 479 sink((42 + bar::sqrt(5)) / 2);480 481 sink((1 + bar::sqrt(5)) / 2);482 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::phi' to this formula [modernize-use-std-numbers]483 // CHECK-FIXES-ALL: sink(std::numbers::phi);484 485 sink((bar::sqrt(5.0F) + 1) / 2);486 // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::phi_v<float>' to this formula [modernize-use-std-numbers]487 // CHECK-FIXES-ALL: sink(std::numbers::phi_v<float>);488}489 490template <typename T>491void foobar(){492 const T Two = 2;493 bar::sqrt(Two);494}495void use_templates() {496 foobar<float>();497 foobar<double>();498 499 baz<float>();500 baz<double>();501}502 503#define BIG_MARCO \504 struct InvSqrt3 { \505 template <typename T> static T get() { return 1 / bar::sqrt(3); } \506 }507 508BIG_MARCO;509 510void use_BIG_MACRO() {511InvSqrt3 f{};512f.get<float>();513f.get<double>();514}515