int test_base_bitset(const char* param) { rand_seed((uint32_t)time(NULL)); // bit create int size = param ? atoi(param) : rand() % 1024; bit_t* bit = bit_create(size); if (!bit) { fprintf(stderr, "bit create fail\n"); return -1; } // bit set int test_size = (size >> 1); for (int i = 0; i < test_size; ++ i) { bit_set(bit, i); } // bit is set for (int i = 0; i < size; ++ i) { if (i < test_size && bit_isset(bit, i)) { fprintf(stderr, "bit-set error\n"); bit_release(bit); return -1; } if (i >= test_size && bit_isset(bit, i) == 0) { fprintf(stderr, "bit-set error\n"); bit_release(bit); return -1; } } // bit count if (bit_count(bit) != test_size) { fprintf(stderr, "bit-count = %d error\n", bit_count(bit)); bit_release(bit); return -1; } // bit reset -> bit count for (int i = 0; i < test_size; ++ i) { bit_reset(bit, i); } if (bit_count(bit) != 0) { fprintf(stderr, "bit-count error\n"); bit_release(bit); return -1; } bit_release(bit); return 0; }
void test_bit(void) { int i; void* B = bit_create(10); fprintf(stdout, "call function : %s\n", __func__); bit_object_show(B); fprintf(stdout, "\ntest function - bit_set/bit_get ===>\n"); { srand((unsigned int)time(0)); for (i = 0; i < bit_size(B); ++i) bit_set(B, i, rand() % 2); bit_object_show(B); for (i = 0; i < bit_size(B); ++i) fprintf(stdout, "\tbit values [%02d] => %d\n", i, bit_get(B, i)); } fprintf(stdout, "\ntest function - bit_clear_range ===>\n"); { bit_clear_range(B, 0, 4); bit_object_show(B); bit_for_each(B, bit_object_bit_show, NULL); } fprintf(stdout, "\ntest function - bit_set_range ===>\n"); { bit_set_range(B, 5, 9); bit_object_show(B); bit_for_each(B, bit_object_bit_show, NULL); } fprintf(stdout, "\ntest function - bit_not_range ===>\n"); { bit_not_range(B, 0, 9); bit_object_show(B); bit_for_each(B, bit_object_bit_show, NULL); } fprintf(stdout, "\ntest function - bit_clear ===>\n"); { bit_clear(B); bit_object_show(B); } fprintf(stdout, "\ntest function - bit_release ===>\n"); bit_release(&B); bit_object_show(B); fprintf(stdout, "\ntest function - bit_lt/bit_eq/bit_leq ===>\n"); { void* B1 = bit_create(5); void* B2 = bit_create(5); srand((unsigned int)time(0)); for (i = 0; i < 5; ++i) { bit_set(B1, i, rand() % 2); bit_set(B2, i, rand() % 2); } fprintf(stdout, " B1 object show:\n"); bit_for_each(B1, bit_object_bit_show, NULL); fprintf(stdout, " B2 object show:\n"); bit_for_each(B2, bit_object_bit_show, NULL); fprintf(stdout, " B1 < B2 ? '%s'\n", bit_lt(B1, B2) ? "yes" : "no"); fprintf(stdout, " B1 = B2 ? '%s'\n", bit_eq(B1, B2) ? "yes" : "no"); fprintf(stdout, " B1 <= B2 ? '%s'\n", bit_leq(B1, B2) ? "yes" : "no"); bit_release(&B1); bit_release(&B2); } fprintf(stdout, "\ntest function - union/inter/minus/diff ===>\n"); { void* B1 = bit_create(5); void* B2 = bit_create(5); srand((unsigned int)time(0)); for (i = 0; i < 5; ++i) { bit_set(B1, i, rand() % 2); bit_set(B2, i, rand() % 2); } fprintf(stdout, " B1 object show:\n"); bit_for_each(B1, bit_object_bit_show, NULL); fprintf(stdout, " B2 object show:\n"); bit_for_each(B2, bit_object_bit_show, NULL); B = bit_union(B1, B2); fprintf(stdout, " B1 union B2 ->\n"); bit_for_each(B, bit_object_bit_show, NULL); bit_release(&B); B = bit_inter(B1, B2); fprintf(stdout, " B1 inter B2 ->\n"); bit_for_each(B, bit_object_bit_show, NULL); bit_release(&B); B = bit_minus(B1, B2); fprintf(stdout, " B1 minus B2 ->\n"); bit_for_each(B, bit_object_bit_show, NULL); bit_release(&B); B = bit_diff(B1, B2); fprintf(stdout, " B1 diff B2 ->\n"); bit_for_each(B, bit_object_bit_show, NULL); bit_release(&B); bit_release(&B1); bit_release(&B2); } }