1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//===----------------------------------------------------------------------===//
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details.
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//===----------------------------------------------------------------------===//
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// <set>
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// class multiset
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// multiset(multiset&& s);
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <set>
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <cassert>
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "../../../test_compare.h"
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "test_allocator.h"
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "min_allocator.h"
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint main()
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles){
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        typedef int V;
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        typedef test_compare<std::less<int> > C;
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        typedef test_allocator<V> A;
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        std::multiset<int, C, A> mo(C(5), A(7));
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        std::multiset<int, C, A> m = std::move(mo);
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        assert(m.get_allocator() == A(7));
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        assert(m.key_comp() == C(5));
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        assert(m.size() == 0);
350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        assert(distance(m.begin(), m.end()) == 0);
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        assert(mo.get_allocator() == A(7));
380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        assert(mo.key_comp() == C(5));
390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        assert(mo.size() == 0);
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        assert(distance(mo.begin(), mo.end()) == 0);
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    {
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        typedef int V;
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        V ar[] =
450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        {
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            1,
470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            1,
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            1,
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            2,
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            2,
51            2,
52            3,
53            3,
54            3
55        };
56        typedef test_compare<std::less<int> > C;
57        typedef test_allocator<V> A;
58        std::multiset<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
59        std::multiset<int, C, A> m = std::move(mo);
60        assert(m.get_allocator() == A(7));
61        assert(m.key_comp() == C(5));
62        assert(m.size() == 9);
63        assert(distance(m.begin(), m.end()) == 9);
64        assert(*next(m.begin(), 0) == 1);
65        assert(*next(m.begin(), 1) == 1);
66        assert(*next(m.begin(), 2) == 1);
67        assert(*next(m.begin(), 3) == 2);
68        assert(*next(m.begin(), 4) == 2);
69        assert(*next(m.begin(), 5) == 2);
70        assert(*next(m.begin(), 6) == 3);
71        assert(*next(m.begin(), 7) == 3);
72        assert(*next(m.begin(), 8) == 3);
73
74        assert(mo.get_allocator() == A(7));
75        assert(mo.key_comp() == C(5));
76        assert(mo.size() == 0);
77        assert(distance(mo.begin(), mo.end()) == 0);
78    }
79#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
80#if __cplusplus >= 201103L
81    {
82        typedef int V;
83        V ar[] =
84        {
85            1,
86            1,
87            1,
88            2,
89            2,
90            2,
91            3,
92            3,
93            3
94        };
95        typedef test_compare<std::less<int> > C;
96        typedef min_allocator<V> A;
97        std::multiset<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
98        std::multiset<int, C, A> m = std::move(mo);
99        assert(m.get_allocator() == A());
100        assert(m.key_comp() == C(5));
101        assert(m.size() == 9);
102        assert(distance(m.begin(), m.end()) == 9);
103        assert(*next(m.begin(), 0) == 1);
104        assert(*next(m.begin(), 1) == 1);
105        assert(*next(m.begin(), 2) == 1);
106        assert(*next(m.begin(), 3) == 2);
107        assert(*next(m.begin(), 4) == 2);
108        assert(*next(m.begin(), 5) == 2);
109        assert(*next(m.begin(), 6) == 3);
110        assert(*next(m.begin(), 7) == 3);
111        assert(*next(m.begin(), 8) == 3);
112
113        assert(mo.get_allocator() == A());
114        assert(mo.key_comp() == C(5));
115        assert(mo.size() == 0);
116        assert(distance(mo.begin(), mo.end()) == 0);
117    }
118#endif
119}
120