Add new failing test case

This commit is contained in:
Christian Mazakas
2023-01-09 15:00:39 -08:00
parent 130b483123
commit 71fd0c07ed

View File

@ -17,6 +17,7 @@
#include "../helpers/input_iterator.hpp" #include "../helpers/input_iterator.hpp"
#include "../helpers/helpers.hpp" #include "../helpers/helpers.hpp"
#include <boost/move/core.hpp>
#include <vector> #include <vector>
namespace insert_tests { namespace insert_tests {
@ -697,44 +698,65 @@ namespace insert_tests {
{ {
int x; int x;
pointer_constructible() : x(-1) {} pointer_constructible(int x_) : x(x_) {}
pointer_constructible(pointer_constructible const& p) : x(p.x) {} pointer_constructible(pointer_constructible const& p) : x(p.x) {}
pointer_constructible(pointer_constructible* p) : x(p->x) {} pointer_constructible(pointer_constructible* const&) : x(-1) {}
pointer_constructible(BOOST_RV_REF(pointer_constructible*)) : x(-2) {}
}; };
std::size_t hash_value(pointer_constructible const& p) struct pointer_constructible_hash
{ {
return boost::hash<int>()(p.x); typedef void is_transparent;
}
bool operator==( std::size_t operator()(pointer_constructible const& p) const
pointer_constructible const& lhs, pointer_constructible const& rhs) {
{ return boost::hash<int>()(p.x);
return lhs.x == rhs.x; }
} };
bool operator!=( struct pointer_constructible_equal_to
pointer_constructible const& lhs, pointer_constructible const& rhs)
{ {
return !(lhs == rhs); typedef void is_transparent;
}
bool operator()(
pointer_constructible const& lhs, pointer_constructible const& rhs) const
{
return lhs.x == rhs.x;
}
};
template <template <class Key, class Hash, class Pred, class Allocator> template <template <class Key, class Hash, class Pred, class Allocator>
class Set> class Set>
static void set_tests2_impl() static void set_tests2_impl()
{ {
Set<pointer_constructible, boost::hash<pointer_constructible>, Set<pointer_constructible, pointer_constructible_hash,
std::equal_to<pointer_constructible>, pointer_constructible_equal_to, test::allocator1<pointer_constructible> >
test::allocator1<pointer_constructible> > set, set2;
set;
pointer_constructible pc; pointer_constructible pc(1337), *addr_pc = &pc;
pc.x = 1337;
set.emplace(&pc); set.insert(pc); // 1337
set.insert(addr_pc); // -1
set.insert(&pc); // -2
BOOST_TEST_EQ(set.size(), 1u); BOOST_TEST_EQ(set.size(), 3u);
BOOST_TEST(set.find(pc) != set.end()); BOOST_TEST(set.find(pc) != set.end());
BOOST_TEST(set.find(-1) != set.end());
BOOST_TEST(set.find(-2) != set.end());
set2 = set;
BOOST_TEST_EQ(set2.size(), 3u);
BOOST_TEST(set2.find(pc) != set2.end());
BOOST_TEST(set2.find(-1) != set2.end());
BOOST_TEST(set2.find(-2) != set2.end());
set.rehash(set.bucket_count() + 1);
BOOST_TEST_EQ(set.size(), 3u);
BOOST_TEST(set.find(pc) != set.end());
BOOST_TEST(set.find(-1) != set.end());
BOOST_TEST(set.find(-2) != set.end());
} }
template <class X> template <class X>