dtype.c

Dynamic-ish typing library
git clone git://git.finwo.net/lib/dtype.c
Log | Files | Refs | README | LICENSE

test.c (2417B)


      1 #include "finwo/assert.h"
      2 
      3 #include "src/dtype.h"
      4 
      5 void test_init() {
      6   struct dtype_value *subject;
      7   char *str = "Hello World";
      8   void *dat = strdup(str);
      9   size_t datl = strlen(str)+1;
     10 
     11   subject = dtype_init_null();
     12   ASSERT("init_null returns a valid pointer", subject != NULL                  );
     13   ASSERT("init_null returns a null value"   , dtype_type(subject) == DTYPE_NULL);
     14   dtype_free(subject);
     15 
     16   subject = dtype_init_string(str);
     17   ASSERT("init_string returns a valid pointer"  , subject != NULL                    );
     18   ASSERT("init_string returns the correct type" , dtype_type(subject) == DTYPE_STRING);
     19   ASSERT("init_string returns a cloned value"   , subject->val_string != dat         );
     20   ASSERT("init_string returns the correct value", !strcmp(str, subject->val_string)  );
     21   dtype_free(subject);
     22 
     23   subject = dtype_init_integer(12);
     24   ASSERT("init_integer returns a valid pointer"  , subject != NULL                     );
     25   ASSERT("init_integer returns the correct type" , dtype_type(subject) == DTYPE_INTEGER);
     26   ASSERT("init_integer returns the correct value", subject->val_integer == 12          );
     27   dtype_free(subject);
     28 
     29   subject = dtype_init_double(12);
     30   ASSERT("init_double returns a valid pointer"  , subject != NULL                    );
     31   ASSERT("init_double returns the correct type" , dtype_type(subject) == DTYPE_DOUBLE);
     32   ASSERT("init_double returns the correct value", subject->val_double == 12          );
     33   dtype_free(subject);
     34 
     35   subject = dtype_init_buffer((&((struct buf){ .cap = datl, .len = datl, .data = dat })) );
     36   ASSERT("init_buffer returns a valid pointer"  , subject != NULL                        );
     37   ASSERT("init_buffer returns the correct type" , dtype_type(subject) == DTYPE_BUFFER    );
     38   ASSERT("init_buffer returns a cloned value"   , subject->val_buffer->data != dat       );
     39   ASSERT("init_buffer returns the correct value", !strcmp(str, subject->val_buffer->data));
     40   dtype_free(subject);
     41 
     42   subject = dtype_init_unknown(dat);
     43   ASSERT("init_unknown returns a valid pointer"  , subject != NULL                     );
     44   ASSERT("init_unknown returns the correct type" , dtype_type(subject) == DTYPE_UNKNOWN);
     45   ASSERT("init_unknown returns a copied value"   , subject->val_unknown == dat         );
     46   dtype_free(subject);
     47 
     48   ASSERT("unknown data is untouched after free", !strcmp(dat, str));
     49 }
     50 
     51 int main() {
     52   RUN(test_init);
     53   return TEST_REPORT();
     54 }