diff options
Diffstat (limited to 'libcxx/test/numerics/numarray/valarray.nonmembers/valarray.transcend/pow_valarray_valarray.pass.cpp')
-rw-r--r-- | libcxx/test/numerics/numarray/valarray.nonmembers/valarray.transcend/pow_valarray_valarray.pass.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/libcxx/test/numerics/numarray/valarray.nonmembers/valarray.transcend/pow_valarray_valarray.pass.cpp b/libcxx/test/numerics/numarray/valarray.nonmembers/valarray.transcend/pow_valarray_valarray.pass.cpp new file mode 100644 index 00000000000..2969a4849d3 --- /dev/null +++ b/libcxx/test/numerics/numarray/valarray.nonmembers/valarray.transcend/pow_valarray_valarray.pass.cpp @@ -0,0 +1,53 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <valarray> + +// template<class T> class valarray; + +// template<class T> +// valarray<T> +// pow(const valarray<T>& x, const valarray<T>& y); + +#include <valarray> +#include <cassert> +#include <sstream> + +bool is_about(double x, double y, int p) +{ + std::ostringstream o; + o.precision(p); + scientific(o); + o << x; + std::string a = o.str(); + o.str(""); + o << y; + return a == o.str(); +} + +int main() +{ + { + typedef double T; + T a1[] = {.9, .5, 0., .5, .75}; + T a2[] = {-.8, .25, 0.375, -.5, .75}; + T a3[] = {1.0879426248455297e+00, + 8.4089641525371450e-01, + 0.0000000000000000e+00, + 1.4142135623730949e+00, + 8.0592744886765644e-01}; + const unsigned N = sizeof(a1)/sizeof(a1[0]); + std::valarray<T> v1(a1, N); + std::valarray<T> v2(a2, N); + std::valarray<T> v3 = pow(v1, v2); + assert(v3.size() == v1.size()); + for (int i = 0; i < v3.size(); ++i) + assert(is_about(v3[i], a3[i], 10)); + } +} |