brintos

brintos / llvm-project-archived public Read only

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