summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/al/random.h8
-rw-r--r--subprojects/c89atomic.wrap2
-rw-r--r--subprojects/packagefiles/liblfds/meson.build11
-rw-r--r--tests/lib.c28
4 files changed, 31 insertions, 18 deletions
diff --git a/include/al/random.h b/include/al/random.h
index 9d27c18..31da3f3 100644
--- a/include/al/random.h
+++ b/include/al/random.h
@@ -19,16 +19,12 @@ static s32 al_rand(void)
}
// Each file that includes this header will have a separate counter.
-static atomic(u16) _al_inc_value = 1;
+static atomic(u16) _al_inc_value = 0;
// This is apart of random because currently al_inc_u16() is used as a substitute
-// for proper random ID generation.
+// for proper random id generation.
static u16 al_inc_u16(void)
{
- if (al_atomic_load(u16)(&_al_inc_value, AL_ATOMIC_ACQUIRE) == UINT16_MAX) {
- al_atomic_store(u16)(&_al_inc_value, 1, AL_ATOMIC_RELEASE);
- return 1;
- }
return al_atomic_add(u16)(&_al_inc_value, 1, AL_ATOMIC_RELEASE);
}
diff --git a/subprojects/c89atomic.wrap b/subprojects/c89atomic.wrap
index 2fe249e..69c11fc 100644
--- a/subprojects/c89atomic.wrap
+++ b/subprojects/c89atomic.wrap
@@ -1,5 +1,5 @@
[wrap-git]
url = https://github.com/mackron/c89atomic.git
-revision = cc548edae7147b31718f254e35f6052fa1559ff7
+revision = 736f1d1b6325233fa2e11f78f4ca8216e43680f4
depth = 1
patch_directory = c89atomic
diff --git a/subprojects/packagefiles/liblfds/meson.build b/subprojects/packagefiles/liblfds/meson.build
deleted file mode 100644
index 2428817..0000000
--- a/subprojects/packagefiles/liblfds/meson.build
+++ /dev/null
@@ -1,11 +0,0 @@
-project('liblfds', 'c', version: '7.1.1')
-
-liblfds_src = [
- 'liblfds711/src/lfds711_queue_bounded_manyproducer_manyconsumer/lfds711_queue_bounded_manyproducer_manyconsumer_cleanup.c',
- 'liblfds711/src/lfds711_queue_bounded_manyproducer_manyconsumer/lfds711_queue_bounded_manyproducer_manyconsumer_dequeue.c',
- 'liblfds711/src/lfds711_queue_bounded_manyproducer_manyconsumer/lfds711_queue_bounded_manyproducer_manyconsumer_enqueue.c',
- 'liblfds711/src/lfds711_queue_bounded_manyproducer_manyconsumer/lfds711_queue_bounded_manyproducer_manyconsumer_init.c',
- 'liblfds711/src/lfds711_queue_bounded_manyproducer_manyconsumer/lfds711_queue_bounded_manyproducer_manyconsumer_query.c',
- 'liblfds711/src/lfds711_misc/lfds711_misc_internal_backoff_init.c'
-]
-liblfds = declare_dependency(sources: liblfds_src, include_directories: include_directories('./liblfds711/inc'))
diff --git a/tests/lib.c b/tests/lib.c
index f194abc..aa66803 100644
--- a/tests/lib.c
+++ b/tests/lib.c
@@ -1,4 +1,5 @@
#include <al/test.h>
+#include <al/random.h>
static bool lib_test_add_wrap(void)
{
@@ -29,11 +30,38 @@ static bool lib_test_add_wrap(void)
AL_TEST_END();
}
+static bool lib_test_add_wrap_atomic(void)
+{
+ AL_TEST_START("lib_add_wrap_atomic");
+
+ for (u32 i = 0; i < UINT16_MAX - 3; i++) {
+ al_inc_u16();
+ }
+
+ AL_TEST_EQ(al_inc_u16(), UINT16_MAX - 3, u16);
+ AL_TEST_EQ(al_inc_u16(), UINT16_MAX - 2, u16);
+ AL_TEST_EQ(al_inc_u16(), UINT16_MAX - 1, u16);
+ AL_TEST_EQ(al_inc_u16(), UINT16_MAX, u16);
+ AL_TEST_EQ(al_inc_u16(), 0, u16);
+ AL_TEST_EQ(al_inc_u16(), 1, u16);
+ AL_TEST_EQ(al_inc_u16(), 2, u16);
+ AL_TEST_EQ(al_inc_u16(), 3, u16);
+
+ for (u32 i = 0; i < UINT16_MAX - 3; i++) {
+ AL_TEST_EQ(al_inc_u16(), i + 4, u16);
+ }
+
+ AL_TEST_EQ(al_inc_u16(), 0, u16);
+
+ AL_TEST_END();
+}
+
bool lib_tests_run(void)
{
AL_TEST_START_GROUP("lib");
AL_TEST_RUN(lib_test_add_wrap);
+ AL_TEST_RUN(lib_test_add_wrap_atomic);
AL_TEST_END_GROUP();
}