From c1825d87a3c9f62231fb69673c4d93398a3b75de Mon Sep 17 00:00:00 2001 From: IshanGrover2004 Date: Thu, 18 Jul 2024 09:53:22 +0530 Subject: [PATCH] feat: Add test `lib_ccxr/time/units.rs` --- src/rust/lib_ccxr/src/time/units.rs | 145 ++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) diff --git a/src/rust/lib_ccxr/src/time/units.rs b/src/rust/lib_ccxr/src/time/units.rs index 5b34f5c5b..34d620827 100644 --- a/src/rust/lib_ccxr/src/time/units.rs +++ b/src/rust/lib_ccxr/src/time/units.rs @@ -643,3 +643,148 @@ impl GopTimeCode { ) } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_timestamp_from_millis() { + let ts = Timestamp::from_millis(5000); + assert_eq!(ts.millis(), 5000); + assert_eq!(ts.seconds(), 5); + } + + #[test] + fn test_timestamp_from_hms_millis() { + let ts = Timestamp::from_hms_millis(1, 30, 45, 500).unwrap(); + assert_eq!(ts.millis(), 5445500); + + // Out of range case + assert!(matches!( + Timestamp::from_hms_millis(1, 60, 0, 0), + Err(TimestampError::InputOutOfRangeError) + )); + } + + #[test] + fn test_timestamp_as_sec_millis() { + let ts = Timestamp::from_millis(5445500); + assert_eq!(ts.as_sec_millis().unwrap(), (5445, 500)); + + let ts = Timestamp::from_millis(0); + assert_eq!(ts.as_sec_millis().unwrap(), (0, 0)); + + let ts = Timestamp::from_millis(1000); + assert_eq!(ts.as_sec_millis().unwrap(), (1, 0)); + + let ts = Timestamp::from_millis(-1000); + assert!(ts.as_sec_millis().is_err()); + } + + #[test] + fn test_timestamp_as_hms_millis() { + let ts = Timestamp::from_millis(5445500); + assert_eq!(ts.as_hms_millis().unwrap(), (1, 30, 45, 500)); + + let ts = Timestamp::from_millis(0); + assert_eq!(ts.as_hms_millis().unwrap(), (0, 0, 0, 0)); + + let ts = Timestamp::from_millis(3600000); + assert_eq!(ts.as_hms_millis().unwrap(), (1, 0, 0, 0)); + + let ts = Timestamp::from_millis(-1); + assert!(ts.as_hms_millis().is_err()); + } + + #[test] + fn test_timestamp_to_srt_time() { + let ts = Timestamp::from_millis(5445500); + assert_eq!(ts.to_srt_time().unwrap(), "01:30:45,500"); + + let ts = Timestamp::from_millis(0); + assert_eq!(ts.to_srt_time().unwrap(), "00:00:00,000"); + + let ts = Timestamp::from_millis(3661001); + assert_eq!(ts.to_srt_time().unwrap(), "01:01:01,001"); + + let ts = Timestamp::from_millis(-1); + assert!(ts.to_srt_time().is_err()); + } + + #[test] + fn test_timestamp_to_vtt_time() { + let ts = Timestamp::from_millis(5445500); + assert_eq!(ts.to_vtt_time().unwrap(), "01:30:45.500"); + + let ts = Timestamp::from_millis(0); + assert_eq!(ts.to_vtt_time().unwrap(), "00:00:00.000"); + + let ts = Timestamp::from_millis(3661001); + assert_eq!(ts.to_vtt_time().unwrap(), "01:01:01.001"); + + let ts = Timestamp::from_millis(-1); + assert!(ts.to_vtt_time().is_err()); + } + + #[test] + fn test_timestamp_to_hms_millis_time() { + let ts = Timestamp::from_millis(5445500); + assert_eq!(ts.to_hms_millis_time(':').unwrap(), "01:30:45:500"); + + let ts = Timestamp::from_millis(0); + assert_eq!(ts.to_hms_millis_time('.').unwrap(), "00:00:00.000"); + + let ts = Timestamp::from_millis(-3661001); + assert_eq!(ts.to_hms_millis_time(':').unwrap(), "-01:01:01:001"); + + let ts = Timestamp::from_millis(1); + assert_eq!(ts.to_hms_millis_time(':').unwrap(), "00:00:00:001"); + } + + #[test] + fn test_timestamp_to_ctime() { + let ts = Timestamp::from_millis(5445500); + assert_eq!(ts.to_ctime().unwrap(), "Thu Jan 01 01:30:45 1970"); + + let ts = Timestamp::from_millis(0); + assert_eq!(ts.to_ctime().unwrap(), "Thu Jan 01 00:00:00 1970"); + + let ts = Timestamp::from_millis(31536000000); // 1 year later + assert_eq!(ts.to_ctime().unwrap(), "Fri Jan 01 00:00:00 1971"); + + let ts = Timestamp::from_millis(-1); + assert!(ts.to_ctime().is_err()); + } + + #[test] + fn test_timestamp_parse_optional_hhmmss_from_str() { + assert_eq!( + Timestamp::parse_optional_hhmmss_from_str("01:30:45").unwrap(), + Timestamp::from_millis(5445000) + ); + assert_eq!( + Timestamp::parse_optional_hhmmss_from_str("30:45").unwrap(), + Timestamp::from_millis(1845000) + ); + + // Error cases + assert!(matches!( + Timestamp::parse_optional_hhmmss_from_str("01:60:00"), + Err(TimestampError::InputOutOfRangeError) + )); + assert!(matches!( + Timestamp::parse_optional_hhmmss_from_str("01:30:45:00"), + Err(TimestampError::ParsingError) + )); + } + + #[test] + fn test_timestamp_arithmetic() { + let ts1 = Timestamp::from_millis(5000); + let ts2 = Timestamp::from_millis(3000); + assert_eq!((ts1 + ts2).millis(), 8000); + assert_eq!((ts1 - ts2).millis(), 2000); + assert_eq!((-ts1).millis(), -5000); + } +}