insert_stable_tests.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 79 行
CPP
79 行
// Copyright 2007-2008 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)#include <boost/unordered_set.hpp>#include <boost/unordered_map.hpp>#include "../helpers/test.hpp"#include <iostream>namespace insert_stable{ struct member { int tag1_; int tag2_; member() : tag1_(0), tag2_(0) {} member(int t1, int t2) : tag1_(t1), tag2_(t2) {} friend bool operator==(member const& x, member const& y) { return x.tag1_ == y.tag1_; } friend bool operator!=(member const& x, member const& y) { return x.tag1_ != y.tag1_; } };}#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUPnamespace boost#elsenamespace insert_stable#endif{ std::size_t hash_value(insert_stable::member const& x) { return static_cast<std::size_t>(x.tag1_); }}UNORDERED_AUTO_TEST(stable_insert_test1) { boost::unordered_multiset<insert_stable::member> x; x.insert(insert_stable::member(1,1)); x.insert(insert_stable::member(1,2)); x.insert(insert_stable::member(1,3)); boost::unordered_multiset<insert_stable::member>::const_iterator it = x.begin(), end = x.end(); BOOST_CHECK(it != end); if(it != end) { BOOST_CHECK(it->tag2_ == 1); ++it; } BOOST_CHECK(it != end); if(it != end) { BOOST_CHECK(it->tag2_ == 2); ++it; } BOOST_CHECK(it != end); if(it != end) { BOOST_CHECK(it->tag2_ == 3); ++it; } BOOST_CHECK(it == end);}UNORDERED_AUTO_TEST(stable_insert_test2) { boost::unordered_multimap<insert_stable::member, int> x; typedef boost::unordered_multimap<insert_stable::member, int>::const_iterator iterator; iterator it = x.insert(x.end(), std::make_pair(insert_stable::member(1,1), 1)); it = x.insert(it, std::make_pair(insert_stable::member(1,2), 2)); it = x.insert(it, std::make_pair(insert_stable::member(1,3), 3)); it = x.begin(); iterator end = x.end(); BOOST_CHECK(it != end); if(it != end) { BOOST_CHECK(it->first.tag2_ == 1 && it->second == 1); ++it; } BOOST_CHECK(it != end); if(it != end) { BOOST_CHECK(it->first.tag2_ == 2 && it->second == 2); ++it; } BOOST_CHECK(it != end); if(it != end) { BOOST_CHECK(it->first.tag2_ == 3 && it->second == 3); ++it; } BOOST_CHECK(it == end);}RUN_TESTS()
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?