brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.0 KiB · 3543879 Raw
288 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// <set>10 11// class set12 13//       iterator upper_bound(const key_type& k);14// const_iterator upper_bound(const key_type& k) const;15 16#include <set>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 int V;26    typedef std::set<int> M;27    {28      typedef M::iterator R;29      V ar[] = {5, 7, 9, 11, 13, 15, 17, 19};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[] = {5, 7, 9, 11, 13, 15, 17, 19};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 int V;109    typedef std::set<int, std::less<int>, min_allocator<int>> M;110    {111      typedef M::iterator R;112      V ar[] = {5, 7, 9, 11, 13, 15, 17, 19};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[] = {5, 7, 9, 11, 13, 15, 17, 19};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 int V;193    typedef std::set<V, std::less<>> M;194    typedef M::iterator R;195 196    V ar[] = {5, 7, 9, 11, 13, 15, 17, 19};197    M m(ar, ar + sizeof(ar) / sizeof(ar[0]));198    R r = m.upper_bound(5);199    assert(r == std::next(m.begin(), 1));200    r = m.upper_bound(7);201    assert(r == std::next(m.begin(), 2));202    r = m.upper_bound(9);203    assert(r == std::next(m.begin(), 3));204    r = m.upper_bound(11);205    assert(r == std::next(m.begin(), 4));206    r = m.upper_bound(13);207    assert(r == std::next(m.begin(), 5));208    r = m.upper_bound(15);209    assert(r == std::next(m.begin(), 6));210    r = m.upper_bound(17);211    assert(r == std::next(m.begin(), 7));212    r = m.upper_bound(19);213    assert(r == std::next(m.begin(), 8));214    r = m.upper_bound(4);215    assert(r == std::next(m.begin(), 0));216    r = m.upper_bound(6);217    assert(r == std::next(m.begin(), 1));218    r = m.upper_bound(8);219    assert(r == std::next(m.begin(), 2));220    r = m.upper_bound(10);221    assert(r == std::next(m.begin(), 3));222    r = m.upper_bound(12);223    assert(r == std::next(m.begin(), 4));224    r = m.upper_bound(14);225    assert(r == std::next(m.begin(), 5));226    r = m.upper_bound(16);227    assert(r == std::next(m.begin(), 6));228    r = m.upper_bound(18);229    assert(r == std::next(m.begin(), 7));230    r = m.upper_bound(20);231    assert(r == std::next(m.begin(), 8));232  }233 234  {235    typedef PrivateConstructor V;236    typedef std::set<V, std::less<>> M;237    typedef M::iterator R;238 239    M m;240    m.insert(V::make(5));241    m.insert(V::make(7));242    m.insert(V::make(9));243    m.insert(V::make(11));244    m.insert(V::make(13));245    m.insert(V::make(15));246    m.insert(V::make(17));247    m.insert(V::make(19));248 249    R r = m.upper_bound(5);250    assert(r == std::next(m.begin(), 1));251    r = m.upper_bound(7);252    assert(r == std::next(m.begin(), 2));253    r = m.upper_bound(9);254    assert(r == std::next(m.begin(), 3));255    r = m.upper_bound(11);256    assert(r == std::next(m.begin(), 4));257    r = m.upper_bound(13);258    assert(r == std::next(m.begin(), 5));259    r = m.upper_bound(15);260    assert(r == std::next(m.begin(), 6));261    r = m.upper_bound(17);262    assert(r == std::next(m.begin(), 7));263    r = m.upper_bound(19);264    assert(r == std::next(m.begin(), 8));265    r = m.upper_bound(4);266    assert(r == std::next(m.begin(), 0));267    r = m.upper_bound(6);268    assert(r == std::next(m.begin(), 1));269    r = m.upper_bound(8);270    assert(r == std::next(m.begin(), 2));271    r = m.upper_bound(10);272    assert(r == std::next(m.begin(), 3));273    r = m.upper_bound(12);274    assert(r == std::next(m.begin(), 4));275    r = m.upper_bound(14);276    assert(r == std::next(m.begin(), 5));277    r = m.upper_bound(16);278    assert(r == std::next(m.begin(), 6));279    r = m.upper_bound(18);280    assert(r == std::next(m.begin(), 7));281    r = m.upper_bound(20);282    assert(r == std::next(m.begin(), 8));283  }284#endif285 286  return 0;287}288