Skip to content

Commit 763558b

Browse files
committed
cleaned up tests
1 parent 6be07d6 commit 763558b

File tree

1 file changed

+78
-41
lines changed

1 file changed

+78
-41
lines changed

tests/basictest.cpp

Lines changed: 78 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2087,9 +2087,9 @@ TEST_CASE("bfloat16.general") {
20872087
#endif
20882088

20892089
template <typename Int>
2090-
void integer_multiplication_by_power_of_10_test(Int mantissa,
2091-
int decimal_exponent,
2092-
double expected) {
2090+
void verify_integer_multiplication_by_power_of_10(Int mantissa,
2091+
int decimal_exponent,
2092+
double expected) {
20932093
const double actual =
20942094
fast_float::multiply_integer_and_power_of_10(mantissa, decimal_exponent);
20952095

@@ -2105,34 +2105,41 @@ void integer_multiplication_by_power_of_10_test(Int mantissa,
21052105
CHECK_EQ(actual, expected);
21062106
}
21072107

2108-
#define verify_integer_multiplication_by_power_of_10(mantissa, \
2109-
decimal_exponent) \
2110-
do { \
2111-
integer_multiplication_by_power_of_10_test(mantissa, decimal_exponent, \
2112-
mantissa##e##decimal_exponent); \
2113-
} while (false)
2108+
template <typename Int>
2109+
void verify_integer_multiplication_by_power_of_10(Int mantissa,
2110+
int decimal_exponent) {
2111+
std::string constructed_string =
2112+
std::to_string(mantissa) + "e" + std::to_string(decimal_exponent);
2113+
double expected_result;
2114+
const auto result = fast_float::from_chars(
2115+
constructed_string.data(),
2116+
constructed_string.data() + constructed_string.size(), expected_result);
2117+
if (result.ec != std::errc())
2118+
INFO("Failed to parse: " << constructed_string);
2119+
verify_integer_multiplication_by_power_of_10(mantissa, decimal_exponent,
2120+
expected_result);
2121+
}
21142122

21152123
TEST_CASE("multiply_integer_and_power_of_10") {
21162124
// explicitly verifying API with different types of integers
2117-
integer_multiplication_by_power_of_10_test<char>(31, -1, 3.1);
2118-
integer_multiplication_by_power_of_10_test<unsigned char>(31, -1, 3.1);
2119-
integer_multiplication_by_power_of_10_test<signed char>(31, -1, 3.1);
2120-
integer_multiplication_by_power_of_10_test<signed char>(-31, -1, -3.1);
2121-
integer_multiplication_by_power_of_10_test<int16_t>(31415, -4, 3.1415);
2122-
integer_multiplication_by_power_of_10_test<int16_t>(-31415, -4, -3.1415);
2123-
integer_multiplication_by_power_of_10_test<uint16_t>(31415, -4, 3.1415);
2124-
integer_multiplication_by_power_of_10_test<int32_t>(314159265, -8,
2125-
3.14159265);
2126-
integer_multiplication_by_power_of_10_test<int32_t>(-314159265, -8,
2127-
-3.14159265);
2128-
integer_multiplication_by_power_of_10_test<uint32_t>(3141592653, -9,
2129-
3.141592653);
2130-
integer_multiplication_by_power_of_10_test<int64_t>(3141592653589793238, -18,
2131-
3.141592653589793238);
2132-
integer_multiplication_by_power_of_10_test<int64_t>(-3141592653589793238, -18,
2133-
-3.141592653589793238);
2134-
integer_multiplication_by_power_of_10_test<uint64_t>(3141592653589793238, -18,
2135-
3.141592653589793238);
2125+
verify_integer_multiplication_by_power_of_10<int8_t>(31, -1, 3.1);
2126+
verify_integer_multiplication_by_power_of_10<int8_t>(-31, -1, -3.1);
2127+
verify_integer_multiplication_by_power_of_10<uint8_t>(31, -1, 3.1);
2128+
verify_integer_multiplication_by_power_of_10<int16_t>(31415, -4, 3.1415);
2129+
verify_integer_multiplication_by_power_of_10<int16_t>(-31415, -4, -3.1415);
2130+
verify_integer_multiplication_by_power_of_10<uint16_t>(31415, -4, 3.1415);
2131+
verify_integer_multiplication_by_power_of_10<int32_t>(314159265, -8,
2132+
3.14159265);
2133+
verify_integer_multiplication_by_power_of_10<int32_t>(-314159265, -8,
2134+
-3.14159265);
2135+
verify_integer_multiplication_by_power_of_10<uint32_t>(3141592653, -9,
2136+
3.141592653);
2137+
verify_integer_multiplication_by_power_of_10<int64_t>(
2138+
3141592653589793238, -18, 3.141592653589793238);
2139+
verify_integer_multiplication_by_power_of_10<int64_t>(
2140+
-3141592653589793238, -18, -3.141592653589793238);
2141+
verify_integer_multiplication_by_power_of_10<uint64_t>(
2142+
3141592653589793238, -18, 3.141592653589793238);
21362143

21372144
for (int mode : {FE_UPWARD, FE_DOWNWARD, FE_TOWARDZERO, FE_TONEAREST}) {
21382145
fesetround(mode);
@@ -2151,48 +2158,78 @@ TEST_CASE("multiply_integer_and_power_of_10") {
21512158
verify_integer_multiplication_by_power_of_10(-1, -1);
21522159
verify_integer_multiplication_by_power_of_10(-1, 1);
21532160
verify_integer_multiplication_by_power_of_10(1, -1);
2154-
verify_integer_multiplication_by_power_of_10(-1, -1);
21552161

2156-
integer_multiplication_by_power_of_10_test(49406564584124654, -340,
2157-
DBL_TRUE_MIN);
2158-
integer_multiplication_by_power_of_10_test(22250738585072014, -324,
2159-
DBL_MIN);
2160-
integer_multiplication_by_power_of_10_test(17976931348623158, 292, DBL_MAX);
2162+
verify_integer_multiplication_by_power_of_10(
2163+
49406564584124654, -340, std::numeric_limits<double>::denorm_min());
2164+
verify_integer_multiplication_by_power_of_10(
2165+
22250738585072014, -324, std::numeric_limits<double>::min());
2166+
verify_integer_multiplication_by_power_of_10(
2167+
17976931348623158, 292, std::numeric_limits<double>::max());
21612168

21622169
// DBL_TRUE_MIN / 2 underflows to 0
2163-
integer_multiplication_by_power_of_10_test(49406564584124654 / 2, -340, 0.);
2170+
verify_integer_multiplication_by_power_of_10(49406564584124654 / 2, -340,
2171+
0.);
21642172

21652173
// DBL_TRUE_MIN / 2 + 0.0000000000000001e-324 rounds to DBL_TRUE_MIN
2166-
integer_multiplication_by_power_of_10_test(49406564584124654 / 2 + 1, -340,
2167-
DBL_TRUE_MIN);
2174+
verify_integer_multiplication_by_power_of_10(
2175+
49406564584124654 / 2 + 1, -340,
2176+
std::numeric_limits<double>::denorm_min());
21682177

21692178
// DBL_MAX + 0.0000000000000001e308 overflows to infinity
2170-
integer_multiplication_by_power_of_10_test(
2179+
verify_integer_multiplication_by_power_of_10(
21712180
17976931348623158 + 1, 292, std::numeric_limits<double>::infinity());
2181+
// DBL_MAX + 0.00000000000000001e308 overflows to infinity
2182+
verify_integer_multiplication_by_power_of_10(
2183+
179769313486231580 + 1, 291, std::numeric_limits<double>::infinity());
21722184

21732185
// loosely verifying correct rounding of 1 to 64 bits
21742186
// worth of significant digits
21752187
verify_integer_multiplication_by_power_of_10(1, 42);
2188+
verify_integer_multiplication_by_power_of_10(1, -42);
21762189
verify_integer_multiplication_by_power_of_10(12, 42);
2190+
verify_integer_multiplication_by_power_of_10(12, -42);
21772191
verify_integer_multiplication_by_power_of_10(123, 42);
2192+
verify_integer_multiplication_by_power_of_10(123, -42);
21782193
verify_integer_multiplication_by_power_of_10(1234, 42);
2194+
verify_integer_multiplication_by_power_of_10(1234, -42);
21792195
verify_integer_multiplication_by_power_of_10(12345, 42);
2196+
verify_integer_multiplication_by_power_of_10(12345, -42);
21802197
verify_integer_multiplication_by_power_of_10(123456, 42);
2198+
verify_integer_multiplication_by_power_of_10(123456, -42);
21812199
verify_integer_multiplication_by_power_of_10(1234567, 42);
2200+
verify_integer_multiplication_by_power_of_10(1234567, -42);
21822201
verify_integer_multiplication_by_power_of_10(12345678, 42);
2202+
verify_integer_multiplication_by_power_of_10(12345678, -42);
21832203
verify_integer_multiplication_by_power_of_10(123456789, 42);
21842204
verify_integer_multiplication_by_power_of_10(1234567890, 42);
2205+
verify_integer_multiplication_by_power_of_10(1234567890, -42);
21852206
verify_integer_multiplication_by_power_of_10(12345678901, 42);
2207+
verify_integer_multiplication_by_power_of_10(12345678901, -42);
21862208
verify_integer_multiplication_by_power_of_10(123456789012, 42);
2209+
verify_integer_multiplication_by_power_of_10(123456789012, -42);
21872210
verify_integer_multiplication_by_power_of_10(1234567890123, 42);
2211+
verify_integer_multiplication_by_power_of_10(1234567890123, -42);
21882212
verify_integer_multiplication_by_power_of_10(12345678901234, 42);
2213+
verify_integer_multiplication_by_power_of_10(12345678901234, -42);
21892214
verify_integer_multiplication_by_power_of_10(123456789012345, 42);
2215+
verify_integer_multiplication_by_power_of_10(123456789012345, -42);
21902216
verify_integer_multiplication_by_power_of_10(1234567890123456, 42);
2217+
verify_integer_multiplication_by_power_of_10(1234567890123456, -42);
21912218
verify_integer_multiplication_by_power_of_10(12345678901234567, 42);
2219+
verify_integer_multiplication_by_power_of_10(12345678901234567, -42);
21922220
verify_integer_multiplication_by_power_of_10(123456789012345678, 42);
2221+
verify_integer_multiplication_by_power_of_10(123456789012345678, -42);
21932222
verify_integer_multiplication_by_power_of_10(1234567890123456789, 42);
2194-
verify_integer_multiplication_by_power_of_10(12345678901234567890, 42);
2195-
// ULLONG_MAX
2196-
verify_integer_multiplication_by_power_of_10(18446744073709551615, 42);
2223+
verify_integer_multiplication_by_power_of_10(1234567890123456789, -42);
2224+
verify_integer_multiplication_by_power_of_10(12345678901234567890ull, 42);
2225+
verify_integer_multiplication_by_power_of_10(12345678901234567890ull, -42);
2226+
verify_integer_multiplication_by_power_of_10(
2227+
std::numeric_limits<int64_t>::max(), 42);
2228+
verify_integer_multiplication_by_power_of_10(
2229+
std::numeric_limits<int64_t>::max(), -42);
2230+
verify_integer_multiplication_by_power_of_10(
2231+
std::numeric_limits<uint64_t>::max(), 42);
2232+
verify_integer_multiplication_by_power_of_10(
2233+
std::numeric_limits<uint64_t>::max(), -42);
21972234
}
21982235
}

0 commit comments

Comments
 (0)