use crate::{track::Track, Tracks};
use std::collections::HashMap;
pub struct RocketPlayer {
tracks: HashMap<Box<str>, Track>,
}
impl RocketPlayer {
pub fn new(tracks: Tracks) -> Self {
let tracks: HashMap<Box<str>, Track> = tracks
.into_iter()
.map(|track| (String::from(track.get_name()).into_boxed_str(), track))
.collect();
Self { tracks }
}
pub fn get_track(&self, name: &str) -> Option<&Track> {
self.tracks.get(name)
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::interpolation::Interpolation;
use crate::track::Key;
fn get_test_tracks() -> Tracks {
vec![
{
let mut track = Track::new("test1");
track.set_key(Key::new(0, 1.0, Interpolation::Step));
track.set_key(Key::new(5, 0.0, Interpolation::Step));
track.set_key(Key::new(10, 1.0, Interpolation::Step));
track
},
{
let mut track = Track::new("test2");
track.set_key(Key::new(0, 2.0, Interpolation::Step));
track.set_key(Key::new(5, 0.0, Interpolation::Step));
track.set_key(Key::new(10, 2.0, Interpolation::Step));
track
},
]
}
#[test]
fn finds_all_tracks() {
let tracks = get_test_tracks();
let player = RocketPlayer::new(tracks);
assert_eq!(player.get_track("test1").unwrap().get_value(0.), 1.0);
assert_eq!(player.get_track("test2").unwrap().get_value(0.), 2.0);
}
#[test]
fn no_surprise_tracks() {
let tracks = get_test_tracks();
let player = RocketPlayer::new(tracks);
assert!(player
.get_track("hello this track should not exist")
.is_none());
}
}