/* Database tests */ #include "test.h" int main(void) { int idx, count = 0; vdatabase *d; vhash *rec; viter i; TEST_START("database"); TEST("creation", (d = vd_create()) != NULL); TEST("add field", vd_field_add(d, "DAY", "Day", V_FIELD_NUMBER) == 0); TEST("add more fields", vd_field_add(d, "MON", NULL, V_FIELD_MONTH) && vd_field_add(d, "WHO", "Person", V_FIELD_STRING)); TEST("find field index", (idx = vd_field_index(d, "MON")) == 1); TEST("set field attributes", vd_field_set_align(d, idx, V_ALIGN_RIGHT) && vd_field_set_width(d, idx, 3) && vd_field_set_desc(d, idx, "Month")); rec = vh_create(); vh_sstore(rec, "WHO", "Glenn"); vh_sstore(rec, "MON", "Aug"); vh_istore(rec, "DAY", 17); TEST("add record", vd_record_add(d, rec)); vh_istore(rec, "DAY", 22); vh_sstore(rec, "WHO", "Viv"); TEST("add another record", vd_record_add(d, rec)); TEST("field count", vd_field_count(d) == 3); TEST("record count", vd_record_count(d) == 2); count = 0; v_iterate(d, i) { rec = vd_iter_rec(i); count += vh_iget(rec, "DAY"); } TEST("iteration", count == 39); TEST("freeze", v_freeze_file(d, TEST_OUTPUT)); TEST("destroy", (vd_destroy(d), 1)); TEST_NOFAIL("thaw", (d = v_thaw_file(TEST_OUTPUT)) != NULL); TEST("write", v_write_file(d, TEST_OUTPUT)); TEST("destroy again", (vd_destroy(d), 1)); TEST("read", (d = v_read_file(TEST_OUTPUT)) != NULL); TEST("import RDB", (d = vd_import_file(V_FORMAT_RDB, TEST_INPUT)) != NULL); TEST("sort records", vd_record_sort(d, "MON", 0, "NUM", 1, NULL) == 2); TEST("select fields", vd_field_select(d, "NUM", "STR", NULL) == 2); TEST("select records", vd_record_select(d, "NUM gt 400 and STR ne null") == 2); TEST("calculate new field", vd_field_add(d, "BIGNUM", "Bigger number", V_FIELD_NUMBER) && vd_field_calculate(d, "BIGNUM = NUM + 1000 + recnum") == 2); TEST("export RDB", vd_export_file(d, V_FORMAT_RDB, TEST_OUTPUT)); TEST_FINISH; }