|
7 | 7 |
|
8 | 8 | use defmac::defmac;
|
9 | 9 | use ndarray::prelude::*;
|
| 10 | +use ndarray::Zip; |
10 | 11 |
|
11 | 12 | #[test]
|
12 | 13 | fn test_from_shape_fn() {
|
@@ -194,3 +195,46 @@ fn deny_wraparound_uninit() {
|
194 | 195 | let _five_large = Array::<f32, _>::uninitialized((3, 7, 29, 36760123, 823996703));
|
195 | 196 | }
|
196 | 197 | }
|
| 198 | + |
| 199 | + |
| 200 | +#[test] |
| 201 | +fn maybe_uninit_1() { |
| 202 | + use std::mem::MaybeUninit; |
| 203 | + |
| 204 | + unsafe { |
| 205 | + // Array |
| 206 | + type Mat<D> = Array<MaybeUninit<f32>, D>; |
| 207 | + |
| 208 | + let mut a = Mat::maybe_uninit((10, 10)); |
| 209 | + a.mapv_inplace(|_| MaybeUninit::new(1.)); |
| 210 | + |
| 211 | + let a_init = a.assume_init(); |
| 212 | + assert_eq!(a_init, Array2::from_elem(a_init.dim(), 1.)); |
| 213 | + |
| 214 | + // ArcArray |
| 215 | + type ArcMat<D> = ArcArray<MaybeUninit<f32>, D>; |
| 216 | + |
| 217 | + let mut a = ArcMat::maybe_uninit((10, 10)); |
| 218 | + a.mapv_inplace(|_| MaybeUninit::new(1.)); |
| 219 | + let a2 = a.clone(); |
| 220 | + |
| 221 | + let a_init = a.assume_init(); |
| 222 | + assert_eq!(a_init, Array2::from_elem(a_init.dim(), 1.)); |
| 223 | + |
| 224 | + // ArrayView |
| 225 | + let av_init = a2.view().assume_init(); |
| 226 | + assert_eq!(av_init, Array2::from_elem(a_init.dim(), 1.)); |
| 227 | + |
| 228 | + // RawArrayViewMut |
| 229 | + let mut a = Mat::maybe_uninit((10, 10)); |
| 230 | + let v = a.raw_view_mut(); |
| 231 | + Zip::from(v) |
| 232 | + .apply(|ptr| *(*ptr).as_mut_ptr() = 1.); |
| 233 | + |
| 234 | + let u = a.raw_view_mut().assume_init(); |
| 235 | + |
| 236 | + Zip::from(u) |
| 237 | + .apply(|ptr| assert_eq!(*ptr, 1.)); |
| 238 | + |
| 239 | + } |
| 240 | +} |
0 commit comments