added unit tests

This commit is contained in:
Matthias Wuketich 2025-06-03 23:04:17 +02:00
parent f729b102fc
commit 6a3dbc2d63
2 changed files with 36 additions and 9 deletions

View File

@ -460,18 +460,13 @@ impl<A: Asset> Assets<A> {
} }
let mut values = [(); N].map(|_| MaybeUninit::uninit()); let mut values = [(); N].map(|_| MaybeUninit::uninit());
for (value, asset) in core::iter::zip(&mut values, ids) { for (value, asset) in core::iter::zip(&mut values, ids) {
let item: Option<*mut _> = match self.get_mut(asset) { let asset = self.get_mut(asset).map(|asset| asset as *mut _);
Some(asset) => Some(asset), *value = MaybeUninit::new(asset);
None => None,
};
*value = MaybeUninit::new(item);
} }
// SAFETY: Each value has been fully initialized. // SAFETY: Each value has been fully initialized.
let values = values.map(|x| unsafe { x.assume_init().map(|raw| std::mem::transmute(raw)) }); let values = values.map(|x| unsafe { x.assume_init().map(|raw| &mut *raw) });
Some(values) Some(values)
} }
@ -685,6 +680,8 @@ pub struct InvalidGenerationError {
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use crate::prelude::*;
use crate::tests::{SubText, TestAsset};
use crate::AssetIndex; use crate::AssetIndex;
#[test] #[test]
@ -696,4 +693,34 @@ mod test {
let roundtripped = AssetIndex::from_bits(asset_index.to_bits()); let roundtripped = AssetIndex::from_bits(asset_index.to_bits());
assert_eq!(asset_index, roundtripped); assert_eq!(asset_index, roundtripped);
} }
#[test]
fn get_many_mut_no_aliases() {
let mut assets = Assets::default();
let one = "One";
let two = "Two";
let v = AssetIndex::from_bits(1);
let w = AssetIndex::from_bits(3);
assets.insert(v, SubText { text: one.into() });
assets.insert(w, SubText { text: two.into() });
let [x, y] = assets.get_many_mut([v.into(), w.into()]).unwrap();
assert_eq!(x.unwrap().text, one);
assert_eq!(y.unwrap().text, two);
}
#[test]
fn get_many_mut_aliases() {
let mut assets = Assets::default();
let v = AssetIndex::from_bits(1);
assets.insert(v, TestAsset);
let v = v.into();
let result = assets.get_many_mut([v, v]);
assert!(result.is_none());
}
} }

View File

@ -712,7 +712,7 @@ mod tests {
#[derive(Asset, TypePath, Debug)] #[derive(Asset, TypePath, Debug)]
pub struct SubText { pub struct SubText {
text: String, pub text: String,
} }
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]