in testsuite/src/lib.rs [880:943]
fn test_serialized_size_does_not_exceed_constraint() {
#[derive(Clone, NewFuzzed, Mutatable, BinarySerialize, Debug)]
struct Foo {
#[lain(min = 0, max = 1000)]
a: Vec<u16>,
#[lain(min = 0, max = 1000)]
b: Vec<u16>,
}
#[derive(Clone, NewFuzzed, Mutatable, BinarySerialize, Debug)]
struct Bar {
#[lain(min = 0, max = 1000)]
foo: Vec<u16>,
#[lain(min = 0, max = 1000)]
b: Vec<u16>,
}
#[derive(Clone, NewFuzzed, Mutatable, BinarySerialize, Debug)]
struct Baz {
bar: Vec<Bar>,
}
const MAX_SIZE: usize = 21;
let mut constraints = Constraints::new();
constraints.max_size(MAX_SIZE);
let mut mutator = get_mutator();
let mut obj = Foo::new_fuzzed(&mut mutator, Some(&constraints));
for i in 0..1000 {
obj = Foo::new_fuzzed(&mut mutator, Some(&constraints));
assert!(obj.serialized_size() <= MAX_SIZE);
let prev_obj = obj.clone();
obj.mutate(&mut mutator, Some(&constraints));
assert!(
obj.serialized_size() <= MAX_SIZE,
"max_size: {}, object_size: {}, obj {:?}, prev: {:?}",
MAX_SIZE,
obj.serialized_size(),
obj,
prev_obj
);
}
let mut baz = Baz::new_fuzzed(&mut mutator, Some(&constraints));
for i in 0..1000 {
baz = Baz::new_fuzzed(&mut mutator, Some(&constraints));
assert!(baz.serialized_size() <= MAX_SIZE);
let prev_baz = baz.clone();
baz.mutate(&mut mutator, Some(&constraints));
assert!(
baz.serialized_size() <= MAX_SIZE,
"max_size: {}, obj {:?}, prev: {:?}",
MAX_SIZE,
baz,
prev_baz
);
}
}