Home | History | Annotate | Download | only in valarray.transcend
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // <valarray>
     11 
     12 // template<class T> class valarray;
     13 
     14 // template<class T>
     15 //   valarray<T>
     16 //   atan(const valarray<T>& x);
     17 
     18 #include <valarray>
     19 #include <cassert>
     20 #include <sstream>
     21 
     22 bool is_about(double x, double y, int p)
     23 {
     24     std::ostringstream o;
     25     o.precision(p);
     26     scientific(o);
     27     o << x;
     28     std::string a = o.str();
     29     o.str("");
     30     o << y;
     31     return a == o.str();
     32 }
     33 
     34 int main()
     35 {
     36     {
     37         typedef double T;
     38         T a1[] = {-.9, -.5, 0., .5, .75};
     39         T a3[] = {-7.3281510178650666e-01,
     40                   -4.6364760900080615e-01,
     41                    0.0000000000000000e+00,
     42                    4.6364760900080615e-01,
     43                    6.4350110879328437e-01};
     44         const unsigned N = sizeof(a1)/sizeof(a1[0]);
     45         std::valarray<T> v1(a1, N);
     46         std::valarray<T> v3 = atan(v1);
     47         assert(v3.size() == v1.size());
     48         for (int i = 0; i < v3.size(); ++i)
     49             assert(is_about(v3[i], a3[i], 10));
     50     }
     51 }
     52