/* * Test sum and difference of triples */ static void test_add_diff(dl_vartable_t *table) { uint32_t i, j, n; dl_triple_t test; dl_triple_t test2; poly_buffer_t buffer; init_poly_buffer(&buffer); q_init(&test.constant); q_init(&test2.constant); n = table->nvars; for (i=0; i<n; i++) { for (j=0; j<n; j++) { printf("Testing sum: var!%"PRIu32" + var!%"PRIu32":\n", i, j); printf("--> var!%"PRIu32" : ", i); print_dl_triple(dl_var_triple(table, i)); printf("\n"); printf("--> var!%"PRIu32" : ", j); print_dl_triple(dl_var_triple(table, j)); printf("\n"); test_sum_buffer(table, &buffer, i, j, &test2); test_sum(table, i, j, &test); printf("\n"); printf("Testing diff: var!%"PRIu32" - var!%"PRIu32":\n", i, j); printf("--> var!%"PRIu32" : ", i); print_dl_triple(dl_var_triple(table, i)); printf("\n"); printf("--> var!%"PRIu32" : ", j); print_dl_triple(dl_var_triple(table, j)); printf("\n"); test_diff_buffer(table, &buffer, i, j, &test2); test_diff(table, i, j, &test); printf("\n"); } } q_clear(&test.constant); q_clear(&test2.constant); delete_poly_buffer(&buffer); }
/* * Print u + its descriptor */ void print_idl_var_def(FILE *f, idl_solver_t *solver, thvar_t u) { dl_vartable_t *vtbl; vtbl = &solver->vtbl; print_idl_var_name(f, u); if (0 <= u && u < vtbl->nvars) { fputs(" := ", f); print_idl_triple(f, dl_var_triple(vtbl, u)); } else { fputs(" ???", f); } }
/* * Test hash consing: add a random triple in table */ static void test_random_triple(dl_vartable_t *table) { dl_triple_t *check; dl_triple_t test; int32_t x, y; test.target = random_vertex(6); test.source = random_vertex(6); q_init(&test.constant); random_rational(&test.constant); if (test.target == test.source) { test.target = nil_vertex; test.source = nil_vertex; } printf("Test: add triple "); print_dl_triple(&test); printf("\n"); x = get_dl_var(table, &test); printf(" ---> var = %"PRId32"\n", x); check = dl_var_triple(table, x); if (check->target == test.target && check->source == test.source && q_eq(&check->constant, &test.constant)) { printf("Checking descriptor: OK\n"); } else { printf("BUG: invalid descriptor for var %"PRId32"\n", x); fflush(stdout); exit(1); } y = get_dl_var(table, &test); if (x == y) { printf("Checking hash-consing: OK\n"); } else { printf("BUG: hash-consing fails for var %"PRId32"\n", x); fflush(stdout); exit(1); } printf("\n"); q_clear(&test.constant); }
/* * Print table */ static void print_dl_vartable(dl_vartable_t *table) { uint32_t i, n; printf("DL vartable %p\n", table); printf(" nvars = %"PRIu32"\n", table->nvars); printf(" size = %"PRIu32"\n", table->size); n = table->nvars; if (n == 0) { printf(" empty table\n"); } else { printf(" content:\n"); for (i=0; i<n; i++) { printf(" var[%"PRIu32"]: ", i); print_dl_triple(dl_var_triple(table, i)); printf("\n"); } } printf("\n"); }