use anyhow::*;
use grep_reader::GrepReader;
#[test]
fn test_grep() -> Result<()> {
let path = "./tests/files/multi.xyz";
let mut reader = GrepReader::try_from_path(path.as_ref())?;
let n = reader.mark(r"^\s*\d+\s*$", 2)?;
assert_eq!(n, 2);
let n = reader.mark(r"^\s*\d+\s*$", None)?;
assert_eq!(n, 6);
let _ = reader.goto_next_marker()?;
let _ = reader.goto_next_marker()?;
let mut s = String::new();
let _ = reader.read_lines(1, &mut s)?;
assert_eq!(s.trim(), "10");
let _ = reader.goto_marker(4)?;
s.clear();
reader.read_lines(1, &mut s)?;
assert_eq!(s.trim(), "16");
let _ = reader.goto_next_marker()?;
s.clear();
reader.read_lines(1, &mut s)?;
assert_eq!(s.trim(), "13");
Ok(())
}
#[test]
fn test_grep_read_until() -> Result<()> {
let path = "./tests/files/multi.xyz";
let mut reader = GrepReader::try_from_path(path.as_ref())?;
let n = reader.mark(r"^ Configuration number :", None)?;
assert_eq!(n, 6);
let mut s = String::new();
reader.read_until_next_marker(&mut s)?;
assert!(s.ends_with(" 16\r\n"));
s.clear();
reader.goto_next_marker()?;
reader.read_until_next_marker(&mut s)?;
assert!(s.starts_with(" Configuration number : 14"));
assert!(s.ends_with(" 16\r\n"));
assert_eq!(reader.current_marker(), 3);
reader.goto_marker(5)?;
s.clear();
reader.read_until_next_marker(&mut s)?;
assert!(s.starts_with(" Configuration number : 42"));
assert!(s.ends_with("0.97637 -1.60620\r\n"));
Ok(())
}