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