pub mod random;
pub mod sharing;
pub mod types;
pub use types::*;
#[cfg(test)]
mod tests {
use itertools::Itertools;
use typenum::{Unsigned, U5};
use crate::{
algebra::elliptic_curve::{Curve25519Ristretto, ScalarField},
correlated_randomness::singlets::Singlets,
random::{Random, RandomWith},
sharing::Verifiable,
};
pub type Fq = ScalarField<Curve25519Ristretto>;
#[test]
fn test_random_singlets() {
let n_parties = 3;
type NSamples = U5;
let mut rng = crate::random::test_rng();
let random_singlets: Vec<_> = Singlets::<Fq, NSamples>::random_n(&mut rng, n_parties);
Singlets::verify_all(random_singlets).unwrap();
}
#[test]
fn test_collect_singlets() {
let n_parties = 3;
type NSamples = U5;
let mut rng = crate::random::test_rng();
let random_singlet = Singlets::<Fq, NSamples>::random_with(&mut rng, n_parties);
let collected_singlets = random_singlet.clone().into_iter().collect_vec();
assert_eq!(collected_singlets.len(), NSamples::USIZE);
for (i, singlet) in collected_singlets.iter().enumerate().take(NSamples::USIZE) {
assert_eq!(
singlet.0.get_value().to_owned(),
random_singlet.0.get_value()[i]
);
}
}
#[test]
fn test_iter_singlets() {
let n_parties = 3;
type NSamples = U5;
let mut rng = crate::random::test_rng();
let singlets = Singlets::<Fq, NSamples>::random_n::<Vec<_>>(&mut rng, n_parties)[0].clone();
let collected_singlets = singlets
.clone()
.into_iter()
.collect::<Singlets<Fq, NSamples>>();
assert_eq!(collected_singlets.0, singlets.0);
}
#[test]
fn test_ref_iter_singlets() {
let n_parties = 3;
type NSamples = U5;
let mut rng = crate::random::test_rng();
let singlets = Singlets::<Fq, NSamples>::random_n::<Vec<_>>(&mut rng, n_parties)[0].clone();
let collected_singlets = (&singlets).into_iter().collect::<Singlets<Fq, NSamples>>();
assert_eq!(collected_singlets.0, singlets.0);
}
#[test]
fn test_into_parallel_iter() {
use rayon::prelude::*;
let n_parties = 3;
type NSamples = U5;
let mut rng = crate::random::test_rng();
let singlets = Singlets::<Fq, NSamples>::random_n::<Vec<_>>(&mut rng, n_parties)[0].clone();
let collected_singlets = singlets.clone().into_par_iter().collect::<Vec<_>>();
let collected_singlets = Singlets::<Fq, NSamples>::from_iter(collected_singlets);
assert_eq!(collected_singlets.0, singlets.0);
}
}