Skip to content

Commit 2644090

Browse files
committed
Add reproducer test set
1 parent 9051a03 commit 2644090

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

test/test_nan_conversions.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,51 @@ void generate_mixed_tests()
228228
}
229229
}
230230

231+
// See: Github issue 1254
232+
template <typename T>
233+
void generate_two_nan_tests()
234+
{
235+
constexpr std::size_t N {5};
236+
237+
const std::array<unsigned, N> payloads {0, 0, 1, 2, 3};
238+
const std::array<const char*, N> snans {"sNaN", "SNAN", "snan1", "SnAn2", "SNAN3"};
239+
const std::array<const char*, N> qnans {"NAN", "NAN12", "nan3", "Nan5", "NAN4"};
240+
241+
for (std::size_t i = 0; i < N; ++i)
242+
{
243+
const T value1 {snans[i]};
244+
const T value2 {qnans[i]};
245+
const auto current_payload {payloads[i]};
246+
247+
test(value1, value2, std::plus<>(), current_payload);
248+
test(value1, value2, std::minus<>(), current_payload);
249+
test(value1, value2, std::multiplies<>(), current_payload);
250+
test(value1, value2, std::divides<>(), current_payload);
251+
test(value1, value2, std::modulus<>(), current_payload);
252+
253+
test(value2, value1, std::plus<>(), current_payload);
254+
test(value2, value1, std::minus<>(), current_payload);
255+
test(value2, value1, std::multiplies<>(), current_payload);
256+
test(value2, value1, std::divides<>(), current_payload);
257+
test(value2, value1, std::modulus<>(), current_payload);
258+
}
259+
260+
const std::array<const char*, N> second_snans {"snan5", "snan6", "snan7", "snan8", "snan9"};
261+
262+
for (std::size_t i = 0; i < N; ++i)
263+
{
264+
const T value1 {snans[i]};
265+
const T value2 {second_snans[i]};
266+
const auto current_payload {payloads[i]};
267+
268+
test(value1, value2, std::plus<>(), current_payload);
269+
test(value1, value2, std::minus<>(), current_payload);
270+
test(value1, value2, std::multiplies<>(), current_payload);
271+
test(value1, value2, std::divides<>(), current_payload);
272+
test(value1, value2, std::modulus<>(), current_payload);
273+
}
274+
}
275+
231276
int main()
232277
{
233278
generate_tests<decimal32_t>();
@@ -254,5 +299,13 @@ int main()
254299
generate_mixed_tests<decimal_fast64_t>();
255300
generate_mixed_tests<decimal_fast128_t>();
256301

302+
generate_two_nan_tests<decimal32_t>();
303+
generate_two_nan_tests<decimal64_t>();
304+
generate_two_nan_tests<decimal128_t>();
305+
306+
generate_two_nan_tests<decimal_fast32_t>();
307+
generate_two_nan_tests<decimal_fast64_t>();
308+
generate_two_nan_tests<decimal_fast128_t>();
309+
257310
return boost::report_errors();
258311
}

0 commit comments

Comments
 (0)