#include #include "test_header.cuh" #include "cuelim_m4ri.cuh" using namespace gf2; bool test_gf2_elim_interface(size_t rank, size_t rank_col, size_t nrows, size_t ncols, uint_fast32_t seed) { assert(rank <= nrows && rank <= rank_col && rank_col <= ncols); MatGF2 rdc(rank, ncols); rdc.randomize(rank_col, seed); MatGF2 mix(nrows, rank); mix.randomize(seed); MatGF2 src = mix * rdc; mzd_t *A_m4ri = mzd_init(src.nrows, src.ncols); mzdwrite(src, A_m4ri); mzd_t *A_m4ri_copy = mzd_copy(NULL, A_m4ri); base_t rank_interface = gpu_mzd_elim(A_m4ri); rci_t rank_m4rie = mzd_echelonize_m4ri(A_m4ri_copy, 1, 8); return (rank_interface == rank_m4rie) && (mzd_cmp(A_m4ri, A_m4ri_copy) == 0); } TEST(TestM4riInterface, Small) { uint_fast32_t seed = 41921095; EXPECT_TRUE(test_gf2_elim_interface(5, 7, 6, 8, seed)); } TEST(TestM4riInterface, Mediem) { uint_fast32_t seed = 41921095; EXPECT_TRUE(test_gf2_elim_interface(50, 70, 60, 80, seed)); EXPECT_TRUE(test_gf2_elim_interface(500, 700, 600, 800, seed)); }