ju_tcs_tbop_24_pyzik/
lib.rs

1use std::path::Path;
2use std::fs::read_to_string;
3
4
5pub fn head(path: &Path, n: usize) -> Vec<String> {
6    let mut result = Vec::new();
7
8    for line in read_to_string(path).unwrap().lines() {
9        result.push(line.to_string())
10    }
11
12    let len = result.len();
13    if len < n {
14        panic!("file too short!");
15    }
16
17    result[0..n].to_vec()
18}
19
20pub fn tail(path: &Path, n: usize) -> Vec<String> {
21    let mut result = Vec::new();
22
23    for line in read_to_string(path).unwrap().lines() {
24        result.push(line.to_string())
25    }
26
27    let len = result.len();
28    if len < n {
29        panic!("file too short!");
30    }
31
32    result[len-n..].to_vec()
33}
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38
39    #[test]
40    fn test_head() {
41        let path = Path::new("test_data/file.txt");
42        assert_eq!(head(path, 2), vec!["aaa", "bbb"]);
43    }
44
45    #[test]
46    fn test_tail() {
47        let path = Path::new("test_data/file.txt");
48        assert_eq!(tail(path, 2), vec!["bbb", "ccc"]);
49    }
50}