emplace_hint.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// ��������������������The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// This file is distributed under the University of Illinois Open Source
6bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// License. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <set>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class multiset
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class... Args>
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//   iterator emplace_hint(const_iterator position, Args&&... args);
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <set>
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "../../Emplaceable.h"
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "../../DefaultOnly.h"
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifdef _LIBCPP_MOVE
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::multiset<DefaultOnly> M;
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef M::iterator R;
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m;
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(DefaultOnly::count == 0);
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        R r = m.emplace_hint(m.cend());
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(r == m.begin());
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 1);
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*m.begin() == DefaultOnly());
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(DefaultOnly::count == 1);
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        r = m.emplace_hint(m.cbegin());
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(r == m.begin());
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 2);
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*m.begin() == DefaultOnly());
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(DefaultOnly::count == 2);
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(DefaultOnly::count == 0);
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::multiset<Emplaceable> M;
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef M::iterator R;
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m;
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        R r = m.emplace_hint(m.cend());
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(r == m.begin());
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 1);
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*m.begin() == Emplaceable());
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        r = m.emplace_hint(m.cend(), 2, 3.5);
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(r == next(m.begin()));
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 2);
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*r == Emplaceable(2, 3.5));
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        r = m.emplace_hint(m.cbegin(), 2, 3.5);
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(r == next(m.begin()));
58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 3);
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*r == Emplaceable(2, 3.5));
60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::multiset<int> M;
63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef M::iterator R;
64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m;
65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        R r = m.emplace_hint(m.cend(), M::value_type(2));
66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(r == m.begin());
67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 1);
68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*r == 2);
69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif
71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
72