#[cfg(feature = "std")] use std::str::FromStr; #[cfg(not(feature = "std"))] use core::str::FromStr; use assert_matches::assert_matches; use crate::{MacAddr, MacAddr6, MacAddr8}; #[test] fn test_parse_v6_upper_case_canonical_format() { let addr = MacAddr6::from_str("12-34-56-78-9A-BC"); assert!(addr.is_ok()); let addr = addr.unwrap(); assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC], addr.as_bytes()); } #[test] fn test_parse_v6_lower_case_canonical_format() { let addr = MacAddr6::from_str("ab-cd-ef-ab-cd-ef"); assert!(addr.is_ok()); let addr = addr.unwrap(); assert_eq!(&[0xAB, 0xCD, 0xEF, 0xAB, 0xCD, 0xEF], addr.as_bytes()); } #[test] fn test_parse_v6_mixed_case_canonical_format() { let addr = MacAddr6::from_str("AB-cd-Ef-Ab-cD-EF"); assert!(addr.is_ok()); let addr = addr.unwrap(); assert_eq!(&[0xAB, 0xCD, 0xEF, 0xAB, 0xCD, 0xEF], addr.as_bytes()); } #[test] fn test_parse_v6_colon_format() { let addr = MacAddr6::from_str("12:34:56:78:9A:BC"); assert!(addr.is_ok()); let addr = addr.unwrap(); assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC], addr.as_bytes()); } #[test] fn test_parse_v6_cisco_format() { let addr = MacAddr6::from_str("1234.5678.9ABC"); assert!(addr.is_ok()); let addr = addr.unwrap(); assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC], addr.as_bytes()); } #[test] fn test_parse_v8_canonical_format() { let addr = MacAddr8::from_str("12-34-56-78-9A-BC-DE-F0"); assert!(addr.is_ok()); let addr = addr.unwrap(); assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0], addr.as_bytes()); } #[test] fn test_parse_v8_colon_format() { let addr = MacAddr8::from_str("12:34:56:78:9A:BC:DE:F0"); assert!(addr.is_ok()); let addr = addr.unwrap(); assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0], addr.as_bytes()); } #[test] fn test_parse_canonical_format() { let addr = MacAddr::from_str("12-34-56-78-9A-BC-DE-F0"); assert!(addr.is_ok()); let addr = addr.unwrap(); assert_matches!(addr, MacAddr::V8(..)); assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0], addr.as_bytes()); } #[test] fn test_parse_colon_format() { let addr = MacAddr::from_str("12:34:56:78:9A:BC:DE:F0"); assert!(addr.is_ok()); let addr = addr.unwrap(); assert_matches!(addr, MacAddr::V8(..)); assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0], addr.as_bytes()); } #[test] fn test_parse_v6_empty() { let addr = MacAddr6::from_str(""); assert!(addr.is_err()); } #[test] fn test_parse_v8_empty() { let addr = MacAddr8::from_str(""); assert!(addr.is_err()); } #[test] fn test_parse_empty() { let addr = MacAddr::from_str(""); assert!(addr.is_err()); } #[test] fn test_parse_v6_partial_start() { let addr = MacAddr6::from_str("b-cd-ef-12-34-56"); assert!(addr.is_err()); } #[test] fn test_parse_v8_partial_start() { let addr = MacAddr8::from_str("b-cd-ef-12-34-56-78-9A"); assert!(addr.is_err()); } #[test] fn test_parse_v6_partial_end() { let addr = MacAddr6::from_str("ab-cd-ef-12-34-5"); assert!(addr.is_err()); } #[test] fn test_parse_v8_partial_end() { let addr = MacAddr8::from_str("ab-cd-ef-12-34-56-78-9"); assert!(addr.is_err()); } #[test] fn test_parse_v6_invalid_char() { let addr = MacAddr6::from_str("ab-Qd-ef-12-34-56"); assert!(addr.is_err()); } #[test] fn test_parse_v8_invalid_char() { let addr = MacAddr8::from_str("ab-Qd-ef-12-34-56-78-9A"); assert!(addr.is_err()); } #[test] fn test_parse_v6_different_delimiters() { let addr = MacAddr6::from_str("ab-cd:ef-12-34-56"); assert!(addr.is_err()); } #[test] fn test_parse_v8_different_delimiters() { let addr = MacAddr8::from_str("ab-cd-ef-12-34-56-78:9A"); assert!(addr.is_err()); }