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 }