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