Adds additional test resources & unit tests for block.

This commit is contained in:
Tyler
2021-05-29 15:22:42 -07:00
parent d0b4fe34c1
commit f2fa1e1be1
9 changed files with 272 additions and 3 deletions
+200 -3
View File
@@ -175,6 +175,38 @@ macro_rules! make_icf_test (
};
);
macro_rules! make_block_test (
( $test_id:ident, $test_name:expr, $src:expr, $block:expr, $spec:expr ) =>
{
make_spec_test!($test_id,
$test_name,
Input {
src: $src,
non_ascii: false,
ibs: 512,
xfer_stats: StatusLevel::None,
cflags: IConvFlags {
ctable: None,
block: $block,
unblock: None,
swab: false,
sync: false,
noerror: false,
},
iflags: DEFAULT_IFLAGS,
},
Output {
dst: File::create(format!("./test-resources/FAILED-{}.test", $test_name)).unwrap(),
obs: 512,
cflags: DEFAULT_CFO,
oflags: DEFAULT_OFLAGS,
},
$spec,
format!("./test-resources/FAILED-{}.test", $test_name)
);
};
);
make_spec_test!(
zeros_4k_test,
"zeros-4k",
@@ -371,10 +403,175 @@ make_icf_test!(
File::open("./test-resources/seq-byte-values-odd.spec").unwrap()
);
fn block_test_basic()
static NL: u8 = '\n' as u8;
static SPACE: u8 = ' ' as u8;
#[test]
fn block_test_no_nl()
{
let mut buf = vec![0u8, 1u8, 2u8, 3u8];
let buf = vec![0u8, 1u8, 2u8, 3u8];
let res = block(&buf, 4);
assert_eq!(res, vec![buf]);
assert_eq!(res, vec![
vec![0u8, 1u8, 2u8, 3u8],
]);
}
#[test]
fn block_test_no_nl_short_rec()
{
let buf = vec![0u8, 1u8, 2u8, 3u8];
let res = block(&buf, 8);
assert_eq!(res, vec![
vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE],
]);
}
#[test]
fn block_test_no_nl_trunc()
{
let buf = vec![0u8, 1u8, 2u8, 3u8, 4u8];
let res = block(&buf, 4);
assert_eq!(res, vec![
vec![0u8, 1u8, 2u8, 3u8/*, 4u8*/],
]);
}
#[test]
fn block_test_nl_gt_cbs_trunc()
{
let buf = vec![0u8, 1u8, 2u8, 3u8, 4u8, NL, 5u8, 6u8, 7u8];
let res = block(&buf, 4);
assert_eq!(res, vec![
vec![0u8, 1u8, 2u8, 3u8],
// gnu-dd truncates this record
// vec![4u8, SPACE, SPACE, SPACE],
vec![5u8, 6u8],
vec![7u8],
]);
}
#[test]
fn block_test_surrounded_nl()
{
let buf = vec![0u8, 1u8, 2u8, 3u8, NL, 4u8, 5u8, 6u8, 7u8, 8u8];
let res = block(&buf, 8);
assert_eq!(res, vec![
vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE],
vec![4u8, 5u8, 6u8, 7u8, 8u8, SPACE, SPACE, SPACE],
]);
}
#[test]
fn block_test_multiple_nl_same_block()
{
let buf = vec![0u8, 1u8, 2u8, 3u8, NL, 4u8, NL, 5u8, 6u8, 7u8, 8u8, 9u8, 10u8, 11u8 ];
let res = block(&buf, 8);
assert_eq!(res, vec![
vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE],
vec![4u8, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE],
vec![5u8, 6u8, 7u8, 8u8, 9u8, 10u8, 11u8, SPACE],
]);
}
#[test]
fn block_test_multiple_nl_diff_block()
{
let buf = vec![0u8, 1u8, 2u8, 3u8, NL, 4u8, 5u8, 6u8, 7u8, NL, 8u8, 9u8, 10u8, 11u8 ];
let res = block(&buf, 8);
assert_eq!(res, vec![
vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE],
vec![4u8, 5u8, 6u8, 7u8, SPACE, SPACE, SPACE, SPACE],
vec![8u8, 9u8, 10u8, 11u8, SPACE, SPACE, SPACE, SPACE],
]);
}
#[test]
fn block_test_lone_nl_end()
{
let buf = vec![0u8, 1u8, 2u8, 3u8, NL];
let res = block(&buf, 4);
assert_eq!(res, vec![
vec![0u8, 1u8, 2u8, 3u8],
]);
}
#[test]
fn block_test_end_nl()
{
let buf = vec![0u8, 1u8, 2u8, NL];
let res = block(&buf, 4);
assert_eq!(res, vec![
vec![0u8, 1u8, 2u8, SPACE]
]);
}
#[test]
fn block_test_start_nl()
{
let buf = vec![NL, 0u8, 1u8, 2u8, 3u8];
let res = block(&buf, 4);
assert_eq!(res, vec![
vec![SPACE, SPACE, SPACE, SPACE],
vec![0u8, 1u8, 2u8, 3u8],
]);
}
#[test]
fn block_test_double_nl()
{
let buf = vec![0u8, 1u8, 2u8, 3u8, NL, NL, 4u8, 5u8, 6u8, 7u8];
let res = block(&buf, 8);
assert_eq!(res, vec![
vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE],
vec![SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE],
vec![4u8, 5u8, 6u8, 7u8],
]);
}
#[test]
fn block_test_double_nl_aligned()
{
let buf = vec![0u8, 1u8, 2u8, 3u8, NL, NL, 3u8, 4u8, 5u8, 6u8, 7u8, 8u8];
let res = block(&buf, 4);
assert_eq!(res, vec![
vec![0u8, 1u8, 2u8, 3u8],
vec![SPACE, SPACE, SPACE, SPACE],
vec![3u8, 4u8, 5u8, 6u8, 7u8/*, 8u8*/],
]);
}
make_block_test!(
block_cbs16,
"block-cbs-16",
File::open("./test-resources/dd-block-cbs16.test").unwrap(),
Some(16),
File::open("./test-resources/dd-block-cbs16.spec").unwrap()
);
make_block_test!(
block_cbs16_as_cbs8,
"block-cbs-16-as-cbs8",
File::open("./test-resources/dd-block-cbs16.test").unwrap(),
Some(8),
File::open("./test-resources/dd-block-cbs8.spec").unwrap()
);
make_block_test!(
block_consecutive_nl,
"block-consecutive-nl",
File::open("./test-resources/dd-block-consecutive-nl.test").unwrap(),
Some(16),
File::open("./test-resources/dd-block-consecutive-nl-cbs16.spec").unwrap()
);
@@ -0,0 +1 @@
0 01 012 0123 01234 012345 0123456 01234567 012345678 0123456789 0123456789a 0123456789ab 0123456789abc 0123456789abcd 0123456789abcde 0123456789abcdef
@@ -0,0 +1,16 @@
0
01
012
0123
01234
012345
0123456
01234567
012345678
0123456789
0123456789a
0123456789ab
0123456789abc
0123456789abcd
0123456789abcde
0123456789abcdef
@@ -0,0 +1 @@
0 01 012 0123 01234 012345 0123456 012345670123456701234567012345670123456701234567012345670123456701234567
@@ -0,0 +1 @@
pre post
@@ -0,0 +1,4 @@
pre
post
@@ -0,0 +1,16 @@
0
01
012
0123
01234
012345
0123456
01234567
012345678
0123456789
0123456789a
0123456789ab
0123456789abc
0123456789abcd
0123456789abcde
0123456789abcdef
@@ -0,0 +1 @@
0 01 012 0123 01234 012345 0123456 01234567 012345678 0123456789 0123456789a 0123456789ab 0123456789abc 0123456789abcd 0123456789abcde 0123456789abcdef
@@ -0,0 +1,32 @@
0
01
012
0123
01234
012345
0123456
01234567
01234567
8
01234567
89
01234567
89a
01234567
89ab
01234567
89abc
01234567
89abcd
01234567
89abcde
01234567
89abcdef