aboutsummaryrefslogtreecommitdiff
path: root/lib/sbi/tests/riscv_locks_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sbi/tests/riscv_locks_test.c')
-rw-r--r--lib/sbi/tests/riscv_locks_test.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/sbi/tests/riscv_locks_test.c b/lib/sbi/tests/riscv_locks_test.c
new file mode 100644
index 0000000..7894c4e
--- /dev/null
+++ b/lib/sbi/tests/riscv_locks_test.c
@@ -0,0 +1,41 @@
+#include <sbi/sbi_unit_test.h>
+#include <sbi/riscv_locks.h>
+
+static spinlock_t test_lock = SPIN_LOCK_INITIALIZER;
+
+static void spin_lock_test(struct sbiunit_test_case *test)
+{
+ /* We don't want to accidentally get locked */
+ SBIUNIT_ASSERT(test, !spin_lock_check(&test_lock));
+
+ spin_lock(&test_lock);
+ SBIUNIT_EXPECT(test, spin_lock_check(&test_lock));
+ spin_unlock(&test_lock);
+
+ SBIUNIT_ASSERT(test, !spin_lock_check(&test_lock));
+}
+
+static void spin_trylock_fail(struct sbiunit_test_case *test)
+{
+ /* We don't want to accidentally get locked */
+ SBIUNIT_ASSERT(test, !spin_lock_check(&test_lock));
+
+ spin_lock(&test_lock);
+ SBIUNIT_EXPECT(test, !spin_trylock(&test_lock));
+ spin_unlock(&test_lock);
+}
+
+static void spin_trylock_success(struct sbiunit_test_case *test)
+{
+ SBIUNIT_EXPECT(test, spin_trylock(&test_lock));
+ spin_unlock(&test_lock);
+}
+
+static struct sbiunit_test_case locks_test_cases[] = {
+ SBIUNIT_TEST_CASE(spin_lock_test),
+ SBIUNIT_TEST_CASE(spin_trylock_fail),
+ SBIUNIT_TEST_CASE(spin_trylock_success),
+ SBIUNIT_END_CASE,
+};
+
+SBIUNIT_TEST_SUITE(locks_test_suite, locks_test_cases);