Example #1
0
rci_t mzed_echelonize(mzed_t *A, int full) {
	if (A->finite_field->degree > A->nrows) {
		return mzed_echelonize_naive(A, full);
	} else if ((A->nrows * A->ncols * A->w <= 2*__M4RIE_PLE_CUTOFF)) {
		return mzed_echelonize_newton_john(A, full);
	} else {
		return mzed_echelonize_ple(A, full);
	}
}
Example #2
0
int test_equality(gf2e *ff, rci_t m, rci_t n) {
  int fail_ret = 0;
  mzed_t *A0 = random_mzed_t(ff, m, n);
  mzed_t *A1 = mzed_copy(NULL, A0);
  mzed_t *A2 = mzed_copy(NULL, A0);
  mzed_t *A3 = mzed_copy(NULL, A0);

  mzed_set_canary(A1);
  mzed_set_canary(A2);
  mzed_set_canary(A3);

  const rci_t r0 = mzed_echelonize_newton_john(A0,1);
  const rci_t r1 = mzed_echelonize_naive(A1,1);
  const rci_t r2 = mzed_echelonize(A2,1);
  const rci_t r3 = mzed_echelonize_ple(A3,1);

  m4rie_check( r0 == r1);
  m4rie_check( mzed_cmp(A0, A1) == 0);

  m4rie_check( r1 == r2);
  m4rie_check( mzed_cmp(A1, A2) == 0);

  m4rie_check( r2 == r3);
  m4rie_check( mzed_cmp(A2, A3) == 0);
  m4rie_check( r3 == r0);
  m4rie_check( mzed_cmp(A3, A0) == 0);

  m4rie_check( mzed_canary_is_alive(A0) );
  m4rie_check( mzed_canary_is_alive(A1) );
  m4rie_check( mzed_canary_is_alive(A2) );
  m4rie_check( mzed_canary_is_alive(A3) );

  mzed_free(A0);
  mzed_free(A1);
  mzed_free(A2);
  mzed_free(A3);

  return fail_ret;
}