MCPcopy Create free account
hub / github.com/cel-rust/cel-rust / arbitrary_value

Function arbitrary_value

fuzz/fuzz_targets/value_binop.rs:39–86  ·  view source on GitHub ↗
(
    u: &mut arbitrary::Unstructured<'_>,
    mut depth: u32,
)

Source from the content-addressed store, hash-verified

37}
38
39fn arbitrary_value(
40 u: &mut arbitrary::Unstructured<'_>,
41 mut depth: u32,
42) -> arbitrary::Result<Value> {
43 if u.is_empty() {
44 if depth > 0 {
45 return Err(arbitrary::Error::NotEnoughData);
46 }
47 depth += 1;
48 }
49
50 Ok(
51 match (u64::from(<u32 as arbitrary::Arbitrary>::arbitrary(u)?) * 11u64) >> 32 {
52 0u64 => {
53 let length = <u8 as arbitrary::Arbitrary>::arbitrary(u)?;
54 let mut list = Vec::with_capacity(length as usize);
55 for _ in 0..length {
56 list.push(arbitrary_value(u, depth)?);
57 }
58 Value::List(Arc::new(list))
59 }
60 1u64 => {
61 let length = <u8 as arbitrary::Arbitrary>::arbitrary(u)?;
62 let mut map = HashMap::with_capacity(length as usize);
63 for _ in 0..length {
64 map.insert(arbitrary_key(u)?, arbitrary_value(u, depth)?);
65 }
66 Value::Map(Map { map: Arc::new(map) })
67 }
68 2u64 => Value::Int(arbitrary::Arbitrary::arbitrary(u)?),
69 3u64 => Value::UInt(arbitrary::Arbitrary::arbitrary(u)?),
70 4u64 => Value::Float(arbitrary::Arbitrary::arbitrary(u)?),
71 5u64 => Value::String(arbitrary::Arbitrary::arbitrary(u)?),
72 6u64 => Value::Bytes(arbitrary::Arbitrary::arbitrary(u)?),
73 7u64 => Value::Bool(arbitrary::Arbitrary::arbitrary(u)?),
74 8u64 => Value::Duration(chrono::Duration::nanoseconds(
75 arbitrary::Arbitrary::arbitrary(u)?,
76 )),
77 9u64 => Value::Timestamp(
78 chrono::Utc
79 .timestamp_nanos(arbitrary::Arbitrary::arbitrary(u)?)
80 .into(),
81 ),
82 10u64 => Value::Null,
83 _ => unreachable!(),
84 },
85 )
86}
87
88fn arbitrary_key(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result<Key> {
89 Ok(

Callers 1

arbitraryMethod · 0.85

Calls 10

arbitrary_keyFunction · 0.85
MapClass · 0.85
IntClass · 0.85
UIntClass · 0.85
StringClass · 0.85
BytesClass · 0.85
BoolClass · 0.85
pushMethod · 0.80
DurationClass · 0.50
TimestampClass · 0.50

Tested by

no test coverage detected