Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# Copyright (C) 2024, UChicago Argonne, LLC
# Licensed under the 3-clause BSD license. See accompanying LICENSE.txt file
# in the top-level directory.
import pytest
from contextlib import nullcontext
from Octeres.bitmask import EnhancedBitmask as eb
from Octeres.bitmask import BitmaskSerializer
from Octeres.bitmask.bitmask_lite import LiteBitmask, LiteBitmaskSlots, convert_bitmask_to_litebitmask, intersection_all
BitS = BitmaskSerializer()
def fixtures_encode_decode_bitmask_to_hex():
deck = [
pytest.param("bad", 10, 'ff', eb.ones(8), LiteBitmask.ones(8), pytest.raises(Exception)),
pytest.param("good", 8, 'ff', eb.ones(8), LiteBitmask.ones(8), nullcontext(enter_result=True)),
pytest.param("good", 7, 'ff', eb.ones(7), LiteBitmask.ones(7), nullcontext(enter_result=True)),
pytest.param("good", 36, '00000aa00', eb.zeros_and_set_bits(36, [20, 22, 24, 26]),
LiteBitmask.zeros_and_set_bits(36, [20, 22, 24, 26]), nullcontext(enter_result=True)),
pytest.param("good", 36, 'fffffffff', eb.ones(36),
LiteBitmask.zeros_and_set_intervals(36, [[0, 35]]), nullcontext(enter_result=True)),
# pytest.param("good", 12, 'aaa', eb.ones(12),
# LiteBitmask.zeros_and_set_intervals(36, [[0, 35]]), nullcontext(enter_result=True)),
pytest.param("good", 16, 'aaaa', eb.zeros_and_set_bits(16, [0, 2, 4, 6, 8, 10, 12, 14]),
LiteBitmask.zeros_and_set_bits(16, [0, 2, 4, 6, 8, 10, 12, 14]), nullcontext(enter_result=True)),
pytest.param("good", 16, '5555', eb.zeros_and_set_bits(16, [1, 3, 5, 7, 9, 11, 13, 15]),
LiteBitmask.zeros_and_set_bits(16, [1, 3, 5, 7, 9, 11, 13, 15]), nullcontext(enter_result=True)),
]
return deck
@pytest.mark.parametrize("comment,length,hexmask,eb_bitmask,l_bitmask,expectation", fixtures_encode_decode_bitmask_to_hex())
def test_encode_decode_bitmask_to_hex(comment, length, hexmask, eb_bitmask: eb, l_bitmask: LiteBitmask, expectation):
with expectation:
eb_bitmask_r = BitS.decode_hex_to_bitmask(hexmask, limit=length)
l_bitmask_r = convert_bitmask_to_litebitmask(eb_bitmask_r)
for x in range(1000):
l_bitmask_r2 = BitS.decode_hex_to_litebitmask(hexmask, limit=length)
# todo:
# add code to encode it to hexmask and then back again, asserting correctness.
# check validation of each of the bitmasks provided.
s_bitmask_r = l_bitmask_r.to_slots()
s_bitmask_r2 = l_bitmask_r2.to_slots()
print(eb_bitmask_r)
assert intersection_all(l_bitmask_r, l_bitmask)
assert eb_bitmask_r.intersection_all(eb_bitmask)
assert intersection_all(s_bitmask_r, s_bitmask_r2)