]>
git.saurik.com Git - apple/xnu.git/blob - tests/bounded_array_ref_src/ctor.bounded_ptr.cpp
3 // explicit bounded_array_ref(bounded_ptr<T, TrappingPolicy> 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}};
24 T
* const begin
= &array
[0];
25 T
* const end
= &array
[5];
27 // T{0} T{1} T{2} T{3} T{4} <one-past-last>
32 // ^------------------- view -----------------------^
34 test_bounded_ptr
<T
> ptr(&array
[0], begin
, end
);
35 test_bounded_array_ref
<T
> view(ptr
, 5);
36 CHECK(view
.data() == &array
[0]);
37 CHECK(view
.size() == 5);
38 CHECK(view
[0] == T
{0});
39 CHECK(view
[1] == T
{1});
40 CHECK(view
[2] == T
{2});
41 CHECK(view
[3] == T
{3});
42 CHECK(view
[4] == T
{4});
44 // T{0} T{1} T{2} T{3} T{4} <one-past-last>
51 test_bounded_ptr
<T
> ptr(&array
[0], begin
, end
);
52 test_bounded_array_ref
<T
> view(ptr
, 3);
53 CHECK(view
.data() == &array
[0]);
54 CHECK(view
.size() == 3);
55 CHECK(view
[0] == T
{0});
56 CHECK(view
[1] == T
{1});
57 CHECK(view
[2] == T
{2});
59 // T{0} T{1} T{2} T{3} T{4} <one-past-last>
64 // ^------- view --------^
66 test_bounded_ptr
<T
> ptr(&array
[3], begin
, end
);
67 test_bounded_array_ref
<T
> view(ptr
, 2);
68 CHECK(view
.data() == &array
[3]);
69 CHECK(view
.size() == 2);
70 CHECK(view
[0] == T
{3});
71 CHECK(view
[1] == T
{4});
73 // Check with a valid `bounded_ptr` and a size of 0.
75 test_bounded_ptr
<T
> ptr(&array
[0], begin
, end
);
76 test_bounded_array_ref
<T
> view(ptr
, 0);
77 CHECK(view
.size() == 0);
79 // Check with a null `bounded_ptr` and a size of 0.
81 test_bounded_ptr
<T
> ptr
= nullptr;
82 test_bounded_array_ref
<T
> view(ptr
, 0);
83 CHECK(view
.size() == 0);
85 // Check with a non-null but invalid `bounded_ptr` and a size of 0.
87 test_bounded_ptr
<T
> ptr(end
, begin
, end
);
88 test_bounded_array_ref
<T
> view(ptr
, 0);
89 CHECK(view
.size() == 0);
91 // Make sure there's no ambiguity between constructors.
93 test_bounded_ptr
<T
> ptr(begin
, begin
, end
);
94 std::ptrdiff_t size
= sizeof(array
) / sizeof(*array
);
95 test_bounded_array_ref
<T
> view(ptr
, size
);
96 CHECK(view
.data() == &array
[0]);
97 CHECK(view
.size() == 5);
101 T_DECL(ctor_bounded_ptr
, "bounded_array_ref.ctor.bounded_ptr") {