1// { dg-do compile }
2
3// 2006-03-07  Paolo Carlini  <pcarlini@suse.de>
4//
5// Copyright (C) 2006-2015 Free Software Foundation, Inc.
6//
7// This file is part of the GNU ISO C++ Library.  This library is free
8// software; you can redistribute it and/or modify it under the
9// terms of the GNU General Public License as published by the
10// Free Software Foundation; either version 3, or (at your option)
11// any later version.
12//
13// This library is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License along
19// with this library; see the file COPYING3.  If not see
20// <http://www.gnu.org/licenses/>.
21
22// 8.16.4 Additional overloads
23
24#include <tr1/cmath>
25#include <testsuite_tr1.h>
26
27void test01()
28{
29#if _GLIBCXX_USE_C99_MATH_TR1
30
31  using namespace __gnu_test;
32
33  double d0 = 0.0;
34  float f0 = 0.0f;
35  long double ld0 = 0.0l;
36  int i0 = 0;
37  int* pquo = 0;
38  long lex = 0l;
39  int ex = 0;
40
41  check_ret_type<double>(std::tr1::atan2(d0, d0));
42  check_ret_type<double>(std::tr1::atan2(d0, f0));
43  check_ret_type<float>(std::tr1::atan2(f0, f0));
44  check_ret_type<long double>(std::tr1::atan2(ld0, ld0));
45  check_ret_type<long double>(std::tr1::atan2(ld0, d0));
46  check_ret_type<double>(std::tr1::atan2(i0, i0));
47  check_ret_type<double>(std::tr1::atan2(d0, i0));
48
49  check_ret_type<double>(std::tr1::acosh(d0));
50  check_ret_type<float>(std::tr1::acosh(f0));
51  check_ret_type<long double>(std::tr1::acosh(ld0));
52  check_ret_type<double>(std::tr1::acosh(i0));
53
54  check_ret_type<double>(std::tr1::asinh(d0));
55  check_ret_type<float>(std::tr1::asinh(f0));
56  check_ret_type<long double>(std::tr1::asinh(ld0));
57  check_ret_type<double>(std::tr1::asinh(i0));
58
59  check_ret_type<double>(std::tr1::atanh(d0));
60  check_ret_type<float>(std::tr1::atanh(f0));
61  check_ret_type<long double>(std::tr1::atanh(ld0));
62  check_ret_type<double>(std::tr1::atanh(i0));
63
64  check_ret_type<double>(std::tr1::cbrt(d0));
65  check_ret_type<float>(std::tr1::cbrt(f0));
66  check_ret_type<long double>(std::tr1::cbrt(ld0));
67  check_ret_type<double>(std::tr1::cbrt(i0));
68
69  check_ret_type<double>(std::tr1::copysign(d0, d0));
70  check_ret_type<double>(std::tr1::copysign(d0, f0));
71  check_ret_type<float>(std::tr1::copysign(f0, f0));
72  check_ret_type<long double>(std::tr1::copysign(ld0, ld0));
73  check_ret_type<long double>(std::tr1::copysign(ld0, d0));
74  check_ret_type<double>(std::tr1::copysign(i0, i0));
75  check_ret_type<double>(std::tr1::copysign(d0, i0));
76
77  check_ret_type<double>(std::tr1::erf(d0));
78  check_ret_type<float>(std::tr1::erf(f0));
79  check_ret_type<long double>(std::tr1::erf(ld0));
80  check_ret_type<double>(std::tr1::erf(i0));
81
82  check_ret_type<double>(std::tr1::erfc(d0));
83  check_ret_type<float>(std::tr1::erfc(f0));
84  check_ret_type<long double>(std::tr1::erfc(ld0));
85  check_ret_type<double>(std::tr1::erfc(i0));
86
87  check_ret_type<double>(std::tr1::exp2(d0));
88  check_ret_type<float>(std::tr1::exp2(f0));
89  check_ret_type<long double>(std::tr1::exp2(ld0));
90  check_ret_type<double>(std::tr1::exp2(i0));
91
92  check_ret_type<double>(std::tr1::expm1(d0));
93  check_ret_type<float>(std::tr1::expm1(f0));
94  check_ret_type<long double>(std::tr1::expm1(ld0));
95  check_ret_type<double>(std::tr1::expm1(i0));
96
97  check_ret_type<double>(std::tr1::fdim(d0, d0));
98  check_ret_type<double>(std::tr1::fdim(d0, f0));
99  check_ret_type<float>(std::tr1::fdim(f0, f0));
100  check_ret_type<long double>(std::tr1::fdim(ld0, ld0));
101  check_ret_type<long double>(std::tr1::fdim(ld0, d0));
102  check_ret_type<double>(std::tr1::fdim(i0, i0));
103  check_ret_type<double>(std::tr1::fdim(d0, i0));
104
105  check_ret_type<double>(std::tr1::fma(d0, d0, d0));
106  check_ret_type<double>(std::tr1::fma(d0, f0, d0));
107  check_ret_type<float>(std::tr1::fma(f0, f0, f0));
108  check_ret_type<long double>(std::tr1::fma(ld0, ld0, ld0));
109  check_ret_type<long double>(std::tr1::fma(ld0, d0, f0));
110  check_ret_type<double>(std::tr1::fma(i0, i0, i0));
111  check_ret_type<double>(std::tr1::fma(d0, i0, f0));
112
113  check_ret_type<double>(std::tr1::fmax(d0, d0));
114  check_ret_type<double>(std::tr1::fmax(d0, f0));
115  check_ret_type<float>(std::tr1::fmax(f0, f0));
116  check_ret_type<long double>(std::tr1::fmax(ld0, ld0));
117  check_ret_type<long double>(std::tr1::fmax(ld0, d0));
118  check_ret_type<double>(std::tr1::fmax(i0, i0));
119  check_ret_type<double>(std::tr1::fmax(d0, i0));
120
121  check_ret_type<double>(std::tr1::fmin(d0, d0));
122  check_ret_type<double>(std::tr1::fmin(d0, f0));
123  check_ret_type<float>(std::tr1::fmin(f0, f0));
124  check_ret_type<long double>(std::tr1::fmin(ld0, ld0));
125  check_ret_type<long double>(std::tr1::fmin(ld0, d0));
126  check_ret_type<double>(std::tr1::fmin(i0, i0));
127  check_ret_type<double>(std::tr1::fmin(d0, i0));
128
129  check_ret_type<double>(std::tr1::hypot(d0, d0));
130  check_ret_type<double>(std::tr1::hypot(d0, f0));
131  check_ret_type<float>(std::tr1::hypot(f0, f0));
132  check_ret_type<long double>(std::tr1::hypot(ld0, ld0));
133  check_ret_type<long double>(std::tr1::hypot(ld0, d0));
134  check_ret_type<double>(std::tr1::hypot(i0, i0));
135  check_ret_type<double>(std::tr1::hypot(d0, i0));
136
137  check_ret_type<int>(std::tr1::ilogb(d0));
138  check_ret_type<int>(std::tr1::ilogb(f0));
139  check_ret_type<int>(std::tr1::ilogb(ld0));
140  check_ret_type<int>(std::tr1::ilogb(i0));
141
142  check_ret_type<double>(std::tr1::lgamma(d0));
143  check_ret_type<float>(std::tr1::lgamma(f0));
144  check_ret_type<long double>(std::tr1::lgamma(ld0));
145  check_ret_type<double>(std::tr1::lgamma(i0));
146
147  check_ret_type<long long>(std::tr1::llrint(d0));
148  check_ret_type<long long>(std::tr1::llrint(f0));
149  check_ret_type<long long>(std::tr1::llrint(ld0));
150  check_ret_type<long long>(std::tr1::llrint(i0));
151
152  check_ret_type<long long>(std::tr1::llround(d0));
153  check_ret_type<long long>(std::tr1::llround(f0));
154  check_ret_type<long long>(std::tr1::llround(ld0));
155  check_ret_type<long long>(std::tr1::llround(i0));
156
157  check_ret_type<double>(std::tr1::log1p(d0));
158  check_ret_type<float>(std::tr1::log1p(f0));
159  check_ret_type<long double>(std::tr1::log1p(ld0));
160  check_ret_type<double>(std::tr1::log1p(i0));
161
162  // DR 568.
163  check_ret_type<double>(std::tr1::log2(d0));
164  check_ret_type<float>(std::tr1::log2(f0));
165  check_ret_type<long double>(std::tr1::log2(ld0));
166  check_ret_type<double>(std::tr1::log2(i0));
167
168  check_ret_type<double>(std::tr1::logb(d0));
169  check_ret_type<float>(std::tr1::logb(f0));
170  check_ret_type<long double>(std::tr1::logb(ld0));
171  check_ret_type<double>(std::tr1::logb(i0));
172
173  check_ret_type<long>(std::tr1::lrint(d0));
174  check_ret_type<long>(std::tr1::lrint(f0));
175  check_ret_type<long>(std::tr1::lrint(ld0));
176  check_ret_type<long>(std::tr1::lrint(i0));
177
178  check_ret_type<long>(std::tr1::lround(d0));
179  check_ret_type<long>(std::tr1::lround(f0));
180  check_ret_type<long>(std::tr1::lround(ld0));
181  check_ret_type<long>(std::tr1::lround(i0));
182
183  check_ret_type<double>(std::tr1::nearbyint(d0));
184  check_ret_type<float>(std::tr1::nearbyint(f0));
185  check_ret_type<long double>(std::tr1::nearbyint(ld0));
186  check_ret_type<double>(std::tr1::nearbyint(i0));
187
188  check_ret_type<double>(std::tr1::nextafter(d0, d0));
189  check_ret_type<double>(std::tr1::nextafter(d0, f0));
190  check_ret_type<float>(std::tr1::nextafter(f0, f0));
191  check_ret_type<long double>(std::tr1::nextafter(ld0, ld0));
192  check_ret_type<long double>(std::tr1::nextafter(ld0, d0));
193  check_ret_type<double>(std::tr1::nextafter(i0, i0));
194  check_ret_type<double>(std::tr1::nextafter(d0, i0));
195
196  check_ret_type<double>(std::tr1::nexttoward(d0, ld0));
197  check_ret_type<float>(std::tr1::nexttoward(f0, ld0));
198  check_ret_type<long double>(std::tr1::nexttoward(ld0, ld0));
199  check_ret_type<double>(std::tr1::nexttoward(i0, ld0));
200
201  check_ret_type<double>(std::tr1::pow(d0, d0));
202  check_ret_type<double>(std::tr1::pow(d0, f0));
203  check_ret_type<float>(std::tr1::pow(f0, f0));
204  check_ret_type<long double>(std::tr1::pow(ld0, ld0));
205  check_ret_type<long double>(std::tr1::pow(ld0, d0));
206  check_ret_type<double>(std::tr1::pow(i0, i0));
207  check_ret_type<double>(std::tr1::pow(d0, i0));
208  check_ret_type<double>(std::tr1::pow(f0, i0));
209
210  check_ret_type<double>(std::tr1::remainder(d0, d0));
211  check_ret_type<double>(std::tr1::remainder(d0, f0));
212  check_ret_type<float>(std::tr1::remainder(f0, f0));
213  check_ret_type<long double>(std::tr1::remainder(ld0, ld0));
214  check_ret_type<long double>(std::tr1::remainder(ld0, d0));
215  check_ret_type<double>(std::tr1::remainder(i0, i0));
216  check_ret_type<double>(std::tr1::remainder(d0, i0));
217
218  check_ret_type<double>(std::tr1::remquo(d0, d0, pquo));
219  check_ret_type<double>(std::tr1::remquo(d0, f0, pquo));
220  check_ret_type<float>(std::tr1::remquo(f0, f0, pquo));
221  check_ret_type<long double>(std::tr1::remquo(ld0, ld0, pquo));
222  check_ret_type<long double>(std::tr1::remquo(ld0, d0, pquo));
223  check_ret_type<double>(std::tr1::remquo(i0, i0, pquo));
224  check_ret_type<double>(std::tr1::remquo(d0, i0, pquo));
225
226  check_ret_type<double>(std::tr1::rint(d0));
227  check_ret_type<float>(std::tr1::rint(f0));
228  check_ret_type<long double>(std::tr1::rint(ld0));
229  check_ret_type<double>(std::tr1::rint(i0));
230
231  check_ret_type<double>(std::tr1::round(d0));
232  check_ret_type<float>(std::tr1::round(f0));
233  check_ret_type<long double>(std::tr1::round(ld0));
234  check_ret_type<double>(std::tr1::round(i0));
235
236  check_ret_type<double>(std::tr1::scalbln(d0, lex));
237  check_ret_type<float>(std::tr1::scalbln(f0, lex));
238  check_ret_type<long double>(std::tr1::scalbln(ld0, lex));
239  check_ret_type<double>(std::tr1::scalbln(i0, lex));
240
241  check_ret_type<double>(std::tr1::scalbn(d0, ex));
242  check_ret_type<float>(std::tr1::scalbn(f0, ex));
243  check_ret_type<long double>(std::tr1::scalbn(ld0, ex));
244  check_ret_type<double>(std::tr1::scalbn(i0, ex));
245
246  check_ret_type<double>(std::tr1::tgamma(d0));
247  check_ret_type<float>(std::tr1::tgamma(f0));
248  check_ret_type<long double>(std::tr1::tgamma(ld0));
249  check_ret_type<double>(std::tr1::tgamma(i0));
250
251  check_ret_type<double>(std::tr1::trunc(d0));
252  check_ret_type<float>(std::tr1::trunc(f0));
253  check_ret_type<long double>(std::tr1::trunc(ld0));
254  check_ret_type<double>(std::tr1::trunc(i0));
255
256#endif
257}
258