#![ cfg( all( feature = "enabled", feature = "into_bytes" ) ) ]
use asbytes::IntoBytes; use std::mem;
#[ repr( C ) ]
#[ derive( Clone, Copy, Debug, PartialEq, bytemuck::Pod, bytemuck::Zeroable ) ]
struct Point
{
x : i32,
y : i32,
}
#[ test ]
fn test_tuple_scalar_into_bytes()
{
let scalar_tuple = ( 123u32, );
let expected_bytes = 123u32.to_le_bytes().to_vec();
let bytes = scalar_tuple.into_bytes();
assert_eq!( bytes.len(), mem::size_of::< u32 >() );
assert_eq!( bytes, expected_bytes );
}
#[ test ]
fn test_tuple_struct_into_bytes()
{
let point = Point { x : 10, y : -20 };
let struct_tuple = ( point, );
let expected_bytes = bytemuck::bytes_of( &point ).to_vec();
let bytes = struct_tuple.into_bytes();
assert_eq!( bytes.len(), mem::size_of::< Point >() );
assert_eq!( bytes, expected_bytes );
}
#[ test ]
fn test_string_into_bytes()
{
let s = String::from( "hello" );
let expected_bytes = vec![ b'h', b'e', b'l', b'l', b'o' ];
let bytes = s.clone().into_bytes();
assert_eq!( bytes.len(), s.len() );
assert_eq!( bytes, expected_bytes );
}
#[ test ]
fn test_str_into_bytes()
{
let s = "hello";
let expected_bytes = vec![ b'h', b'e', b'l', b'l', b'o' ];
let bytes = s.into_bytes();
assert_eq!( bytes.len(), s.len() );
assert_eq!( bytes, expected_bytes );
}
#[ test ]
fn test_array_into_bytes()
{
let arr : [ u16 ; 3 ] = [ 100, 200, 300 ];
let expected_bytes = bytemuck::cast_slice( &arr ).to_vec();
let bytes = arr.into_bytes();
assert_eq!( bytes.len(), arr.len() * mem::size_of::< u16 >() );
assert_eq!( bytes, expected_bytes );
}
#[ test ]
fn test_vec_into_bytes()
{
let v = vec![ Point { x : 1, y : 2 }, Point { x : 3, y : 4 } ];
let expected_bytes = bytemuck::cast_slice( v.as_slice() ).to_vec();
let expected_len = v.len() * mem::size_of::< Point >();
let bytes = v.clone().into_bytes();
assert_eq!( bytes.len(), expected_len );
assert_eq!( bytes, expected_bytes );
}
#[ test ]
fn test_box_t_into_bytes()
{
let b = Box::new( Point { x : 5, y : 5 } );
let expected_bytes = bytemuck::bytes_of( &*b ).to_vec();
let expected_len = mem::size_of::< Point >();
let bytes = b.into_bytes();
assert_eq!( bytes.len(), expected_len );
assert_eq!( bytes, expected_bytes );
}
#[ test ]
fn test_slice_into_bytes()
{
let slice : &[ u32 ] = &[ 10, 20, 30 ][ .. ];
let expected_bytes = bytemuck::cast_slice( &*slice ).to_vec();
let expected_len = slice.len() * mem::size_of::< u32 >();
let bytes = slice.into_bytes();
assert_eq!( bytes.len(), expected_len );
assert_eq!( bytes, expected_bytes );
}
#[ test ]
fn test_box_slice_into_bytes()
{
let slice : Box< [ u32 ] > = vec![ 10, 20, 30 ].into_boxed_slice();
let expected_bytes = bytemuck::cast_slice( &*slice ).to_vec();
let expected_len = slice.len() * mem::size_of::< u32 >();
let bytes = slice.into_bytes();
assert_eq!( bytes.len(), expected_len );
assert_eq!( bytes, expected_bytes );
}
#[ test ]
fn test_vecdeque_into_bytes()
{
use std::collections::VecDeque; let mut deque : VecDeque< u16 > = VecDeque::new();
deque.push_back( 10 );
deque.push_back( 20 );
deque.push_front( 5 );
let expected_bytes = vec!
[
5u16.to_le_bytes()[ 0 ], 5u16.to_le_bytes()[ 1 ],
10u16.to_le_bytes()[ 0 ], 10u16.to_le_bytes()[ 1 ],
20u16.to_le_bytes()[ 0 ], 20u16.to_le_bytes()[ 1 ],
];
let expected_len = deque.len() * mem::size_of::< u16 >();
let bytes = deque.into_bytes();
assert_eq!( bytes.len(), expected_len );
assert_eq!( bytes, expected_bytes );
}
#[ test ]
fn test_cstring_into_bytes()
{
use std::ffi::CString; let cs = CString::new( "world" ).unwrap();
let expected_bytes = vec![ b'w', b'o', b'r', b'l', b'd' ]; let expected_len = expected_bytes.len();
let bytes = cs.into_bytes();
assert_eq!( bytes.len(), expected_len );
assert_eq!( bytes, expected_bytes );
}