1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant//                     The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <unordered_set>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class Key, class Hash, class Pred, class Alloc>
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// bool
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// operator==(const unordered_multiset<Key, Hash, Pred, Alloc>& x,
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//            const unordered_multiset<Key, Hash, Pred, Alloc>& y);
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class Key, class Hash, class Pred, class Alloc>
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// bool
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// operator!=(const unordered_multiset<Key, Hash, Pred, Alloc>& x,
20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//            const unordered_multiset<Key, Hash, Pred, Alloc>& y);
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <unordered_set>
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
25061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h"
267a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::unordered_multiset<int> C;
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int P;
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        P a[] =
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(10),
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(20),
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(20),
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(30),
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(40),
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(50),
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(50),
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(50),
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(60),
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(70),
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(80)
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const C c1(std::begin(a), std::end(a));
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const C c2;
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(!(c1 == c2));
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert( (c1 != c2));
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::unordered_multiset<int> C;
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int P;
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        P a[] =
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(10),
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(20),
58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(20),
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(30),
60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(40),
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(50),
62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(50),
63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(50),
64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(60),
65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(70),
66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(80)
67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const C c1(std::begin(a), std::end(a));
69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const C c2 = c1;
70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert( (c1 == c2));
71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(!(c1 != c2));
72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::unordered_multiset<int> C;
75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int P;
76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        P a[] =
77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(10),
79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(20),
80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(20),
81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(30),
82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(40),
83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(50),
84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(50),
85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(50),
86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(60),
87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(70),
88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            P(80)
89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c1(std::begin(a), std::end(a));
91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c2 = c1;
92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        c2.rehash(30);
93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert( (c1 == c2));
94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(!(c1 != c2));
95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        c2.insert(P(90));
96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(!(c1 == c2));
97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert( (c1 != c2));
98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        c1.insert(P(90));
99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert( (c1 == c2));
100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(!(c1 != c2));
101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
1027a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant#if __cplusplus >= 201103L
1037a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant    {
1047a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        typedef std::unordered_multiset<int, std::hash<int>,
1057a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant                                      std::equal_to<int>, min_allocator<int>> C;
1067a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        typedef int P;
1077a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        P a[] =
1087a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        {
1097a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(10),
1107a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(20),
1117a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(20),
1127a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(30),
1137a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(40),
1147a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(50),
1157a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(50),
1167a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(50),
1177a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(60),
1187a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(70),
1197a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(80)
1207a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        };
1217a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        const C c1(std::begin(a), std::end(a));
1227a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        const C c2;
1237a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        assert(!(c1 == c2));
1247a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        assert( (c1 != c2));
1257a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant    }
1267a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant    {
1277a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        typedef std::unordered_multiset<int, std::hash<int>,
1287a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant                                      std::equal_to<int>, min_allocator<int>> C;
1297a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        typedef int P;
1307a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        P a[] =
1317a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        {
1327a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(10),
1337a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(20),
1347a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(20),
1357a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(30),
1367a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(40),
1377a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(50),
1387a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(50),
1397a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(50),
1407a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(60),
1417a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(70),
1427a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(80)
1437a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        };
1447a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        const C c1(std::begin(a), std::end(a));
1457a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        const C c2 = c1;
1467a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        assert( (c1 == c2));
1477a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        assert(!(c1 != c2));
1487a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant    }
1497a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant    {
1507a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        typedef std::unordered_multiset<int, std::hash<int>,
1517a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant                                      std::equal_to<int>, min_allocator<int>> C;
1527a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        typedef int P;
1537a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        P a[] =
1547a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        {
1557a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(10),
1567a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(20),
1577a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(20),
1587a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(30),
1597a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(40),
1607a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(50),
1617a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(50),
1627a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(50),
1637a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(60),
1647a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(70),
1657a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant            P(80)
1667a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        };
1677a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        C c1(std::begin(a), std::end(a));
1687a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        C c2 = c1;
1697a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        c2.rehash(30);
1707a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        assert( (c1 == c2));
1717a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        assert(!(c1 != c2));
1727a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        c2.insert(P(90));
1737a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        assert(!(c1 == c2));
1747a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        assert( (c1 != c2));
1757a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        c1.insert(P(90));
1767a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        assert( (c1 == c2));
1777a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant        assert(!(c1 != c2));
1787a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant    }
1797a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant#endif
180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
181