1285031Sdes/* $OpenBSD: tests.c,v 1.1 2015/01/15 07:36:28 djm Exp $ */ 2285031Sdes/* 3285031Sdes * Regress test for bitmap.h bitmap API 4285031Sdes * 5285031Sdes * Placed in the public domain 6285031Sdes */ 7285031Sdes 8285031Sdes#include "includes.h" 9285031Sdes 10285031Sdes#include <sys/types.h> 11285031Sdes#include <sys/param.h> 12285031Sdes#include <stdio.h> 13285031Sdes#ifdef HAVE_STDINT_H 14285031Sdes#include <stdint.h> 15285031Sdes#endif 16285031Sdes#include <stdlib.h> 17285031Sdes#include <string.h> 18285031Sdes 19285031Sdes#include <openssl/bn.h> 20285031Sdes 21285031Sdes#include "../test_helper/test_helper.h" 22285031Sdes 23285031Sdes#include "bitmap.h" 24285031Sdes 25285031Sdes#define NTESTS 131 26285031Sdes 27285031Sdesvoid 28285031Sdestests(void) 29285031Sdes{ 30285031Sdes struct bitmap *b; 31285031Sdes BIGNUM *bn; 32285031Sdes size_t len; 33285031Sdes int i, j, k, n; 34285031Sdes u_char bbuf[1024], bnbuf[1024]; 35285031Sdes int r; 36285031Sdes 37285031Sdes TEST_START("bitmap_new"); 38285031Sdes b = bitmap_new(); 39285031Sdes ASSERT_PTR_NE(b, NULL); 40285031Sdes bn = BN_new(); 41285031Sdes ASSERT_PTR_NE(bn, NULL); 42285031Sdes TEST_DONE(); 43285031Sdes 44285031Sdes TEST_START("bitmap_set_bit / bitmap_test_bit"); 45285031Sdes for (i = -1; i < NTESTS; i++) { 46285031Sdes for (j = -1; j < NTESTS; j++) { 47285031Sdes for (k = -1; k < NTESTS; k++) { 48285031Sdes bitmap_zero(b); 49285031Sdes BN_clear(bn); 50285031Sdes 51285031Sdes test_subtest_info("set %d/%d/%d", i, j, k); 52285031Sdes /* Set bits */ 53285031Sdes if (i >= 0) { 54285031Sdes ASSERT_INT_EQ(bitmap_set_bit(b, i), 0); 55285031Sdes ASSERT_INT_EQ(BN_set_bit(bn, i), 1); 56285031Sdes } 57285031Sdes if (j >= 0) { 58285031Sdes ASSERT_INT_EQ(bitmap_set_bit(b, j), 0); 59285031Sdes ASSERT_INT_EQ(BN_set_bit(bn, j), 1); 60285031Sdes } 61285031Sdes if (k >= 0) { 62285031Sdes ASSERT_INT_EQ(bitmap_set_bit(b, k), 0); 63285031Sdes ASSERT_INT_EQ(BN_set_bit(bn, k), 1); 64285031Sdes } 65285031Sdes 66285031Sdes /* Check perfect match between bitmap and bn */ 67285031Sdes test_subtest_info("match %d/%d/%d", i, j, k); 68285031Sdes for (n = 0; n < NTESTS; n++) { 69285031Sdes ASSERT_INT_EQ(BN_is_bit_set(bn, n), 70285031Sdes bitmap_test_bit(b, n)); 71285031Sdes } 72285031Sdes 73285031Sdes /* Test length calculations */ 74285031Sdes test_subtest_info("length %d/%d/%d", i, j, k); 75285031Sdes ASSERT_INT_EQ(BN_num_bits(bn), 76285031Sdes (int)bitmap_nbits(b)); 77285031Sdes ASSERT_INT_EQ(BN_num_bytes(bn), 78285031Sdes (int)bitmap_nbytes(b)); 79285031Sdes 80285031Sdes /* Test serialisation */ 81285031Sdes test_subtest_info("serialise %d/%d/%d", 82285031Sdes i, j, k); 83285031Sdes len = bitmap_nbytes(b); 84285031Sdes memset(bbuf, 0xfc, sizeof(bbuf)); 85285031Sdes ASSERT_INT_EQ(bitmap_to_string(b, bbuf, 86285031Sdes sizeof(bbuf)), 0); 87285031Sdes for (n = len; n < (int)sizeof(bbuf); n++) 88285031Sdes ASSERT_U8_EQ(bbuf[n], 0xfc); 89285031Sdes r = BN_bn2bin(bn, bnbuf); 90285031Sdes ASSERT_INT_GE(r, 0); 91285031Sdes ASSERT_INT_EQ(r, (int)len); 92285031Sdes ASSERT_MEM_EQ(bbuf, bnbuf, len); 93285031Sdes 94285031Sdes /* Test deserialisation */ 95285031Sdes test_subtest_info("deserialise %d/%d/%d", 96285031Sdes i, j, k); 97285031Sdes bitmap_zero(b); 98285031Sdes ASSERT_INT_EQ(bitmap_from_string(b, bnbuf, 99285031Sdes len), 0); 100285031Sdes for (n = 0; n < NTESTS; n++) { 101285031Sdes ASSERT_INT_EQ(BN_is_bit_set(bn, n), 102285031Sdes bitmap_test_bit(b, n)); 103285031Sdes } 104285031Sdes 105285031Sdes /* Test clearing bits */ 106285031Sdes test_subtest_info("clear %d/%d/%d", 107285031Sdes i, j, k); 108285031Sdes for (n = 0; n < NTESTS; n++) { 109285031Sdes ASSERT_INT_EQ(bitmap_set_bit(b, n), 0); 110285031Sdes ASSERT_INT_EQ(BN_set_bit(bn, n), 1); 111285031Sdes } 112285031Sdes if (i >= 0) { 113285031Sdes bitmap_clear_bit(b, i); 114285031Sdes BN_clear_bit(bn, i); 115285031Sdes } 116285031Sdes if (j >= 0) { 117285031Sdes bitmap_clear_bit(b, j); 118285031Sdes BN_clear_bit(bn, j); 119285031Sdes } 120285031Sdes if (k >= 0) { 121285031Sdes bitmap_clear_bit(b, k); 122285031Sdes BN_clear_bit(bn, k); 123285031Sdes } 124285031Sdes for (n = 0; n < NTESTS; n++) { 125285031Sdes ASSERT_INT_EQ(BN_is_bit_set(bn, n), 126285031Sdes bitmap_test_bit(b, n)); 127285031Sdes } 128285031Sdes } 129285031Sdes } 130285031Sdes } 131285031Sdes bitmap_free(b); 132285031Sdes BN_free(bn); 133285031Sdes TEST_DONE(); 134285031Sdes} 135285031Sdes 136