1 // 2 // Tests for 3 // template <size_t N> 4 // bounded_array_ref(T (&array)[N]); 5 // 6 7 #include <libkern/c++/bounded_array_ref.h> 8 #include "test_policy.h" 9 #include <darwintest.h> 10 #include <darwintest_utils.h> 11 12 struct T { int i; }; 13 inline bool operator ==(T const & a,T const & b)14operator==(T const& a, T const& b) 15 { 16 return a.i == b.i; 17 }; 18 19 template <typename T> 20 static void tests()21tests() 22 { 23 { 24 T array[5] = {T{0}, T{1}, T{2}, T{3}, T{4}}; 25 test_bounded_array_ref<T> view(array); 26 CHECK(view.data() == &array[0]); 27 CHECK(view.size() == 5); 28 CHECK(view[0] == T{0}); 29 CHECK(view[1] == T{1}); 30 CHECK(view[2] == T{2}); 31 CHECK(view[3] == T{3}); 32 CHECK(view[4] == T{4}); 33 } 34 35 { 36 T array[1] = {T{11}}; 37 test_bounded_array_ref<T> view(array); 38 CHECK(view.data() == &array[0]); 39 CHECK(view.size() == 1); 40 CHECK(view[0] == T{11}); 41 } 42 43 // Also test implicit construction 44 { 45 T array[1] = {T{11}}; 46 test_bounded_array_ref<T> view = array; 47 CHECK(view.data() == &array[0]); 48 CHECK(view.size() == 1); 49 } 50 { 51 T array[1] = {T{11}}; 52 auto check = [&array](test_bounded_array_ref<T> view) { 53 CHECK(view.data() == &array[0]); 54 CHECK(view.size() == 1); 55 }; 56 check(array); 57 } 58 } 59 60 T_DECL(ctor_C_array, "bounded_array_ref.ctor.C_array", T_META_TAG_VM_PREFERRED) { 61 tests<T>(); 62 } 63