58 lines
2.3 KiB
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);
|
|
}
|