1// { dg-options "-std=gnu++0x" }
2
3// 2010-03-25  Paolo Carlini  <paolo.carlini@oracle.com>
4
5// Copyright (C) 2010 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
25void 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
165int main()
166{
167  test01();
168  return 0;
169}
170