Refactor NBT test functions and add support for multiple NBT versions

This commit is contained in:
shenjack 2024-01-16 21:22:58 +08:00
parent 6748bd48df
commit 618dd911c5
Signed by: shenjack
GPG Key ID: 7B1134A979775551

View File

@ -1,22 +1,12 @@
fn main() { fn main() {
println!("Hello, nbt!"); println!("Hello, nbt!");
// sleep 1s // sleep 1s
println!("====== small test ======"); println!("============ small test ============");
small_read_test();
println!("====== big test ======");
big_read_test(); big_read_test();
println!("====== cli test ======"); println!("============ cli test ============");
cli_read_test(); cli_read_test();
} }
fn small_read_test() {
let data: [u8; 0x21] = [
0x0A, 0x00, 0x0B, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x08,
0x00, 0x04, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x09, 0x42, 0x61, 0x6E, 0x61, 0x6E, 0x72, 0x61,
0x6D, 0x61, 0x00,
];
read_test(data.to_vec());
}
fn big_read_test() { fn big_read_test() {
let data: [u8; 0x608] = [ let data: [u8; 0x608] = [
@ -151,15 +141,8 @@ macro_rules! test_lib {
}; };
} }
fn read_test(in_data: Vec<u8>) { fn test_v1(data: Vec<u8>) {
let len = in_data.len(); let len = data.len();
#[cfg(feature = "debug")]
println!("data: {:?}", data);
let data = in_data.clone();
// let data2 = in_data.clone();
// let data3 = in_data.clone();
// let data4 = in_data.clone();
std::thread::sleep(std::time::Duration::from_secs(1)); std::thread::sleep(std::time::Duration::from_secs(1));
test_lib!( test_lib!(
{ {
@ -167,25 +150,40 @@ fn read_test(in_data: Vec<u8>) {
let _nbt_data = shen_nbt1::data::NbtItem::try_from(cursor).unwrap(); let _nbt_data = shen_nbt1::data::NbtItem::try_from(cursor).unwrap();
}, "nbt v1", len }, "nbt v1", len
); );
}
fn test_v2(data: Vec<u8>) {
let len = data.len();
std::thread::sleep(std::time::Duration::from_secs(1));
test_lib!( test_lib!(
{ {
let _nbt_data = shen_nbt2::Value::from_vec(data.as_slice().to_vec()); let _nbt_data = shen_nbt2::Value::from_vec(data);
}, "nbt v2", len }, "nbt v2", len
); );
}
fn test_v3(data: Vec<u8>) {
let len = data.len();
std::thread::sleep(std::time::Duration::from_secs(1));
test_lib!( test_lib!(
{ {
let _nbt_data = shen_nbt3::Value::from_vec(data.as_slice().to_vec()); let _nbt_data = shen_nbt3::Value::from_vec(data);
}, "nbt v3", len }, "nbt v3", len
); );
}
fn test_v4(data: Vec<u8>) {
let len = data.len();
std::thread::sleep(std::time::Duration::from_secs(1));
test_lib!( test_lib!(
{ {
let _nbt_data = shen_nbt4::Value::from_vec(data.as_slice().to_vec()); let _nbt_data = shen_nbt4::Value::from_vec(data);
}, "nbt v4", len }, "nbt v4", len
); );
}
fn test_fastnbt(data: Vec<u8>) {
let len = data.len();
std::thread::sleep(std::time::Duration::from_secs(1));
test_lib!( test_lib!(
{ {
let _nbt_data: fastnbt::Value = fastnbt::from_bytes(data.as_slice()).unwrap(); let _nbt_data: fastnbt::Value = fastnbt::from_bytes(data.as_slice()).unwrap();
@ -193,6 +191,29 @@ fn read_test(in_data: Vec<u8>) {
); );
} }
fn read_test(in_data: Vec<u8>) {
let len = in_data.len();
#[cfg(feature = "debug")]
println!("data: {:?}", data);
std::thread::sleep(std::time::Duration::from_secs(1));
let data = in_data.clone();
test_v1(data);
let data = in_data.clone();
test_v2(data);
let data = in_data.clone();
test_v3(data);
let data = in_data.clone();
test_v4(data);
let data = in_data.clone();
test_fastnbt(data);
}
fn cli_read_test() { fn cli_read_test() {
let mut args = std::env::args(); let mut args = std::env::args();
@ -204,35 +225,36 @@ fn cli_read_test() {
test_lib!( test_lib!(
{ {
let cursor: shen_nbt1::data::Reader = std::io::Cursor::new(data.as_slice()); let cursor: shen_nbt1::data::Reader = std::io::Cursor::new(data.as_slice());
let _nbt_data = shen_nbt1::data::NbtItem::try_from(cursor).unwrap(); let nbt_data = shen_nbt1::data::NbtItem::try_from(cursor).unwrap();
}, "nbt v1", len }, "nbt v1", len
); );
let data = std::fs::read(&arg).unwrap(); let data2 = std::fs::read(&arg).unwrap();
test_lib!( test_lib!(
{ {
let _nbt_data = shen_nbt2::Value::from_vec(data); let nbt_data = shen_nbt2::Value::from_vec(data2);
}, "nbt v2", len }, "nbt v2", len
); );
let data = std::fs::read(&arg).unwrap(); let data3 = std::fs::read(&arg).unwrap();
test_lib!( test_lib!(
{ {
let _nbt_data = shen_nbt3::Value::from_vec(data); let nbt_data = shen_nbt3::Value::from_vec(data3);
}, "nbt v3", len }, "nbt v3", len
); );
let data = std::fs::read(&arg).unwrap(); let data4 = std::fs::read(&arg).unwrap();
test_lib!( test_lib!(
{ {
let _nbt_data = shen_nbt4::Value::from_vec(data); let nbt_data = shen_nbt4::Value::from_vec(data4);
}, "nbt v4", len }, "nbt v4", len
); );
let data = std::fs::read(&arg).unwrap(); let data5 = std::fs::read(&arg).unwrap();
test_lib!( test_lib!(
{ {
let _nbt_data: fastnbt::Value = fastnbt::from_bytes(data.as_slice()).unwrap(); let nbt_data: fastnbt::Value = fastnbt::from_bytes(data5.as_slice()).unwrap();
}, "fastnbt", len }, "fastnbt", len
); );
} else { } else {