int main(void) { type_t tau; init_type_table(&types, 0); init_variables(); init_types(); // pair(A) = (tuple A A) tau = pair_type(var[0], var[0]); test_macro("pair", 1, var, tau); // triple(B) = (tuple B B B) tau = triple_type(var[1], var[1], var[1]); test_macro("triple", 1, var+1, tau); // test(C, D) = bool test_macro("test", 2, var+2, base[0]); // fun(E, F) = (-> (tuple E E) F) tau = pair_type(var[4], var[4]); tau = function_type(&types, var[5], 1, &tau); test_macro("fun", 2, var+4, tau); // two constructors test_constructor("mk_type2", 2); test_constructor("mk_type3", 3); printf("\n====== TYPES ========\n"); print_type_table(stdout, &types); printf("\n===== MACROS ========\n"); print_type_macros(stdout, &types); printf("===\n\n"); // creation after remove // vector[G] = (-> int G) tau = int_type(&types); tau = function_type(&types, var[6], 1, &tau); test_macro("vector", 1, var+6, tau); // matrix[H] = (-> int int H) tau = int_type(&types); tau = binary_ftype(tau, tau, var[7]); test_macro("matrix", 1, var+7, tau); printf("\n====== TYPES ========\n"); print_type_table(stdout, &types); printf("\n===== MACROS ========\n"); print_type_macros(stdout, &types); printf("===\n\n"); delete_type_table(&types); return 0; }
/* * Create some types: this must be called after init_variables */ static void init_types(void) { base[0] = bool_type(&types); base[1] = int_type(&types); base[2] = real_type(&types); base[3] = var[0]; base[4] = var[1]; base[5] = var[2]; base[6] = pair_type(base[1], base[1]); base[7] = triple_type(var[3], base[0], var[3]); base[8] = binary_ftype(base[2], base[2], base[0]); base[9] = binary_ftype(var[4], var[5], base[0]); base[10] = ternary_ftype(base[1], base[1], base[1], base[2]); base[11] = ternary_ftype(base[2], base[2], base[2], base[0]); }
/* * TEST3: triples */ static void test_triples(uint32_t threshold) { uint32_t i, j, k; type_t tau; printf("*******************\n" "* TRIPLE TYPES *\n" "*******************\n" "\n"); for (i=0; i<NUM_BASE_TYPES; i++) { for (j=0; j<NUM_BASE_TYPES; j++) { for (k=0; k<NUM_BASE_TYPES; k++) { tau = triple_type(base[i], base[j], base[k]); if (type_card(&types, tau) < threshold) { test_enum_type(tau); } } } } }