int main (int argc, char *argv[]) { int filter; int width; int height; schro_init(); for(filter=0;filter<=SCHRO_WAVELET_DAUBECHIES_9_7;filter++){ printf("Filter %d:\n", filter); fwd_test(filter, 20, 20); inv_test(filter, 20, 20); } for(width = 2; width <= 40; width+=2) { for(height = 2; height <= 40; height+=2) { printf("Size %dx%d:\n", width, height); for(filter=0;filter<=SCHRO_WAVELET_DAUBECHIES_9_7;filter++){ printf(" filter %d:\n", filter); fwd_random_test(filter, width, height); inv_random_test(filter, width, height); fwd_random_test_s32(filter, width, height); inv_random_test_s32(filter, width, height); } } } return fail; }
int main(int argc, char *argv[]) { int i, k, t; u8 *test_mat, *save_mat, *invr_mat; u8 test1[] = { 1, 1, 6, 1, 1, 1, 7, 1, 9 }; u8 test2[] = { 0, 1, 6, 1, 0, 1, 0, 1, 9 }; u8 test3[] = { 0, 0, 1, 1, 0, 0, 0, 1, 1 }; u8 test4[] = { 0, 1, 6, 7, 1, 1, 0, 0, 0, 1, 2, 3, 3, 2, 2, 3 }; // = row3+3*row2 printf("gf_inverse_test: max=%d ", KMAX); test_mat = malloc(KMAX * KMAX); save_mat = malloc(KMAX * KMAX); invr_mat = malloc(KMAX * KMAX); if (NULL == test_mat || NULL == save_mat || NULL == invr_mat) return -1; // Test with lots of leading 1's k = 3; memcpy(test_mat, test1, k * k); if (inv_test(test_mat, invr_mat, save_mat, k)) return -1; // Test with leading zeros k = 3; memcpy(test_mat, test2, k * k); if (inv_test(test_mat, invr_mat, save_mat, k)) return -1; // Test 3 k = 3; memcpy(test_mat, test3, k * k); if (inv_test(test_mat, invr_mat, save_mat, k)) return -1; // Test 4 - try a singular matrix k = 4; memcpy(test_mat, test4, k * k); if (!gf_invert_matrix(test_mat, invr_mat, k)) { printf("Fail: didn't catch singular matrix\n"); print_matrix(test4, 4); return -1; } // Do random test of size KMAX k = KMAX; for (i = 0; i < k * k; i++) test_mat[i] = save_mat[i] = rand(); if (gf_invert_matrix(test_mat, invr_mat, k)) { printf("rand picked a singular matrix, try again\n"); return -1; } matrix_mult(invr_mat, save_mat, test_mat, k); if (is_ident(test_mat, k)) { printf("fail\n"); print_matrix(save_mat, k); print_matrix(invr_mat, k); print_matrix(test_mat, k); return -1; } // Do Randoms. Random size and coefficients for (t = 0; t < RANDOMS; t++) { k = rand() % KMAX; for (i = 0; i < k * k; i++) test_mat[i] = save_mat[i] = rand(); if (gf_invert_matrix(test_mat, invr_mat, k)) continue; matrix_mult(invr_mat, save_mat, test_mat, k); if (is_ident(test_mat, k)) { printf("fail rand k=%d\n", k); print_matrix(save_mat, k); print_matrix(invr_mat, k); print_matrix(test_mat, k); return -1; } if (0 == (t % 8)) putchar('.'); } printf(" Pass\n"); return 0; }