forked from panda3d/panda3d
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_bitarray.py
More file actions
142 lines (106 loc) · 3.7 KB
/
test_bitarray.py
File metadata and controls
142 lines (106 loc) · 3.7 KB
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
from panda3d.core import BitArray, SparseArray
import pickle
import pytest
def test_bitarray_type():
assert BitArray.get_class_type().name == "BitArray"
def test_bitarray_constructor():
assert BitArray().is_zero()
assert BitArray(0).is_zero()
ba = BitArray(0x10000000000000000000000000)
assert ba.get_lowest_on_bit() == 100
assert ba.get_highest_on_bit() == 100
with pytest.raises(Exception):
assert BitArray(-1)
with pytest.raises(Exception):
assert BitArray(-10000000000000000000)
def test_bitarray_constructor_sparse():
# Create a BitArray from a SparseArray.
ba = BitArray(SparseArray.all_on())
assert ba.is_all_on()
ba = BitArray(SparseArray())
assert ba.is_zero()
sa = SparseArray()
sa.set_range(3, 64)
sa.set_range(0, 1)
sa.clear_range(60, 2)
ba = BitArray(sa)
exp = 0b1111100111111111111111111111111111111111111111111111111111111111001
assert ba.__getstate__() == exp
sa.invert_in_place()
ba = BitArray(sa)
assert ba.__getstate__() == ~exp
def test_bitarray_allon():
assert BitArray.all_on().is_all_on()
assert BitArray.all_on().get_highest_on_bit() == -1
assert BitArray.all_on().get_highest_off_bit() == -1
def test_bitarray_nonzero():
assert not BitArray()
assert not BitArray(0)
assert BitArray(1)
assert BitArray.all_on()
def test_bitarray_invert():
assert ~BitArray(0) != BitArray(0)
assert (~BitArray(0)).is_all_on()
assert ~~BitArray(0) == BitArray(0)
assert ~~BitArray(123) == BitArray(123)
def test_bitarray_set_word():
# Non-inverted
expected = 9876 | (123456 << (BitArray.num_bits_per_word * 3))
ba = BitArray(0)
ba.set_word(0, 9876)
ba.set_word(3, 123456)
assert ba.__getstate__() == expected
assert not ba.is_all_on()
# Inverted
ba = BitArray(0)
ba.invert_in_place()
ba.set_word(2, 1234)
full_word = (1 << BitArray.num_bits_per_word) - 1
expected = ~((full_word & ~1234) << (BitArray.num_bits_per_word * 2))
assert ba.__getstate__() == expected
assert not ba.is_all_on()
def test_bitarray_clear():
ba = BitArray(1234)
ba.clear()
assert ba.is_zero()
assert not ba.is_all_on()
assert ba.get_highest_on_bit() == -1
assert ba.get_highest_off_bit() == -1
ba = BitArray.all_on()
ba.clear()
assert ba.is_zero()
assert not ba.is_all_on()
assert ba.get_highest_on_bit() == -1
assert ba.get_highest_off_bit() == -1
def test_bitarray_getstate():
assert BitArray().__getstate__() == 0
assert BitArray(0).__getstate__() == 0
assert BitArray(100).__getstate__() == 100
assert BitArray(9870000000000000000).__getstate__() == 9870000000000000000
assert BitArray.all_on().__getstate__() == -1
assert (~BitArray(100).__getstate__()) == ~100
assert (~BitArray(812000000000000000).__getstate__()) == ~812000000000000000
def test_bitarray_pickle():
ba = BitArray()
assert ba == pickle.loads(pickle.dumps(ba, -1))
ba = BitArray(0)
assert ba == pickle.loads(pickle.dumps(ba, -1))
ba = BitArray(123)
assert ba == pickle.loads(pickle.dumps(ba, -1))
ba = BitArray(94187049178237918273981729127381723)
assert ba == pickle.loads(pickle.dumps(ba, -1))
ba = ~BitArray(94187049178237918273981729127381723)
assert ba == pickle.loads(pickle.dumps(ba, -1))
def test_bitarray_has_any_of():
ba = BitArray()
assert not ba.has_any_of(100, 200)
ba = BitArray()
ba.set_range(0, 53)
assert ba.has_any_of(52, 1)
assert ba.has_any_of(52, 100)
assert not ba.has_any_of(53, 45)
ba = BitArray()
ba.invert_in_place()
assert ba.has_any_of(0, 1)
assert ba.has_any_of(53, 45)
assert ba.has_any_of(0, 100)