Files
boost_unordered/test/unordered/insert_hint_tests.cpp

130 lines
3.3 KiB
C++
Raw Normal View History

2016-08-17 12:08:15 +01:00
// Copyright 2016 Daniel James.
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// clang-format off
2016-08-17 12:08:15 +01:00
#include "../helpers/prefix.hpp"
#include <boost/unordered_set.hpp>
#include <boost/unordered_map.hpp>
#include "../helpers/postfix.hpp"
// clang-format on
2016-08-17 12:08:15 +01:00
#include "../helpers/test.hpp"
#include "../helpers/invariants.hpp"
#include <map>
#include <set>
#include <iostream>
2017-02-19 13:05:17 +00:00
namespace insert_hint {
UNORDERED_AUTO_TEST(insert_hint_empty)
2016-08-17 12:08:15 +01:00
{
typedef boost::unordered_multiset<int> container;
container x;
x.insert(x.cbegin(), 10);
2016-08-18 12:33:31 +01:00
BOOST_TEST_EQ(x.size(), 1u);
BOOST_TEST_EQ(x.count(10), 1u);
2016-08-17 12:08:15 +01:00
test::check_equivalent_keys(x);
}
2017-02-19 13:05:17 +00:00
UNORDERED_AUTO_TEST(insert_hint_empty2)
{
2016-08-17 12:08:15 +01:00
typedef boost::unordered_multimap<std::string, int> container;
container x;
x.emplace_hint(x.cbegin(), "hello", 50);
2016-08-18 12:33:31 +01:00
BOOST_TEST_EQ(x.size(), 1u);
BOOST_TEST_EQ(x.count("hello"), 1u);
2016-08-17 12:08:15 +01:00
BOOST_TEST_EQ(x.find("hello")->second, 50);
test::check_equivalent_keys(x);
}
2017-02-19 13:05:17 +00:00
UNORDERED_AUTO_TEST(insert_hint_single)
{
2016-08-17 12:08:15 +01:00
typedef boost::unordered_multiset<std::string> container;
container x;
x.insert("equal");
x.insert(x.cbegin(), "equal");
2016-08-18 12:33:31 +01:00
BOOST_TEST_EQ(x.size(), 2u);
BOOST_TEST_EQ(x.count("equal"), 2u);
2016-08-17 12:08:15 +01:00
test::check_equivalent_keys(x);
}
2017-02-19 13:05:17 +00:00
UNORDERED_AUTO_TEST(insert_hint_single2)
{
2016-08-17 12:08:15 +01:00
typedef boost::unordered_multimap<int, std::string> container;
container x;
x.emplace(10, "one");
x.emplace_hint(x.cbegin(), 10, "two");
2016-08-18 12:33:31 +01:00
BOOST_TEST_EQ(x.size(), 2u);
BOOST_TEST_EQ(x.count(10), 2u);
2016-08-17 12:08:15 +01:00
container::iterator it = x.find(10);
std::string v0 = (it++)->second;
std::string v1 = (it++)->second;
BOOST_TEST(v0 == "one" || v0 == "two");
BOOST_TEST(v1 == "one" || v1 == "two");
BOOST_TEST(v0 != v1);
test::check_equivalent_keys(x);
}
2017-02-19 13:05:17 +00:00
UNORDERED_AUTO_TEST(insert_hint_multiple)
{
2016-08-17 12:08:15 +01:00
for (unsigned int size = 0; size < 10; ++size) {
2017-02-19 13:05:17 +00:00
for (unsigned int offset = 0; offset <= size; ++offset) {
2016-08-17 12:08:15 +01:00
typedef boost::unordered_multiset<std::string> container;
container x;
2017-02-19 13:05:17 +00:00
for (unsigned int i = 0; i < size; ++i) {
x.insert("multiple");
}
2016-08-17 12:08:15 +01:00
BOOST_TEST_EQ(x.size(), size);
container::const_iterator position = x.cbegin();
2017-02-19 13:05:17 +00:00
for (unsigned int i = 0; i < offset; ++i) {
++position;
}
2016-08-17 12:08:15 +01:00
x.insert(position, "multiple");
2016-08-18 12:33:31 +01:00
BOOST_TEST_EQ(x.size(), size + 1u);
BOOST_TEST_EQ(x.count("multiple"), size + 1u);
2016-08-17 12:08:15 +01:00
test::check_equivalent_keys(x);
}
}
}
2017-02-19 13:05:17 +00:00
UNORDERED_AUTO_TEST(insert_hint_unique)
{
2016-08-17 12:08:15 +01:00
typedef boost::unordered_set<int> container;
container x;
x.insert(x.cbegin(), 10);
2016-08-18 12:33:31 +01:00
BOOST_TEST_EQ(x.size(), 1u);
BOOST_TEST_EQ(x.count(10), 1u);
2016-08-17 12:08:15 +01:00
test::check_equivalent_keys(x);
}
2017-02-19 13:05:17 +00:00
UNORDERED_AUTO_TEST(insert_hint_unique_single)
{
2016-08-17 12:08:15 +01:00
typedef boost::unordered_set<int> container;
container x;
x.insert(10);
x.insert(x.cbegin(), 10);
2016-08-18 12:33:31 +01:00
BOOST_TEST_EQ(x.size(), 1u);
BOOST_TEST_EQ(x.count(10), 1u);
2016-08-17 12:08:15 +01:00
test::check_equivalent_keys(x);
x.insert(x.cbegin(), 20);
2016-08-18 12:33:31 +01:00
BOOST_TEST_EQ(x.size(), 2u);
BOOST_TEST_EQ(x.count(10), 1u);
BOOST_TEST_EQ(x.count(20), 1u);
2016-08-17 12:08:15 +01:00
test::check_equivalent_keys(x);
}
}
RUN_TESTS()