From cf483f342779f154657abe668956d1c57db395ac Mon Sep 17 00:00:00 2001 From: asterix Date: Tue, 31 Aug 2010 09:12:43 +0000 Subject: [PATCH] Add bitarray test. Fixes and add dump function. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4210 38d2e660-2303-0410-9eaa-f027e97ec537 --- bertos/struct/bitarray.h | 33 ++++++++++++++++++---- bertos/struct/bitarray_test.c | 53 ++++++++++++++++++++++++++++++++++- 2 files changed, 80 insertions(+), 6 deletions(-) diff --git a/bertos/struct/bitarray.h b/bertos/struct/bitarray.h index 60dd2611..8fbef32c 100644 --- a/bertos/struct/bitarray.h +++ b/bertos/struct/bitarray.h @@ -53,14 +53,14 @@ typedef struct BitArray } BitArray; -#define ALLOC_BITARRAY(name, size) uint8_t name[DIV_ROUNDUP((size),8)] +#define ALLOC_BITARRAY(name, size) uint8_t name[DIV_ROUNDUP((size), 8)] INLINE void bitarray_set(BitArray *ctx, int idx) { ASSERT((size_t)idx <= ctx->size); int page = idx / 8; - int bit = idx % 8; + uint8_t bit = idx % 8; ctx->array[page] |= BV(bit); } @@ -69,7 +69,7 @@ INLINE void bitarray_clear(BitArray *ctx, int idx) { ASSERT((size_t)idx <= ctx->size); int page = idx / 8; - int bit = idx % 8; + uint8_t bit = idx % 8; ctx->array[page] &= ~BV(bit); } @@ -78,17 +78,40 @@ INLINE bool bitarray_check(BitArray *ctx, int idx) { ASSERT((size_t)idx <= ctx->size); int page = idx / 8; - int bit = idx % 8; + uint8_t bit = idx % 8; return (ctx->array[page] & BV(bit)); } INLINE void init_bitarray(BitArray *ctx, uint8_t *array, size_t size) { - ctx->size = size; + ctx->size = size * 8; ctx->array = array; } +INLINE size_t bitarray_size(BitArray *ctx) +{ + return ctx->size; +} + +INLINE void bitarray_dump(BitArray *ctx) +{ + int i = 0; + int j = 0; + size_t len = ctx->size; + kprintf("bitarray size[%zu]\n", ctx->size); + while (len--) + { + kprintf("%d", bitarray_check(ctx, i++)); + if (j == 7) + { + kprintf("..%02x [%d] %d\n", ctx->array[i / 8], len, i); + j = 0; + continue; + } + j++; + } +} int bitarray_testSetup(void); int bitarray_testRun(void); diff --git a/bertos/struct/bitarray_test.c b/bertos/struct/bitarray_test.c index fa65c44a..dde22981 100644 --- a/bertos/struct/bitarray_test.c +++ b/bertos/struct/bitarray_test.c @@ -41,7 +41,9 @@ #include #include -ALLOC_BITARRAY(test1, 128); +#include + +ALLOC_BITARRAY(test1, 31); BitArray ctx; int bitarray_testSetup(void) @@ -53,6 +55,55 @@ int bitarray_testSetup(void) int bitarray_testRun(void) { + memset(test1, 0xaa, sizeof(test1)); + bitarray_dump(&ctx); + + for (int i = 0; i < bitarray_size(&ctx); i++) + { + if (!((bool)(i % 2) == bitarray_check(&ctx, i))) + { + kprintf("Error!\n"); + return -1; + } + } + + memset(test1, 0, sizeof(test1)); + for (int i = 0; i < bitarray_size(&ctx); i++) + { + if ((i % 2) == 0) + bitarray_clear(&ctx, i); + else + bitarray_set(&ctx, i); + } + + bitarray_dump(&ctx); + for (int i = 0; i < bitarray_size(&ctx); i++) + { + if (!((bool)(i % 2) == bitarray_check(&ctx, i))) + { + kprintf("Error!\n"); + return -1; + } + } + + memset(test1, 0, sizeof(test1)); + bitarray_set(&ctx, 0); + bitarray_dump(&ctx); + if (!bitarray_check(&ctx, 0)) + { + kprintf("Error!\n"); + return -1; + } + + memset(test1, 0, sizeof(test1)); + bitarray_set(&ctx, bitarray_size(&ctx)); + bitarray_dump(&ctx); + if (!bitarray_check(&ctx, bitarray_size(&ctx))) + { + kprintf("Error!\n"); + return -1; + } + return 0; } -- 2.25.1