libcxx

libcxx mirror with random patches
git clone https://git.neptards.moe/neptards/libcxx.git
Log | Files | Refs

insert_hint_rvalue.pass.cpp (3159B)


      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // <unordered_set>
     11 
     12 // template <class Value, class Hash = hash<Value>, class Pred = equal_to<Value>,
     13 //           class Alloc = allocator<Value>>
     14 // class unordered_multiset
     15 
     16 // iterator insert(const_iterator p, value_type&& x);
     17 
     18 #include <unordered_set>
     19 #include <cassert>
     20 
     21 #include "test_macros.h"
     22 #include "MoveOnly.h"
     23 #include "min_allocator.h"
     24 
     25 int main()
     26 {
     27     {
     28         typedef std::unordered_multiset<double> C;
     29         typedef C::iterator R;
     30         typedef double P;
     31         C c;
     32         C::const_iterator e = c.end();
     33         R r = c.insert(e, P(3.5));
     34         assert(c.size() == 1);
     35         assert(*r == 3.5);
     36 
     37         r = c.insert(r, P(3.5));
     38         assert(c.size() == 2);
     39         assert(*r == 3.5);
     40 
     41         r = c.insert(c.end(), P(4.5));
     42         assert(c.size() == 3);
     43         assert(*r == 4.5);
     44 
     45         r = c.insert(c.end(), P(5.5));
     46         assert(c.size() == 4);
     47         assert(*r == 5.5);
     48     }
     49 #if TEST_STD_VER >= 11
     50     {
     51         typedef std::unordered_multiset<MoveOnly> C;
     52         typedef C::iterator R;
     53         typedef MoveOnly P;
     54         C c;
     55         C::const_iterator e = c.end();
     56         R r = c.insert(e, P(3));
     57         assert(c.size() == 1);
     58         assert(*r == 3);
     59 
     60         r = c.insert(r, P(3));
     61         assert(c.size() == 2);
     62         assert(*r == 3);
     63 
     64         r = c.insert(c.end(), P(4));
     65         assert(c.size() == 3);
     66         assert(*r == 4);
     67 
     68         r = c.insert(c.end(), P(5));
     69         assert(c.size() == 4);
     70         assert(*r == 5);
     71     }
     72     {
     73         typedef std::unordered_multiset<double, std::hash<double>,
     74                                 std::equal_to<double>, min_allocator<double>> C;
     75         typedef C::iterator R;
     76         typedef double P;
     77         C c;
     78         C::const_iterator e = c.end();
     79         R r = c.insert(e, P(3.5));
     80         assert(c.size() == 1);
     81         assert(*r == 3.5);
     82 
     83         r = c.insert(r, P(3.5));
     84         assert(c.size() == 2);
     85         assert(*r == 3.5);
     86 
     87         r = c.insert(c.end(), P(4.5));
     88         assert(c.size() == 3);
     89         assert(*r == 4.5);
     90 
     91         r = c.insert(c.end(), P(5.5));
     92         assert(c.size() == 4);
     93         assert(*r == 5.5);
     94     }
     95     {
     96         typedef std::unordered_multiset<MoveOnly, std::hash<MoveOnly>,
     97                             std::equal_to<MoveOnly>, min_allocator<MoveOnly>> C;
     98         typedef C::iterator R;
     99         typedef MoveOnly P;
    100         C c;
    101         C::const_iterator e = c.end();
    102         R r = c.insert(e, P(3));
    103         assert(c.size() == 1);
    104         assert(*r == 3);
    105 
    106         r = c.insert(r, P(3));
    107         assert(c.size() == 2);
    108         assert(*r == 3);
    109 
    110         r = c.insert(c.end(), P(4));
    111         assert(c.size() == 3);
    112         assert(*r == 4);
    113 
    114         r = c.insert(c.end(), P(5));
    115         assert(c.size() == 4);
    116         assert(*r == 5);
    117     }
    118 #endif // TEST_STD_VER >= 11
    119 }