@@ -22,3 +22,52 @@ pub(super) unsafe fn split_init(
2222 let uninit = slice:: from_raw_parts_mut ( buf_ptr. add ( init_len) , uninit_len) ;
2323 ( init, uninit)
2424}
25+
26+ #[ cfg( test) ]
27+ mod tests {
28+ use super :: * ;
29+
30+ #[ test]
31+ fn test_split_init ( ) {
32+ let mut input_array = [
33+ MaybeUninit :: new ( 0_u8 ) ,
34+ MaybeUninit :: new ( 1_u8 ) ,
35+ MaybeUninit :: new ( 2_u8 ) ,
36+ MaybeUninit :: new ( 3_u8 ) ,
37+ ] ;
38+ let input_array_clone = input_array. clone ( ) ;
39+ let input_array_ptr = input_array. as_ptr ( ) ;
40+ let output_array = [ 0_u8 , 1_u8 , 2_u8 , 3_u8 ] ;
41+
42+ unsafe {
43+ let ( init, uninit) = split_init ( & mut input_array, 0 ) ;
44+ assert_eq ! ( init, & [ ] ) ;
45+ assert_eq ! ( uninit. len( ) , input_array_clone. len( ) ) ;
46+ assert_eq ! ( uninit. as_ptr( ) , input_array_ptr) ;
47+
48+ let ( init, uninit) = split_init ( & mut input_array, input_array_clone. len ( ) ) ;
49+ assert_eq ! ( init, & output_array[ ..] ) ;
50+ assert_eq ! ( init. as_ptr( ) , input_array_ptr. cast( ) ) ;
51+ assert_eq ! ( uninit. len( ) , 0 ) ;
52+ assert_eq ! (
53+ uninit. as_ptr( ) ,
54+ input_array_ptr. add( input_array_clone. len( ) )
55+ ) ;
56+
57+ let ( init, uninit) = split_init ( & mut input_array, 2 ) ;
58+ assert_eq ! ( init, & output_array[ ..2 ] ) ;
59+ assert_eq ! ( init. as_ptr( ) , input_array_ptr. cast( ) ) ;
60+ assert_eq ! ( uninit. len( ) , 2 ) ;
61+ assert_eq ! ( uninit. as_ptr( ) , input_array_ptr. add( 2 ) ) ;
62+ }
63+ }
64+
65+ #[ test]
66+ fn test_split_init_empty ( ) {
67+ unsafe {
68+ let ( init, uninit) = split_init ( & mut [ ] , 0 ) ;
69+ assert ! ( init. is_empty( ) ) ;
70+ assert ! ( uninit. is_empty( ) ) ;
71+ }
72+ }
73+ }
0 commit comments