Skip to content

Commit 0df89e2

Browse files
committed
Add tests for missing coverage
1 parent 027a754 commit 0df89e2

File tree

2 files changed

+76
-33
lines changed

2 files changed

+76
-33
lines changed

rle/tests/test_utils.py

Lines changed: 75 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@
2525
encode_array,
2626
pixel_data,
2727
pixel_array,
28+
pack_bits,
29+
unpack_bits,
2830
)
29-
from rle.rle import pack_bits, unpack_bits
31+
from rle.rle import pack_bits as _pack_bits, unpack_bits as _unpack_bits
3032

3133

3234
INDEX_LEE = get_indexed_datasets("1.2.840.10008.1.2.1")
@@ -383,10 +385,20 @@ def test_pixel_data(self):
383385

384386

385387
class TestUnpackBits:
386-
"""Tests for unpack_bits()."""
388+
"""Tests for _unpack_bits()."""
387389

388390
@pytest.mark.parametrize("src, little, big", REFERENCE_PACK_UNPACK)
389391
def test_unpack_bytes(self, src, little, big):
392+
"""Test unpacking data without numpy."""
393+
as_bytes = pack(f"{len(little)}B", *little)
394+
assert _unpack_bits(src, 0, "<") == as_bytes
395+
assert _unpack_bits(src, 32, "<") == as_bytes
396+
as_bytes = pack(f"{len(big)}B", *big)
397+
assert _unpack_bits(src, 0, ">") == as_bytes
398+
assert _unpack_bits(src, 32, ">") == as_bytes
399+
400+
@pytest.mark.parametrize("src, little, big", REFERENCE_PACK_UNPACK)
401+
def test_unpack_bytes_util(self, src, little, big):
390402
"""Test unpacking data without numpy."""
391403
as_bytes = pack(f"{len(little)}B", *little)
392404
assert unpack_bits(src, 0, "<") == as_bytes
@@ -397,6 +409,31 @@ def test_unpack_bytes(self, src, little, big):
397409

398410
def test_count_little(self):
399411
"""Test the `count` parameter for little endian unpacking."""
412+
assert _unpack_bits(b"\x00", 1, "<") == b"\x00"
413+
assert _unpack_bits(b"\xff", 1, "<") == b"\x01"
414+
assert _unpack_bits(b"\xff", 2, "<") == b"\x01" * 2
415+
assert _unpack_bits(b"\xff", 3, "<") == b"\x01" * 3
416+
assert _unpack_bits(b"\xff", 4, "<") == b"\x01" * 4
417+
assert _unpack_bits(b"\xff", 5, "<") == b"\x01" * 5
418+
assert _unpack_bits(b"\xff", 6, "<") == b"\x01" * 6
419+
assert _unpack_bits(b"\xff", 7, "<") == b"\x01" * 7
420+
assert _unpack_bits(b"\xff", 8, "<") == b"\x01" * 8
421+
assert _unpack_bits(b"\xff\xAA", 9, "<") == b"\x01" * 8 + b"\x00"
422+
assert _unpack_bits(b"\xff\xAA", 10, "<") == b"\x01" * 8 + b"\x00\x01"
423+
assert _unpack_bits(b"\xff\xAA", 11, "<") == b"\x01" * 8 + b"\x00\x01\x00"
424+
assert _unpack_bits(b"\xff\xAA", 12, "<") == b"\x01" * 8 + b"\x00\x01" * 2
425+
assert _unpack_bits(b"\xff\xAA", 13, "<") == b"\x01" * 8 + b"\x00\x01" * 2 + b"\x00"
426+
assert _unpack_bits(b"\xff\xAA", 14, "<") == b"\x01" * 8 + b"\x00\x01" * 3
427+
assert _unpack_bits(b"\xff\xAA", 15, "<") == b"\x01" * 8 + b"\x00\x01" * 3 + b"\x00"
428+
assert _unpack_bits(b"\xff\xAA", 16, "<") == b"\x01" * 8 + b"\x00\x01" * 4
429+
430+
def test_count_little_util(self):
431+
"""Test the `count` parameter for little endian unpacking."""
432+
assert unpack_bits(b"\x00", -1, "<") == b"\x00" * 8
433+
assert unpack_bits(b"\x00", 10, "<") == b"\x00" * 8
434+
assert unpack_bits(b"\x00", None, "<") == b"\x00" * 8
435+
assert unpack_bits(b"\x00", 0, "<") == b"\x00" * 8
436+
400437
assert unpack_bits(b"\x00", 1, "<") == b"\x00"
401438
assert unpack_bits(b"\xff", 1, "<") == b"\x01"
402439
assert unpack_bits(b"\xff", 2, "<") == b"\x01" * 2
@@ -417,31 +454,31 @@ def test_count_little(self):
417454

