summaryrefslogtreecommitdiffstats
path: root/config.tests/unix/stl/ConfigureChecks.cmake
blob: 7176813b77ed0e91c6b1eb8e1e7bc1f90de893ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
###########################################
#                                         #
#  Improvements and feedback are welcome  #
#                                         #
#  This file is released under GPL >= 3   #
#                                         #
###########################################


##### check for STL support

if( NOT WITH_STL )
    set( TQT_NO_STL 1 )
 else()
    check_cxx_source_compiles("
    #include <iterator>
    #include <map>
    #include <vector>
    #include <algorithm>
    #include <iostream>

    int main()
    {
        int rval(0);
        std::vector<int> v1;
        v1.push_back(0);
        v1.push_back(1);
        v1.push_back(2);
        v1.push_back(3);
        v1.push_back(4);

        if ( v1.size() != 5 )
        {
            std::cout << \"stltest: vector failed size check, expected 5, got \" << v1.size();
            ++rval;
        }
        if ( v1.capacity() < 5 )
        {
            std::cout << \"stltest: vector failed capacity check, expected >= 5, got \" << v1.capacity();
            ++rval;
        }
        std::vector<int>::iterator v1it = std::find( v1.begin(), v1.end(), 99 );
        if ( v1it != v1.end() )
        {
            std::cout << \"stltest: find failed, expected end(), got \" << *v1it;
            ++rval;
        }
        v1it = std::find( v1.begin(), v1.end(), 3 );
        if ( v1it == v1.end() )
        {
            std::cout << \"stltest: find failed, expected to find element, got end()\";
            ++rval;
        }
        std::vector<int> v2;
        std::copy( v1.begin(), v1it, std::back_inserter( v2 ) );
        if ( v2.size() != 3 )
        {
            std::cout << \"stltest: copy failed, expected 3 elements, got \" << v2.size();
            ++rval;
        }
        std::map<int, double> m1;
        m1.insert( std::make_pair( 1, 2.0 ) );
        m1.insert( std::make_pair( 3, 2.0 ) );
        m1.insert( std::make_pair( 5, 2.0 ) );
        m1.insert( std::make_pair( 7, 2.0 ) );
        if ( m1.size() != 4 )
        {
            std::cout << \"stltest: map failed size check, expected 4, got \" << m1.size();
            ++rval;
        }
        std::map<int,double>::iterator m1it = m1.begin();
        for ( ; m1it != m1.end(); ++m1it )
        {
            if ( (*m1it).second != 2 )
            {
                std::cout << \"stltest: iterator failed, expected 2, got \" << (*m1it).second;
                ++rval;
            }
        }
        std::map< int, double > m2( m1 );
        if ( m2.size() != m1.size() )
        {
            std::cout << \"stltest: map copy failed, expected \" << m1.size() << \" elements, got \" << m2.size();
            ++rval;
        }
        return 0;
    }
    // something mean to see if the compiler and C++ standard lib are good enough
    template<class K, class T>
    class DummyClass
    {
        // everything in std namespace ?
        typedef std::bidirectional_iterator_tag i;
        typedef std::ptrdiff_t d;
        // typename implemented ?
        typedef typename std::map<K,T>::iterator MyIterator;
    };"
    STL_SUPPORT)

    if( NOT STL_SUPPORT )
        set( TQT_NO_STL false )
    endif()
endif(NOT WITH_STL)