use std::io::{Cursor, Write};
use std::iter;
use partial_io::{PartialOp, PartialWrite};
use crate::stream::decode_all;
use crate::stream::write::{Decoder, Encoder};
#[test]
fn test_cycle() {
let input = b"Abcdefghabcdefgh";
let buffer = Cursor::new(Vec::new());
let mut encoder = Encoder::new(buffer, 1).unwrap();
encoder.write_all(input).unwrap();
let encoded = encoder.finish().unwrap().into_inner();
let buffer = Cursor::new(Vec::new());
let mut decoder = Decoder::new(buffer).unwrap();
decoder.write_all(&encoded).unwrap();
decoder.flush().unwrap();
let decoded = decoder.into_inner().into_inner();
assert_eq!(input, &decoded[..]);
}
#[test]
fn test_partial_write_flush() {
let input = vec![b'b'; 128 * 1024];
let mut z = setup_partial_write(&input);
z.flush().unwrap();
let buf = z.finish().unwrap().into_inner();
assert_eq!(&decode_all(&buf[..]).unwrap(), &input);
}
#[test]
fn test_partial_write_finish() {
let input = vec![b'b'; 128 * 1024];
let z = setup_partial_write(&input);
let buf = z.finish().unwrap().into_inner();
assert_eq!(&decode_all(&buf[..]).unwrap(), &input);
}
fn setup_partial_write(input_data: &[u8]) -> Encoder<PartialWrite<Vec<u8>>> {
let buf =
PartialWrite::new(Vec::new(), iter::repeat(PartialOp::Limited(1)));
let mut z = Encoder::new(buf, 1).unwrap();
z.write(input_data).unwrap();
{
let inner = &mut z.writer;
assert_ne!(inner.offset(), inner.buffer().len());
}
z
}