From 176c77d60297f36085be6201f8db5f9da3a1f6a5 Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Tue, 18 Jul 2017 11:18:42 -0600 Subject: [PATCH] Random encoding/decoding tests for `PrimeFieldRepr`. Closes #3. --- src/bls12_381/fq.rs | 5 +++++ src/bls12_381/fr.rs | 5 +++++ src/lib.rs | 1 + src/tests/mod.rs | 1 + src/tests/repr.rs | 21 +++++++++++++++++++++ 5 files changed, 33 insertions(+) create mode 100644 src/tests/repr.rs diff --git a/src/bls12_381/fq.rs b/src/bls12_381/fq.rs index 00b0405..e7be0ec 100644 --- a/src/bls12_381/fq.rs +++ b/src/bls12_381/fq.rs @@ -1750,3 +1750,8 @@ fn test_fq_ordering() { assert!(Fq::from_repr(FqRepr::from(i+1)).unwrap() > Fq::from_repr(FqRepr::from(i)).unwrap()); } } + +#[test] +fn fq_repr_tests() { + ::tests::repr::random_repr_tests::(); +} diff --git a/src/bls12_381/fr.rs b/src/bls12_381/fr.rs index c321b76..63cc264 100644 --- a/src/bls12_381/fr.rs +++ b/src/bls12_381/fr.rs @@ -1453,3 +1453,8 @@ fn fr_field_tests() { ::tests::field::random_sqrt_tests::(); ::tests::field::random_frobenius_tests::(Fr::char(), 13); } + +#[test] +fn fr_repr_tests() { + ::tests::repr::random_repr_tests::(); +} diff --git a/src/lib.rs b/src/lib.rs index 04bde0f..ca38451 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -332,6 +332,7 @@ pub trait PrimeFieldRepr: Sized + Ord + Send + Sync + + Default + fmt::Debug + fmt::Display + 'static + diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 2cb00a7..cf00add 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -1,3 +1,4 @@ pub mod curve; pub mod field; pub mod engine; +pub mod repr; diff --git a/src/tests/repr.rs b/src/tests/repr.rs new file mode 100644 index 0000000..b0c119c --- /dev/null +++ b/src/tests/repr.rs @@ -0,0 +1,21 @@ +use rand::{SeedableRng, XorShiftRng}; +use ::{PrimeFieldRepr}; + +pub fn random_repr_tests() { + random_encoding_tests::(); +} + +fn random_encoding_tests() { + let mut rng = XorShiftRng::from_seed([0x5dbe6259, 0x8d313d76, 0x3237db17, 0xe5bc0654]); + + for _ in 0..1000 { + let r = R::rand(&mut rng); + let mut rdecoded = R::default(); + + let mut v: Vec = vec![]; + r.write_be(&mut v).unwrap(); + rdecoded.read_be(&v[0..]).unwrap(); + + assert_eq!(r, rdecoded); + } +}