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