brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.4 KiB · bd967e3 Raw
287 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//       iterator upper_bound(const key_type& k);14// const_iterator upper_bound(const key_type& k) const;15 16#include <map>17#include <cassert>18 19#include "test_macros.h"20#include "min_allocator.h"21#include "private_constructor.h"22 23int main(int, char**) {24  {25    typedef std::pair<const int, double> V;26    typedef std::map<int, double> M;27    {28      typedef M::iterator R;29      V ar[] = {V(5, 5), V(7, 6), V(9, 7), V(11, 8), V(13, 9), V(15, 10), V(17, 11), V(19, 12)};30      M m(ar, ar + sizeof(ar) / sizeof(ar[0]));31      R r = m.upper_bound(5);32      assert(r == std::next(m.begin(), 1));33      r = m.upper_bound(7);34      assert(r == std::next(m.begin(), 2));35      r = m.upper_bound(9);36      assert(r == std::next(m.begin(), 3));37      r = m.upper_bound(11);38      assert(r == std::next(m.begin(), 4));39      r = m.upper_bound(13);40      assert(r == std::next(m.begin(), 5));41      r = m.upper_bound(15);42      assert(r == std::next(m.begin(), 6));43      r = m.upper_bound(17);44      assert(r == std::next(m.begin(), 7));45      r = m.upper_bound(19);46      assert(r == std::next(m.begin(), 8));47      r = m.upper_bound(4);48      assert(r == std::next(m.begin(), 0));49      r = m.upper_bound(6);50      assert(r == std::next(m.begin(), 1));51      r = m.upper_bound(8);52      assert(r == std::next(m.begin(), 2));53      r = m.upper_bound(10);54      assert(r == std::next(m.begin(), 3));55      r = m.upper_bound(12);56      assert(r == std::next(m.begin(), 4));57      r = m.upper_bound(14);58      assert(r == std::next(m.begin(), 5));59      r = m.upper_bound(16);60      assert(r == std::next(m.begin(), 6));61      r = m.upper_bound(18);62      assert(r == std::next(m.begin(), 7));63      r = m.upper_bound(20);64      assert(r == std::next(m.begin(), 8));65    }66    {67      typedef M::const_iterator R;68      V ar[] = {V(5, 5), V(7, 6), V(9, 7), V(11, 8), V(13, 9), V(15, 10), V(17, 11), V(19, 12)};69      const M m(ar, ar + sizeof(ar) / sizeof(ar[0]));70      R r = m.upper_bound(5);71      assert(r == std::next(m.begin(), 1));72      r = m.upper_bound(7);73      assert(r == std::next(m.begin(), 2));74      r = m.upper_bound(9);75      assert(r == std::next(m.begin(), 3));76      r = m.upper_bound(11);77      assert(r == std::next(m.begin(), 4));78      r = m.upper_bound(13);79      assert(r == std::next(m.begin(), 5));80      r = m.upper_bound(15);81      assert(r == std::next(m.begin(), 6));82      r = m.upper_bound(17);83      assert(r == std::next(m.begin(), 7));84      r = m.upper_bound(19);85      assert(r == std::next(m.begin(), 8));86      r = m.upper_bound(4);87      assert(r == std::next(m.begin(), 0));88      r = m.upper_bound(6);89      assert(r == std::next(m.begin(), 1));90      r = m.upper_bound(8);91      assert(r == std::next(m.begin(), 2));92      r = m.upper_bound(10);93      assert(r == std::next(m.begin(), 3));94      r = m.upper_bound(12);95      assert(r == std::next(m.begin(), 4));96      r = m.upper_bound(14);97      assert(r == std::next(m.begin(), 5));98      r = m.upper_bound(16);99      assert(r == std::next(m.begin(), 6));100      r = m.upper_bound(18);101      assert(r == std::next(m.begin(), 7));102      r = m.upper_bound(20);103      assert(r == std::next(m.begin(), 8));104    }105  }106#if TEST_STD_VER >= 11107  {108    typedef std::pair<const int, double> V;109    typedef std::map<int, double, std::less<int>, min_allocator<V>> M;110    {111      typedef M::iterator R;112      V ar[] = {V(5, 5), V(7, 6), V(9, 7), V(11, 8), V(13, 9), V(15, 10), V(17, 11), V(19, 12)};113      M m(ar, ar + sizeof(ar) / sizeof(ar[0]));114      R r = m.upper_bound(5);115      assert(r == std::next(m.begin(), 1));116      r = m.upper_bound(7);117      assert(r == std::next(m.begin(), 2));118      r = m.upper_bound(9);119      assert(r == std::next(m.begin(), 3));120      r = m.upper_bound(11);121      assert(r == std::next(m.begin(), 4));122      r = m.upper_bound(13);123      assert(r == std::next(m.begin(), 5));124      r = m.upper_bound(15);125      assert(r == std::next(m.begin(), 6));126      r = m.upper_bound(17);127      assert(r == std::next(m.begin(), 7));128      r = m.upper_bound(19);129      assert(r == std::next(m.begin(), 8));130      r = m.upper_bound(4);131      assert(r == std::next(m.begin(), 0));132      r = m.upper_bound(6);133      assert(r == std::next(m.begin(), 1));134      r = m.upper_bound(8);135      assert(r == std::next(m.begin(), 2));136      r = m.upper_bound(10);137      assert(r == std::next(m.begin(), 3));138      r = m.upper_bound(12);139      assert(r == std::next(m.begin(), 4));140      r = m.upper_bound(14);141      assert(r == std::next(m.begin(), 5));142      r = m.upper_bound(16);143      assert(r == std::next(m.begin(), 6));144      r = m.upper_bound(18);145      assert(r == std::next(m.begin(), 7));146      r = m.upper_bound(20);147      assert(r == std::next(m.begin(), 8));148    }149    {150      typedef M::const_iterator R;151      V ar[] = {V(5, 5), V(7, 6), V(9, 7), V(11, 8), V(13, 9), V(15, 10), V(17, 11), V(19, 12)};152      const M m(ar, ar + sizeof(ar) / sizeof(ar[0]));153      R r = m.upper_bound(5);154      assert(r == std::next(m.begin(), 1));155      r = m.upper_bound(7);156      assert(r == std::next(m.begin(), 2));157      r = m.upper_bound(9);158      assert(r == std::next(m.begin(), 3));159      r = m.upper_bound(11);160      assert(r == std::next(m.begin(), 4));161      r = m.upper_bound(13);162      assert(r == std::next(m.begin(), 5));163      r = m.upper_bound(15);164      assert(r == std::next(m.begin(), 6));165      r = m.upper_bound(17);166      assert(r == std::next(m.begin(), 7));167      r = m.upper_bound(19);168      assert(r == std::next(m.begin(), 8));169      r = m.upper_bound(4);170      assert(r == std::next(m.begin(), 0));171      r = m.upper_bound(6);172      assert(r == std::next(m.begin(), 1));173      r = m.upper_bound(8);174      assert(r == std::next(m.begin(), 2));175      r = m.upper_bound(10);176      assert(r == std::next(m.begin(), 3));177      r = m.upper_bound(12);178      assert(r == std::next(m.begin(), 4));179      r = m.upper_bound(14);180      assert(r == std::next(m.begin(), 5));181      r = m.upper_bound(16);182      assert(r == std::next(m.begin(), 6));183      r = m.upper_bound(18);184      assert(r == std::next(m.begin(), 7));185      r = m.upper_bound(20);186      assert(r == std::next(m.begin(), 8));187    }188  }189#endif190#if TEST_STD_VER > 11191  {192    typedef std::pair<const int, double> V;193    typedef std::map<int, double, std::less<>> M;194    typedef M::iterator R;195    V ar[] = {V(5, 5), V(7, 6), V(9, 7), V(11, 8), V(13, 9), V(15, 10), V(17, 11), V(19, 12)};196    M m(ar, ar + sizeof(ar) / sizeof(ar[0]));197    R r = m.upper_bound(5);198    assert(r == std::next(m.begin(), 1));199    r = m.upper_bound(7);200    assert(r == std::next(m.begin(), 2));201    r = m.upper_bound(9);202    assert(r == std::next(m.begin(), 3));203    r = m.upper_bound(11);204    assert(r == std::next(m.begin(), 4));205    r = m.upper_bound(13);206    assert(r == std::next(m.begin(), 5));207    r = m.upper_bound(15);208    assert(r == std::next(m.begin(), 6));209    r = m.upper_bound(17);210    assert(r == std::next(m.begin(), 7));211    r = m.upper_bound(19);212    assert(r == std::next(m.begin(), 8));213    r = m.upper_bound(4);214    assert(r == std::next(m.begin(), 0));215    r = m.upper_bound(6);216    assert(r == std::next(m.begin(), 1));217    r = m.upper_bound(8);218    assert(r == std::next(m.begin(), 2));219    r = m.upper_bound(10);220    assert(r == std::next(m.begin(), 3));221    r = m.upper_bound(12);222    assert(r == std::next(m.begin(), 4));223    r = m.upper_bound(14);224    assert(r == std::next(m.begin(), 5));225    r = m.upper_bound(16);226    assert(r == std::next(m.begin(), 6));227    r = m.upper_bound(18);228    assert(r == std::next(m.begin(), 7));229    r = m.upper_bound(20);230    assert(r == std::next(m.begin(), 8));231  }232 233  {234    typedef PrivateConstructor PC;235    typedef std::map<PC, double, std::less<>> M;236    typedef M::iterator R;237 238    M m;239    m[PC::make(5)]  = 5;240    m[PC::make(7)]  = 6;241    m[PC::make(9)]  = 7;242    m[PC::make(11)] = 8;243    m[PC::make(13)] = 9;244    m[PC::make(15)] = 10;245    m[PC::make(17)] = 11;246    m[PC::make(19)] = 12;247 248    R r = m.upper_bound(5);249    assert(r == std::next(m.begin(), 1));250    r = m.upper_bound(7);251    assert(r == std::next(m.begin(), 2));252    r = m.upper_bound(9);253    assert(r == std::next(m.begin(), 3));254    r = m.upper_bound(11);255    assert(r == std::next(m.begin(), 4));256    r = m.upper_bound(13);257    assert(r == std::next(m.begin(), 5));258    r = m.upper_bound(15);259    assert(r == std::next(m.begin(), 6));260    r = m.upper_bound(17);261    assert(r == std::next(m.begin(), 7));262    r = m.upper_bound(19);263    assert(r == std::next(m.begin(), 8));264    r = m.upper_bound(4);265    assert(r == std::next(m.begin(), 0));266    r = m.upper_bound(6);267    assert(r == std::next(m.begin(), 1));268    r = m.upper_bound(8);269    assert(r == std::next(m.begin(), 2));270    r = m.upper_bound(10);271    assert(r == std::next(m.begin(), 3));272    r = m.upper_bound(12);273    assert(r == std::next(m.begin(), 4));274    r = m.upper_bound(14);275    assert(r == std::next(m.begin(), 5));276    r = m.upper_bound(16);277    assert(r == std::next(m.begin(), 6));278    r = m.upper_bound(18);279    assert(r == std::next(m.begin(), 7));280    r = m.upper_bound(20);281    assert(r == std::next(m.begin(), 8));282  }283#endif284 285  return 0;286}287