myxce/src/lib/testsuite/test_bitset.c
2026-02-13 11:01:33 +08:00

213 lines
5 KiB
C

#include <rtti.h>
#include <stdio.h>
#include <stdlib.h>
#include <unity/unity.h>
#include "bitset.h"
static void test_bitset_create(void)
{
var bitset = makeInstance(&bitset_type, 1);
TEST_ASSERT_TRUE(bitset != NULL);
TEST_ASSERT_TRUE(is_rtti_obj(bitset));
destroy(bitset);
}
static void test_bitset_set(void)
{
var bitset = makeInstance(&bitset_type, 1);
int bits[] = { 1, 3, 5, 7, 11, 19, 23 };
int i;
TEST_ASSERT_TRUE(bitset != NULL);
TEST_ASSERT_TRUE(is_rtti_obj(bitset));
for (i = 0; i < sizeof(bits) / sizeof(bits[0]); i++) {
int rc;
rc = bit_test(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc == 0);
rc = bit_set(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc >= 0);
rc = bit_test(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc > 0);
}
destroy(bitset);
}
static void test_bitset_clr(void)
{
var bitset = makeInstance(&bitset_type, 1);
int bits[] = { 1, 3, 5, 7, 11, 19, 23 };
int i;
TEST_ASSERT_TRUE(bitset != NULL);
TEST_ASSERT_TRUE(is_rtti_obj(bitset));
for (i = 0; i < sizeof(bits) / sizeof(bits[0]); i++) {
int rc;
rc = bit_test(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc == 0);
rc = bit_set(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc >= 0);
rc = bit_test(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc > 0);
rc = bit_clr(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc >= 0);
rc = bit_test(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc == 0);
}
destroy(bitset);
}
static void test_bitset_clrall(void)
{
var bitset = makeInstance(&bitset_type, 1);
int bits[] = { 1, 3, 5, 7, 11, 19, 23 };
int i;
int rc;
TEST_ASSERT_TRUE(bitset != NULL);
TEST_ASSERT_TRUE(is_rtti_obj(bitset));
for (i = 0; i < sizeof(bits) / sizeof(bits[0]); i++) {
rc = bit_test(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc == 0);
rc = bit_set(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc >= 0);
rc = bit_test(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc > 0);
}
rc = bit_clrall(bitset);
TEST_ASSERT_TRUE(rc >= 0);
for (i = 0; i < sizeof(bits) / sizeof(bits[0]); i++) {
rc = bit_test(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc == 0);
}
destroy(bitset);
}
static void test_bitset_iter_over1(void)
{
var bitset = makeInstance(&bitset_type, 1);
int bits[] = { 0, 1, 3, 5, 7, 11, 19, 23, 64, 128, 139 };
int i;
int rc;
iterator_t it;
void* data;
TEST_ASSERT_TRUE(bitset != NULL);
TEST_ASSERT_TRUE(is_rtti_obj(bitset));
for (i = 0; i < sizeof(bits) / sizeof(bits[0]); i++) {
rc = bit_test(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc == 0);
rc = bit_set(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc >= 0);
rc = bit_test(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc > 0);
}
rc = iter_make(&it, bitset, BITSET_ITER_OVER_1);
TEST_ASSERT_TRUE(rc >= 0);
i = 0;
for (;;) {
rc = iter_next(&it, &data);
TEST_ASSERT_TRUE(rc >= 0);
if (rc == RTTI_ITER_NO_DATA) {
break;
}
TEST_ASSERT_TRUE((int)((long)data) == bits[i]);
i++;
}
TEST_ASSERT_TRUE(i == sizeof(bits) / sizeof(bits[0]));
iter_destroy(&it);
destroy(bitset);
}
static void test_bitset_iter_over0(void)
{
var bitset = makeInstance(&bitset_type, 1);
int bits[] = { 0, 1, 3, 5, 7, 11, 19, 23, 64, 128, 139 };
int i;
int rc;
iterator_t it;
void* data;
TEST_ASSERT_TRUE(bitset != NULL);
TEST_ASSERT_TRUE(is_rtti_obj(bitset));
/* set all bits to 1 */
for(i =0; i < 4096*8 ; i ++) {
rc = bit_set(bitset, (unsigned long)i);
TEST_ASSERT_TRUE(rc >= 0);
rc = bit_test(bitset, (unsigned long)i);
TEST_ASSERT_TRUE(rc > 0);
}
for (i = 0; i < sizeof(bits) / sizeof(bits[0]); i++) {
rc = bit_clr(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc >= 0);
rc = bit_test(bitset, (unsigned long)bits[i]);
TEST_ASSERT_TRUE(rc == 0);
}
rc = iter_make(&it, bitset, BITSET_ITER_OVER_0);
TEST_ASSERT_TRUE(rc >= 0);
i = 0;
for (;;) {
rc = iter_next(&it, &data);
TEST_ASSERT_TRUE(rc >= 0);
if (rc == RTTI_ITER_NO_DATA) {
break;
}
TEST_ASSERT_TRUE((int)((long)data) == bits[i]);
i++;
}
TEST_ASSERT_TRUE(i == sizeof(bits) / sizeof(bits[0]));
iter_destroy(&it);
destroy(bitset);
}
void test_bitset(void)
{
printf("\n>> bitset test\n\n");
RUN_TEST(test_bitset_create);
RUN_TEST(test_bitset_set);
RUN_TEST(test_bitset_clr);
RUN_TEST(test_bitset_clrall);
RUN_TEST(test_bitset_iter_over1);
RUN_TEST(test_bitset_iter_over0);
}