@@ -23,6 +23,7 @@ struct power_test
2323 using vector_type = std::vector<value_type>;
2424
2525 size_t nb_input;
26+ vector_type zero_input;
2627 vector_type zlhs_input;
2728 vector_type lhs_input;
2829 vector_type rhs_input;
@@ -32,11 +33,13 @@ struct power_test
3233 power_test ()
3334 {
3435 nb_input = size * 10000 ;
36+ zero_input.resize (nb_input);
3537 zlhs_input.resize (nb_input);
3638 lhs_input.resize (nb_input);
3739 rhs_input.resize (nb_input);
3840 for (size_t i = 0 ; i < nb_input; ++i)
3941 {
42+ zero_input[i] = 0 ;
4043 lhs_input[i] = value_type (i) / 4 + value_type (1.2 ) * std::sqrt (value_type (i + 0.25 ));
4144 zlhs_input[i] = lhs_input[i] * (i % 2 );
4245 rhs_input[i] = value_type (10.2 ) / (i + 2 ) + value_type (0.25 );
@@ -79,7 +82,7 @@ struct power_test
7982 detail::store_batch (out, res, i);
8083 }
8184 size_t diff = detail::get_nb_diff (res, expected);
82- INFO (" pow " );
85+ INFO (" 0 ^ x " );
8386 CHECK_EQ (diff, 0 );
8487
8588// use of undeclared identifier '_MM_SET_EXCEPTION_MASK for emscripten
@@ -96,10 +99,27 @@ struct power_test
9699 }
97100 _MM_SET_EXCEPTION_MASK (mask);
98101 diff = detail::get_nb_diff (res, expected);
99- INFO (" pow " );
102+ INFO (" 0 ^ x with exception " );
100103 CHECK_EQ (diff, 0 );
101104#endif
102105 }
106+ // pow 0^-x
107+ {
108+ std::transform (zero_input.cbegin (), zero_input.cend (), rhs_input.cbegin (), expected.begin (),
109+ [](const value_type& z, const value_type& r)
110+ { return std::pow (z, -r); });
111+ batch_type zero_in, rhs_in, out;
112+ for (size_t i = 0 ; i < nb_input; i += size)
113+ {
114+ detail::load_batch (zero_in, zero_input, i);
115+ detail::load_batch (rhs_in, rhs_input, i);
116+ out = pow (zero_in, -rhs_in);
117+ detail::store_batch (out, res, i);
118+ }
119+ size_t diff = detail::get_nb_diff (res, expected);
120+ INFO (" pow(0, -x)" );
121+ CHECK_EQ (diff, 0 );
122+ }
103123 // ipow
104124 {
105125 long k = 0 ;
0 commit comments