in math/src/field/f128/tests.rs [62:101]
fn mul() {
// identity
let r: BaseElement = rand_value();
assert_eq!(BaseElement::ZERO, r * BaseElement::ZERO);
assert_eq!(r, r * BaseElement::ONE);
// test multiplication within bounds
assert_eq!(
BaseElement::from(15u8),
BaseElement::from(5u8) * BaseElement::from(3u8)
);
// test overflow
let m = BaseElement::MODULUS;
let t = BaseElement::from(m - 1);
assert_eq!(BaseElement::ONE, t * t);
assert_eq!(BaseElement::from(m - 2), t * BaseElement::from(2u8));
assert_eq!(BaseElement::from(m - 4), t * BaseElement::from(4u8));
let t = (m + 1) / 2;
assert_eq!(
BaseElement::ONE,
BaseElement::from(t) * BaseElement::from(2u8)
);
// test random values
let v1: Vec<BaseElement> = rand_vector(1000);
let v2: Vec<BaseElement> = rand_vector(1000);
for i in 0..v1.len() {
let r1 = v1[i];
let r2 = v2[i];
let expected = (r1.to_big_uint() * r2.to_big_uint()) % BigUint::from(M);
let expected = BaseElement::from_big_uint(expected);
if expected != r1 * r2 {
assert_eq!(expected, r1 * r2, "failed for: {} * {}", r1, r2);
}
}
}