1 /* $OpenBSD: tests.c,v 1.1 2015/01/15 07:36:28 djm Exp $ */
3 * Regress test for bitmap.h bitmap API
5 * Placed in the public domain
10 #include <sys/types.h>
11 #include <sys/param.h>
20 #include <openssl/bn.h>
23 #include "../test_helper/test_helper.h"
37 u_char bbuf[1024], bnbuf[1024];
40 TEST_START("bitmap_new");
42 ASSERT_PTR_NE(b, NULL);
44 ASSERT_PTR_NE(bn, NULL);
47 TEST_START("bitmap_set_bit / bitmap_test_bit");
48 for (i = -1; i < NTESTS; i++) {
49 for (j = -1; j < NTESTS; j++) {
50 for (k = -1; k < NTESTS; k++) {
54 test_subtest_info("set %d/%d/%d", i, j, k);
57 ASSERT_INT_EQ(bitmap_set_bit(b, i), 0);
58 ASSERT_INT_EQ(BN_set_bit(bn, i), 1);
61 ASSERT_INT_EQ(bitmap_set_bit(b, j), 0);
62 ASSERT_INT_EQ(BN_set_bit(bn, j), 1);
65 ASSERT_INT_EQ(bitmap_set_bit(b, k), 0);
66 ASSERT_INT_EQ(BN_set_bit(bn, k), 1);
69 /* Check perfect match between bitmap and bn */
70 test_subtest_info("match %d/%d/%d", i, j, k);
71 for (n = 0; n < NTESTS; n++) {
72 ASSERT_INT_EQ(BN_is_bit_set(bn, n),
73 bitmap_test_bit(b, n));
76 /* Test length calculations */
77 test_subtest_info("length %d/%d/%d", i, j, k);
78 ASSERT_INT_EQ(BN_num_bits(bn),
79 (int)bitmap_nbits(b));
80 ASSERT_INT_EQ(BN_num_bytes(bn),
81 (int)bitmap_nbytes(b));
83 /* Test serialisation */
84 test_subtest_info("serialise %d/%d/%d",
86 len = bitmap_nbytes(b);
87 memset(bbuf, 0xfc, sizeof(bbuf));
88 ASSERT_INT_EQ(bitmap_to_string(b, bbuf,
90 for (n = len; n < (int)sizeof(bbuf); n++)
91 ASSERT_U8_EQ(bbuf[n], 0xfc);
92 r = BN_bn2bin(bn, bnbuf);
94 ASSERT_INT_EQ(r, (int)len);
95 ASSERT_MEM_EQ(bbuf, bnbuf, len);
97 /* Test deserialisation */
98 test_subtest_info("deserialise %d/%d/%d",
101 ASSERT_INT_EQ(bitmap_from_string(b, bnbuf,
103 for (n = 0; n < NTESTS; n++) {
104 ASSERT_INT_EQ(BN_is_bit_set(bn, n),
105 bitmap_test_bit(b, n));
108 /* Test clearing bits */
109 test_subtest_info("clear %d/%d/%d",
111 for (n = 0; n < NTESTS; n++) {
112 ASSERT_INT_EQ(bitmap_set_bit(b, n), 0);
113 ASSERT_INT_EQ(BN_set_bit(bn, n), 1);
116 bitmap_clear_bit(b, i);
120 bitmap_clear_bit(b, j);
124 bitmap_clear_bit(b, k);
127 for (n = 0; n < NTESTS; n++) {
128 ASSERT_INT_EQ(BN_is_bit_set(bn, n),
129 bitmap_test_bit(b, n));