418455
def test_count_big(self):
419456
"""Test the `count` parameter for big endian unpacking."""
420-
assert unpack_bits(b"\x00", 1, ">") == b"\x00"
421-
assert unpack_bits(b"\xff", 1, ">") == b"\x01"
422-
assert unpack_bits(b"\xff", 2, ">") == b"\x01" * 2
423-
assert unpack_bits(b"\xff", 3, ">") == b"\x01" * 3
424-
assert unpack_bits(b"\xff", 4, ">") == b"\x01" * 4
425-
assert unpack_bits(b"\xff", 5, ">") == b"\x01" * 5
426-
assert unpack_bits(b"\xff", 6, ">") == b"\x01" * 6
427-
assert unpack_bits(b"\xff", 7, ">") == b"\x01" * 7
428-
assert unpack_bits(b"\xff", 8, ">") == b"\x01" * 8
429-
assert unpack_bits(b"\xff\xAA", 9, ">") == b"\x01" * 8 + b"\x01"
430-
assert unpack_bits(b"\xff\xAA", 10, ">") == b"\x01" * 8 + b"\x01\x00"
431-
assert unpack_bits(b"\xff\xAA", 11, ">") == b"\x01" * 8 + b"\x01\x00\x01"
432-
assert unpack_bits(b"\xff\xAA", 12, ">") == b"\x01" * 8 + b"\x01\x00" * 2
433-
assert unpack_bits(b"\xff\xAA", 13, ">") == b"\x01" * 8 + b"\x01\x00" * 2 + b"\x01"
434-
assert unpack_bits(b"\xff\xAA", 14, ">") == b"\x01" * 8 + b"\x01\x00" * 3
435-
assert unpack_bits(b"\xff\xAA", 15, ">") == b"\x01" * 8 + b"\x01\x00" * 3 + b"\x01"
436-
assert unpack_bits(b"\xff\xAA", 16, ">") == b"\x01" * 8 + b"\x01\x00" * 4
457+
assert _unpack_bits(b"\x00", 1, ">") == b"\x00"
458+
assert _unpack_bits(b"\xff", 1, ">") == b"\x01"
459+
assert _unpack_bits(b"\xff", 2, ">") == b"\x01" * 2
460+
assert _unpack_bits(b"\xff", 3, ">") == b"\x01" * 3
461+
assert _unpack_bits(b"\xff", 4, ">") == b"\x01" * 4
462+
assert _unpack_bits(b"\xff", 5, ">") == b"\x01" * 5
463+
assert _unpack_bits(b"\xff", 6, ">") == b"\x01" * 6
464+
assert _unpack_bits(b"\xff", 7, ">") == b"\x01" * 7
465+
assert _unpack_bits(b"\xff", 8, ">") == b"\x01" * 8
466+
assert _unpack_bits(b"\xff\xAA", 9, ">") == b"\x01" * 8 + b"\x01"
467+
assert _unpack_bits(b"\xff\xAA", 10, ">") == b"\x01" * 8 + b"\x01\x00"
468+
assert _unpack_bits(b"\xff\xAA", 11, ">") == b"\x01" * 8 + b"\x01\x00\x01"
469+
assert _unpack_bits(b"\xff\xAA", 12, ">") == b"\x01" * 8 + b"\x01\x00" * 2
470+
assert _unpack_bits(b"\xff\xAA", 13, ">") == b"\x01" * 8 + b"\x01\x00" * 2 + b"\x01"
471+
assert _unpack_bits(b"\xff\xAA", 14, ">") == b"\x01" * 8 + b"\x01\x00" * 3
472+
assert _unpack_bits(b"\xff\xAA", 15, ">") == b"\x01" * 8 + b"\x01\x00" * 3 + b"\x01"
473+
assert _unpack_bits(b"\xff\xAA", 16, ">") == b"\x01" * 8 + b"\x01\x00" * 4
437474

438475
@pytest.mark.parametrize("src, little, big", REFERENCE_PACK_UNPACK)
439476
def test_unpack_bytearray(self, src, little, big):
440477
"""Test unpacking data without numpy."""
441478
as_bytes = pack(f"{len(little)}B", *little)
442-
assert unpack_bits(bytearray(src), 0, "<") == as_bytes
479+
assert _unpack_bits(bytearray(src), 0, "<") == as_bytes
443480
as_bytes = pack(f"{len(big)}B", *big)
444-
assert unpack_bits(bytearray(src), 0, ">") == as_bytes
481+
assert _unpack_bits(bytearray(src), 0, ">") == as_bytes
445482

