@@ -374,4 +374,40 @@ mod tests {
374374 let mask = Mask :: from_iter ( [ true , true , true , false ] ) ;
375375 ( & mut buf) . expand ( & mask) ;
376376 }
377+
378+ #[ test]
379+ fn test_expand_into_new_buffer ( ) {
380+ let src = [ 10u32 , 20 , 30 , 40 , 50 ] ;
381+ // Alternating pattern with gaps: [T, F, T, F, T, F, T, F, T, F]
382+ let mask = Mask :: from_iter ( [
383+ true , false , true , false , true , false , true , false , true , false ,
384+ ] ) ;
385+
386+ let result = expand_into_new_buffer ( & src, & mask) ;
387+ assert_eq ! ( result. len( ) , 10 ) ;
388+ assert_eq ! ( result. as_slice( ) [ 0 ] , 10 ) ;
389+ assert_eq ! ( result. as_slice( ) [ 2 ] , 20 ) ;
390+ assert_eq ! ( result. as_slice( ) [ 4 ] , 30 ) ;
391+ assert_eq ! ( result. as_slice( ) [ 6 ] , 40 ) ;
392+ assert_eq ! ( result. as_slice( ) [ 8 ] , 50 ) ;
393+ }
394+
395+ #[ test]
396+ fn test_scatter_into_slice_from ( ) {
397+ let src = [ 1u32 , 2 , 3 , 4 , 5 ] ;
398+ let mut dest = vec ! [ 0u32 ; 8 ] ;
399+ let mask = Mask :: from_iter ( [ true , true , false , true , true , false , true , false ] ) ;
400+
401+ let mask_values = match & mask {
402+ Mask :: Values ( mv) => mv,
403+ _ => panic ! ( "Expected Mask::Values" ) ,
404+ } ;
405+
406+ scatter_into_slice_from ( & src, & mut dest, mask_values) ;
407+ assert_eq ! ( dest[ 0 ] , 1 ) ;
408+ assert_eq ! ( dest[ 1 ] , 2 ) ;
409+ assert_eq ! ( dest[ 3 ] , 3 ) ;
410+ assert_eq ! ( dest[ 4 ] , 4 ) ;
411+ assert_eq ! ( dest[ 6 ] , 5 ) ;
412+ }
377413}
0 commit comments