@@ -216,6 +216,7 @@ mod tests {
216216
217217 use super :: * ;
218218
219+ // Tests for Buffer<T>
219220 #[ test]
220221 fn test_expand_scattered ( ) {
221222 let buf = buffer ! [ 100u32 , 200 , 300 ] ;
@@ -278,7 +279,7 @@ mod tests {
278279 buf. expand ( & mask) ;
279280 }
280281
281- // Tests for &Buffer<T> impl
282+ // Tests for &Buffer<T>
282283 #[ test]
283284 fn test_expand_ref_scattered ( ) {
284285 let buf = buffer ! [ 100u32 , 200 , 300 ] ;
@@ -300,7 +301,7 @@ mod tests {
300301 assert_eq ! ( result, buffer![ 10u32 , 20 , 30 ] ) ;
301302 }
302303
303- // Tests for &mut BufferMut<T> impl
304+ // Tests for &mut BufferMut<T>
304305 #[ test]
305306 fn test_expand_mut_scattered ( ) {
306307 let mut buf = buffer_mut ! [ 100u32 , 200 , 300 ] ;
@@ -374,4 +375,40 @@ mod tests {
374375 let mask = Mask :: from_iter ( [ true , true , true , false ] ) ;
375376 ( & mut buf) . expand ( & mask) ;
376377 }
378+
379+ #[ test]
380+ fn test_expand_into_new_buffer ( ) {
381+ let src = [ 10u32 , 20 , 30 , 40 , 50 ] ;
382+ // Alternating pattern with gaps: [T, F, T, F, T, F, T, F, T, F]
383+ let mask = Mask :: from_iter ( [
384+ true , false , true , false , true , false , true , false , true , false ,
385+ ] ) ;
386+
387+ let result = expand_into_new_buffer ( & src, & mask) ;
388+ assert_eq ! ( result. len( ) , 10 ) ;
389+ assert_eq ! ( result. as_slice( ) [ 0 ] , 10 ) ;
390+ assert_eq ! ( result. as_slice( ) [ 2 ] , 20 ) ;
391+ assert_eq ! ( result. as_slice( ) [ 4 ] , 30 ) ;
392+ assert_eq ! ( result. as_slice( ) [ 6 ] , 40 ) ;
393+ assert_eq ! ( result. as_slice( ) [ 8 ] , 50 ) ;
394+ }
395+
396+ #[ test]
397+ fn test_scatter_into_slice_from ( ) {
398+ let src = [ 1u32 , 2 , 3 , 4 , 5 ] ;
399+ let mut dest = vec ! [ 0u32 ; 8 ] ;
400+ let mask = Mask :: from_iter ( [ true , true , false , true , true , false , true , false ] ) ;
401+
402+ let mask_values = match & mask {
403+ Mask :: Values ( mv) => mv,
404+ _ => panic ! ( "Expected Mask::Values" ) ,
405+ } ;
406+
407+ scatter_into_slice_from ( & src, & mut dest, mask_values) ;
408+ assert_eq ! ( dest[ 0 ] , 1 ) ;
409+ assert_eq ! ( dest[ 1 ] , 2 ) ;
410+ assert_eq ! ( dest[ 3 ] , 3 ) ;
411+ assert_eq ! ( dest[ 4 ] , 4 ) ;
412+ assert_eq ! ( dest[ 6 ] , 5 ) ;
413+ }
377414}
0 commit comments