approximate round trip test
This commit is contained in:
30
src/main.rs
30
src/main.rs
@@ -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)),
|
||||||
|
|||||||
Reference in New Issue
Block a user