@@ -497,7 +497,7 @@ impl<T: FftNum> R2cFftHandler<T> {
497497 buffer. clone_from_slice ( data) ;
498498 match self . norm {
499499 Normalization :: None => ( ) ,
500- Normalization :: Default => Self :: norm_default ( & mut buffer) ,
500+ Normalization :: Default => Self :: norm_default ( & mut buffer, self . n ) ,
501501 Normalization :: Custom ( f) => f ( & mut buffer) ,
502502 }
503503 // First element must be real
@@ -509,8 +509,8 @@ impl<T: FftNum> R2cFftHandler<T> {
509509 self . plan_bwd . process ( & mut buffer, out) . unwrap ( ) ;
510510 }
511511
512- fn norm_default ( data : & mut [ Complex < T > ] ) {
513- let n = T :: one ( ) / T :: from_usize ( ( data . len ( ) - 1 ) * 2 ) . unwrap ( ) ;
512+ fn norm_default ( data : & mut [ Complex < T > ] , size : usize ) {
513+ let n = T :: one ( ) / T :: from_usize ( size ) . unwrap ( ) ;
514514 for d in data. iter_mut ( ) {
515515 d. re = d. re * n;
516516 d. im = d. im * n;
@@ -1080,6 +1080,31 @@ mod test {
10801080 approx_eq ( & v, & solution_numpy_last_elem) ;
10811081 }
10821082
1083+ #[ test]
1084+ fn test_fft_r2c_odd ( ) {
1085+ // Setup
1086+ let mut v = array ! [ [ 1. , 2. , 3. ] , [ 4. , 5. , 6. ] , [ 7. , 8. , 9. ] , ] ;
1087+ let v_copy = v. clone ( ) ;
1088+ let ( nx, ny) = ( v. shape ( ) [ 0 ] , v. shape ( ) [ 1 ] ) ;
1089+ let mut vhat = Array2 :: < Complex < f64 > > :: zeros ( ( nx, ny / 2 + 1 ) ) ;
1090+ let mut handler = R2cFftHandler :: < f64 > :: new ( ny) ;
1091+
1092+ // Transform
1093+ ndfft_r2c ( & v, & mut vhat, & mut handler, 1 ) ;
1094+ ndifft_r2c ( & vhat, & mut v, & mut handler, 1 ) ;
1095+
1096+ // Assert
1097+ approx_eq ( & v, & v_copy) ;
1098+
1099+ // Transform Par
1100+ let mut v = array ! [ [ 1. , 2. , 3. ] , [ 4. , 5. , 6. ] , [ 7. , 8. , 9. ] , ] ;
1101+ ndfft_r2c_par ( & v, & mut vhat, & mut handler, 1 ) ;
1102+ ndifft_r2c_par ( & vhat, & mut v, & mut handler, 1 ) ;
1103+
1104+ // // Assert
1105+ approx_eq ( & v, & v_copy) ;
1106+ }
1107+
10831108 #[ test]
10841109 fn test_dct1 ( ) {
10851110 // Solution from scipy.fft.dct(x, type=1)
0 commit comments