446483

447484
REFERENCE_PACK_PARTIAL_LITTLE = [
@@ -489,21 +526,27 @@ class TestPackBits:
489526

490527
@pytest.mark.parametrize("output, little, big", REFERENCE_PACK_UNPACK)
491528
def test_pack_bytes(self, output, little, big):
529+
"""Test packing data."""
530+
assert output == _pack_bits(bytes(little), "<")
531+
assert output == _pack_bits(bytes(big), ">")
532+
533+
@pytest.mark.parametrize("output, little, big", REFERENCE_PACK_UNPACK)
534+
def test_pack_bytes_utils(self, output, little, big):
492535
"""Test packing data."""
493536
assert output == pack_bits(bytes(little), "<")
494537
assert output == pack_bits(bytes(big), ">")
495538

496539
@pytest.mark.parametrize("output, little, big", REFERENCE_PACK_UNPACK)
497540
def test_pack_bytearray(self, output, little, big):
498541
"""Test packing data."""
499-
assert output == pack_bits(bytearray(little), "<")
500-
assert output == pack_bits(bytearray(big), ">")
542+
assert output == _pack_bits(bytearray(little), "<")
543+
assert output == _pack_bits(bytearray(big), ">")
501544

502545
def test_non_binary_input(self):
503546
"""Test non-binary input raises exception."""
504547
msg = r"Only binary input \(containing zeros or ones\) can be packed"
505548
with pytest.raises(ValueError, match=msg):
506-
pack_bits(b"\x00\x00\x02\x00\x00\x00\x00\x00", "<")
549+
_pack_bits(b"\x00\x00\x02\x00\x00\x00\x00\x00", "<")
507550

508551
def test_bytes_input(self):
509552
"""Repeat above test with bytes input."""
@@ -516,8 +559,8 @@ def test_bytes_input(self):
516559
]
517560
)
518561
# fmt: on
519-
assert b"\x00\x55\xff" == pack_bits(src, "<")
520-
assert b"\x00\xAA\xff" == pack_bits(src, ">")
562+
assert b"\x00\x55\xff" == _pack_bits(src, "<")
563+
assert b"\x00\xAA\xff" == _pack_bits(src, ">")
521564

522565
def test_bytearry_input(self):
523566
"""Repeat above test with bytearray input."""
@@ -530,25 +573,25 @@ def test_bytearry_input(self):
530573
]
531574
)
532575
# fmt: on
533-
assert b"\x00\x55\xff" == pack_bits(src, "<")
534-
assert b"\x00\xAA\xff" == pack_bits(src, ">")
576+
assert b"\x00\x55\xff" == _pack_bits(src, "<")
577+
assert b"\x00\xAA\xff" == _pack_bits(src, ">")
535578

536579
@pytest.mark.parametrize("output, src", REFERENCE_PACK_PARTIAL_LITTLE)
537580
def test_pack_partial_bytes(self, src, output):
538581
"""Test packing data that isn't a full byte long."""
539-
assert output == pack_bits(bytes(src), "<")
582+
assert output == _pack_bits(bytes(src), "<")
540583

541584
@pytest.mark.parametrize("output, src", REFERENCE_PACK_PARTIAL_LITTLE)
542585
def test_pack_partial_bytearray(self, src, output):
543586
"""Test packing data that isn't a full byte long."""
544-
assert output == pack_bits(bytearray(src), "<")
587+
assert output == _pack_bits(bytearray(src), "<")
545588

546589
@pytest.mark.parametrize("output, src", REFERENCE_PACK_PARTIAL_BIG)
547590
def test_pack_partial_bytes_big(self, src, output):
548591
"""Test packing data that isn't a full byte long."""
549-
assert output == pack_bits(bytes(src), ">")
592+
assert output == _pack_bits(bytes(src), ">")
550593

551594
@pytest.mark.parametrize("output, src", REFERENCE_PACK_PARTIAL_BIG)
552595
def test_pack_partial_bytearray_big(self, src, output):
553596
"""Test packing data that isn't a full byte long."""
554-
assert output == pack_bits(bytearray(src), ">")
597+
assert output == _pack_bits(bytearray(src), ">")

rle/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ def pack_bits(src: bytes | bytearray, bitorder: str = "<") -> bytearray:
429429

430430

431431
def unpack_bits(
432-
src: bytes | bytearray, count: int | None = None, bitorder: str = "<"
432+
src: bytes | bytearray, count: int | None = None, bitorder: str = "<"
433433
) -> bytearray:
434434
"""Bit unpack `src`
435435

0 commit comments

Comments
 (0)