1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// <vector> 11 12// void assign(size_type n, const_reference v); 13 14#include <vector> 15#include <algorithm> 16#include <cassert> 17#include <iostream> 18#include "test_macros.h" 19#include "min_allocator.h" 20#include "asan_testing.h" 21#include "test_iterators.h" 22#if TEST_STD_VER >= 11 23#include "emplace_constructible.h" 24#include "container_test_types.h" 25#endif 26 27 28void test_emplaceable_concept() { 29#if TEST_STD_VER >= 11 30 int arr1[] = {42}; 31 int arr2[] = {1, 101, 42}; 32 { 33 using T = EmplaceConstructibleMoveableAndAssignable<int>; 34 using It = forward_iterator<int*>; 35 { 36 std::vector<T> v; 37 v.assign(It(arr1), It(std::end(arr1))); 38 assert(v[0].value == 42); 39 } 40 { 41 std::vector<T> v; 42 v.assign(It(arr2), It(std::end(arr2))); 43 assert(v[0].value == 1); 44 assert(v[1].value == 101); 45 assert(v[2].value == 42); 46 } 47 } 48 { 49 using T = EmplaceConstructibleMoveableAndAssignable<int>; 50 using It = input_iterator<int*>; 51 { 52 std::vector<T> v; 53 v.assign(It(arr1), It(std::end(arr1))); 54 assert(v[0].copied == 0); 55 assert(v[0].value == 42); 56 } 57 { 58 std::vector<T> v; 59 v.assign(It(arr2), It(std::end(arr2))); 60 //assert(v[0].copied == 0); 61 assert(v[0].value == 1); 62 //assert(v[1].copied == 0); 63 assert(v[1].value == 101); 64 assert(v[2].copied == 0); 65 assert(v[2].value == 42); 66 } 67 } 68#endif 69} 70 71 72 73int main() 74{ 75 test_emplaceable_concept(); 76} 77