From 645d3f8d22136d58d65f034fc15ea748d751eb96 Mon Sep 17 00:00:00 2001 From: Alexander van Ratingen <470642+alvra@users.noreply.github.com> Date: Thu, 21 Apr 2022 22:16:02 +0200 Subject: Initial commit --- tests/src/lib.rs | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 tests/src/lib.rs (limited to 'tests/src/lib.rs') diff --git a/tests/src/lib.rs b/tests/src/lib.rs new file mode 100644 index 0000000..c60fbc5 --- /dev/null +++ b/tests/src/lib.rs @@ -0,0 +1,130 @@ +#[cfg(test)] +mod tests { + use generate_random::GenerateRandom; + + fn rng() -> impl rand::Rng { + use rand::SeedableRng; + rand_chacha::ChaCha8Rng::from(rand_chacha::ChaCha8Core::from_seed([37; 32])) + } + + fn repeat(count: usize, f: impl FnMut() -> T) -> Vec { + std::iter::repeat_with(f).take(count).collect() + } + + #[derive(GenerateRandom, PartialEq, Eq, Debug)] + enum TestEnumUnit { + Left, + #[weight(2)] + Right, + } + + #[derive(GenerateRandom, PartialEq, Eq, Debug)] + enum TestEnumUnnamed { + Left(u8), + #[weight(2)] + Right(bool), + } + + #[derive(GenerateRandom, PartialEq, Eq, Debug)] + enum TestEnumNamed { + Left { x: u8 }, + #[weight(2)] + Right { y: bool }, + } + + #[derive(GenerateRandom, PartialEq, Eq, Debug)] + struct TestStructUnit; + + #[derive(GenerateRandom, PartialEq, Eq, Debug)] + struct TestStructUnnamed(u8, i32); + + #[derive(GenerateRandom, PartialEq, Eq, Debug)] + struct TestStructNamed { + x: u8, + y: i32, + } + + #[test] + fn test_enum_unit() { + let mut rng = rng(); + assert_eq!( + repeat( + 6, + || TestEnumUnit::generate_random(&mut rng), + ), + vec![ + TestEnumUnit::Right, + TestEnumUnit::Right, + TestEnumUnit::Left, + TestEnumUnit::Right, + TestEnumUnit::Right, + TestEnumUnit::Right, + ]); + } + + #[test] + fn test_enum_unnamed() { + let mut rng = rng(); + assert_eq!( + repeat( + 6, + || TestEnumUnnamed::generate_random(&mut rng), + ), + vec![ + TestEnumUnnamed::Right(false), + TestEnumUnnamed::Left(142), + TestEnumUnnamed::Right(false), + TestEnumUnnamed::Right(true), + TestEnumUnnamed::Right(false), + TestEnumUnnamed::Left(19), + ]); + } + + #[test] + fn test_enum_named() { + let mut rng = rng(); + assert_eq!( + repeat( + 6, + || TestEnumNamed::generate_random(&mut rng), + ), + vec![ + TestEnumNamed::Right { y: false }, + TestEnumNamed::Left { x: 142 }, + TestEnumNamed::Right { y: false }, + TestEnumNamed::Right { y: true }, + TestEnumNamed::Right { y: false }, + TestEnumNamed::Left { x: 19 }, + ]); + } + + #[test] + fn test_struct_unit() { + let mut rng = rng(); + assert_eq!( + TestStructUnit::generate_random(&mut rng), + TestStructUnit + ); + } + + #[test] + fn test_struct_unnamed() { + let mut rng = rng(); + assert_eq!( + TestStructUnnamed::generate_random(&mut rng), + TestStructUnnamed(55, -896102575) + ); + } + + #[test] + fn test_struct_named() { + let mut rng = rng(); + assert_eq!( + TestStructNamed::generate_random(&mut rng), + TestStructNamed { + x: 55, + y: -896102575, + } + ); + } +} -- cgit v1.2.3