brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 8dfda74 Raw
144 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// <map>10 11// class multimap12 13// size_type count(const key_type& k) const;14 15#include <map>16#include <cassert>17 18#include "test_macros.h"19#include "min_allocator.h"20#include "private_constructor.h"21#include "is_transparent.h"22 23int main(int, char**) {24  typedef std::pair<const int, double> V;25  {26    typedef std::multimap<int, double> M;27    {28      typedef M::size_type R;29      V ar[] = {V(5, 1), V(5, 2), V(5, 3), V(7, 1), V(7, 2), V(7, 3), V(9, 1), V(9, 2), V(9, 3)};30      const M m(ar, ar + sizeof(ar) / sizeof(ar[0]));31      R r = m.count(4);32      assert(r == 0);33      r = m.count(5);34      assert(r == 3);35      r = m.count(6);36      assert(r == 0);37      r = m.count(7);38      assert(r == 3);39      r = m.count(8);40      assert(r == 0);41      r = m.count(9);42      assert(r == 3);43      r = m.count(10);44      assert(r == 0);45    }46  }47#if TEST_STD_VER >= 1148  {49    typedef std::multimap<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;50    {51      typedef M::size_type R;52      V ar[] = {V(5, 1), V(5, 2), V(5, 3), V(7, 1), V(7, 2), V(7, 3), V(9, 1), V(9, 2), V(9, 3)};53      const M m(ar, ar + sizeof(ar) / sizeof(ar[0]));54      R r = m.count(4);55      assert(r == 0);56      r = m.count(5);57      assert(r == 3);58      r = m.count(6);59      assert(r == 0);60      r = m.count(7);61      assert(r == 3);62      r = m.count(8);63      assert(r == 0);64      r = m.count(9);65      assert(r == 3);66      r = m.count(10);67      assert(r == 0);68    }69  }70#endif71 72#if TEST_STD_VER > 1173  {74    typedef std::multimap<int, double, std::less<>> M;75    typedef M::size_type R;76    V ar[] = {V(5, 1), V(5, 2), V(5, 3), V(7, 1), V(7, 2), V(7, 3), V(9, 1), V(9, 2), V(9, 3)};77    const M m(ar, ar + sizeof(ar) / sizeof(ar[0]));78    R r = m.count(4);79    assert(r == 0);80    r = m.count(5);81    assert(r == 3);82    r = m.count(6);83    assert(r == 0);84    r = m.count(7);85    assert(r == 3);86    r = m.count(8);87    assert(r == 0);88    r = m.count(9);89    assert(r == 3);90    r = m.count(10);91    assert(r == 0);92 93    r = m.count(C2Int(4));94    assert(r == 0);95    r = m.count(C2Int(5));96    assert(r == 3);97    r = m.count(C2Int(6));98    assert(r == 0);99    r = m.count(C2Int(7));100    assert(r == 3);101    r = m.count(C2Int(8));102    assert(r == 0);103    r = m.count(C2Int(9));104    assert(r == 3);105    r = m.count(C2Int(10));106    assert(r == 0);107  }108 109  {110    typedef PrivateConstructor PC;111    typedef std::multimap<PC, double, std::less<>> M;112    typedef M::size_type R;113 114    M m;115    m.insert(std::make_pair<PC, double>(PC::make(5), 1));116    m.insert(std::make_pair<PC, double>(PC::make(5), 2));117    m.insert(std::make_pair<PC, double>(PC::make(5), 3));118    m.insert(std::make_pair<PC, double>(PC::make(7), 1));119    m.insert(std::make_pair<PC, double>(PC::make(7), 2));120    m.insert(std::make_pair<PC, double>(PC::make(7), 3));121    m.insert(std::make_pair<PC, double>(PC::make(9), 1));122    m.insert(std::make_pair<PC, double>(PC::make(9), 2));123    m.insert(std::make_pair<PC, double>(PC::make(9), 3));124 125    R r = m.count(4);126    assert(r == 0);127    r = m.count(5);128    assert(r == 3);129    r = m.count(6);130    assert(r == 0);131    r = m.count(7);132    assert(r == 3);133    r = m.count(8);134    assert(r == 0);135    r = m.count(9);136    assert(r == 3);137    r = m.count(10);138    assert(r == 0);139  }140#endif141 142  return 0;143}144