c60ecc52536fbde720d306b29e6167e9e1dd6149
[platform/framework/web/crosswalk.git] / src / third_party / libc++ / trunk / test / localization / locale.categories / category.numeric / locale.num.get / facet.num.get.members / test_min_max.pass.cpp
1 #include <limits>
2 #include <sstream>
3 #include <iostream>
4 #include <cassert>
5 #include <iostream>
6
7 using namespace std;
8
9 template<typename T>
10 void check_limits()
11 {
12     T minv = numeric_limits<T>::min();
13     T maxv = numeric_limits<T>::max();
14
15     ostringstream miniss, maxiss;
16     assert(miniss << minv);
17     assert(maxiss << maxv);
18     std::string mins = miniss.str();
19     std::string maxs = maxiss.str(); 
20
21     istringstream maxoss(maxs), minoss(mins);
22
23     T new_minv, new_maxv;
24     assert(maxoss >> new_maxv);
25     assert(minoss >> new_minv);
26  
27     assert(new_minv == minv);
28     assert(new_maxv == maxv);
29
30     if(mins == "0")
31         mins = "-1";
32     else
33         mins[mins.size() - 1]++;
34     
35     maxs[maxs.size() - 1]++;
36
37     istringstream maxoss2(maxs), minoss2(mins);
38     
39     assert(! (maxoss2 >> new_maxv));
40     assert(! (minoss2 >> new_minv));
41 }
42
43 int main(void)
44 {
45     check_limits<short>();
46     check_limits<unsigned short>();
47     check_limits<int>();
48     check_limits<unsigned int>();
49     check_limits<long>();
50     check_limits<unsigned long>();
51     check_limits<long long>();
52     check_limits<unsigned long long>();
53 }