blob: 40ad9bd79b352b38d1c41459a7e4030389add444 [file]
//===-- Integration test for the lock-free buffer -------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "src/__support/GPU/fixedbuffer.h"
#include "src/__support/GPU/utils.h"
#include "test/IntegrationTest/test.h"
using namespace LIBC_NAMESPACE;
static FixedBuffer<uint32_t, 2048> global_buffer;
void run() {
ASSERT_EQ(gpu::get_num_blocks() * gpu::get_num_threads(), 512);
uint32_t id = static_cast<uint32_t>(gpu::get_thread_id()) + 1;
uint32_t val;
auto valid = [](uint32_t v, uint32_t n) {
return (v >= 1 && v <= n) || v == UINT32_MAX;
};
for (int i = 0; i < 256; ++i) {
EXPECT_TRUE(global_buffer.push(id));
EXPECT_TRUE(global_buffer.pop(val));
ASSERT_TRUE(valid(val, uint32_t(gpu::get_num_threads())));
}
EXPECT_TRUE(global_buffer.push(id));
EXPECT_TRUE(global_buffer.push(id));
EXPECT_TRUE(global_buffer.pop(val));
ASSERT_TRUE(valid(val, uint32_t(gpu::get_num_threads())));
while (!global_buffer.push(UINT32_MAX))
;
}
TEST_MAIN(int, char **, char **) {
run();
return 0;
}