/* Test for the prime field arithmetic Copyright 2024 Ahmet Inan */ #include #include #include #include #include #include "prime_field.hh" template void exhaustive_test() { assert(std::is_unsigned::value); assert(std::numeric_limits::max() / (PRIME-1) >= (PRIME-1)); typedef CODE::PrimeField PF; for (TYPE a = 0; a < PRIME; ++a) for (TYPE b = 0; b < PRIME; ++b) assert((PF(a) * PF(b))() == (a * b) % PRIME); for (TYPE a = 1; a < PRIME; ++a) assert(rcp(PF(a)) * PF(a) == PF(1)); for (TYPE a = 0; a < PRIME; ++a) for (TYPE b = 0; b < PRIME; ++b) assert((PF(a) + PF(b))() == (a + b) % PRIME); for (TYPE a = 0; a < PRIME; ++a) for (TYPE b = 0; b < PRIME; ++b) assert((PF(a) - PF(b))() == (a - b + PRIME) % PRIME); } int main() { exhaustive_test(); exhaustive_test(); std::cerr << "Prime field arithmetic test passed!" << std::endl; return 0; }