//////////////////////////////// // 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); }