forked from lei.chen/myxce
213 lines
5 KiB
C
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);
|
|
}
|