#include #include "../util.h" #include "../tuple.h" void print_label3(pair3 label) { printf("(%ld, %ld, %ld)\n", label.x, label.y, label.z); } void print_label5(pair5 label) { printf("(%ld, %ld, %ld, %ld, %ld)\n", label.x, label.y, label.z, label.u, label.v); } void print_label6(pair6 label) { printf("(%ld, %ld, %ld, %ld, %ld, %ld)\n", label.x, label.y, label.z, label.u, label.v, label.w); } int main(int UNUSED argc, char ** UNUSED argv) { NUM *lengths = NULL; SAFE_MALLOC(NUM, lengths, 3, return 1;); *lengths = 2; *(lengths+1) = 2; *(lengths+2) = 6; luple3 *l3 = new_luple3(lengths); printf("Successfully created 3 tuple!\n"); if (add_to_luple3(l3, (pair3) { 0 }, 1)) { fleprintf0("Fail to add to L3\n"); destroy_luple3(l3); goto cleanup; } if (add_to_luple3(l3, (pair3) { 0, 0, 1 }, 1)) { fleprintf0("Fail to add to L3\n"); destroy_luple3(l3); goto cleanup; } if (add_to_luple3(l3, (pair3) { 0, 0, 5 }, 1)) { fleprintf0("Fail to add to L3\n"); destroy_luple3(l3); goto cleanup; } printf("Successfully added to L3\n"); NUM *result = luple3_find(l3, (pair3) { 0 }); if (result) { printf("Successfully found value %ld for (0, 0, 0)\n", *result); } else { fleprintf0("fail to find value for (0, 0, 0)\n"); destroy_luple3(l3); goto cleanup; } /* the first is one and the rest are all zero */ result = luple3_find(l3, (pair3) { 1 }); if (result) { fleprintf("Accidentally found value %ld for (1, 0, 0)\n", *result); destroy_luple3(l3); goto cleanup; } else { printf("Fail to find value for (1, 0, 0), as expected\n"); } printf("Printing values starting from (0, 0)...\n"); luple3_map_2(l3, (pair2) { 0 }, print_label3); destroy_luple3(l3); SAFE_MALLOC(NUM, lengths, 5, goto cleanup;); for (int i = 0; i < 4;) *(lengths+i++) = 2; *(lengths+4) = 10; luple5 *l5 = new_luple5(lengths); printf("Successfully created 5 tuple!\n"); pair5 p5 = (pair5) { 1 }; if (add_to_luple5(l5, p5, 1)) { fleprintf0("Fail to add to L5\n"); destroy_luple5(l5); goto cleanup; } p5.v = 2; if (add_to_luple5(l5, p5, 1)) { fleprintf0("Fail to add to L5\n"); destroy_luple5(l5); goto cleanup; } p5.v = 9; if (add_to_luple5(l5, p5, 1)) { fleprintf0("Fail to add to L5\n"); destroy_luple5(l5); goto cleanup; } printf("Successfully added to L5\n"); printf("Printing values starting from (1, 0, 0)...\n"); luple5_map_3(l5, (pair3) { 1 }, print_label5); destroy_luple5(l5); SAFE_MALLOC(NUM, lengths, 6, return 1;); for (int i = 0; i < 5;) *(lengths+i++) = 2; *(lengths+5) = 10; luple6 *l6 = new_luple6(lengths); printf("Successfully created 6 tuple!\n"); pair6 p6 = (pair6) { 1, 0, 1 }; if (add_to_luple6(l6, p6, 1)) { fleprintf0("Fail to add to L6\n"); destroy_luple6(l6); goto cleanup; } p6.w = 2; if (add_to_luple6(l6, p6, 1)) { fleprintf0("Fail to add to L6\n"); destroy_luple6(l6); goto cleanup; } p6.w = 9; if (add_to_luple6(l6, p6, 1)) { fleprintf0("Fail to add to L6\n"); destroy_luple6(l6); goto cleanup; } p6.w = 7; if (add_to_luple6(l6, p6, 1)) { fleprintf0("Fail to add to L6\n"); destroy_luple6(l6); goto cleanup; } printf("Successfully added to L6\n"); if (add_to_luple6_pt_2(l6, (pair2) { 0 })) { fleprintf0("Fail to add partially to L6\n"); destroy_luple6(l6); goto cleanup; } printf("Successfully added partially to L6\n"); result = luple6_find(l6, p6); if (result) { printf("Successfully found value %ld for " "(1, 0, 1, 0, 0, 0)\n", *result); } else { fleprintf0("fail to find value for " "(1, 0, 1, 0, 0, 0)\n"); destroy_luple6(l6); goto cleanup; } result = luple6_find(l6, (pair6) { 1, 4 }); if (result) { fleprintf("Accidentally found value %ld for " "(1, 4, 0, 0, 0, 0)\n", *result); destroy_luple6(l6); goto cleanup; } else { printf("Fail to find value for " "(1, 4, 0, 0, 0, 0), as expected\n"); } if (luple6_pf_2(l6, (pair2) { 1 })) { printf("Successfully detected existence of (1, 0)\n"); } else { fleprintf0("fail to detect existence of (1, 0)\n"); destroy_luple6(l6); goto cleanup; } if (luple6_pf_2(l6, (pair2) { 1, 1 })) { fleprintf0("Accidentally detected existence of (1, 1)\n"); destroy_luple6(l6); goto cleanup; } else { printf("Fail to detect existence of (1, 0), as expected\n"); } if (luple6_pf_2(l6, (pair2) { 0 })) { printf("Successfully detected partial existence of (0, 0)\n"); } else { fleprintf0("fail to detect partial existence of (0, 0)\n"); destroy_luple6(l6); goto cleanup; } printf("Printing values starting from (1, 0) under 7...\n"); luple6_map_2(l6, (pair2) { 1 }, 7, print_label6); printf("Printing values starting from (1, 0) under 2...\n"); luple6_map_2(l6, (pair2) { 1 }, 2, print_label6); printf("Printing values starting from (1, 0) under 9...\n"); luple6_map_2(l6, (pair2) { 1 }, 9, print_label6); printf("Printing values starting from (1, 0, 1, 0, 0)...\n"); luple6_map_5(l6, (pair5) { 1, 0, 1 }, print_label6); destroy_luple6(l6); return 0; cleanup: return 1; }