]>
git.saurik.com Git - apple/xnu.git/blob - tests/bounded_array_ref_src/ctor.raw_ptr.cpp
3 // explicit bounded_array_ref(T* data, size_t n);
6 #include <libkern/c++/bounded_array_ref.h>
7 #include "test_policy.h"
9 #include <darwintest.h>
10 #include <darwintest_utils.h>
14 operator==(T
const& a
, T
const& b
)
23 T array
[5] = {T
{0}, T
{1}, T
{2}, T
{3}, T
{4}};
25 // T{0} T{1} T{2} T{3} T{4} <one-past-last>
30 // ^------------------- view -----------------------^
33 test_bounded_array_ref
<T
> view(ptr
, 5);
34 CHECK(view
.data() == &array
[0]);
35 CHECK(view
.size() == 5);
36 CHECK(view
[0] == T
{0});
37 CHECK(view
[1] == T
{1});
38 CHECK(view
[2] == T
{2});
39 CHECK(view
[3] == T
{3});
40 CHECK(view
[4] == T
{4});
42 // T{0} T{1} T{2} T{3} T{4} <one-past-last>
50 test_bounded_array_ref
<T
> view(ptr
, 3);
51 CHECK(view
.data() == &array
[0]);
52 CHECK(view
.size() == 3);
53 CHECK(view
[0] == T
{0});
54 CHECK(view
[1] == T
{1});
55 CHECK(view
[2] == T
{2});
57 // T{0} T{1} T{2} T{3} T{4} <one-past-last>
62 // ^------- view --------^
65 test_bounded_array_ref
<T
> view(ptr
, 2);
66 CHECK(view
.data() == &array
[3]);
67 CHECK(view
.size() == 2);
68 CHECK(view
[0] == T
{3});
69 CHECK(view
[1] == T
{4});
71 // Check with a valid pointer and a size of 0.
74 test_bounded_array_ref
<T
> view(ptr
, static_cast<std::size_t>(0));
75 CHECK(view
.size() == 0);
77 // Check with a null pointer and a size of 0.
80 test_bounded_array_ref
<T
> view(ptr
, static_cast<std::size_t>(0));
81 CHECK(view
.size() == 0);
83 // Check with a non-null but invalid pointer and a size of 0.
86 test_bounded_array_ref
<T
> view(ptr
, static_cast<std::size_t>(0));
87 CHECK(view
.size() == 0);
89 // Make sure there's no ambiguity between constructors.
92 std::ptrdiff_t size
= 5;
93 test_bounded_array_ref
<T
> view(ptr
, size
);
94 CHECK(view
.data() == &array
[0]);
95 CHECK(view
.size() == 5);
98 // Make sure we can create nested bounded_array_refs
100 int array1
[] = {1, 2, 3, 4, 5};
101 int array2
[] = {6, 7, 8};
102 int array3
[] = {9, 10, 11, 12, 13, 14};
103 test_bounded_array_ref
<int> views
[] = {
104 test_bounded_array_ref
<int>(array1
, 5),
105 test_bounded_array_ref
<int>(array2
, 3),
106 test_bounded_array_ref
<int>(array3
, 6)
109 test_bounded_array_ref
<test_bounded_array_ref
<int> > two_dim(views
, 3);
110 CHECK(two_dim
.size() == 3);
111 CHECK(two_dim
.data() == &views
[0]);
112 CHECK(&two_dim
[0] == &views
[0]);
113 CHECK(&two_dim
[1] == &views
[1]);
114 CHECK(&two_dim
[2] == &views
[2]);
118 T_DECL(ctor_raw_ptr
, "bounded_array_ref.ctor.raw_ptr") {