|
7 | 7 | clippy::float_cmp
|
8 | 8 | )]
|
9 | 9 |
|
| 10 | +use approx::assert_relative_eq; |
10 | 11 | use defmac::defmac;
|
11 | 12 | use itertools::{zip, Itertools};
|
12 | 13 | use ndarray::prelude::*;
|
13 | 14 | use ndarray::{arr3, rcarr2};
|
14 | 15 | use ndarray::indices;
|
15 | 16 | use ndarray::{Slice, SliceInfo, SliceInfoElem};
|
| 17 | +use num_complex::Complex; |
16 | 18 | use std::convert::TryFrom;
|
17 | 19 |
|
18 | 20 | macro_rules! assert_panics {
|
@@ -2501,3 +2503,40 @@ fn test_remove_index_oob3() {
|
2501 | 2503 | let mut a = array![[10], [4], [1]];
|
2502 | 2504 | a.remove_index(Axis(2), 0);
|
2503 | 2505 | }
|
| 2506 | + |
| 2507 | +#[test] |
| 2508 | +fn test_split_re_im_view() { |
| 2509 | + let a = Array3::from_shape_fn((3, 4, 5), |(i, j, k)| { |
| 2510 | + Complex::<f32>::new(i as f32 * j as f32, k as f32) |
| 2511 | + }); |
| 2512 | + let Complex { re, im } = a.view().split_re_im(); |
| 2513 | + assert_relative_eq!(re.sum(), 90.); |
| 2514 | + assert_relative_eq!(im.sum(), 120.); |
| 2515 | +} |
| 2516 | + |
| 2517 | +#[test] |
| 2518 | +fn test_split_re_im_view_roundtrip() { |
| 2519 | + let a_re = Array3::from_shape_fn((3,4,5), |(i, j, _k)| { |
| 2520 | + i * j |
| 2521 | + }); |
| 2522 | + let a_im = Array3::from_shape_fn((3,4,5), |(_i, _j, k)| { |
| 2523 | + k |
| 2524 | + }); |
| 2525 | + let a = Array3::from_shape_fn((3,4,5), |(i,j,k)| { |
| 2526 | + Complex::new(a_re[[i,j,k]], a_im[[i,j,k]]) |
| 2527 | + }); |
| 2528 | + let Complex { re, im } = a.view().split_re_im(); |
| 2529 | + assert_eq!(a_re, re); |
| 2530 | + assert_eq!(a_im, im); |
| 2531 | +} |
| 2532 | + |
| 2533 | +#[test] |
| 2534 | +fn test_split_re_im_view_mut() { |
| 2535 | + let eye_scalar = Array2::<u32>::eye(4); |
| 2536 | + let eye_complex = Array2::<Complex<u32>>::eye(4); |
| 2537 | + let mut a = Array2::<Complex<u32>>::zeros((4, 4)); |
| 2538 | + let Complex { mut re, im } = a.view_mut().split_re_im(); |
| 2539 | + re.assign(&eye_scalar); |
| 2540 | + assert_eq!(im.sum(), 0); |
| 2541 | + assert_eq!(a, eye_complex); |
| 2542 | +} |
0 commit comments