test_min_max.pass.cpp revision 98760c18f85bafd98dde7a309e1b0e677abd47d8
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#include <limits>
11#include <sstream>
12#include <iostream>
13#include <cassert>
14#include <iostream>
15
16using namespace std;
17
18template<typename T>
19void check_limits()
20{
21    T minv = numeric_limits<T>::min();
22    T maxv = numeric_limits<T>::max();
23
24    ostringstream miniss, maxiss;
25    assert(miniss << minv);
26    assert(maxiss << maxv);
27    std::string mins = miniss.str();
28    std::string maxs = maxiss.str();
29
30    istringstream maxoss(maxs), minoss(mins);
31
32    T new_minv, new_maxv;
33    assert(maxoss >> new_maxv);
34    assert(minoss >> new_minv);
35
36    assert(new_minv == minv);
37    assert(new_maxv == maxv);
38
39    if(mins == "0")
40        mins = "-1";
41    else
42        mins[mins.size() - 1]++;
43
44    maxs[maxs.size() - 1]++;
45
46    istringstream maxoss2(maxs), minoss2(mins);
47
48    assert(! (maxoss2 >> new_maxv));
49    assert(! (minoss2 >> new_minv));
50}
51
52int main(void)
53{
54    check_limits<short>();
55    check_limits<unsigned short>();
56    check_limits<int>();
57    check_limits<unsigned int>();
58    check_limits<long>();
59    check_limits<unsigned long>();
60    check_limits<long long>();
61    check_limits<unsigned long long>();
62}
63