Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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]);
}
Ejemplo n.º 3
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);
	}
      }
    }
  }
}