Loading...
tests/safe_allocation_src/usage.two_dimensions.cpp /dev/null xnu-11215.61.5
--- /dev/null
+++ xnu/xnu-11215.61.5/tests/safe_allocation_src/usage.two_dimensions.cpp
@@ -0,0 +1,39 @@
+//
+// Make sure `safe_allocation` can be used to create a two-dimensional array.
+//
+// Note that we don't really recommend using that representation for two
+// dimensional arrays because other representations are better, but it
+// should at least work.
+//
+
+#include <libkern/c++/safe_allocation.h>
+#include <darwintest.h>
+#include "test_utils.h"
+
+struct T {
+	int i;
+};
+
+template <typename T>
+static void
+tests()
+{
+	test_safe_allocation<test_safe_allocation<int> > array(10, libkern::allocate_memory);
+
+	for (int i = 0; i < 10; i++) {
+		array[i] = test_safe_allocation<int>(10, libkern::allocate_memory);
+		for (int j = 0; j < 10; ++j) {
+			array[i][j] = i + j;
+		}
+	}
+
+	for (int i = 0; i < 10; i++) {
+		for (int j = 0; j < 10; ++j) {
+			CHECK(array[i][j] == i + j);
+		}
+	}
+}
+
+T_DECL(usage_two_dimensions, "safe_allocation.usage.two_dimensions", T_META_TAG_VM_PREFERRED) {
+	tests<T>();
+}