1
2use regex::Regex;
3
4pub fn build_regex() -> Regex {
5 Regex::new(r"^(?<stem>(?:.*\D)?)(?<num>\d+)(?<ext>(?:\..*)?)$").unwrap()
6}
7
8#[cfg(test)]
9mod tests {
10 use super::*;
11
12 #[test]
13 fn digit_in_extension() {
14 let regex = build_regex();
15 let s = "test2.3dv";
16 let caps = regex.captures(s).unwrap();
17 assert_eq!("test", &caps["stem"]);
18 assert_eq!("2", &caps["num"]);
19 assert_eq!(".3dv", &caps["ext"]);
20 }
21
22 #[test]
23 fn basic() {
24 let regex = build_regex();
25 let s = "test2.txt";
26 let caps = regex.captures(s).unwrap();
27 assert_eq!("test", &caps["stem"]);
28 assert_eq!("2", &caps["num"]);
29 assert_eq!(".txt", &caps["ext"]);
30 }
31
32 #[test]
33 fn many_digits() {
34 let regex = build_regex();
35 let s = "some1other5test2.3dv";
36 let caps = regex.captures(s).unwrap();
37 assert_eq!("some1other5test", &caps["stem"]);
38 assert_eq!("2", &caps["num"]);
39 assert_eq!(".3dv", &caps["ext"]);
40 }
41
42 #[test]
43 fn no_extension() {
44 let regex = build_regex();
45 let s = "some1other5test2";
46 let caps = regex.captures(s).unwrap();
47 assert_eq!("some1other5test", &caps["stem"]);
48 assert_eq!("2", &caps["num"]);
49 assert_eq!("", &caps["ext"]);
50 }
51
52 #[test]
53 fn one_period_extension() {
54 let regex = build_regex();
55 let s = "some1other5test2.";
56 let caps = regex.captures(s).unwrap();
57 assert_eq!("some1other5test", &caps["stem"]);
58 assert_eq!("2", &caps["num"]);
59 assert_eq!(".", &caps["ext"]);
60 }
61
62 #[test]
63 fn start_with_number() {
64 let regex = build_regex();
65 let s = "0some1other5test2.t";
66 let caps = regex.captures(s).unwrap();
67 assert_eq!("0some1other5test", &caps["stem"]);
68 assert_eq!("2", &caps["num"]);
69 assert_eq!(".t", &caps["ext"]);
70 }
71
72 #[test]
73 fn just_number_with_extension() {
74 let regex = build_regex();
75 let s = "01.t";
76 let caps = regex.captures(s).unwrap();
77 assert_eq!("", &caps["stem"]);
78 assert_eq!("01", &caps["num"]);
79 assert_eq!(".t", &caps["ext"]);
80 }
81
82 #[test]
83 fn just_number() {
84 let regex = build_regex();
85 let s = "01";
86 let caps = regex.captures(s).unwrap();
87 assert_eq!("", &caps["stem"]);
88 assert_eq!("01", &caps["num"]);
89 assert_eq!("", &caps["ext"]);
90 }
91}