ju_tcs_tbop_24_pyzik/
lib.rs1use 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}