zephyr/tests/kernel/common/src/atomic.c
David B. Kinder ac74d8b652 license: Replace Apache boilerplate with SPDX tag
Replace the existing Apache 2.0 boilerplate header with an SPDX tag
throughout the zephyr code tree. This patch was generated via a
script run over the master branch.

Also updated doc/porting/application.rst that had a dependency on
line numbers in a literal include.

Manually updated subsys/logging/sys_log.c that had a malformed
header in the original file.  Also cleanup several cases that already
had a SPDX tag and we either got a duplicate or missed updating.

Jira: ZEP-1457

Change-Id: I6131a1d4ee0e58f5b938300c2d2fc77d2e69572c
Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2017-01-19 03:50:58 +00:00

132 lines
3.2 KiB
C

/*
* Copyright (c) 2015 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <ztest.h>
#include <atomic.h>
void atomic_test(void)
{
int i;
atomic_t target, orig;
atomic_val_t value;
atomic_val_t oldvalue;
target = 4;
value = 5;
oldvalue = 6;
/* atomic_cas() */
assert_true((atomic_cas(&target, oldvalue, value) == 0), "atomic_cas");
target = 6;
assert_true((atomic_cas(&target, oldvalue, value) == 1), "atomic_cas");
assert_true((target == value), "atomic_cas");
/* atomic_add() */
target = 1;
value = 2;
assert_true((atomic_add(&target, value) == 1), "atomic_add");
assert_true((target == 3), "atomic_add");
/* atomic_sub() */
target = 10;
value = 2;
assert_true((atomic_sub(&target, value) == 10), "atomic_sub");
assert_true((target == 8), "atomic_sub");
/* atomic_inc() */
target = 5;
assert_true((atomic_inc(&target) == 5), "atomic_inc");
assert_true((target == 6), "atomic_inc");
/* atomic_dec() */
target = 2;
assert_true((atomic_dec(&target) == 2), "atomic_dec");
assert_true((target == 1), "atomic_dec");
/* atomic_get() */
target = 50;
assert_true((atomic_get(&target) == 50), "atomic_get");
/* atomic_set() */
target = 42;
value = 77;
assert_true((atomic_set(&target, value) == 42), "atomic_set");
assert_true((target == value), "atomic_set");
/* atomic_clear() */
target = 100;
assert_true((atomic_clear(&target) == 100), "atomic_clear");
assert_true((target == 0), "atomic_clear");
/* atomic_or() */
target = 0xFF00;
value = 0x0F0F;
assert_true((atomic_or(&target, value) == 0xFF00), "atomic_or");
assert_true((target == 0xFF0F), "atomic_or");
/* atomic_xor() */
target = 0xFF00;
value = 0x0F0F;
assert_true((atomic_xor(&target, value) == 0xFF00), "atomic_xor");
assert_true((target == 0xF00F), "atomic_xor");
/* atomic_and() */
target = 0xFF00;
value = 0x0F0F;
assert_true((atomic_and(&target, value) == 0xFF00), "atomic_and");
assert_true((target == 0x0F00), "atomic_and");
/* atomic_nand() */
target = 0xFF00;
value = 0x0F0F;
assert_true((atomic_nand(&target, value) == 0xFF00), "atomic_nand");
assert_true((target == 0xFFFFF0FF), "atomic_nand");
/* atomic_test_bit() */
for (i = 0; i < 32; i++) {
target = 0x0F0F0F0F;
assert_true(!!(atomic_test_bit(&target, i) == !!(target & (1 << i))),
"atomic_test_bit");
}
/* atomic_test_and_clear_bit() */
for (i = 0; i < 32; i++) {
orig = 0x0F0F0F0F;
target = orig;
assert_true(!!(atomic_test_and_clear_bit(&target, i)) == !!(orig & (1 << i)),
"atomic_test_and_clear_bit");
assert_true(target == (orig & ~(1 << i)), "atomic_test_and_clear_bit");
}
/* atomic_test_and_set_bit() */
for (i = 0; i < 32; i++) {
orig = 0x0F0F0F0F;
target = orig;
assert_true(!!(atomic_test_and_set_bit(&target, i)) == !!(orig & (1 << i)),
"atomic_test_and_set_bit");
assert_true(target == (orig | (1 << i)), "atomic_test_and_set_bit");
}
/* atomic_clear_bit() */
for (i = 0; i < 32; i++) {
orig = 0x0F0F0F0F;
target = orig;
atomic_clear_bit(&target, i);
assert_true(target == (orig & ~(1 << i)), "atomic_clear_bit");
}
/* atomic_set_bit() */
for (i = 0; i < 32; i++) {
orig = 0x0F0F0F0F;
target = orig;
atomic_set_bit(&target, i);
assert_true(target == (orig | (1 << i)), "atomic_set_bit");
}
}