//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// <unordered_set>
// template <class Key, class Hash, class Pred, class Alloc>
// bool
// operator==(const unordered_set<Key, Hash, Pred, Alloc>& x,
// const unordered_set<Key, Hash, Pred, Alloc>& y);
//
// template <class Key, class Hash, class Pred, class Alloc>
// bool
// operator!=(const unordered_set<Key, Hash, Pred, Alloc>& x,
// const unordered_set<Key, Hash, Pred, Alloc>& y);
#include <unordered_set>
#include <cassert>
#include "test_macros.h"
#include "min_allocator.h"
int main(int, char**)
{
{
typedef std::unordered_set<int> C;
typedef int P;
P a[] =
{
P(10),
P(20),
P(30),
P(40),
P(50),
P(60),
P(70),
P(80)
};
const C c1(std::begin(a), std::end(a));
const C c2;
assert(!(c1 == c2));
assert( (c1 != c2));
}
{
typedef std::unordered_set<int> C;
typedef int P;
P a[] =
{
P(10),
P(20),
P(30),
P(40),
P(50),
P(60),
P(70),
P(80)
};
const C c1(std::begin(a), std::end(a));
const C c2 = c1;
assert( (c1 == c2));
assert(!(c1 != c2));
}
{
typedef std::unordered_set<int> C;
typedef int P;
P a[] =
{
P(10),
P(20),
P(30),
P(40),
P(50),
P(60),
P(70),
P(80)
};
C c1(std::begin(a), std::end(a));
C c2 = c1;
c2.rehash(30);
assert( (c1 == c2));
assert(!(c1 != c2));
c2.insert(P(90));
assert(!(c1 == c2));
assert( (c1 != c2));
c1.insert(P(90));
assert( (c1 == c2));
assert(!(c1 != c2));
}
#if TEST_STD_VER >= 11
{
typedef std::unordered_set<int, std::hash<int>, std::equal_to<int>, min_allocator<int>> C;
typedef int P;
P a[] =
{
P(10),
P(20),
P(30),
P(40),
P(50),
P(60),
P(70),
P(80)
};
const C c1(std::begin(a), std::end(a));
const C c2;
assert(!(c1 == c2));
assert( (c1 != c2));
}
{
typedef std::unordered_set<int, std::hash<int>, std::equal_to<int>, min_allocator<int>> C;
typedef int P;
P a[] =
{
P(10),
P(20),
P(30),
P(40),
P(50),
P(60),
P(70),
P(80)
};
const C c1(std::begin(a), std::end(a));
const C c2 = c1;
assert( (c1 == c2));
assert(!(c1 != c2));
}
{
typedef std::unordered_set<int, std::hash<int>, std::equal_to<int>, min_allocator<int>> C;
typedef int P;
P a[] =
{
P(10),
P(20),
P(30),
P(40),
P(50),
P(60),
P(70),
P(80)
};
C c1(std::begin(a), std::end(a));
C c2 = c1;
c2.rehash(30);
assert( (c1 == c2));
assert(!(c1 != c2));
c2.insert(P(90));
assert(!(c1 == c2));
assert( (c1 != c2));
c1.insert(P(90));
assert( (c1 == c2));
assert(!(c1 != c2));
}
#endif
return 0;
}