@@ -259,40 +259,59 @@ impl ExactSizeIterator for IntViewIter<'_> {
259259 }
260260}
261261
262- impl < A : Into < Option < Item > > > FromIterator < A > for View {
263- fn from_iter < T : IntoIterator < Item = A > > ( iter : T ) -> Self {
264- let ( nulls, mut values) : ( Vec < bool > , Vec < _ > ) = iter
265- . into_iter ( )
266- . map ( |v| match v. into ( ) {
267- Some ( v) => ( false , v) ,
268- None => ( true , Item :: default ( ) ) ,
269- } )
270- . unzip ( ) ;
271- Self {
272- nulls : NullBits :: from_iter ( nulls) ,
273- data : Bytes :: from ( {
274- let ( ptr, len, cap) = ( values. as_mut_ptr ( ) , values. len ( ) , values. capacity ( ) ) ;
275- std:: mem:: forget ( values) ;
276- unsafe { Vec :: from_raw_parts ( ptr as * mut u8 , len * ITEM_SIZE , cap * ITEM_SIZE ) }
277- } ) ,
262+ #[ cfg( test) ]
263+ mod tests {
264+ use byteorder:: { BigEndian , ByteOrder } ;
265+
266+ use crate :: views:: int_view:: { Item , View , ITEM_SIZE } ;
267+
268+ #[ test]
269+ fn test_slice ( ) {
270+ let data = [ 0 , 1 , Item :: MIN , Item :: MAX ] ;
271+ let view = View :: from_iter ( data) ;
272+ dbg ! ( & view) ;
273+ let slice = view. slice ( 1 ..3 ) ;
274+ dbg ! ( & slice) ;
275+
276+ let data = [ None , Some ( Item :: MIN ) , Some ( Item :: MAX ) , None ] ;
277+ let view = View :: from_iter ( data) ;
278+ dbg ! ( & view) ;
279+ let range = 1 ..4 ;
280+ let slice = view. slice ( range. clone ( ) ) . unwrap ( ) ;
281+ for ( v, i) in slice. iter ( ) . zip ( range) {
282+ assert_eq ! ( v, data[ i] ) ;
278283 }
279284 }
280- }
281285
282- #[ test]
283- fn test_slice ( ) {
284- let data = [ 0 , 1 , Item :: MIN , Item :: MAX ] ;
285- let view = View :: from_iter ( data) ;
286- dbg ! ( & view) ;
287- let slice = view. slice ( 1 ..3 ) ;
288- dbg ! ( & slice) ;
289-
290- let data = [ None , Some ( Item :: MIN ) , Some ( Item :: MAX ) , None ] ;
291- let view = View :: from_iter ( data) ;
292- dbg ! ( & view) ;
293- let range = 1 ..4 ;
294- let slice = view. slice ( range. clone ( ) ) . unwrap ( ) ;
295- for ( v, i) in slice. iter ( ) . zip ( range) {
296- assert_eq ! ( v, data[ i] ) ;
286+ #[ cfg( target_endian = "little" ) ]
287+ #[ test]
288+ fn test_from_iterator ( ) {
289+ let data = [ 0x12345678 ] ;
290+ let view = View :: from_iter ( data) ;
291+ let bytes = view. data ;
292+ assert_eq ! ( bytes. to_vec( ) , vec![ 0x78 , 0x56 , 0x34 , 0x12 ] ) ;
293+ }
294+
295+ #[ cfg( target_endian = "little" ) ]
296+ #[ test]
297+ fn test_from_iterator_mock_big_endian ( ) {
298+ let mut bytes = [ 0u8 ; 16 ] ;
299+ BigEndian :: write_i32 ( & mut bytes, 0x12345678 ) ;
300+ BigEndian :: write_i32 ( & mut bytes[ 4 ..] , 0x78563412 ) ;
301+ BigEndian :: write_i32 ( & mut bytes[ 8 ..] , 0x12131415 ) ;
302+ BigEndian :: write_i32 ( & mut bytes[ 12 ..] , 0x51413121 ) ;
303+
304+ for i in ( 0 ..bytes. len ( ) ) . step_by ( ITEM_SIZE ) {
305+ let j = i + ITEM_SIZE ;
306+ let val = Item :: from_be_bytes ( bytes[ i..j] . try_into ( ) . unwrap ( ) ) ;
307+ bytes[ i..j] . copy_from_slice ( & val. to_le_bytes ( ) ) ;
308+ }
309+
310+ let expect = vec ! [
311+ 0x78 , 0x56 , 0x34 , 0x12 , 0x12 , 0x34 , 0x56 , 0x78 , 0x15 , 0x14 , 0x13 , 0x12 , 0x21 , 0x31 ,
312+ 0x41 , 0x51 ,
313+ ] ;
314+
315+ assert_eq ! ( bytes. to_vec( ) , expect) ;
297316 }
298317}
0 commit comments