use fp::f2_element::F2Element;
use fp::field_ops::FieldOps;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn zero_is_zero() {
assert!(bool::from(F2Element::ZERO.is_zero()));
}
#[test]
fn one_is_one() {
assert!(bool::from(F2Element::ONE.is_one()));
}
#[test]
fn inv_zero_is_none() {
assert!(bool::from(F2Element::zero().invert().is_none()));
}
#[test]
fn degree_is_one() {
assert_eq!(F2Element::degree(), 1);
}
#[test]
fn characteristic_is_2() {
assert_eq!(F2Element::characteristic(), vec![2u64]);
}
#[test]
fn add_mod_2() {
assert_eq!(
F2Element::from_u64(0) + F2Element::from_u64(1),
F2Element::ONE
);
assert_eq!(
F2Element::from_u64(1) + F2Element::from_u64(1),
F2Element::ZERO
);
}
#[test]
fn mul_mod_2() {
assert_eq!(
F2Element::from_u64(0) * F2Element::from_u64(0),
F2Element::ZERO
);
assert_eq!(
F2Element::from_u64(0) * F2Element::from_u64(1),
F2Element::ZERO
);
assert_eq!(
F2Element::from_u64(1) * F2Element::from_u64(1),
F2Element::ONE
);
}
#[test]
fn neg_mod_2() {
assert_eq!(F2Element::ONE.negate(), F2Element::ONE);
}
#[test]
fn inv_mod_2() {
assert_eq!(F2Element::ONE.invert().unwrap(), F2Element::ONE);
}
}