]>
git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/26_numerics/valarray/transcend.cc
f3c31623af5b018a0f3c216e5269bf809eb5e6cf
1 // Copyright (C) 2018-2019 Free Software Foundation, Inc.
3 // This file is part of the GNU ISO C++ Library. This library is free
4 // software; you can redistribute it and/or modify it under the
5 // terms of the GNU General Public License as published by the
6 // Free Software Foundation; either version 3, or (at your option)
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License along
15 // with this library; see the file COPYING3. If not see
16 // <http://www.gnu.org/licenses/>.
21 #include <testsuite_hooks.h>
23 bool eq(double d
, double e
)
25 return (int)(d
* 100) == (int)(e
* 100);
31 std::valarray
<double> v(2);
34 std::valarray
<double> v_abs
= abs(v
);
35 VERIFY( v_abs
[0] == 0.5 );
36 VERIFY( v_abs
[1] == 0.25 );
38 std::valarray
<double> v_acos
= acos(v
);
39 VERIFY( eq( v_acos
[0], 2.09 ) );
40 VERIFY( eq( v_acos
[1], 1.31 ) );
42 std::valarray
<double> v_asin
= asin(v
);
43 VERIFY( eq( v_asin
[0], -0.52 ) );
44 VERIFY( eq( v_asin
[1], 0.25 ) );
46 std::valarray
<double> v_atan
= atan(v
);
47 VERIFY( eq( v_atan
[0], -0.46 ) );
48 VERIFY( eq( v_atan
[1], 0.24 ) );
50 std::valarray
<double> v2(2);
53 std::valarray
<double> v_atan2
= atan2(v
, v2
);
54 VERIFY( eq( v_atan2
[0], -0.12 ) );
55 VERIFY( eq( v_atan2
[1], 0.08 ) );
57 v_atan2
= atan2(v
, 4); // LWG 3074 allows mixed types
58 VERIFY( eq( v_atan2
[0], -0.12 ) );
59 VERIFY( eq( v_atan2
[1], 0.06 ) );
61 v_atan2
= atan2(4, v
); // LWG 3074 allows mixed types
62 VERIFY( eq( v_atan2
[0], 1.69 ) );
63 VERIFY( eq( v_atan2
[1], 1.50 ) );
65 std::valarray
<double> v_cos
= cos(v
);
66 VERIFY( eq( v_cos
[0], 0.87 ) );
67 VERIFY( eq( v_cos
[1], 0.96 ) );
69 std::valarray
<double> v_cosh
= cosh(v
);
70 VERIFY( eq( v_cosh
[0], 1.12 ) );
71 VERIFY( eq( v_cosh
[1], 1.03 ) );
73 std::valarray
<double> v_exp
= exp(v
);
74 VERIFY( eq( v_exp
[0], 0.60 ) );
75 VERIFY( eq( v_exp
[1], 1.28 ) );
77 std::valarray
<double> v_log
= log(v
);
78 VERIFY( eq( v_log
[1], -1.38 ) );
80 std::valarray
<double> v_log10
= log10(v
);
81 VERIFY( eq( v_log10
[1], -0.60 ) );
83 std::valarray
<double> v_pow
= pow(v
, v2
);
84 VERIFY( eq( v_pow
[0], 0.06 ) );
85 VERIFY( eq( v_pow
[1], 0.01 ) );
87 v_pow
= pow(v
, 3); // LWG 3074 allows mixed types
88 VERIFY( eq( v_pow
[0], -0.12 ) );
89 VERIFY( eq( v_pow
[1], 0.01 ) );
91 v_pow
= pow(4, v
); // LWG 3074 allows mixed types
92 VERIFY( eq( v_pow
[0], 0.5 ) );
93 VERIFY( eq( v_pow
[1], 1.41 ) );