brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.6 KiB · 8576c63 Raw
191 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// template <class InputIterator>14//   void insert(InputIterator first, InputIterator last);15 16#include <array>17#include <cassert>18#include <set>19 20#include "min_allocator.h"21#include "test_iterators.h"22 23template <class Iter, class Alloc>24void test_alloc() {25  {   // Check that an empty range works correctly26    { // Without elements in the container27      using Map = std::set<int, std::less<int>, Alloc>;28 29      std::array<int, 0> arr;30 31      Map map;32      map.insert(Iter(arr.data()), Iter(arr.data() + arr.size()));33      assert(map.size() == 0);34      assert(map.begin() == map.end());35    }36    { // With 1 element in the container37      using Map = std::set<int, std::less<int>, Alloc>;38 39      std::array<int, 0> arr;40 41      Map map;42      map.insert(0);43      map.insert(Iter(arr.data()), Iter(arr.data() + arr.size()));44      assert(map.size() == 1);45      assert(*std::next(map.begin(), 0) == 0);46      assert(std::next(map.begin(), 1) == map.end());47    }48    { // With multiple elements in the container49      using Map = std::set<int, std::less<int>, Alloc>;50 51      std::array<int, 0> arr;52 53      Map map;54      map.insert(0);55      map.insert(1);56      map.insert(2);57      map.insert(Iter(arr.data()), Iter(arr.data() + arr.size()));58      assert(map.size() == 3);59      assert(*std::next(map.begin(), 0) == 0);60      assert(*std::next(map.begin(), 1) == 1);61      assert(*std::next(map.begin(), 2) == 2);62      assert(std::next(map.begin(), 3) == map.end());63    }64  }65  {   // Check that 1 element is inserted correctly66    { // Without elements in the container67      using Map = std::set<int, std::less<int>, Alloc>;68 69      int arr[] = {1};70 71      Map map;72      map.insert(Iter(std::begin(arr)), Iter(std::end(arr)));73      assert(map.size() == 1);74      assert(*std::next(map.begin(), 0) == 1);75      assert(std::next(map.begin(), 1) == map.end());76    }77    { // With 1 element in the container - a different key78      using Map = std::set<int, std::less<int>, Alloc>;79 80      int arr[] = {1};81 82      Map map;83      map.insert(0);84      map.insert(Iter(std::begin(arr)), Iter(std::end(arr)));85      assert(map.size() == 2);86      assert(*std::next(map.begin(), 0) == 0);87      assert(*std::next(map.begin(), 1) == 1);88      assert(std::next(map.begin(), 2) == map.end());89    }90    { // With 1 element in the container - the same key91      using Map = std::set<int, std::less<int>, Alloc>;92 93      int arr[] = {1};94 95      Map map;96      map.insert(1);97      map.insert(Iter(std::begin(arr)), Iter(std::end(arr)));98      assert(map.size() == 1);99      assert(*std::next(map.begin(), 0) == 1);100      assert(std::next(map.begin(), 1) == map.end());101    }102    { // With multiple elements in the container103      using Map = std::set<int, std::less<int>, Alloc>;104 105      int arr[] = {1};106 107      Map map;108      map.insert(0);109      map.insert(1);110      map.insert(2);111      map.insert(Iter(std::begin(arr)), Iter(std::end(arr)));112      assert(map.size() == 3);113      assert(*std::next(map.begin(), 0) == 0);114      assert(*std::next(map.begin(), 1) == 1);115      assert(*std::next(map.begin(), 2) == 2);116      assert(std::next(map.begin(), 3) == map.end());117    }118  }119  {   // Check that multiple elements are inserted correctly120    { // Without elements in the container121      using Map = std::set<int, std::less<int>, Alloc>;122 123      int arr[] = {1, 1, 3};124 125      Map map;126      map.insert(Iter(std::begin(arr)), Iter(std::end(arr)));127      assert(map.size() == 2);128      assert(*std::next(map.begin(), 0) == 1);129      assert(*std::next(map.begin(), 1) == 3);130      assert(std::next(map.begin(), 2) == map.end());131    }132    { // With 1 element in the container - a different key133      using Map = std::set<int, std::less<int>, Alloc>;134 135      int arr[] = {1, 1, 3};136 137      Map map;138      map.insert(0);139      map.insert(Iter(std::begin(arr)), Iter(std::end(arr)));140      assert(map.size() == 3);141      assert(*std::next(map.begin(), 0) == 0);142      assert(*std::next(map.begin(), 1) == 1);143      assert(*std::next(map.begin(), 2) == 3);144      assert(std::next(map.begin(), 3) == map.end());145    }146    { // With 1 element in the container - the same key147      using Map = std::set<int, std::less<int>, Alloc>;148 149      int arr[] = {1, 2, 3};150 151      Map map;152      map.insert(1);153      map.insert(Iter(std::begin(arr)), Iter(std::end(arr)));154      assert(map.size() == 3);155      assert(*std::next(map.begin(), 0) == 1);156      assert(*std::next(map.begin(), 1) == 2);157      assert(*std::next(map.begin(), 2) == 3);158      assert(std::next(map.begin(), 3) == map.end());159    }160    { // With multiple elements in the container161      using Map = std::set<int, std::less<int>, Alloc>;162 163      int arr[] = {1, 3, 4};164 165      Map map;166      map.insert(0);167      map.insert(1);168      map.insert(2);169      map.insert(Iter(std::begin(arr)), Iter(std::end(arr)));170      assert(map.size() == 5);171      assert(*std::next(map.begin(), 0) == 0);172      assert(*std::next(map.begin(), 1) == 1);173      assert(*std::next(map.begin(), 2) == 2);174      assert(*std::next(map.begin(), 3) == 3);175      assert(*std::next(map.begin(), 4) == 4);176      assert(std::next(map.begin(), 5) == map.end());177    }178  }179}180 181void test() {182  test_alloc<cpp17_input_iterator<int*>, std::allocator<int> >();183  test_alloc<cpp17_input_iterator<int*>, min_allocator<int> >();184}185 186int main(int, char**) {187  test();188 189  return 0;190}191