Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | /*
* Copyright (c) 2016 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr.h>
#include <ztest.h>
#include <arch/cpu.h>
#include <tc_util.h>
#define BIT_INDEX(bit) (bit >> 3)
#define BIT_VAL(bit) (1 << (bit & 0x7))
#define BITFIELD_SIZE 512
void test_bitfield(void)
{
u32_t b1 = 0;
unsigned char b2[BITFIELD_SIZE >> 3] = { 0 };
unsigned int bit;
int ret;
TC_PRINT("twiddling bits....\n");
for (bit = 0; bit < 32; ++bit) {
sys_set_bit((mem_addr_t)&b1, bit);
zassert_equal(b1, (1 << bit),
"sys_set_bit failed on bit %d\n", bit);
zassert_true(sys_test_bit((mem_addr_t)&b1, bit),
"sys_test_bit did not detect bit %d\n", bit);
sys_clear_bit((mem_addr_t)&b1, bit);
zassert_equal(b1, 0, "sys_clear_bit failed for bit %d\n", bit);
zassert_false(sys_test_bit((mem_addr_t)&b1, bit),
"sys_test_bit erroneously detected bit %d\n",
bit);
zassert_false(sys_test_and_set_bit((mem_addr_t)&b1, bit),
"sys_test_and_set_bit erroneously"
" detected bit %d\n", bit);
zassert_equal(b1, (1 << bit),
"sys_test_and_set_bit did not set bit %d\n",
bit);
zassert_true(sys_test_and_set_bit((mem_addr_t)&b1, bit),
"sys_test_and_set_bit did not detect bit %d\n",
bit);
zassert_equal(b1, (1 << bit),
"sys_test_and_set_bit cleared bit %d\n", bit);
zassert_true(sys_test_and_clear_bit((mem_addr_t)&b1, bit),
"sys_test_and_clear_bit did not detect bit %d\n",
bit);
zassert_equal(b1, 0, "sys_test_and_clear_bit did not clear"
" bit %d\n", bit);
zassert_false(sys_test_and_clear_bit((mem_addr_t)&b1, bit),
"sys_test_and_clear_bit erroneously detected"
" bit %d\n", bit);
zassert_equal(b1, 0, "sys_test_and_clear_bit set bit %d\n",
bit);
}
for (bit = 0; bit < BITFIELD_SIZE; ++bit) {
sys_bitfield_set_bit((mem_addr_t)b2, bit);
zassert_equal(b2[BIT_INDEX(bit)], BIT_VAL(bit),
"sys_bitfield_set_bit failed for bit %d\n",
bit);
zassert_true(sys_bitfield_test_bit((mem_addr_t)b2, bit),
"sys_bitfield_test_bit did not detect bit %d\n",
bit);
sys_bitfield_clear_bit((mem_addr_t)b2, bit);
zassert_equal(b2[BIT_INDEX(bit)], 0,
"sys_bitfield_clear_bit failed for bit %d\n",
bit);
zassert_false(sys_bitfield_test_bit((mem_addr_t)b2, bit),
"sys_bitfield_test_bit erroneously detected"
" bit %d\n", bit);
ret = sys_bitfield_test_and_set_bit((mem_addr_t)b2, bit);
zassert_false(ret, "sys_bitfield_test_and_set_bit erroneously"
" detected bit %d\n", bit);
zassert_equal(b2[BIT_INDEX(bit)], BIT_VAL(bit),
"sys_bitfield_test_and_set_bit did not set"
" bit %d\n", bit);
zassert_true(sys_bitfield_test_and_set_bit((mem_addr_t)b2, bit),
"sys_bitfield_test_and_set_bit did not detect bit"
" %d\n", bit);
zassert_equal(b2[BIT_INDEX(bit)], BIT_VAL(bit),
"sys_bitfield_test_and_set_bit cleared bit %d\n",
bit);
zassert_true(sys_bitfield_test_and_clear_bit((mem_addr_t)b2,
bit), "sys_bitfield_test_and_clear_bit did not"
" detect bit %d\n", bit);
zassert_equal(b2[BIT_INDEX(bit)], 0,
"sys_bitfield_test_and_clear_bit did not"
" clear bit %d\n", bit);
zassert_false(sys_bitfield_test_and_clear_bit((mem_addr_t)b2,
bit), "sys_bitfield_test_and_clear_bit"
" erroneously detected bit %d\n", bit);
zassert_equal(b2[BIT_INDEX(bit)], 0,
"sys_bitfield_test_and_clear_bit set bit %d\n",
bit);
}
}
|