fn consume_4()

in src/session/buffer.rs [314:381]


    fn consume_4() {
        let mut buffer = Buffer::with_capacity(16);
        assert_eq!(buffer.len(), 0);
        assert_eq!(buffer.available_capacity(), 16);
        assert!(buffer.is_empty());

        let content = b"VALUE SOME_REALLY_LONG_KEY 0 1\r\n1\r\nEND\r\n";

        // buffer resizes up to 64 bytes to hold 40 bytes
        // length = 40, size = 64, capacity = 24
        buffer.extend_from_slice(content);
        assert_eq!(buffer.len(), 40);
        assert_eq!(buffer.available_capacity(), 24);
        assert!(!buffer.is_empty());

        // partial consume, len decrease, buffer shrinks by half
        // length = 32, size = 32, capacity = 0
        buffer.consume(8);
        assert_eq!(buffer.len(), 32);
        assert_eq!(buffer.available_capacity(), 0);
        assert!(!buffer.is_empty());

        // consume one more byte and we should get available capacity
        // length = 31, size = 32, capacity = 1
        buffer.consume(1);
        assert_eq!(buffer.len(), 31);
        assert_eq!(buffer.available_capacity(), 1);
        assert!(!buffer.is_empty());

        // partial consume, len decrease, buffer shrinks down to target capacity
        // length = 16, size = 16, capacity = 0
        buffer.consume(15);
        assert_eq!(buffer.len(), 16);
        assert_eq!(buffer.available_capacity(), 0);

        // from here on, buffer will not shrink below target capacity

        // consume one more byte
        // length = 15, size = 16, capacity = 0
        buffer.consume(1);
        assert_eq!(buffer.len(), 15);
        assert_eq!(buffer.available_capacity(), 1);

        // partial consume, len decrease
        // length = 8, size = 16, capacity = 8
        buffer.consume(7);
        assert_eq!(buffer.len(), 8);
        assert_eq!(buffer.available_capacity(), 8);

        // partial consume, len decrease
        // length = 7, size = 16, capacity = 9
        buffer.consume(1);
        assert_eq!(buffer.len(), 7);
        assert_eq!(buffer.available_capacity(), 9);

        // consume all but the final byte
        // partial consume, len decrease
        // length = 1, size = 16, capacity = 15
        buffer.consume(6);
        assert_eq!(buffer.len(), 1);
        assert_eq!(buffer.available_capacity(), 15);

        // consume the final byte
        // length = 0, size = 16, capacity = 16
        buffer.consume(1);
        assert_eq!(buffer.len(), 0);
        assert_eq!(buffer.available_capacity(), 16);
    }