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 Distributionstests() 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