1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <set> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class multiset 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// multiset(multiset&& s, const allocator_type& a); 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <set> 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "../../../MoveOnly.h" 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "../../../test_compare.h" 211b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clow#include "test_allocator.h" 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 2573d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef MoveOnly V; 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef test_compare<std::less<MoveOnly> > C; 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef test_allocator<V> A; 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::multiset<MoveOnly, C, A> M; 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::move_iterator<V*> I; 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V a1[] = 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3), 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3), 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3) 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant }; 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant M m1(I(a1), I(a1+sizeof(a1)/sizeof(a1[0])), C(5), A(7)); 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V a2[] = 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3), 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3), 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3) 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant }; 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant M m2(I(a2), I(a2+sizeof(a2)/sizeof(a2[0])), C(5), A(7)); 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant M m3(std::move(m1), A(7)); 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m3 == m2); 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m3.get_allocator() == A(7)); 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m3.key_comp() == C(5)); 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m1.empty()); 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef MoveOnly V; 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef test_compare<std::less<MoveOnly> > C; 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef test_allocator<V> A; 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::multiset<MoveOnly, C, A> M; 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::move_iterator<V*> I; 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V a1[] = 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3), 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3), 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3) 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant }; 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant M m1(I(a1), I(a1+sizeof(a1)/sizeof(a1[0])), C(5), A(7)); 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V a2[] = 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3), 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3), 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3) 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant }; 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant M m2(I(a2), I(a2+sizeof(a2)/sizeof(a2[0])), C(5), A(7)); 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant M m3(std::move(m1), A(5)); 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m3 == m2); 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m3.get_allocator() == A(5)); 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m3.key_comp() == C(5)); 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m1.empty()); 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef MoveOnly V; 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef test_compare<std::less<MoveOnly> > C; 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef other_allocator<V> A; 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::multiset<MoveOnly, C, A> M; 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::move_iterator<V*> I; 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V a1[] = 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3), 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3), 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3) 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant }; 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant M m1(I(a1), I(a1+sizeof(a1)/sizeof(a1[0])), C(5), A(7)); 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V a2[] = 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1), 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2), 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3), 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3), 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3) 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant }; 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant M m2(I(a2), I(a2+sizeof(a2)/sizeof(a2[0])), C(5), A(7)); 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant M m3(std::move(m1), A(5)); 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m3 == m2); 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m3.get_allocator() == A(5)); 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m3.key_comp() == C(5)); 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m1.empty()); 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 14073d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 142