fn test_serialized_size_does_not_exceed_constraint()

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
            );
        }
    }