1 // { dg-options "-std=gnu++11" }
2 
3 // 2010-03-25  Paolo Carlini  <paolo.carlini@oracle.com>
4 
5 // Copyright (C) 2010-2016 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 #include <unordered_map>
23 #include <testsuite_hooks.h>
24 
test01()25 void test01()
26 {
27   bool test __attribute__((unused)) = true;
28 
29   typedef std::pair<const int, int> Pair;
30   std::unordered_map<int, int> um1, um2;
31   VERIFY( um1 == um2 );
32   VERIFY( !(um1 != um2) );
33 
34   um1.insert(Pair(1, -1));
35   um2.insert(Pair(1, -1));
36   VERIFY( um1 == um2 );
37   VERIFY( !(um1 != um2) );
38 
39   um1.insert(Pair(2, -1));
40   um2.insert(Pair(2, -1));
41   VERIFY( um1 == um2 );
42   VERIFY( !(um1 != um2) );
43 
44   um1.insert(Pair(1, -1));
45   um2.insert(Pair(1, -1));
46   VERIFY( um1 == um2 );
47   VERIFY( !(um1 != um2) );
48 
49   um1.insert(Pair(3, -3));
50   VERIFY( um1 != um2 );
51   VERIFY( !(um1 == um2) );
52 
53   um2.insert(Pair(3, -3));
54   VERIFY( (um1 == um2) );
55   VERIFY( !(um1 != um2) );
56 
57   um2.clear();
58   VERIFY( um1 != um2 );
59   VERIFY( !(um1 == um2) );
60 
61   um1.clear();
62   VERIFY( um1 == um2 );
63   VERIFY( !(um1 != um2) );
64 
65   um1.insert(Pair(1, -1));
66   um2.insert(Pair(2, -2));
67   VERIFY( um1 != um2 );
68   VERIFY( !(um1 == um2) );
69 
70   um1.insert(Pair(2, -2));
71   um2.insert(Pair(1, -1));
72   VERIFY( um1 == um2 );
73   VERIFY( !(um1 != um2) );
74 
75   um1.insert(Pair(3, -3));
76   um2.insert(Pair(4, -4));
77   VERIFY( um1 != um2 );
78   VERIFY( !(um1 == um2) );
79 
80   um1.insert(Pair(4, -4));
81   VERIFY( um1 != um2 );
82   VERIFY( !(um1 == um2) );
83 
84   um2.insert(Pair(3, -3));
85   VERIFY( um1 == um2 );
86   VERIFY( !(um1 != um2) );
87 
88   um1.insert(Pair(1, -1));
89   um2.insert(Pair(1, -1));
90   VERIFY( um1 == um2 );
91   VERIFY( !(um1 != um2) );
92 
93   um1.insert(Pair(4, -4));
94   um2.insert(Pair(4, -4));
95   VERIFY( um1 == um2 );
96   VERIFY( !(um1 != um2) );
97 
98   um1.clear();
99   um2.clear();
100   VERIFY( um1 == um2 );
101   VERIFY( !(um1 != um2) );
102 
103   um1.insert(Pair(1, -1));
104   um2.insert(Pair(1, -2));
105   VERIFY( um1 != um2 );
106   VERIFY( !(um1 == um2) );
107 
108   um1.clear();
109   um2.clear();
110   VERIFY( um1 == um2 );
111   VERIFY( !(um1 != um2) );
112 
113   um1.insert(Pair(1, -1));
114   um2.insert(Pair(1, -1));
115   VERIFY( um1 == um2 );
116   VERIFY( !(um1 != um2) );
117 
118   um1.insert(Pair(2, -2));
119   um2.insert(Pair(2, -3));
120   VERIFY( um1 != um2 );
121   VERIFY( !(um1 == um2) );
122 
123   um1.insert(Pair(2, -3));
124   um2.insert(Pair(2, -2));
125   VERIFY( um1 != um2 );
126   VERIFY( !(um1 == um2) );
127 
128   um1.clear();
129   um2.clear();
130   VERIFY( um1 == um2 );
131   VERIFY( !(um1 != um2) );
132 
133   um1.insert(Pair(2, -2));
134   um2.insert(Pair(2, -3));
135   VERIFY( um1 != um2 );
136   VERIFY( !(um1 == um2) );
137 
138   um1.insert(Pair(1, -1));
139   um2.insert(Pair(1, -1));
140   VERIFY( um1 != um2 );
141   VERIFY( !(um1 == um2) );
142 
143   um1.insert(Pair(2, -3));
144   um2.insert(Pair(2, -2));
145   VERIFY( um1 != um2 );
146   VERIFY( !(um1 == um2) );
147 
148   um1.insert(Pair(1, -1));
149   um2.insert(Pair(1, -1));
150   VERIFY( um1 != um2 );
151   VERIFY( !(um1 == um2) );
152 
153   um1.insert(Pair(1, -1));
154   um2.insert(Pair(1, -2));
155   VERIFY( um1 != um2 );
156   VERIFY( !(um1 == um2) );
157 
158   const std::unordered_map<int, int> cum1(um1), cum2(um2);
159   VERIFY( cum1 != cum2 );
160   VERIFY( !(cum1 == cum2) );
161   VERIFY( cum1 != um2 );
162   VERIFY( !(um1 == cum2) );
163 }
164 
main()165 int main()
166 {
167   test01();
168   return 0;
169 }
170