clia_macaddr/
lib.rs

1mod range;
2mod validate;
3
4pub use range::count_addresses_between;
5pub use range::count_addresses_between_str;
6pub use range::get_addresses_between;
7pub use range::get_addresses_between_str;
8pub use range::get_addresses_between_str_as_strings;
9pub use validate::is_valid_mac_addr;
10pub use validate::parse_mac_addr;
11
12use mac_address::MacAddress;
13
14/// Format MAC address to standard format (aa:bb:cc:dd:ee:ff)
15pub fn format_mac_addr(addr: &MacAddress) -> String {
16    addr.to_string().to_lowercase()
17}
18
19#[cfg(test)]
20mod tests {
21    use super::*;
22
23    #[test]
24    fn test_parse_mac_addr() {
25        let addr = parse_mac_addr("aa:bb:cc:dd:ee:ff").unwrap();
26        assert_eq!(format_mac_addr(&addr), "aa:bb:cc:dd:ee:ff");
27    }
28
29    #[test]
30    fn test_is_valid_mac_addr() {
31        assert!(is_valid_mac_addr("aa:bb:cc:dd:ee:ff"));
32        assert!(!is_valid_mac_addr("invalid"));
33    }
34
35    #[test]
36    fn test_count_addresses_between() {
37        let addr1 = parse_mac_addr("00:00:00:00:00:00").unwrap();
38        let addr2 = parse_mac_addr("00:00:00:00:00:01").unwrap();
39        assert_eq!(count_addresses_between(&addr1, &addr2), 2);
40
41        // Test reverse order
42        assert_eq!(count_addresses_between(&addr2, &addr1), 2);
43    }
44
45    #[test]
46    fn test_larger_range() {
47        let addr1 = parse_mac_addr("00:00:00:00:00:00").unwrap();
48        let addr2 = parse_mac_addr("00:00:00:00:00:ff").unwrap();
49        assert_eq!(count_addresses_between(&addr1, &addr2), 256);
50    }
51
52    #[test]
53    fn test_count_addresses_between_str() {
54        // Test with string parameters
55        let count = count_addresses_between_str("00:00:00:00:00:00", "00:00:00:00:00:01").unwrap();
56        assert_eq!(count, 2);
57
58        // Test reverse order
59        let count = count_addresses_between_str("00:00:00:00:00:01", "00:00:00:00:00:00").unwrap();
60        assert_eq!(count, 2);
61
62        // Test larger range
63        let count = count_addresses_between_str("00:00:00:00:00:00", "00:00:00:00:00:ff").unwrap();
64        assert_eq!(count, 256);
65
66        // Test with invalid MAC address
67        assert!(count_addresses_between_str("invalid", "00:00:00:00:00:01").is_err());
68    }
69
70    #[test]
71    fn test_get_addresses_between() {
72        let addr1 = parse_mac_addr("00:00:00:00:00:00").unwrap();
73        let addr2 = parse_mac_addr("00:00:00:00:00:01").unwrap();
74        let addresses = get_addresses_between(&addr1, &addr2);
75        assert_eq!(addresses.len(), 2);
76        assert_eq!(addresses[0].to_string().to_lowercase(), "00:00:00:00:00:00");
77        assert_eq!(addresses[1].to_string().to_lowercase(), "00:00:00:00:00:01");
78    }
79
80    #[test]
81    fn test_get_addresses_between_str() {
82        let addresses =
83            get_addresses_between_str("00:00:00:00:00:00", "00:00:00:00:00:01").unwrap();
84        assert_eq!(addresses.len(), 2);
85        assert_eq!(addresses[0].to_string().to_lowercase(), "00:00:00:00:00:00");
86        assert_eq!(addresses[1].to_string().to_lowercase(), "00:00:00:00:00:01");
87
88        // Test invalid
89        assert!(get_addresses_between_str("invalid", "00:00:00:00:00:01").is_err());
90    }
91
92    #[test]
93    fn test_get_addresses_between_str_as_strings() {
94        let addresses =
95            get_addresses_between_str_as_strings("00:00:00:00:00:00", "00:00:00:00:00:01").unwrap();
96        assert_eq!(addresses.len(), 2);
97        assert_eq!(addresses[0], "00:00:00:00:00:00");
98        assert_eq!(addresses[1], "00:00:00:00:00:01");
99
100        // Test invalid
101        assert!(get_addresses_between_str_as_strings("invalid", "00:00:00:00:00:01").is_err());
102    }
103}