From 6a3dbc2d6324c010c3ce025c6e091dffb2526e5d Mon Sep 17 00:00:00 2001 From: Matthias Wuketich Date: Tue, 3 Jun 2025 23:04:17 +0200 Subject: [PATCH] added unit tests --- crates/bevy_asset/src/assets.rs | 43 +++++++++++++++++++++++++++------ crates/bevy_asset/src/lib.rs | 2 +- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/crates/bevy_asset/src/assets.rs b/crates/bevy_asset/src/assets.rs index 4a1d51a6ec..5d0a5796a9 100644 --- a/crates/bevy_asset/src/assets.rs +++ b/crates/bevy_asset/src/assets.rs @@ -460,18 +460,13 @@ impl Assets { } let mut values = [(); N].map(|_| MaybeUninit::uninit()); - for (value, asset) in core::iter::zip(&mut values, ids) { - let item: Option<*mut _> = match self.get_mut(asset) { - Some(asset) => Some(asset), - None => None, - }; - - *value = MaybeUninit::new(item); + let asset = self.get_mut(asset).map(|asset| asset as *mut _); + *value = MaybeUninit::new(asset); } // 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) } @@ -685,6 +680,8 @@ pub struct InvalidGenerationError { #[cfg(test)] mod test { + use crate::prelude::*; + use crate::tests::{SubText, TestAsset}; use crate::AssetIndex; #[test] @@ -696,4 +693,34 @@ mod test { let roundtripped = AssetIndex::from_bits(asset_index.to_bits()); 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()); + } } diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index 5b680eb191..5d9136b6e7 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -712,7 +712,7 @@ mod tests { #[derive(Asset, TypePath, Debug)] pub struct SubText { - text: String, + pub text: String, } #[derive(Serialize, Deserialize)]