Skip to content

Commit

Permalink
Add time to duration tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Methapon2001 committed Nov 24, 2024
1 parent 77896cc commit 94a8197
Showing 1 changed file with 43 additions and 3 deletions.
46 changes: 43 additions & 3 deletions src/decoder/symphonia.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,9 +170,7 @@ impl Source for SymphoniaDecoder {

#[inline]
fn total_duration(&self) -> Option<Duration> {
self.total_duration.map(|Time { seconds, frac }| {
Duration::new(seconds, if frac > 0.0 { (1f64 / frac) as u32 } else { 0 })
})
self.total_duration.map(time_to_duration)
}

fn try_seek(&mut self, pos: Duration) -> Result<(), source::SeekError> {
Expand Down Expand Up @@ -306,6 +304,17 @@ fn skip_back_a_tiny_bit(
Time { seconds, frac }
}

fn time_to_duration(time: Time) -> Duration {
Duration::new(
time.seconds,
if time.frac > 0.0 {
(1f64 / time.frac) as u32
} else {
0
},
)
}

impl Iterator for SymphoniaDecoder {
type Item = i16;

Expand All @@ -332,3 +341,34 @@ impl Iterator for SymphoniaDecoder {
Some(sample)
}
}

#[cfg(test)]
mod tests {
use std::time::Duration;

use symphonia::core::units::Time;

use crate::decoder::symphonia::time_to_duration;

#[test]
fn test_time_to_dur_zero_frac() {
let time = Time {
seconds: 7,
frac: 0.0,
};
let duration = Duration::new(7, 0);

assert_eq!(time_to_duration(time), duration);
}

#[test]
fn test_time_to_dur_non_zero_frac() {
let time = Time {
seconds: 7,
frac: 0.3,
};
let duration = Duration::new(7, (1.0 / 0.3) as u32);

assert_eq!(time_to_duration(time), duration);
}
}

0 comments on commit 94a8197

Please sign in to comment.