summaryrefslogtreecommitdiff
path: root/libc/test/integration/src/stdlib/gpu/aligned_alloc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libc/test/integration/src/stdlib/gpu/aligned_alloc.cpp')
-rw-r--r--libc/test/integration/src/stdlib/gpu/aligned_alloc.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/libc/test/integration/src/stdlib/gpu/aligned_alloc.cpp b/libc/test/integration/src/stdlib/gpu/aligned_alloc.cpp
new file mode 100644
index 000000000000..b966e6953cc2
--- /dev/null
+++ b/libc/test/integration/src/stdlib/gpu/aligned_alloc.cpp
@@ -0,0 +1,29 @@
+#include "test/IntegrationTest/test.h"
+
+#include "src/__support/GPU/utils.h"
+#include "src/stdlib/aligned_alloc.h" // Adjust path if needed
+#include "src/stdlib/free.h"
+
+using namespace LIBC_NAMESPACE;
+
+TEST_MAIN(int, char **, char **) {
+ // aligned_alloc with valid alignment and size
+ void *ptr = LIBC_NAMESPACE::aligned_alloc(32, 16);
+ EXPECT_NE(ptr, nullptr);
+ EXPECT_EQ(__builtin_is_aligned(ptr, 32), 0U);
+
+ LIBC_NAMESPACE::free(ptr);
+
+ // aligned_alloc fails if alignment is not power of two
+ void *bad_align = LIBC_NAMESPACE::aligned_alloc(30, 99);
+ EXPECT_EQ(bad_align, nullptr);
+
+ // aligned_alloc with a divergent size.
+ size_t alignment = 1 << (__gpu_lane_id() % 8 + 1);
+ void *div =
+ LIBC_NAMESPACE::aligned_alloc(alignment, (gpu::get_thread_id() + 1) * 4);
+ EXPECT_NE(div, nullptr);
+ EXPECT_EQ(__builtin_is_aligned(div, alignment), 0U);
+
+ return 0;
+}