diff options
author | Vincent Ambo <mail@tazj.in> | 2023-01-07T12·23+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2023-01-17T10·20+0000 |
commit | 940251b87f9d73087e2f51411fff9eba84a7108e (patch) | |
tree | 381815a37cabe3fe24b51d4d64bb213907eb3b0e /tvix/eval/src/value/attrs.rs | |
parent | f27f5ef0c990c3cab9182437bb76593be9b0a0fd (diff) |
refactor(tvix/value): use proptest strategies from imbl crate r/5670
Instead of going through Vec/BTreeMap for generating our internal types, use the proptest strategies from imbl. The one thing I couldn't figure out in the previous implementation is where the ranges/sizes of generated collections came from. The strategies in proptest use different types (Range, with an unknown default value, and SizeRange with 0..100). I've opted to specify 0..100 directly, but we can probably make it configurable. Change-Id: I749bc4c703fe424099240cab822b1642e5216361 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7791 Autosubmit: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
Diffstat (limited to 'tvix/eval/src/value/attrs.rs')
-rw-r--r-- | tvix/eval/src/value/attrs.rs | 34 |
1 files changed, 2 insertions, 32 deletions
diff --git a/tvix/eval/src/value/attrs.rs b/tvix/eval/src/value/attrs.rs index 6515fb515a5d..10d071720219 100644 --- a/tvix/eval/src/value/attrs.rs +++ b/tvix/eval/src/value/attrs.rs @@ -24,7 +24,7 @@ use super::Value; mod tests; #[derive(Clone, Debug, Deserialize)] -enum AttrsRep { +pub(super) enum AttrsRep { Empty, Im(OrdMap<NixString, Value>), @@ -92,7 +92,7 @@ impl AttrsRep { #[repr(transparent)] #[derive(Clone, Debug, Default)] -pub struct NixAttrs(AttrsRep); +pub struct NixAttrs(pub(super) AttrsRep); impl<K, V> FromIterator<(K, V)> for NixAttrs where @@ -192,36 +192,6 @@ impl<'de> Deserialize<'de> for NixAttrs { } } -#[cfg(feature = "arbitrary")] -mod arbitrary { - use super::*; - use std::collections::BTreeMap; - - use proptest::prelude::*; - use proptest::prop_oneof; - use proptest::strategy::{BoxedStrategy, Just, Strategy}; - - impl Arbitrary for NixAttrs { - type Parameters = <BTreeMap<NixString, Value> as Arbitrary>::Parameters; - - type Strategy = BoxedStrategy<Self>; - - fn arbitrary_with(args: Self::Parameters) -> Self::Strategy { - prop_oneof![ - Just(Self(AttrsRep::Empty)), - ( - any_with::<Value>(args.2.clone()), - any_with::<Value>(args.2.clone()) - ) - .prop_map(|(name, value)| Self(AttrsRep::KV { name, value })), - any_with::<BTreeMap<NixString, Value>>(args) - .prop_map(|map| Self::from_iter(map.into_iter())) - ] - .boxed() - } - } -} - impl NixAttrs { pub fn empty() -> Self { Self(AttrsRep::Empty) |