approximate round trip test

This commit is contained in:
2025-12-15 15:16:57 -08:00
parent a34ecc4537
commit 6775e4122b

View File

@@ -10,7 +10,7 @@ enum Error{
Io(std::io::Error), Io(std::io::Error),
BotFile{ BotFile{
path:PathBuf, path:PathBuf,
err:v0::Error err:RoundTripError,
}, },
Join(tokio::task::JoinError), Join(tokio::task::JoinError),
} }
@@ -24,6 +24,14 @@ impl From<tokio::task::JoinError> for Error{
Self::Join(value) Self::Join(value)
} }
} }
#[expect(dead_code)]
#[derive(Debug)]
enum RoundTripError{
Decode(v0::Error),
Encode(strafesnet_roblox_bot_file::BinrwError),
RoundTripDecode(v0::Error),
NotEqual,
}
#[tokio::main] #[tokio::main]
async fn main()->Result<(),Error>{ async fn main()->Result<(),Error>{
const PREFETCH_QUEUE:usize=64; const PREFETCH_QUEUE:usize=64;
@@ -82,7 +90,25 @@ async fn main()->Result<(),Error>{
.buffer_unordered(PREFETCH_QUEUE) .buffer_unordered(PREFETCH_QUEUE)
.map(|result:Result<_,Error>|async move{ .map(|result:Result<_,Error>|async move{
let (path,file)=result?; let (path,file)=result?;
let result=tokio::task::spawn_blocking(||v0::read_all_to_block(std::io::Cursor::new(file))).await?; let result=tokio::task::spawn_blocking(move||{
let block=v0::read_all_to_block(std::io::Cursor::new(file.as_slice())).map_err(RoundTripError::Decode)?;
let mut data=Vec::with_capacity(file.len()+1024);
v0::serialize(&block,&mut std::io::Cursor::new(&mut data)).map_err(RoundTripError::Encode)?;
let block_rt=v0::read_all_to_block(std::io::Cursor::new(data)).map_err(RoundTripError::RoundTripDecode)?;
if !(
block_rt.input_events.len()==block.input_events.len()&&
block_rt.output_events.len()==block.output_events.len()&&
block_rt.sound_events.len()==block.sound_events.len()&&
block_rt.world_events.len()==block.world_events.len()&&
block_rt.gravity_events.len()==block.gravity_events.len()&&
block_rt.run_events.len()==block.run_events.len()&&
block_rt.camera_events.len()==block.camera_events.len()&&
block_rt.setting_events.len()==block.setting_events.len()
){
return Err(RoundTripError::NotEqual);
}
Ok(block)
}).await?;
match result{ match result{
Err(err)=>Err(Error::BotFile{path,err}), Err(err)=>Err(Error::BotFile{path,err}),
Ok(block)=>Ok((path,block)), Ok(block)=>Ok((path,block)),