brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 9fa53ca Raw
90 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 map12 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 23#if TEST_STD_VER >= 1124template <class T>25struct FinalCompare final {26  bool operator()(const T& x, const T& y) const { return x < y; }27};28#endif29 30template <class Map, class ArgType = typename Map::key_type>31void test() {32  typedef typename Map::value_type V;33  typedef typename Map::size_type R;34 35  V ar[] = {V(5, 5), V(6, 6), V(7, 7), V(8, 8), V(9, 9), V(10, 10), V(11, 11), V(12, 12)};36 37  const Map m(ar, ar + sizeof(ar) / sizeof(ar[0]));38 39  for (int i = 0; i < 5; ++i) {40    R r = m.count(ArgType(i));41    assert(r == 0);42  }43 44  for (int i = 5; i < 13; ++i) {45    R r = m.count(ArgType(i));46    assert(r == 1);47  }48}49 50int main(int, char**) {51  test<std::map<int, double> >();52#if TEST_STD_VER >= 1153  typedef std::pair<const int, double> V;54  test<std::map<int, double, std::less<int>, min_allocator<V>>>();55  test<std::map<int, double, FinalCompare<int>>>();56#endif57#if TEST_STD_VER >= 1458  typedef std::map<int, double, std::less<>> TM;59  test<TM>();60  test<TM, C2Int>();61 62  {63    typedef PrivateConstructor PC;64    typedef std::map<PC, double, std::less<> > M;65    typedef M::size_type R;66 67    M m;68    m[PC::make(5)]  = 5;69    m[PC::make(6)]  = 6;70    m[PC::make(7)]  = 7;71    m[PC::make(8)]  = 8;72    m[PC::make(9)]  = 9;73    m[PC::make(10)] = 10;74    m[PC::make(11)] = 11;75    m[PC::make(12)] = 12;76 77    for (int i = 0; i < 5; ++i) {78      R r = m.count(i);79      assert(r == 0);80    }81 82    for (int i = 5; i < 13; ++i) {83      R r = m.count(i);84      assert(r == 1);85    }86  }87#endif // TEST_STD_VER >= 1488  return 0;89}90