Skip to content

Commit

Permalink
add resource storage tests
Browse files Browse the repository at this point in the history
  • Loading branch information
tesselode committed May 10, 2024
1 parent 3ec7efe commit ac4edd7
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 0 deletions.
3 changes: 3 additions & 0 deletions crates/kira/src/manager/backend/resources.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ pub(crate) mod modulators;
pub(crate) mod sounds;
pub(crate) mod spatial_scenes;

#[cfg(test)]
mod test;

use std::sync::Mutex;

use crate::{
Expand Down
79 changes: 79 additions & 0 deletions crates/kira/src/manager/backend/resources/test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
use crate::{manager::backend::resources::SelfReferentialResourceStorage, ResourceLimitReached};

use super::ResourceStorage;

#[test]
fn resource_storage() {
let (mut storage, mut controller) = ResourceStorage::new(2);

// add
let one = controller.insert(1).unwrap();
let two = controller.insert(2).unwrap();
assert_eq!(controller.insert(3), Err(ResourceLimitReached));
storage.remove_and_add(|_| false);

// get
assert_eq!(storage.get_mut(one), Some(&mut 1));
assert_eq!(storage.get_mut(two), Some(&mut 2));

// iter
assert_eq!(
storage.iter_mut().collect::<Vec<_>>(),
vec![(two, &mut 2), (one, &mut 1)]
);

// remove
storage.remove_and_add(|&x| x < 2);
assert_eq!(storage.get_mut(one), None);
assert_eq!(storage.get_mut(two), Some(&mut 2));
assert_eq!(storage.iter_mut().collect::<Vec<_>>(), vec![(two, &mut 2)]);

// re-add
let three = controller.insert(3).unwrap();
assert_eq!(controller.insert(4), Err(ResourceLimitReached));
storage.remove_and_add(|_| false);
assert_eq!(storage.get_mut(two), Some(&mut 2));
assert_eq!(storage.get_mut(three), Some(&mut 3));
assert_eq!(
storage.iter_mut().collect::<Vec<_>>(),
vec![(three, &mut 3), (two, &mut 2)]
);
}

#[test]
fn self_referential_resource_storage() {
let (mut storage, mut controller) = SelfReferentialResourceStorage::new(2);

// add
let one = controller.insert(1).unwrap();
let two = controller.insert(2).unwrap();
assert_eq!(controller.insert(3), Err(ResourceLimitReached));
storage.remove_and_add(|_| false);

// get
assert_eq!(storage.get_mut(one), Some(&mut 1));
assert_eq!(storage.get_mut(two), Some(&mut 2));

// iter
assert_eq!(
storage.iter_mut().collect::<Vec<_>>(),
vec![(two, &mut 2), (one, &mut 1)]
);

// remove
storage.remove_and_add(|&x| x < 2);
assert_eq!(storage.get_mut(one), None);
assert_eq!(storage.get_mut(two), Some(&mut 2));
assert_eq!(storage.iter_mut().collect::<Vec<_>>(), vec![(two, &mut 2)]);

// re-add
let three = controller.insert(3).unwrap();
assert_eq!(controller.insert(4), Err(ResourceLimitReached));
storage.remove_and_add(|_| false);
assert_eq!(storage.get_mut(two), Some(&mut 2));
assert_eq!(storage.get_mut(three), Some(&mut 3));
assert_eq!(
storage.iter_mut().collect::<Vec<_>>(),
vec![(three, &mut 3), (two, &mut 2)]
);
}

0 comments on commit ac4edd7

Please sign in to comment.