From c682feffb0a6cde943687587721f2603b3846ceb Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Sat, 5 Oct 2024 19:04:10 -0400 Subject: atomic: Rely on wrapping for al_inc_u16() Signed-off-by: Andrew Opalach --- include/al/random.h | 8 ++------ subprojects/c89atomic.wrap | 2 +- subprojects/packagefiles/liblfds/meson.build | 11 ----------- tests/lib.c | 28 ++++++++++++++++++++++++++++ 4 files changed, 31 insertions(+), 18 deletions(-) delete mode 100644 subprojects/packagefiles/liblfds/meson.build 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 +#include 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(); } -- cgit v1.2.3-101-g0448