0
Fork 0
data-structures-lesson1/aritynode.test.c

58 lines
2.3 KiB
C

////////////////////////////////
// Arity Node Sanity Test Function
MR4TH_SYMBOL void
ds_aritynode__test(void){
ArenaTemp scratch = arena_get_scratch(0, 0);
DS_ArityNode *a_empty = ds_aritynode_empty(scratch.arena);
DS_ArityNode *a_s1 = ds_aritynode_singleton(scratch.arena);
DS_ArityNode *a_s2 = ds_aritynode_paste(scratch.arena, a_s1, a_s1);
DS_ArityNode *a_s3 = ds_aritynode_paste(scratch.arena, a_s2, a_s1);
DS_ArityNode *a_ar1 = ds_aritynode_arrow(scratch.arena, a_s1, a_s1);
Assert(ds_aritynode_equal(a_empty, a_empty));
Assert(ds_aritynode_equal(a_s1, a_s1));
Assert(ds_aritynode_equal(a_s2, a_s2));
Assert(ds_aritynode_equal(a_s3, a_s3));
Assert(ds_aritynode_equal(a_ar1, a_ar1));
Assert(!ds_aritynode_equal(a_empty, a_s1));
Assert(!ds_aritynode_equal(a_s1, a_s2));
Assert(!ds_aritynode_equal(a_ar1, a_s1));
DS_ArityNode *a_s2x = ds_aritynode_sum(scratch.arena, 2, a_s1, 0);
DS_ArityNode *a_s3x = ds_aritynode_sum(scratch.arena, 3, a_s1, 0);
Assert(ds_aritynode_equal(a_s2, a_s2x));
Assert(ds_aritynode_equal(a_s3, a_s3x));
DS_ArityNode *a_s1_ar1 = ds_aritynode_paste(scratch.arena, a_s1, a_ar1);
DS_ArityNode *a_s2_ar1 = ds_aritynode_paste(scratch.arena, a_s1_ar1, a_s1);
DS_ArityNode *a_s2_ar1_x = ds_aritynode_paste(scratch.arena, a_s2, a_ar1);
Assert(ds_aritynode_equal(a_s2_ar1, a_s2_ar1_x));
DS_ArityNode *a_ar1_2 = ds_aritynode_arrow(scratch.arena, a_s1, a_s2);
DS_ArityNode *a_ar1_3 = ds_aritynode_arrow(scratch.arena, a_s1, a_s3);
DS_ArityNode *a_ar_ar1 = ds_aritynode_arrow(scratch.arena, a_ar1, a_ar1);
DS_ArityNode *a_ar_ar2 = ds_aritynode_arrow(scratch.arena, a_ar1, a_ar1_2);
DS_ArityNode *a_ar_ar3 = ds_aritynode_arrow(scratch.arena, a_ar1, a_ar1_3);
Assert(!ds_aritynode_equal(a_ar1, a_ar_ar1));
Assert(!ds_aritynode_equal(a_ar_ar1, a_ar_ar2));
Assert(!ds_aritynode_equal(a_ar_ar1, a_ar_ar3));
Assert(!ds_aritynode_equal(a_ar_ar2, a_ar_ar3));
DS_ArityNode *a_ar1x = ds_aritynode_sum(scratch.arena, 1, a_ar1, 3, a_empty, 1, a_empty, 0);
Assert(ds_aritynode_equal(a_ar1, a_ar1x));
DS_ArityNode *a_s17 = ds_aritynode_sum(scratch.arena, 17, a_s1, 0);
DS_ArityNode *a_s17x = ds_aritynode_ktuple(scratch.arena, 17);
Assert(ds_aritynode_equal(a_s17, a_s17x));
arena_release_scratch(&scratch);
}