From b474abdb9bdddd967532ee3f1d5f784b59b33e8a Mon Sep 17 00:00:00 2001 From: zypeh Date: Sat, 27 Aug 2022 13:46:44 +0800 Subject: [PATCH] Rewrite test in proptest, remove quickcheck dep --- Cargo.lock | 61 +------------ crates/flat/Cargo.toml | 5 +- crates/flat/tests/flat_test.rs | 146 ++++++++++++++----------------- crates/flat/tests/zigzag_test.rs | 32 +++---- 4 files changed, 83 insertions(+), 161 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7c83cbf8..87535bad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "aho-corasick" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" -dependencies = [ - "memchr", -] - [[package]] name = "aiken" version = "0.0.9" @@ -139,16 +130,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "129eabb7b0b78644a3a7e7cf220714aba47463bb281f69fa7a71ca5d12564cca" -[[package]] -name = "env_logger" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" -dependencies = [ - "log", - "regex", -] - [[package]] name = "fastrand" version = "1.7.0" @@ -163,8 +144,7 @@ name = "flat-rs" version = "0.0.7" dependencies = [ "anyhow", - "quickcheck", - "quickcheck_macros", + "proptest", "thiserror", ] @@ -264,12 +244,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - [[package]] name = "minicbor" version = "0.17.1" @@ -474,28 +448,6 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" -[[package]] -name = "quickcheck" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6" -dependencies = [ - "env_logger", - "log", - "rand", -] - -[[package]] -name = "quickcheck_macros" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22a693222d716a9587786f37ac3f6b4faedb5b80c23914e7303ff5a1d8016e9" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "quote" version = "1.0.18" @@ -553,17 +505,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "regex" -version = "1.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - [[package]] name = "regex-syntax" version = "0.6.26" diff --git a/crates/flat/Cargo.toml b/crates/flat/Cargo.toml index c5671fe7..f0a4fbd9 100644 --- a/crates/flat/Cargo.toml +++ b/crates/flat/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" repository = "https://github.com/txpipe/aiken/crates/flat" homepage = "https://github.com/txpipe/aiken" license = "Apache-2.0" -authors = ["Lucas Rosa ", "Kasey White "] +authors = ["Lucas Rosa ", "Kasey White " ] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -15,5 +15,4 @@ anyhow = "1.0.57" thiserror = "1.0.31" [dev-dependencies] -quickcheck = "1" -quickcheck_macros = "1" \ No newline at end of file +proptest = "1.0.0" diff --git a/crates/flat/tests/flat_test.rs b/crates/flat/tests/flat_test.rs index bedd786a..3faa5b3b 100644 --- a/crates/flat/tests/flat_test.rs +++ b/crates/flat/tests/flat_test.rs @@ -1,15 +1,14 @@ -#[cfg(test)] -extern crate quickcheck; - -#[cfg(test)] -#[macro_use(quickcheck)] -extern crate quickcheck_macros; - #[cfg(test)] mod test { use flat_rs::filler::Filler; use flat_rs::{decode, encode}; - use quickcheck::Arbitrary; + use proptest::prelude::*; + + prop_compose! { + fn arb_big_vec()(size in 255..300, element in any::()) -> Vec { + (0..size).map(|_| element).collect() + } + } #[test] fn encode_bool() { @@ -41,83 +40,70 @@ mod test { assert_eq!(decoded, 3_u8); } - #[quickcheck] - fn encode_isize(x: isize) -> bool { - let bytes = encode(&x).unwrap(); - let decoded: isize = decode(&bytes).unwrap(); - decoded == x - } - - #[quickcheck] - fn encode_usize(x: usize) -> bool { - let bytes = encode(&x).unwrap(); - let decoded: usize = decode(&bytes).unwrap(); - decoded == x - } - - #[quickcheck] - fn encode_char(c: char) -> bool { - let bytes = encode(&c).unwrap(); - let decoded: char = decode(&bytes).unwrap(); - decoded == c - } - - #[quickcheck] - fn encode_string(str: String) -> bool { - let bytes = encode(&str).unwrap(); - let decoded: String = decode(&bytes).unwrap(); - decoded == str - } - - #[quickcheck] - fn encode_vec_u8(xs: Vec) -> bool { - let bytes = encode(&xs).unwrap(); - let decoded: Vec = decode(&bytes).unwrap(); - decoded == xs - } - - #[derive(Clone, Debug)] - struct BigChunk(Vec); - - impl Arbitrary for BigChunk { - fn arbitrary(g: &mut quickcheck::Gen) -> Self { - let num_of_element = g.choose(&[257]).unwrap(); - - let vec = (0..*num_of_element).map(|_| u8::arbitrary(g)).collect(); - - BigChunk(vec) + proptest! { + #[test] + fn encode_isize(x: isize) { + let bytes = encode(&x).unwrap(); + let decoded: isize = decode(&bytes).unwrap(); + assert_eq!(decoded, x); } - } - #[quickcheck] - fn encode_big_vec_u8(xs: BigChunk) -> bool { - let xs = xs.0; - let bytes = encode(&xs).unwrap(); - let decoded: Vec = decode(&bytes).unwrap(); - decoded == xs - } + #[test] + fn encode_usize(x: usize) { + let bytes = encode(&x).unwrap(); + let decoded: usize = decode(&bytes).unwrap(); + assert_eq!(decoded, x); + } - #[quickcheck] - fn encode_arr_u8(xs: Vec) -> bool { - let bytes = encode(&xs.as_slice()).unwrap(); - let decoded: Vec = decode(&bytes).unwrap(); - decoded == xs - } + #[test] + fn encode_char(c: char) { + let bytes = encode(&c).unwrap(); + let decoded: char = decode(&bytes).unwrap(); + assert_eq!(decoded, c); + } - #[quickcheck] - fn encode_big_arr_u8(xs: BigChunk) -> bool { - let xs = xs.0; - let bytes = encode(&xs.as_slice()).unwrap(); - let decoded: Vec = decode(&bytes).unwrap(); - decoded == xs - } + #[test] + fn encode_string(str: String) { + let bytes = encode(&str).unwrap(); + let decoded: String = decode(&bytes).unwrap(); + assert_eq!(decoded, str); + } - #[quickcheck] - fn encode_boxed(c: char) -> bool { - let boxed = Box::new(c); - let bytes = encode(&boxed).unwrap(); - let decoded: char = decode(&bytes).unwrap(); - decoded == c + #[test] + fn encode_vec_u8(xs: Vec) { + let bytes = encode(&xs).unwrap(); + let decoded: Vec = decode(&bytes).unwrap(); + assert_eq!(decoded, xs); + } + + #[test] + fn encode_big_vec_u8(xs in arb_big_vec()) { + let bytes = encode(&xs).unwrap(); + let decoded: Vec = decode(&bytes).unwrap(); + assert_eq!(decoded, xs); + } + + #[test] + fn encode_arr_u8(xs: Vec) { + let bytes = encode(&xs.as_slice()).unwrap(); + let decoded: Vec = decode(&bytes).unwrap(); + assert_eq!(decoded, xs); + } + + #[test] + fn encode_big_arr_u8(xs in arb_big_vec()) { + let bytes = encode(&xs.as_slice()).unwrap(); + let decoded: Vec = decode(&bytes).unwrap(); + assert_eq!(decoded, xs); + } + + #[test] + fn encode_boxed(c: char) { + let boxed = Box::new(c); + let bytes = encode(&boxed).unwrap(); + let decoded: char = decode(&bytes).unwrap(); + assert_eq!(decoded, c); + } } #[test] diff --git a/crates/flat/tests/zigzag_test.rs b/crates/flat/tests/zigzag_test.rs index 3ef75dd4..f67acc77 100644 --- a/crates/flat/tests/zigzag_test.rs +++ b/crates/flat/tests/zigzag_test.rs @@ -1,25 +1,21 @@ -#[cfg(test)] -extern crate quickcheck; - -#[cfg(test)] -#[macro_use(quickcheck)] -extern crate quickcheck_macros; - #[cfg(test)] mod test { use flat_rs::zigzag::{to_isize, to_usize}; + use proptest::prelude::*; - #[quickcheck] - fn zigzag(i: isize) -> bool { - let u = to_usize(i); - let converted_i = to_isize(u); - converted_i == i - } + proptest! { + #[test] + fn zigzag(i: isize) { + let u = to_usize(i); + let converted_i = to_isize(u); + assert_eq!(converted_i, i); + } - #[quickcheck] - fn zagzig(u: usize) -> bool { - let i = to_isize(u); - let converted_u = to_usize(i); - converted_u == u + #[test] + fn zagzig(u: usize) { + let i = to_isize(u); + let converted_u = to_usize(i); + assert_eq!(converted_u, u); + } } }