ju_tcs_tbop_24_ganacci/
lib.rs

1use std::{fs::File, io::{BufRead, BufReader}, path::Path};
2
3fn extract(path: &Path) -> Vec<String> {
4    let file = File::open(path).unwrap();
5    let reader = BufReader::new(file);
6    let mut lines = Vec::new();
7    for line in reader.lines() {
8        lines.push(line.unwrap());
9    }
10    lines
11}
12
13
14pub fn tail(path: &Path, n: usize) -> Vec<String> {
15    let lines = extract(path);
16    let length = lines.len();
17    extract(path)[length-n..length].to_vec()
18}
19pub fn head(path: &Path, n: usize) -> Vec<String> {
20    extract(path)[0..n].to_vec()
21}
22
23#[cfg(test)]
24mod tests { 
25    use std::path::Path;
26
27    use crate::{tail, head};
28    #[test]
29    fn test_head() {
30        let file = Path::new("./test_files/simple_file.txt");
31        assert_eq!(head(file, 3), vec!["a", "b", "c"])
32    }
33
34    #[test]
35    fn test_tail() {
36        let file = Path::new("./test_files/simple_file.txt");
37        assert_eq!(tail(file, 3), vec!["f", "g", "h"])
38    }
39}