99 lines
3.0 KiB
Python
99 lines
3.0 KiB
Python
from panda3d.core import BitMask16, BitMask32, BitMask64
|
|
from panda3d.core import DoubleBitMaskNative, QuadBitMaskNative
|
|
import pickle
|
|
import pytest
|
|
|
|
|
|
double_num_bits = DoubleBitMaskNative.get_max_num_bits()
|
|
quad_num_bits = QuadBitMaskNative.get_max_num_bits()
|
|
|
|
|
|
def test_bitmask_type():
|
|
assert BitMask16.get_class_type().name == "BitMask16"
|
|
|
|
|
|
def test_bitmask_allon():
|
|
assert BitMask16.all_on().is_all_on()
|
|
assert BitMask32.all_on().is_all_on()
|
|
assert BitMask64.all_on().is_all_on()
|
|
assert DoubleBitMaskNative.all_on().is_all_on()
|
|
assert QuadBitMaskNative.all_on().is_all_on()
|
|
|
|
assert DoubleBitMaskNative((1 << double_num_bits) - 1).is_all_on()
|
|
assert QuadBitMaskNative((1 << quad_num_bits) - 1).is_all_on()
|
|
|
|
|
|
def test_bitmask_nonzero():
|
|
assert not BitMask16()
|
|
assert not BitMask32()
|
|
assert not BitMask64()
|
|
assert not DoubleBitMaskNative()
|
|
assert not QuadBitMaskNative()
|
|
|
|
|
|
def test_bitmask_overflow():
|
|
with pytest.raises(OverflowError):
|
|
DoubleBitMaskNative(1 << double_num_bits)
|
|
|
|
with pytest.raises(OverflowError):
|
|
QuadBitMaskNative(1 << quad_num_bits)
|
|
|
|
with pytest.raises(Exception):
|
|
DoubleBitMaskNative(-1)
|
|
|
|
|
|
def test_bitmask_repr():
|
|
repr(BitMask16(0)) == ' 0000 0000 0000 0000'
|
|
|
|
|
|
def test_bitmask_int():
|
|
assert int(BitMask16()) == 0
|
|
assert int(BitMask16(0xfffe)) == 0xfffe
|
|
|
|
assert int(BitMask32()) == 0
|
|
assert int(BitMask32(1)) == 1
|
|
assert int(BitMask32(1234567)) == 1234567
|
|
assert int(BitMask32(0x8ff123fe)) == 0x8ff123fe
|
|
assert int(BitMask32(0xffffffff)) == 0xffffffff
|
|
|
|
assert int(BitMask64()) == 0
|
|
assert int(BitMask64(0xfffffffffffffffe)) == 0xfffffffffffffffe
|
|
|
|
assert int(DoubleBitMaskNative()) == 0
|
|
assert int(DoubleBitMaskNative(1)) == 1
|
|
assert int(DoubleBitMaskNative(1 << (double_num_bits // 2))) == 1 << (double_num_bits // 2)
|
|
assert int(DoubleBitMaskNative(0xffff0001)) == 0xffff0001
|
|
assert int(DoubleBitMaskNative((1 << double_num_bits) - 1)) == (1 << double_num_bits) - 1
|
|
|
|
assert int(QuadBitMaskNative()) == 0
|
|
assert int(QuadBitMaskNative(1)) == 1
|
|
assert int(QuadBitMaskNative(1 << (quad_num_bits // 2))) == 1 << (quad_num_bits // 2)
|
|
assert int(QuadBitMaskNative(0xffff0001feff0002)) == 0xffff0001feff0002
|
|
assert int(QuadBitMaskNative((1 << quad_num_bits) - 1)) == (1 << quad_num_bits) - 1
|
|
|
|
|
|
def test_bitmask_pickle():
|
|
assert pickle.loads(pickle.dumps(BitMask16(0), -1)).is_zero()
|
|
|
|
mask1 = BitMask16(123)
|
|
data = pickle.dumps(mask1, -1)
|
|
mask2 = pickle.loads(data)
|
|
assert mask1 == mask2
|
|
|
|
assert pickle.loads(pickle.dumps(DoubleBitMaskNative(0), -1)).is_zero()
|
|
|
|
mask1 = DoubleBitMaskNative(0xffff0001)
|
|
data = pickle.dumps(mask1, -1)
|
|
mask2 = pickle.loads(data)
|
|
assert mask1 == mask2
|
|
|
|
mask1 = DoubleBitMaskNative(0x7fffffffffffffff)
|
|
data = pickle.dumps(mask1, -1)
|
|
mask2 = pickle.loads(data)
|
|
assert mask1 == mask2
|
|
|
|
mask1 = DoubleBitMaskNative(1 << (double_num_bits - 1))
|
|
data = pickle.dumps(mask1, -1)
|
|
mask2 = pickle.loads(data)
|
|
assert mask1 == mask2
|