Skip to content

Commit ed51819

Browse files
authored
test: more iter_bits test cases (#5336)
Signed-off-by: Alexander Droste <[email protected]>
1 parent 9d938cd commit ed51819

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

vortex-buffer/src/bit/buf.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,9 @@ mod tests {
587587
#[case(3, 8)]
588588
#[case(5, 10)]
589589
#[case(2, 16)]
590+
#[case(8, 16)]
591+
#[case(9, 16)]
592+
#[case(17, 16)]
590593
fn test_iter_bits_with_offset(#[case] offset: usize, #[case] len: usize) {
591594
let total_bits = offset + len;
592595
let buf = BitBuffer::collect_bool(total_bits, |i| i % 2 == 0);
@@ -604,4 +607,36 @@ mod tests {
604607
assert_eq!(is_set, (offset + idx) % 2 == 0);
605608
}
606609
}
610+
611+
#[rstest]
612+
#[case(8, 10)]
613+
#[case(9, 7)]
614+
#[case(16, 8)]
615+
#[case(17, 10)]
616+
fn test_iter_bits_catches_wrong_byte_offset(#[case] offset: usize, #[case] len: usize) {
617+
let total_bits = offset + len;
618+
// Alternating pattern to catch byte offset errors: Bits are set for even indexed bytes.
619+
let buf = BitBuffer::collect_bool(total_bits, |i| (i / 8) % 2 == 0);
620+
621+
let buf_with_offset = BitBuffer::new_with_offset(buf.inner().clone(), len, offset);
622+
623+
let mut collected = Vec::new();
624+
buf_with_offset.iter_bits(|idx, is_set| {
625+
collected.push((idx, is_set));
626+
});
627+
628+
assert_eq!(collected.len(), len);
629+
630+
for (idx, is_set) in collected {
631+
let bit_position = offset + idx;
632+
let byte_index = bit_position / 8;
633+
let expected_is_set = byte_index % 2 == 0;
634+
635+
assert_eq!(
636+
is_set, expected_is_set,
637+
"Bit mismatch at index {}: expected {} got {}",
638+
bit_position, expected_is_set, is_set
639+
);
640+
}
641+
}
607642
}

0 commit comments

Comments
 (0)