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