use block_buffer::{
generic_array::typenum::{U10, U16, U24, U4, U8},
Block, EagerBuffer, LazyBuffer,
};
#[ test]
fn test_eager_digest_pad() {
let mut buf = EagerBuffer::<U4>::default();
let inputs = [
&b"01234567" [..],
&b"89" [..],
&b"abcdefghij" [..],
&b"klmnopqrs" [..],
&b"tuv" [..],
&b"wx" [..],
];
let exp_blocks = [
(0 , &[b"0123" , b"4567" ][..]),
(2 , &[b"89ab" ][..]),
(2 , &[b"cdef" , b"ghij" ][..]),
(3 , &[b"klmn" , b"opqr" ][..]),
(4 , &[b"stuv" ][..]),
];
let exp_poses = [0 , 2 , 0 , 1 , 0 , 2 ];
let mut n = 0 ;
for (i, input) in inputs.iter().enumerate() {
buf.digest_blocks(input, |b| {
let (j, exp) = exp_blocks[n];
n += 1 ;
assert_eq!(i, j);
assert_eq!(b.len(), exp.len());
assert!(b.iter().zip(exp.iter()).all(|v| v.0 [..] == v.1 [..]));
});
assert_eq!(exp_poses[i], buf.get_pos());
}
assert_eq!(buf.pad_with_zeros()[..], b"wx\0\0" [..]);
assert_eq!(buf.get_pos(), 0 );
}
#[ test]
fn test_lazy_digest_pad() {
let mut buf = LazyBuffer::<U4>::default();
let inputs = [
&b"01234567" [..],
&b"89" [..],
&b"abcdefghij" [..],
&b"klmnopqrs" [..],
];
let expected = [
(0 , &[b"0123" ][..]),
(1 , &[b"4567" ][..]),
(2 , &[b"89ab" ][..]),
(2 , &[b"cdef" ][..]),
(3 , &[b"ghij" ][..]),
(3 , &[b"klmn" , b"opqr" ][..]),
];
let exp_poses = [4 , 2 , 4 , 1 ];
let mut n = 0 ;
for (i, input) in inputs.iter().enumerate() {
buf.digest_blocks(input, |b| {
let (j, exp) = expected[n];
n += 1 ;
assert_eq!(i, j);
assert_eq!(b.len(), exp.len());
assert!(b.iter().zip(exp.iter()).all(|v| v.0 [..] == v.1 [..]));
});
assert_eq!(exp_poses[i], buf.get_pos());
}
assert_eq!(buf.pad_with_zeros()[..], b"s\0\0\0" [..]);
assert_eq!(buf.get_pos(), 0 );
}
#[ test]
fn test_eager_set_data() {
let mut buf = EagerBuffer::<U4>::default();
let mut n = 0 u8;
let mut gen = |blocks: &mut [Block<U4>]| {
for block in blocks {
block.iter_mut().for_each(|b| *b = n);
n += 1 ;
}
};
let mut out = [0 u8; 6 ];
buf.set_data(&mut out, &mut gen );
assert_eq!(out, [0 , 0 , 0 , 0 , 1 , 1 ]);
assert_eq!(buf.get_pos(), 2 );
let mut out = [0 u8; 3 ];
buf.set_data(&mut out, &mut gen );
assert_eq!(out, [1 , 1 , 2 ]);
assert_eq!(buf.get_pos(), 1 );
let mut out = [0 u8; 3 ];
buf.set_data(&mut out, &mut gen );
assert_eq!(out, [2 , 2 , 2 ]);
assert_eq!(n, 3 );
assert_eq!(buf.get_pos(), 0 );
}
#[ test]
#[ rustfmt::skip]
fn test_eager_paddings() {
let mut buf_be = EagerBuffer::<U8>::new(&[0 x42]);
let mut buf_le = buf_be.clone();
let mut out_be = Vec::<u8>::new();
let mut out_le = Vec::<u8>::new();
let len = 0 x0001_0203_0405_0607;
buf_be.len64_padding_be(len, |block| out_be.extend(block));
buf_le.len64_padding_le(len, |block| out_le.extend(block));
assert_eq!(
out_be,
[
0 x42, 0 x80, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00,
0 x00, 0 x01, 0 x02, 0 x03, 0 x04, 0 x05, 0 x06, 0 x07,
],
);
assert_eq!(
out_le,
[
0 x42, 0 x80, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00,
0 x07, 0 x06, 0 x05, 0 x04, 0 x03, 0 x02, 0 x01, 0 x00,
],
);
let mut buf_be = EagerBuffer::<U10>::new(&[0 x42]);
let mut buf_le = buf_be.clone();
let mut out_be = Vec::<u8>::new();
let mut out_le = Vec::<u8>::new();
buf_be.len64_padding_be(len, |block| out_be.extend(block));
buf_le.len64_padding_le(len, |block| out_le.extend(block));
assert_eq!(
out_be,
[0 x42, 0 x80, 0 x00, 0 x01, 0 x02, 0 x03, 0 x04, 0 x05, 0 x06, 0 x07],
);
assert_eq!(
out_le,
[0 x42, 0 x80, 0 x07, 0 x06, 0 x05, 0 x04, 0 x03, 0 x02, 0 x01, 0 x00],
);
let mut buf = EagerBuffer::<U16>::new(&[0 x42]);
let mut out = Vec::<u8>::new();
let len = 0 x0001_0203_0405_0607_0809_0a0b_0c0d_0e0f;
buf.len128_padding_be(len, |block| out.extend(block));
assert_eq!(
out,
[
0 x42, 0 x80, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00,
0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00,
0 x00, 0 x01, 0 x02, 0 x03, 0 x04, 0 x05, 0 x06, 0 x07,
0 x08, 0 x09, 0 x0a, 0 x0b, 0 x0c, 0 x0d, 0 x0e, 0 x0f,
],
);
let mut buf = EagerBuffer::<U24>::new(&[0 x42]);
let mut out = Vec::<u8>::new();
let len = 0 x0001_0203_0405_0607_0809_0a0b_0c0d_0e0f;
buf.len128_padding_be(len, |block| out.extend(block));
assert_eq!(
out,
[
0 x42, 0 x80, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00,
0 x00, 0 x01, 0 x02, 0 x03, 0 x04, 0 x05, 0 x06, 0 x07,
0 x08, 0 x09, 0 x0a, 0 x0b, 0 x0c, 0 x0d, 0 x0e, 0 x0f,
],
);
let mut buf = EagerBuffer::<U4>::new(&[0 x42]);
let mut out = Vec::<u8>::new();
buf.digest_pad(0 xff, &[0 x10, 0 x11, 0 x12], |block| out.extend(block));
assert_eq!(
out,
[0 x42, 0 xff, 0 x00, 0 x00, 0 x00, 0 x10, 0 x11, 0 x12],
);
let mut buf = EagerBuffer::<U4>::new(&[0 x42]);
let mut out = Vec::<u8>::new();
buf.digest_pad(0 xff, &[0 x10, 0 x11], |block| out.extend(block));
assert_eq!(
out,
[0 x42, 0 xff, 0 x10, 0 x11],
);
}
#[ test]
fn test_try_new() {
assert!(EagerBuffer::<U4>::try_new(&[0 ; 3 ]).is_ok());
assert!(EagerBuffer::<U4>::try_new(&[0 ; 4 ]).is_err());
assert!(LazyBuffer::<U4>::try_new(&[0 ; 4 ]).is_ok());
assert!(LazyBuffer::<U4>::try_new(&[0 ; 5 ]).is_err());
}
Messung V0.5 in Prozent C=90 H=98 G=94
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-18)
¤
*© Formatika GbR, Deutschland