1 //
2 // Tests for
3 //  bounded_array();
4 //
5 
6 #include <libkern/c++/bounded_array.h>
7 #include <darwintest.h>
8 #include <darwintest_utils.h>
9 #include "test_policy.h"
10 
11 struct T {
12 	T() : i(4)
13 	{
14 	}
15 	int i;
16 	friend bool
17 	operator==(T const& a, T const& b)
18 	{
19 		return a.i == b.i;
20 	}
21 };
22 
23 template <typename T>
24 static void
25 tests()
26 {
27 	{
28 		test_bounded_array<T, 10> array;
29 		CHECK(array.size() == 10);
30 		T* end = array.data() + array.size();
31 		for (auto it = array.data(); it != end; ++it) {
32 			CHECK(*it == T());
33 		}
34 	}
35 	{
36 		test_bounded_array<T, 10> array{};
37 		CHECK(array.size() == 10);
38 		T* end = array.data() + array.size();
39 		for (auto it = array.data(); it != end; ++it) {
40 			CHECK(*it == T());
41 		}
42 	}
43 	{
44 		test_bounded_array<T, 10> array = {};
45 		CHECK(array.size() == 10);
46 		T* end = array.data() + array.size();
47 		for (auto it = array.data(); it != end; ++it) {
48 			CHECK(*it == T());
49 		}
50 	}
51 	{
52 		test_bounded_array<T, 10> array = test_bounded_array<T, 10>();
53 		CHECK(array.size() == 10);
54 		T* end = array.data() + array.size();
55 		for (auto it = array.data(); it != end; ++it) {
56 			CHECK(*it == T());
57 		}
58 	}
59 
60 	// Check with a 0-sized array
61 	{
62 		test_bounded_array<T, 0> array;
63 		CHECK(array.size() == 0);
64 	}
65 }
66 
67 T_DECL(ctor_default, "bounded_array.ctor.default") {
68 	tests<T>();
69 }
70