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); } }
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; }