summaryrefslogtreecommitdiff
path: root/examples/utest
diff options
context:
space:
mode:
authorYaochenger <[email protected]>2023-03-30 11:06:21 +0800
committerGitHub <[email protected]>2023-03-30 11:06:21 +0800
commit38eb3fc40f817ea1dce5223a9bac0d2d3b578bd2 (patch)
treed6da375ea6997661ef9be1766ba31d43c085c5b4 /examples/utest
parenteec78d9f5d3f0a944500a1cac5802dfee2befc7b (diff)
[utest][atomic]添加返回值测试 (#7124)
* [utest][atomic]添加返回值测试
Diffstat (limited to 'examples/utest')
-rw-r--r--examples/utest/testcases/kernel/atomic_tc.c53
1 files changed, 38 insertions, 15 deletions
diff --git a/examples/utest/testcases/kernel/atomic_tc.c b/examples/utest/testcases/kernel/atomic_tc.c
index 53b1839e4f..a83c05f730 100644
--- a/examples/utest/testcases/kernel/atomic_tc.c
+++ b/examples/utest/testcases/kernel/atomic_tc.c
@@ -29,52 +29,67 @@ static void test_atomic_api(void)
{
rt_atomic_t base;
rt_atomic_t oldval;
+ rt_atomic_t result;
/* rt_atomic_t */
uassert_true(sizeof(rt_atomic_t) == ATOMIC_WORD(sizeof(uint64_t), sizeof(uint32_t)));
/* rt_atomic_add */
base = 0;
- rt_atomic_add(&base, 10);
+ result = rt_atomic_add(&base, 10);
uassert_true(base == 10);
+ uassert_true(result == 0);
/* rt_atomic_add negative */
base = 2;
- rt_atomic_add(&base, -4);
+ result = rt_atomic_add(&base, -4);
uassert_true(base == -2);
+ uassert_true(result == 2);
/* rt_atomic_sub */
base = 11;
- rt_atomic_sub(&base, 10);
+ result = rt_atomic_sub(&base, 10);
uassert_true(base == 1);
+ uassert_true(result == 11);
/* rt_atomic_sub negative */
base = 2;
- rt_atomic_sub(&base, -5);
+ result = rt_atomic_sub(&base, -5);
uassert_true(base == 7);
+ uassert_true(result == 2);
/* rt_atomic_or */
base = 0xFF00;
- rt_atomic_or(&base, 0x0F0F);
+ result = rt_atomic_or(&base, 0x0F0F);
uassert_true(base == 0xFF0F);
+ uassert_true(result == 0xFF00);
/* rt_atomic_xor */
base = 0xFF00;
- rt_atomic_xor(&base, 0x0F0F);
+ result = rt_atomic_xor(&base, 0x0F0F);
uassert_true(base == 0xF00F);
+ uassert_true(result == 0xFF00);
/* rt_atomic_and */
base = 0xFF00;
- rt_atomic_and(&base, 0x0F0F);
+ result = rt_atomic_and(&base, 0x0F0F);
uassert_true(base == 0x0F00);
+ uassert_true(result == 0xFF00);
/* rt_atomic_exchange */
base = 0xFF00;
- rt_atomic_exchange(&base, 0x0F0F);
+ result = rt_atomic_exchange(&base, 0x0F0F);
uassert_true(base == 0x0F0F);
+ uassert_true(result == 0xFF00);
- /* rt_atomic_flag_test_and_set */
+ /* rt_atomic_flag_test_and_set (Flag 0) */
base = 0x0;
- rt_atomic_flag_test_and_set(&base);
+ result = rt_atomic_flag_test_and_set(&base);
uassert_true(base == 0x1);
+ uassert_true(result == 0x0);
+ /* rt_atomic_flag_test_and_set (Flag 1) */
+ base = 0x1;
+ result = rt_atomic_flag_test_and_set(&base);
+ uassert_true(base == 0x1);
+ uassert_true(result == 0x1);
/* rt_atomic_flag_clear */
base = 0x1;
@@ -83,25 +98,33 @@ static void test_atomic_api(void)
/* rt_atomic_load */
base = 0xFF00;
- rt_atomic_load(&base);
+ result = rt_atomic_load(&base);
uassert_true(base == 0xFF00);
+ uassert_true(result == 0xFF00);
/* rt_atomic_store */
base = 0xFF00;
rt_atomic_store(&base, 0x0F0F);
uassert_true(base == 0x0F0F);
- /* rt_atomic_compare_exchange_strong */
+ /* rt_atomic_compare_exchange_strong (equal) */
base = 10;
oldval = 10;
- uassert_true(rt_atomic_compare_exchange_strong(&base, &oldval, 11) == 1);
+ result = rt_atomic_compare_exchange_strong(&base, &oldval, 11);
uassert_true(base == 11);
+ uassert_true(result == 0x1);
+ /* rt_atomic_compare_exchange_strong (not equal) */
+ base = 10;
+ oldval = 5;
+ result = rt_atomic_compare_exchange_strong(&base, &oldval, 11);
+ uassert_true(base == 10);
+ uassert_true(result == 0x0);
}
static void ture_entry(void *parameter)
{
int i;
- for(i = 0; i < 1000000; i++)
+ for (i = 0; i < 1000000; i++)
{
rt_atomic_add(&count, 1);
}
@@ -122,7 +145,7 @@ static void test_atomic_add(void)
thread = rt_thread_create("t3", ture_entry, RT_NULL, THREAD_STACKSIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
rt_thread_startup(thread);
- for(i = 0; i < 3; i++)
+ for (i = 0; i < 3; i++)
{
rt_sem_take(sem_t, RT_WAITING_FOREVER);
}