xref: /xnu-11215.61.5/tests/cxx_safe_buffers_src/unsafe_forge_span.cpp (revision 4f1223e81cd707a65cc109d0b8ad6653699da3c4)
1*4f1223e8SApple OSS Distributions //
2*4f1223e8SApple OSS Distributions // Tests for
3*4f1223e8SApple OSS Distributions //  __unsafe_forge_span functions
4*4f1223e8SApple OSS Distributions //
5*4f1223e8SApple OSS Distributions 
6*4f1223e8SApple OSS Distributions #include <span>
7*4f1223e8SApple OSS Distributions #include <vector>
8*4f1223e8SApple OSS Distributions #include <os/cxx_safe_buffers.h>
9*4f1223e8SApple OSS Distributions #include <darwintest.h>
10*4f1223e8SApple OSS Distributions 
11*4f1223e8SApple OSS Distributions #define CHECK(...) T_ASSERT_TRUE((__VA_ARGS__), # __VA_ARGS__)
12*4f1223e8SApple OSS Distributions 
13*4f1223e8SApple OSS Distributions struct S {
14*4f1223e8SApple OSS Distributions 	int i;
15*4f1223e8SApple OSS Distributions };
16*4f1223e8SApple OSS Distributions 
17*4f1223e8SApple OSS Distributions template <typename T>
18*4f1223e8SApple OSS Distributions static void
tests()19*4f1223e8SApple OSS Distributions tests()
20*4f1223e8SApple OSS Distributions {
21*4f1223e8SApple OSS Distributions 	{
22*4f1223e8SApple OSS Distributions 		T * p = new T[10];
23*4f1223e8SApple OSS Distributions 		std::span<T> span = os::span::__unsafe_forge_span(p, 10);
24*4f1223e8SApple OSS Distributions 
25*4f1223e8SApple OSS Distributions 		CHECK(span.data() == p && span.size() == 10);
26*4f1223e8SApple OSS Distributions 		delete[] p;
27*4f1223e8SApple OSS Distributions 	}
28*4f1223e8SApple OSS Distributions 	{
29*4f1223e8SApple OSS Distributions 		std::vector<T> v;
30*4f1223e8SApple OSS Distributions 		std::span<T> span = os::span::__unsafe_forge_span(v.begin(), v.end());
31*4f1223e8SApple OSS Distributions 
32*4f1223e8SApple OSS Distributions 		CHECK(span.data() == v.data() && span.size() == 0);
33*4f1223e8SApple OSS Distributions 	}
34*4f1223e8SApple OSS Distributions }
35*4f1223e8SApple OSS Distributions 
36*4f1223e8SApple OSS Distributions T_DECL(unsafe_forge_span, "cxx_safe_buffers.unsafe_forge_span")
37*4f1223e8SApple OSS Distributions {
38*4f1223e8SApple OSS Distributions 	tests<S>();
39*4f1223e8SApple OSS Distributions }
40