1 // { dg-add-options ieee }
2 
3 // 1999-08-23 bkoz
4 
5 // Copyright (C) 1999-2014 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 // 18.2.1.1 template class numeric_limits
23 
24 #include <limits>
25 #include <limits.h>
26 #include <float.h>
27 #include <cwchar>
28 #include <testsuite_hooks.h>
29 
30 template<typename T>
31 void
test_is_iec559()32 test_is_iec559()
33 {
34   bool test;
35 
36   if (std::numeric_limits<T>::is_iec559)
37     {
38       // IEC 559 requires all of the following.
39       test = (std::numeric_limits<T>::has_infinity
40 	      && std::numeric_limits<T>::has_quiet_NaN
41 	      && std::numeric_limits<T>::has_signaling_NaN);
42     }
43   else
44     {
45       // If we had all of the following, why didn't we set IEC 559?
46       test = (!std::numeric_limits<T>::has_infinity
47 	      || !std::numeric_limits<T>::has_quiet_NaN
48 	      || !std::numeric_limits<T>::has_signaling_NaN);
49     }
50 
51   VERIFY (test);
52 }
53 
54 // libstdc++/8949
test04()55 bool test04()
56 {
57   bool test __attribute__((unused)) = true;
58 
59   VERIFY( !std::numeric_limits<short>::is_iec559 );
60   VERIFY( !std::numeric_limits<unsigned short>::is_iec559 );
61   VERIFY( !std::numeric_limits<int>::is_iec559 );
62   VERIFY( !std::numeric_limits<unsigned int>::is_iec559 );
63   VERIFY( !std::numeric_limits<long>::is_iec559 );
64   VERIFY( !std::numeric_limits<unsigned long>::is_iec559 );
65   VERIFY( !std::numeric_limits<long long>::is_iec559 );
66   VERIFY( !std::numeric_limits<unsigned long long>::is_iec559 );
67   return test;
68 }
69 
main()70 int main()
71 {
72   test_is_iec559<float>();
73   test_is_iec559<double>();
74   test_is_iec559<long double>();
75 
76   test04();
77 
78   return 0;
79 }
80