@@ -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+
231276int 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