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