1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// UNSUPPORTED: c++03
10
11// <set>
12
13// class multiset
14
15// multiset(multiset&& s);
16
17#include <set>
18#include <cassert>
19
20#include "test_macros.h"
21#include "../../../test_compare.h"
22#include "test_allocator.h"
23#include "min_allocator.h"
24
25int main(int, char**) {
26 {
27 typedef int V;
28 typedef test_less<int> C;
29 typedef test_allocator<V> A;
30 std::multiset<int, C, A> mo(C(5), A(7));
31 std::multiset<int, C, A> m = std::move(mo);
32 assert(m.get_allocator() == A(7));
33 assert(m.key_comp() == C(5));
34 assert(m.size() == 0);
35 assert(std::distance(m.begin(), m.end()) == 0);
36
37 assert(mo.get_allocator() == A(7));
38 assert(mo.get_allocator().get_id() == test_alloc_base::moved_value);
39 assert(mo.key_comp() == C(5));
40 assert(mo.size() == 0);
41 assert(std::distance(mo.begin(), mo.end()) == 0);
42 }
43 {
44 typedef int V;
45 V ar[] = {1, 1, 1, 2, 2, 2, 3, 3, 3};
46 typedef test_less<int> C;
47 typedef test_allocator<V> A;
48 std::multiset<int, C, A> mo(ar, ar + sizeof(ar) / sizeof(ar[0]), C(5), A(7));
49 std::multiset<int, C, A> m = std::move(mo);
50 assert(m.get_allocator() == A(7));
51 assert(m.key_comp() == C(5));
52 assert(m.size() == 9);
53 assert(std::distance(m.begin(), m.end()) == 9);
54 assert(*std::next(m.begin(), 0) == 1);
55 assert(*std::next(m.begin(), 1) == 1);
56 assert(*std::next(m.begin(), 2) == 1);
57 assert(*std::next(m.begin(), 3) == 2);
58 assert(*std::next(m.begin(), 4) == 2);
59 assert(*std::next(m.begin(), 5) == 2);
60 assert(*std::next(m.begin(), 6) == 3);
61 assert(*std::next(m.begin(), 7) == 3);
62 assert(*std::next(m.begin(), 8) == 3);
63
64 assert(mo.get_allocator() == A(7));
65 assert(mo.get_allocator().get_id() == test_alloc_base::moved_value);
66 assert(mo.key_comp() == C(5));
67 assert(mo.size() == 0);
68 assert(std::distance(mo.begin(), mo.end()) == 0);
69 }
70 {
71 typedef int V;
72 V ar[] = {1, 1, 1, 2, 2, 2, 3, 3, 3};
73 typedef test_less<int> C;
74 typedef min_allocator<V> A;
75 std::multiset<int, C, A> mo(ar, ar + sizeof(ar) / sizeof(ar[0]), C(5), A());
76 std::multiset<int, C, A> m = std::move(mo);
77 assert(m.get_allocator() == A());
78 assert(m.key_comp() == C(5));
79 assert(m.size() == 9);
80 assert(std::distance(m.begin(), m.end()) == 9);
81 assert(*std::next(m.begin(), 0) == 1);
82 assert(*std::next(m.begin(), 1) == 1);
83 assert(*std::next(m.begin(), 2) == 1);
84 assert(*std::next(m.begin(), 3) == 2);
85 assert(*std::next(m.begin(), 4) == 2);
86 assert(*std::next(m.begin(), 5) == 2);
87 assert(*std::next(m.begin(), 6) == 3);
88 assert(*std::next(m.begin(), 7) == 3);
89 assert(*std::next(m.begin(), 8) == 3);
90
91 assert(mo.get_allocator() == A());
92 assert(mo.key_comp() == C(5));
93 assert(mo.size() == 0);
94 assert(std::distance(mo.begin(), mo.end()) == 0);
95 }
96
97 return 0;
98}
99

source code of libcxx/test/std/containers/associative/multiset/multiset.cons/move.pass.cpp