xref: /freebsd/crypto/openssh/regress/unittests/bitmap/tests.c (revision bc5531debefeb54993d01d4f3c8b33ccbe0b4d95)
1*bc5531deSDag-Erling Smørgrav /* 	$OpenBSD: tests.c,v 1.1 2015/01/15 07:36:28 djm Exp $ */
2*bc5531deSDag-Erling Smørgrav /*
3*bc5531deSDag-Erling Smørgrav  * Regress test for bitmap.h bitmap API
4*bc5531deSDag-Erling Smørgrav  *
5*bc5531deSDag-Erling Smørgrav  * Placed in the public domain
6*bc5531deSDag-Erling Smørgrav  */
7*bc5531deSDag-Erling Smørgrav 
8*bc5531deSDag-Erling Smørgrav #include "includes.h"
9*bc5531deSDag-Erling Smørgrav 
10*bc5531deSDag-Erling Smørgrav #include <sys/types.h>
11*bc5531deSDag-Erling Smørgrav #include <sys/param.h>
12*bc5531deSDag-Erling Smørgrav #include <stdio.h>
13*bc5531deSDag-Erling Smørgrav #ifdef HAVE_STDINT_H
14*bc5531deSDag-Erling Smørgrav #include <stdint.h>
15*bc5531deSDag-Erling Smørgrav #endif
16*bc5531deSDag-Erling Smørgrav #include <stdlib.h>
17*bc5531deSDag-Erling Smørgrav #include <string.h>
18*bc5531deSDag-Erling Smørgrav 
19*bc5531deSDag-Erling Smørgrav #include <openssl/bn.h>
20*bc5531deSDag-Erling Smørgrav 
21*bc5531deSDag-Erling Smørgrav #include "../test_helper/test_helper.h"
22*bc5531deSDag-Erling Smørgrav 
23*bc5531deSDag-Erling Smørgrav #include "bitmap.h"
24*bc5531deSDag-Erling Smørgrav 
25*bc5531deSDag-Erling Smørgrav #define NTESTS 131
26*bc5531deSDag-Erling Smørgrav 
27*bc5531deSDag-Erling Smørgrav void
28*bc5531deSDag-Erling Smørgrav tests(void)
29*bc5531deSDag-Erling Smørgrav {
30*bc5531deSDag-Erling Smørgrav 	struct bitmap *b;
31*bc5531deSDag-Erling Smørgrav 	BIGNUM *bn;
32*bc5531deSDag-Erling Smørgrav 	size_t len;
33*bc5531deSDag-Erling Smørgrav 	int i, j, k, n;
34*bc5531deSDag-Erling Smørgrav 	u_char bbuf[1024], bnbuf[1024];
35*bc5531deSDag-Erling Smørgrav 	int r;
36*bc5531deSDag-Erling Smørgrav 
37*bc5531deSDag-Erling Smørgrav 	TEST_START("bitmap_new");
38*bc5531deSDag-Erling Smørgrav 	b = bitmap_new();
39*bc5531deSDag-Erling Smørgrav 	ASSERT_PTR_NE(b, NULL);
40*bc5531deSDag-Erling Smørgrav 	bn = BN_new();
41*bc5531deSDag-Erling Smørgrav 	ASSERT_PTR_NE(bn, NULL);
42*bc5531deSDag-Erling Smørgrav 	TEST_DONE();
43*bc5531deSDag-Erling Smørgrav 
44*bc5531deSDag-Erling Smørgrav 	TEST_START("bitmap_set_bit / bitmap_test_bit");
45*bc5531deSDag-Erling Smørgrav 	for (i = -1; i < NTESTS; i++) {
46*bc5531deSDag-Erling Smørgrav 		for (j = -1; j < NTESTS; j++) {
47*bc5531deSDag-Erling Smørgrav 			for (k = -1; k < NTESTS; k++) {
48*bc5531deSDag-Erling Smørgrav 				bitmap_zero(b);
49*bc5531deSDag-Erling Smørgrav 				BN_clear(bn);
50*bc5531deSDag-Erling Smørgrav 
51*bc5531deSDag-Erling Smørgrav 				test_subtest_info("set %d/%d/%d", i, j, k);
52*bc5531deSDag-Erling Smørgrav 				/* Set bits */
53*bc5531deSDag-Erling Smørgrav 				if (i >= 0) {
54*bc5531deSDag-Erling Smørgrav 					ASSERT_INT_EQ(bitmap_set_bit(b, i), 0);
55*bc5531deSDag-Erling Smørgrav 					ASSERT_INT_EQ(BN_set_bit(bn, i), 1);
56*bc5531deSDag-Erling Smørgrav 				}
57*bc5531deSDag-Erling Smørgrav 				if (j >= 0) {
58*bc5531deSDag-Erling Smørgrav 					ASSERT_INT_EQ(bitmap_set_bit(b, j), 0);
59*bc5531deSDag-Erling Smørgrav 					ASSERT_INT_EQ(BN_set_bit(bn, j), 1);
60*bc5531deSDag-Erling Smørgrav 				}
61*bc5531deSDag-Erling Smørgrav 				if (k >= 0) {
62*bc5531deSDag-Erling Smørgrav 					ASSERT_INT_EQ(bitmap_set_bit(b, k), 0);
63*bc5531deSDag-Erling Smørgrav 					ASSERT_INT_EQ(BN_set_bit(bn, k), 1);
64*bc5531deSDag-Erling Smørgrav 				}
65*bc5531deSDag-Erling Smørgrav 
66*bc5531deSDag-Erling Smørgrav 				/* Check perfect match between bitmap and bn */
67*bc5531deSDag-Erling Smørgrav 				test_subtest_info("match %d/%d/%d", i, j, k);
68*bc5531deSDag-Erling Smørgrav 				for (n = 0; n < NTESTS; n++) {
69*bc5531deSDag-Erling Smørgrav 					ASSERT_INT_EQ(BN_is_bit_set(bn, n),
70*bc5531deSDag-Erling Smørgrav 					    bitmap_test_bit(b, n));
71*bc5531deSDag-Erling Smørgrav 				}
72*bc5531deSDag-Erling Smørgrav 
73*bc5531deSDag-Erling Smørgrav 				/* Test length calculations */
74*bc5531deSDag-Erling Smørgrav 				test_subtest_info("length %d/%d/%d", i, j, k);
75*bc5531deSDag-Erling Smørgrav 				ASSERT_INT_EQ(BN_num_bits(bn),
76*bc5531deSDag-Erling Smørgrav 				    (int)bitmap_nbits(b));
77*bc5531deSDag-Erling Smørgrav 				ASSERT_INT_EQ(BN_num_bytes(bn),
78*bc5531deSDag-Erling Smørgrav 				    (int)bitmap_nbytes(b));
79*bc5531deSDag-Erling Smørgrav 
80*bc5531deSDag-Erling Smørgrav 				/* Test serialisation */
81*bc5531deSDag-Erling Smørgrav 				test_subtest_info("serialise %d/%d/%d",
82*bc5531deSDag-Erling Smørgrav 				    i, j, k);
83*bc5531deSDag-Erling Smørgrav 				len = bitmap_nbytes(b);
84*bc5531deSDag-Erling Smørgrav 				memset(bbuf, 0xfc, sizeof(bbuf));
85*bc5531deSDag-Erling Smørgrav 				ASSERT_INT_EQ(bitmap_to_string(b, bbuf,
86*bc5531deSDag-Erling Smørgrav 				    sizeof(bbuf)), 0);
87*bc5531deSDag-Erling Smørgrav 				for (n = len; n < (int)sizeof(bbuf); n++)
88*bc5531deSDag-Erling Smørgrav 					ASSERT_U8_EQ(bbuf[n], 0xfc);
89*bc5531deSDag-Erling Smørgrav 				r = BN_bn2bin(bn, bnbuf);
90*bc5531deSDag-Erling Smørgrav 				ASSERT_INT_GE(r, 0);
91*bc5531deSDag-Erling Smørgrav 				ASSERT_INT_EQ(r, (int)len);
92*bc5531deSDag-Erling Smørgrav 				ASSERT_MEM_EQ(bbuf, bnbuf, len);
93*bc5531deSDag-Erling Smørgrav 
94*bc5531deSDag-Erling Smørgrav 				/* Test deserialisation */
95*bc5531deSDag-Erling Smørgrav 				test_subtest_info("deserialise %d/%d/%d",
96*bc5531deSDag-Erling Smørgrav 				    i, j, k);
97*bc5531deSDag-Erling Smørgrav 				bitmap_zero(b);
98*bc5531deSDag-Erling Smørgrav 				ASSERT_INT_EQ(bitmap_from_string(b, bnbuf,
99*bc5531deSDag-Erling Smørgrav 				    len), 0);
100*bc5531deSDag-Erling Smørgrav 				for (n = 0; n < NTESTS; n++) {
101*bc5531deSDag-Erling Smørgrav 					ASSERT_INT_EQ(BN_is_bit_set(bn, n),
102*bc5531deSDag-Erling Smørgrav 					    bitmap_test_bit(b, n));
103*bc5531deSDag-Erling Smørgrav 				}
104*bc5531deSDag-Erling Smørgrav 
105*bc5531deSDag-Erling Smørgrav 				/* Test clearing bits */
106*bc5531deSDag-Erling Smørgrav 				test_subtest_info("clear %d/%d/%d",
107*bc5531deSDag-Erling Smørgrav 				    i, j, k);
108*bc5531deSDag-Erling Smørgrav 				for (n = 0; n < NTESTS; n++) {
109*bc5531deSDag-Erling Smørgrav 					ASSERT_INT_EQ(bitmap_set_bit(b, n), 0);
110*bc5531deSDag-Erling Smørgrav 					ASSERT_INT_EQ(BN_set_bit(bn, n), 1);
111*bc5531deSDag-Erling Smørgrav 				}
112*bc5531deSDag-Erling Smørgrav 				if (i >= 0) {
113*bc5531deSDag-Erling Smørgrav 					bitmap_clear_bit(b, i);
114*bc5531deSDag-Erling Smørgrav 					BN_clear_bit(bn, i);
115*bc5531deSDag-Erling Smørgrav 				}
116*bc5531deSDag-Erling Smørgrav 				if (j >= 0) {
117*bc5531deSDag-Erling Smørgrav 					bitmap_clear_bit(b, j);
118*bc5531deSDag-Erling Smørgrav 					BN_clear_bit(bn, j);
119*bc5531deSDag-Erling Smørgrav 				}
120*bc5531deSDag-Erling Smørgrav 				if (k >= 0) {
121*bc5531deSDag-Erling Smørgrav 					bitmap_clear_bit(b, k);
122*bc5531deSDag-Erling Smørgrav 					BN_clear_bit(bn, k);
123*bc5531deSDag-Erling Smørgrav 				}
124*bc5531deSDag-Erling Smørgrav 				for (n = 0; n < NTESTS; n++) {
125*bc5531deSDag-Erling Smørgrav 					ASSERT_INT_EQ(BN_is_bit_set(bn, n),
126*bc5531deSDag-Erling Smørgrav 					    bitmap_test_bit(b, n));
127*bc5531deSDag-Erling Smørgrav 				}
128*bc5531deSDag-Erling Smørgrav 			}
129*bc5531deSDag-Erling Smørgrav 		}
130*bc5531deSDag-Erling Smørgrav 	}
131*bc5531deSDag-Erling Smørgrav 	bitmap_free(b);
132*bc5531deSDag-Erling Smørgrav 	BN_free(bn);
133*bc5531deSDag-Erling Smørgrav 	TEST_DONE();
134*bc5531deSDag-Erling Smørgrav }
135*bc5531deSDag-Erling Smørgrav 
136