From 91f2f7e7228ef439a02946c03adb6d3716f01dab Mon Sep 17 00:00:00 2001 From: Pascal Seitz Date: Wed, 24 Aug 2022 16:26:07 +0200 Subject: [PATCH] add proptest to ff codecs --- fastfield_codecs/Cargo.toml | 1 + fastfield_codecs/src/lib.rs | 30 +++++++++++++++++++++--------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/fastfield_codecs/Cargo.toml b/fastfield_codecs/Cargo.toml index 9be6d4551..e62455b1a 100644 --- a/fastfield_codecs/Cargo.toml +++ b/fastfield_codecs/Cargo.toml @@ -17,6 +17,7 @@ rand = {version="0.8.3", optional= true} [dev-dependencies] more-asserts = "0.3.0" +proptest = "1.0.0" rand = "0.8.3" [features] diff --git a/fastfield_codecs/src/lib.rs b/fastfield_codecs/src/lib.rs index c97dfe6ea..0641f144c 100644 --- a/fastfield_codecs/src/lib.rs +++ b/fastfield_codecs/src/lib.rs @@ -124,6 +124,9 @@ impl FastFieldDataAccess for Vec { #[cfg(test)] mod tests { + use proptest::arbitrary::any; + use proptest::proptest; + use crate::bitpacked::{BitpackedFastFieldReader, BitpackedFastFieldSerializer}; use crate::linearinterpol::{LinearInterpolFastFieldReader, LinearInterpolFastFieldSerializer}; use crate::multilinearinterpol::{ @@ -155,6 +158,24 @@ mod tests { } (estimation, actual_compression) } + + proptest! { + #[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)) { + create_and_validate::(&data, "proptest linearinterpol"); + create_and_validate::(&data, "proptest multilinearinterpol"); + create_and_validate::(&data, "proptest bitpacked"); + } + + } + pub fn get_codec_test_data_sets() -> Vec<(Vec, &'static str)> { let mut data_and_names = vec![]; @@ -201,15 +222,6 @@ mod tests { } use super::*; - pub fn stats_from_vec(data: &[u64]) -> FastFieldStats { - let min_value = data.iter().cloned().min().unwrap_or(0); - let max_value = data.iter().cloned().max().unwrap_or(0); - FastFieldStats { - min_value, - max_value, - num_vals: data.len() as u64, - } - } #[test] fn estimation_good_interpolation_case() {