sd

Sized-data type and related functions
git clone git://www.tkruger.se/sd.git
Log | Files | Refs | README

test_sd.c (2159B)


      1 #include <stdlib.h>
      2 #include <stdio.h>
      3 #include <assert.h>
      4 #include "sd.h"
      5 
      6 static void test_sd_init() {
      7   sd_t s;
      8   sd_init(&s, 12);
      9 
     10   assert(s.size == 12);
     11 
     12   size_t i;
     13   for (i = 0; i < s.size; i++)
     14     s.data[i] = 0x00;
     15   for (i = 0; i < s.size; i++) {
     16     assert(s.data[i] == 0x00);
     17   }
     18 
     19   sd_clear(&s);
     20 
     21   sd_init_u64(&s, 13);
     22   uint64_t tretton = 13;
     23   assert(s.size == sizeof(uint64_t));
     24   assert(memcmp(s.data, &tretton, sizeof(uint64_t)) == 0);
     25 
     26   sd_clear(&s);
     27 
     28   char *mystr = "this is a test";
     29   sd_init_str(&s, mystr);
     30   assert(s.size == strlen(mystr) + 1);
     31   assert(memcmp(s.data, "this is a test", s.size) == 0);
     32 
     33   sd_clear(&s);
     34 }
     35 
     36 static void test_sd_cmp() {
     37   char *strs[4] = {"bc", "abc", "abd", "abcd"};
     38 
     39   sd_t ss[4];
     40   size_t i;
     41   for (i = 0; i < 4; i++) {
     42     sd_init_str(&ss[i], strs[i]);
     43   }
     44 
     45   assert(sd_cmp(&ss[0], &ss[1]) < 0);
     46   assert(sd_cmp(&ss[0], &ss[2]) < 0);
     47   assert(sd_cmp(&ss[0], &ss[3]) < 0);
     48   assert(sd_cmp(&ss[0], &ss[0]) == 0);
     49   assert(sd_cmp(&ss[1], &ss[2]) < 0);
     50   assert(sd_cmp(&ss[1], &ss[3]) < 0);
     51   assert(sd_cmp(&ss[3], &ss[2]) > 0);
     52 
     53   for (i = 0; i < 4; i++) {
     54     sd_clear(&ss[i]);
     55   }
     56 }
     57 
     58 static void test_sd_hash() {
     59   char *strs[4] = {"bc", "abc", "abd", "abd"};
     60 
     61   sd_t ss[4];
     62   size_t i;
     63   for (i = 0; i < 4; i++) {
     64     sd_init_str(&ss[i], strs[i]);
     65   }
     66 
     67   assert(sd_hash(&ss[0]) != sd_hash(&ss[1]));
     68   assert(sd_hash(&ss[0]) != sd_hash(&ss[2]));
     69   assert(sd_hash(&ss[0]) != sd_hash(&ss[3]));
     70   assert(sd_hash(&ss[1]) != sd_hash(&ss[2]));
     71   assert(sd_hash(&ss[1]) != sd_hash(&ss[3]));
     72   assert(sd_hash(&ss[2]) == sd_hash(&ss[3]));
     73 
     74   for (i = 0; i < 4; i++)
     75     sd_clear(&ss[i]);
     76 }
     77 
     78 static void test_sd_conv_u64() {
     79   sd_t s;
     80   sd_init_u64(&s, 0xdeadbeeffeedbaaf);
     81   uint64_t c = sd_conv_u64(&s);
     82   assert(c == 0xdeadbeeffeedbaaf);
     83   sd_clear(&s);
     84 }
     85 
     86 static void test_sd_get_str() {
     87   sd_t s;
     88   char *str = "hello world!";
     89   sd_init_str(&s, str);
     90   char *mystr = sd_get_str(&s);
     91 
     92   assert(mystr != str);
     93   assert(strncmp(str, mystr, 13) == 0);
     94 
     95   sd_clear(&s);
     96 }
     97 
     98 int main() {
     99   test_sd_init();
    100   test_sd_cmp();
    101   test_sd_hash();
    102   test_sd_conv_u64();
    103   test_sd_get_str();
    104 
    105   printf("test ok\n");
    106 }