summaryrefslogtreecommitdiff
path: root/libcr_ipc/tests/test_mutex.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcr_ipc/tests/test_mutex.c')
-rw-r--r--libcr_ipc/tests/test_mutex.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/libcr_ipc/tests/test_mutex.c b/libcr_ipc/tests/test_mutex.c
new file mode 100644
index 0000000..43714c9
--- /dev/null
+++ b/libcr_ipc/tests/test_mutex.c
@@ -0,0 +1,37 @@
+/* libcr_ipc/tests/test_mutex.c - Tests for <libcr_ipc/mutex.h>
+ *
+ * Copyright (C) 2025 Luke T. Shumaker <lukeshu@lukeshu.com>
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+#include <libcr/coroutine.h>
+#include <libcr_ipc/mutex.h>
+
+#include "test.h"
+
+int counter = 0;
+
+COROUTINE cr_worker(void *_mu) {
+ cr_mutex_t *mu = _mu;
+ cr_begin();
+
+ for (int i = 0; i < 100; i++) {
+ cr_mutex_lock(mu);
+ int a = counter;
+ cr_yield();
+ counter = a + 1;
+ cr_mutex_unlock(mu);
+ cr_yield();
+ }
+
+ cr_end();
+}
+
+int main() {
+ cr_mutex_t mu = {};
+ coroutine_add("a", cr_worker, &mu);
+ coroutine_add("b", cr_worker, &mu);
+ coroutine_main();
+ test_assert(counter == 200);
+ return 0;
+}