From e89c220b5634315193603e35c12cb1d1df61f456 Mon Sep 17 00:00:00 2001 From: Pascal Seitz Date: Wed, 31 Aug 2022 11:57:13 +0200 Subject: [PATCH 1/2] custom num strategy, faster test closes #1486 faster test with rand values --- fastfield_codecs/src/lib.rs | 32 ++++++++++++++++++++++---------- fastfield_codecs/src/linear.rs | 9 +++++---- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/fastfield_codecs/src/lib.rs b/fastfield_codecs/src/lib.rs index ccba50065..6fc043071 100644 --- a/fastfield_codecs/src/lib.rs +++ b/fastfield_codecs/src/lib.rs @@ -121,8 +121,9 @@ impl<'a> From<&'a [u64]> for VecColum<'a> { #[cfg(test)] mod tests { - use proptest::arbitrary::any; - use proptest::proptest; + use proptest::prelude::*; + use proptest::strategy::Strategy; + use proptest::{prop_oneof, proptest}; use crate::bitpacked::BitpackedCodec; use crate::blockwise_linear::BlockwiseLinearCodec; @@ -153,21 +154,32 @@ mod tests { } proptest! { + #![proptest_config(ProptestConfig::with_cases(100))] #[test] - fn test_proptest_small(data in proptest::collection::vec(any::(), 1..10)) { - create_and_validate::(&data, "proptest linearinterpol"); - create_and_validate::(&data, "proptest multilinearinterpol"); - create_and_validate::(&data, "proptest bitpacked"); - } - - #[test] - fn test_proptest_large(data in proptest::collection::vec(any::(), 1..6000)) { + fn test_proptest_small(data in proptest::collection::vec(num_strategy(), 1..10)) { + create_and_validate::(&data, "proptest linearinterpol"); + create_and_validate::(&data, "proptest multilinearinterpol"); + create_and_validate::(&data, "proptest bitpacked"); + } + } + + proptest! { + #![proptest_config(ProptestConfig::with_cases(10))] + #[test] + fn test_proptest_large(data in proptest::collection::vec(num_strategy(), 1..6000)) { create_and_validate::(&data, "proptest linearinterpol"); create_and_validate::(&data, "proptest multilinearinterpol"); create_and_validate::(&data, "proptest bitpacked"); } } + fn num_strategy() -> impl Strategy { + prop_oneof![ + 1 => prop::num::u64::ANY.prop_map(|num| u64::MAX - (num % 10) ), + 1 => prop::num::u64::ANY.prop_map(|num| num % 10 ), + 20 => prop::num::u64::ANY, + ] + } pub fn get_codec_test_datasets() -> Vec<(Vec, &'static str)> { let mut data_and_names = vec![]; diff --git a/fastfield_codecs/src/linear.rs b/fastfield_codecs/src/linear.rs index f656b628f..e3d2aac75 100644 --- a/fastfield_codecs/src/linear.rs +++ b/fastfield_codecs/src/linear.rs @@ -258,6 +258,8 @@ fn distance + Ord>(x: T, y: T) -> T { #[cfg(test)] mod tests { + use rand::RngCore; + use super::*; use crate::tests::get_codec_test_datasets; @@ -340,10 +342,9 @@ mod tests { #[test] fn linear_interpol_fast_field_rand() { - for _ in 0..5000 { - let mut data = (0..10_000) - .map(|_| rand::random::()) - .collect::>(); + let mut rng = rand::thread_rng(); + for _ in 0..50 { + let mut data = (0..10_000).map(|_| rng.next_u64()).collect::>(); create_and_validate(&data, "random"); data.reverse(); create_and_validate(&data, "random"); From d3dd620048be09698d44ea7171be527bf0566ceb Mon Sep 17 00:00:00 2001 From: Pascal Seitz Date: Wed, 31 Aug 2022 13:13:56 +0200 Subject: [PATCH 2/2] fix clippy --- fastfield_codecs/src/blockwise_linear.rs | 1 + fastfield_codecs/src/linear.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/fastfield_codecs/src/blockwise_linear.rs b/fastfield_codecs/src/blockwise_linear.rs index 64dde9b45..da342eb78 100644 --- a/fastfield_codecs/src/blockwise_linear.rs +++ b/fastfield_codecs/src/blockwise_linear.rs @@ -289,6 +289,7 @@ impl FastFieldCodec for BlockwiseLinearCodec { /// estimation for linear interpolation is hard because, you don't know /// where the local maxima are for the deviation of the calculated value and /// the offset is also unknown. + #[allow(clippy::question_mark)] fn estimate(fastfield_accessor: &impl Column) -> Option { if fastfield_accessor.num_vals() < 10 * CHUNK_SIZE { return None; diff --git a/fastfield_codecs/src/linear.rs b/fastfield_codecs/src/linear.rs index e3d2aac75..32dd43ec7 100644 --- a/fastfield_codecs/src/linear.rs +++ b/fastfield_codecs/src/linear.rs @@ -193,6 +193,7 @@ impl FastFieldCodec for LinearCodec { /// estimation for linear interpolation is hard because, you don't know /// where the local maxima for the deviation of the calculated value are and /// the offset to shift all values to >=0 is also unknown. + #[allow(clippy::question_mark)] fn estimate(fastfield_accessor: &impl Column) -> Option { if fastfield_accessor.num_vals() < 3 { return None; // disable compressor for this case