brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · a56f237 Raw
98 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 multimap14 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_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.cend(), 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.cend(), 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.cend(), 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.cend(), P(3, 2));50  assert(r == std::prev(m.end()));51  assert(m.size() == 4);52  assert(r->first == 3);53  assert(r->second == 2);54}55 56int main(int, char**) {57  do_insert_rv_test<std::multimap<int, MoveOnly>, std::pair<int, MoveOnly> >();58  do_insert_rv_test<std::multimap<int, MoveOnly>, std::pair<const int, MoveOnly> >();59 60  {61    typedef std::multimap<int, MoveOnly, std::less<int>, min_allocator<std::pair<const int, MoveOnly>>> M;62    typedef std::pair<int, MoveOnly> P;63    typedef std::pair<const int, MoveOnly> CP;64    do_insert_rv_test<M, P>();65    do_insert_rv_test<M, CP>();66  }67  {68    typedef std::multimap<int, MoveOnly> M;69    typedef M::iterator R;70    M m;71    R r = m.insert(m.cend(), {2, MoveOnly(2)});72    assert(r == m.begin());73    assert(m.size() == 1);74    assert(r->first == 2);75    assert(r->second == 2);76 77    r = m.insert(m.cend(), {1, MoveOnly(1)});78    assert(r == m.begin());79    assert(m.size() == 2);80    assert(r->first == 1);81    assert(r->second == 1);82 83    r = m.insert(m.cend(), {3, MoveOnly(3)});84    assert(r == std::prev(m.end()));85    assert(m.size() == 3);86    assert(r->first == 3);87    assert(r->second == 3);88 89    r = m.insert(m.cend(), {3, MoveOnly(2)});90    assert(r == std::prev(m.end()));91    assert(m.size() == 4);92    assert(r->first == 3);93    assert(r->second == 2);94  }95 96  return 0;97}98