123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- /* $OpenBSD: tests.c,v 1.1 2015/01/15 07:36:28 djm Exp $ */
- /*
- * Regress test for bitmap.h bitmap API
- *
- * Placed in the public domain
- */
- #include "includes.h"
- #include <sys/types.h>
- #include <sys/param.h>
- #include <stdio.h>
- #ifdef HAVE_STDINT_H
- #include <stdint.h>
- #endif
- #include <stdlib.h>
- #include <string.h>
- #ifdef WITH_OPENSSL
- #include <openssl/bn.h>
- #endif
- #include "../test_helper/test_helper.h"
- #include "bitmap.h"
- #define NTESTS 131
- void
- tests(void)
- {
- #ifdef WITH_OPENSSL
- struct bitmap *b;
- BIGNUM *bn;
- size_t len;
- int i, j, k, n;
- u_char bbuf[1024], bnbuf[1024];
- int r;
- TEST_START("bitmap_new");
- b = bitmap_new();
- ASSERT_PTR_NE(b, NULL);
- bn = BN_new();
- ASSERT_PTR_NE(bn, NULL);
- TEST_DONE();
- TEST_START("bitmap_set_bit / bitmap_test_bit");
- for (i = -1; i < NTESTS; i++) {
- for (j = -1; j < NTESTS; j++) {
- for (k = -1; k < NTESTS; k++) {
- bitmap_zero(b);
- BN_clear(bn);
- test_subtest_info("set %d/%d/%d", i, j, k);
- /* Set bits */
- if (i >= 0) {
- ASSERT_INT_EQ(bitmap_set_bit(b, i), 0);
- ASSERT_INT_EQ(BN_set_bit(bn, i), 1);
- }
- if (j >= 0) {
- ASSERT_INT_EQ(bitmap_set_bit(b, j), 0);
- ASSERT_INT_EQ(BN_set_bit(bn, j), 1);
- }
- if (k >= 0) {
- ASSERT_INT_EQ(bitmap_set_bit(b, k), 0);
- ASSERT_INT_EQ(BN_set_bit(bn, k), 1);
- }
- /* Check perfect match between bitmap and bn */
- test_subtest_info("match %d/%d/%d", i, j, k);
- for (n = 0; n < NTESTS; n++) {
- ASSERT_INT_EQ(BN_is_bit_set(bn, n),
- bitmap_test_bit(b, n));
- }
- /* Test length calculations */
- test_subtest_info("length %d/%d/%d", i, j, k);
- ASSERT_INT_EQ(BN_num_bits(bn),
- (int)bitmap_nbits(b));
- ASSERT_INT_EQ(BN_num_bytes(bn),
- (int)bitmap_nbytes(b));
- /* Test serialisation */
- test_subtest_info("serialise %d/%d/%d",
- i, j, k);
- len = bitmap_nbytes(b);
- memset(bbuf, 0xfc, sizeof(bbuf));
- ASSERT_INT_EQ(bitmap_to_string(b, bbuf,
- sizeof(bbuf)), 0);
- for (n = len; n < (int)sizeof(bbuf); n++)
- ASSERT_U8_EQ(bbuf[n], 0xfc);
- r = BN_bn2bin(bn, bnbuf);
- ASSERT_INT_GE(r, 0);
- ASSERT_INT_EQ(r, (int)len);
- ASSERT_MEM_EQ(bbuf, bnbuf, len);
- /* Test deserialisation */
- test_subtest_info("deserialise %d/%d/%d",
- i, j, k);
- bitmap_zero(b);
- ASSERT_INT_EQ(bitmap_from_string(b, bnbuf,
- len), 0);
- for (n = 0; n < NTESTS; n++) {
- ASSERT_INT_EQ(BN_is_bit_set(bn, n),
- bitmap_test_bit(b, n));
- }
- /* Test clearing bits */
- test_subtest_info("clear %d/%d/%d",
- i, j, k);
- for (n = 0; n < NTESTS; n++) {
- ASSERT_INT_EQ(bitmap_set_bit(b, n), 0);
- ASSERT_INT_EQ(BN_set_bit(bn, n), 1);
- }
- if (i >= 0) {
- bitmap_clear_bit(b, i);
- BN_clear_bit(bn, i);
- }
- if (j >= 0) {
- bitmap_clear_bit(b, j);
- BN_clear_bit(bn, j);
- }
- if (k >= 0) {
- bitmap_clear_bit(b, k);
- BN_clear_bit(bn, k);
- }
- for (n = 0; n < NTESTS; n++) {
- ASSERT_INT_EQ(BN_is_bit_set(bn, n),
- bitmap_test_bit(b, n));
- }
- }
- }
- }
- bitmap_free(b);
- BN_free(bn);
- TEST_DONE();
- #endif
- }
|