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 // vector(const vector& v); 13 14 #include <vector> 15 #include <cassert> 16 #include "test_allocator.h" 17 #include "min_allocator.h" 18 #include "asan_testing.h" 19 20 template <class C> 21 void 22 test(const C& x) 23 { 24 unsigned s = x.size(); 25 C c(x); 26 assert(c.__invariants()); 27 assert(c.size() == s); 28 assert(c == x); 29 assert(is_contiguous_container_asan_correct(c)); 30 } 31 32 int main() 33 { 34 { 35 int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 1, 0}; 36 int* an = a + sizeof(a)/sizeof(a[0]); 37 test(std::vector<int>(a, an)); 38 } 39 { 40 std::vector<int, test_allocator<int> > v(3, 2, test_allocator<int>(5)); 41 std::vector<int, test_allocator<int> > v2 = v; 42 assert(is_contiguous_container_asan_correct(v)); 43 assert(is_contiguous_container_asan_correct(v2)); 44 assert(v2 == v); 45 assert(v2.get_allocator() == v.get_allocator()); 46 assert(is_contiguous_container_asan_correct(v)); 47 assert(is_contiguous_container_asan_correct(v2)); 48 } 49 #ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE 50 { 51 std::vector<int, other_allocator<int> > v(3, 2, other_allocator<int>(5)); 52 std::vector<int, other_allocator<int> > v2 = v; 53 assert(is_contiguous_container_asan_correct(v)); 54 assert(is_contiguous_container_asan_correct(v2)); 55 assert(v2 == v); 56 assert(v2.get_allocator() == other_allocator<int>(-2)); 57 assert(is_contiguous_container_asan_correct(v)); 58 assert(is_contiguous_container_asan_correct(v2)); 59 } 60 #endif // _LIBCPP_HAS_NO_ADVANCED_SFINAE 61 #if __cplusplus >= 201103L 62 { 63 int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 1, 0}; 64 int* an = a + sizeof(a)/sizeof(a[0]); 65 test(std::vector<int, min_allocator<int>>(a, an)); 66 } 67 { 68 std::vector<int, min_allocator<int> > v(3, 2, min_allocator<int>()); 69 std::vector<int, min_allocator<int> > v2 = v; 70 assert(is_contiguous_container_asan_correct(v)); 71 assert(is_contiguous_container_asan_correct(v2)); 72 assert(v2 == v); 73 assert(v2.get_allocator() == v.get_allocator()); 74 assert(is_contiguous_container_asan_correct(v)); 75 assert(is_contiguous_container_asan_correct(v2)); 76 } 77 #endif 78 } 79