示例#1
0
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;
}
示例#2
0
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;
}