brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 5d72bae Raw
97 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++0310 11// <map>12 13// class map14 15// template <class P>16//     iterator insert(const_iterator position, P&& p);17 18#include <map>19#include <cassert>20 21#include "MoveOnly.h"22#include "min_allocator.h"23#include "test_macros.h"24 25template <class Container, class Pair>26void do_insert_iter_rv_test() {27  typedef Container M;28  typedef Pair P;29  typedef typename M::iterator R;30  M m;31  R r = m.insert(m.end(), P(2, 2));32  assert(r == m.begin());33  assert(m.size() == 1);34  assert(r->first == 2);35  assert(r->second == 2);36 37  r = m.insert(m.end(), P(1, 1));38  assert(r == m.begin());39  assert(m.size() == 2);40  assert(r->first == 1);41  assert(r->second == 1);42 43  r = m.insert(m.end(), P(3, 3));44  assert(r == std::prev(m.end()));45  assert(m.size() == 3);46  assert(r->first == 3);47  assert(r->second == 3);48 49  r = m.insert(m.end(), P(3, 4));50  assert(r == std::prev(m.end()));51  assert(m.size() == 3);52  assert(r->first == 3);53  assert(r->second == 3);54}55int main(int, char**) {56  do_insert_iter_rv_test<std::map<int, MoveOnly>, std::pair<int, MoveOnly>>();57  do_insert_iter_rv_test<std::map<int, MoveOnly>, std::pair<const int, MoveOnly>>();58 59  {60    typedef std::map<int, MoveOnly, std::less<int>, min_allocator<std::pair<const int, MoveOnly>>> M;61    typedef std::pair<int, MoveOnly> P;62    typedef std::pair<const int, MoveOnly> CP;63    do_insert_iter_rv_test<M, P>();64    do_insert_iter_rv_test<M, CP>();65  }66  {67    typedef std::map<int, MoveOnly> M;68    typedef M::iterator R;69    M m;70    R r = m.insert(m.end(), {2, MoveOnly(2)});71    assert(r == m.begin());72    assert(m.size() == 1);73    assert(r->first == 2);74    assert(r->second == 2);75 76    r = m.insert(m.end(), {1, MoveOnly(1)});77    assert(r == m.begin());78    assert(m.size() == 2);79    assert(r->first == 1);80    assert(r->second == 1);81 82    r = m.insert(m.end(), {3, MoveOnly(3)});83    assert(r == std::prev(m.end()));84    assert(m.size() == 3);85    assert(r->first == 3);86    assert(r->second == 3);87 88    r = m.insert(m.end(), {3, MoveOnly(3)});89    assert(r == std::prev(m.end()));90    assert(m.size() == 3);91    assert(r->first == 3);92    assert(r->second == 3);93  }94 95  return 0;96}97