diff --git a/Makefile b/Makefile index f853c85..0a2dfd2 100644 --- a/Makefile +++ b/Makefile @@ -71,12 +71,16 @@ TESTS != printf '%s\n' "$(TESTFILES)" | xargs -n1 basename \ include $(TESTFILES) .PHONY: test -test: all $(TESTS) /tmp/getopt +test: all $(TESTS) /tmp/delimit /tmp/getopt @echo $(TESTS) + /tmp/delimit /tmp/getopt +/tmp/delimit: src/libdelimit.rs + $(RUSTC) --test -o $@ src/libdelimit.rs + /tmp/getopt: src/libgetopt.rs - $(RUSTC) --test -o /tmp/getopt src/libgetopt.rs + $(RUSTC) --test -o $@ src/libgetopt.rs .PHONY: docs docs: docs/ build diff --git a/src/fop.rs b/src/fop.rs index 9b0ea83..948b5c2 100644 --- a/src/fop.rs +++ b/src/fop.rs @@ -92,7 +92,7 @@ fn main() -> ExitCode { exit(usage(&argv[0]).into()); }); - let stdin = Box::new(stdin().lock()); + let stdin = stdin().lock(); let mut input = Delimited::new(stdin, d.clone().as_bytes()); let mut n = 0; diff --git a/src/libdelimit.rs b/src/libdelimit.rs index 777fb96..d55066c 100644 --- a/src/libdelimit.rs +++ b/src/libdelimit.rs @@ -23,14 +23,14 @@ use std::{ const BUFFER_SIZE: usize = 4096; -pub struct Delimited { - stream: Box, +pub struct Delimited { delimiter: Vec, - buffer: Vec + buffer: Vec, + stream: T, } -impl Delimited { - pub fn new(stream: Box, delimiter: &[u8]) -> Self { +impl Delimited where T: Read { + pub fn new(stream: T, delimiter: &[u8]) -> Self { Delimited { stream, delimiter: delimiter.to_vec(), @@ -39,7 +39,7 @@ impl Delimited { } } -impl Iterator for Delimited { +impl Iterator for Delimited where T: Read { type Item = Result>; fn next(&mut self) -> Option { @@ -89,3 +89,23 @@ fn find_subslice(stack: &[u8], key: &[u8]) -> Option { None } + +#[cfg(test)] +mod tests { + use Delimited; + + #[test] + fn testing() { + let d = '\u{1E}'.to_string(); + let input = vec!["meow", "woof", "ribbit"]; + let r = input.join(&d); + + let mut output = Delimited::new(r.as_bytes(), d.as_bytes()); + + let mut i = 0; + while let Some(item) = output.next() { + assert_eq!(input[i].as_bytes(), item.unwrap()); + i += 1; + } + } +}