test_bitmask.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from panda3d.core import BitMask16, BitMask32, BitMask64
  2. from panda3d.core import DoubleBitMaskNative, QuadBitMaskNative
  3. import pickle
  4. import pytest
  5. double_num_bits = DoubleBitMaskNative.get_max_num_bits()
  6. quad_num_bits = QuadBitMaskNative.get_max_num_bits()
  7. def test_bitmask_type():
  8. assert BitMask16.get_class_type().name == "BitMask16"
  9. def test_bitmask_allon():
  10. assert BitMask16.all_on().is_all_on()
  11. assert BitMask32.all_on().is_all_on()
  12. assert BitMask64.all_on().is_all_on()
  13. assert DoubleBitMaskNative.all_on().is_all_on()
  14. assert QuadBitMaskNative.all_on().is_all_on()
  15. assert DoubleBitMaskNative((1 << double_num_bits) - 1).is_all_on()
  16. assert QuadBitMaskNative((1 << quad_num_bits) - 1).is_all_on()
  17. def test_bitmask_nonzero():
  18. assert not BitMask16()
  19. assert not BitMask32()
  20. assert not BitMask64()
  21. assert not DoubleBitMaskNative()
  22. assert not QuadBitMaskNative()
  23. def test_bitmask_overflow():
  24. with pytest.raises(OverflowError):
  25. DoubleBitMaskNative(1 << double_num_bits)
  26. with pytest.raises(OverflowError):
  27. QuadBitMaskNative(1 << quad_num_bits)
  28. with pytest.raises(Exception):
  29. DoubleBitMaskNative(-1)
  30. def test_bitmask_repr():
  31. repr(BitMask16(0)) == ' 0000 0000 0000 0000'
  32. def test_bitmask_int():
  33. assert int(BitMask16()) == 0
  34. assert int(BitMask16(0xfffe)) == 0xfffe
  35. assert int(BitMask32()) == 0
  36. assert int(BitMask32(1)) == 1
  37. assert int(BitMask32(1234567)) == 1234567
  38. assert int(BitMask32(0x8ff123fe)) == 0x8ff123fe
  39. assert int(BitMask32(0xffffffff)) == 0xffffffff
  40. assert int(BitMask64()) == 0
  41. assert int(BitMask64(0xfffffffffffffffe)) == 0xfffffffffffffffe
  42. assert int(DoubleBitMaskNative()) == 0
  43. assert int(DoubleBitMaskNative(1)) == 1
  44. assert int(DoubleBitMaskNative(1 << (double_num_bits // 2))) == 1 << (double_num_bits // 2)
  45. assert int(DoubleBitMaskNative(0xffff0001)) == 0xffff0001
  46. assert int(DoubleBitMaskNative((1 << double_num_bits) - 1)) == (1 << double_num_bits) - 1
  47. assert int(QuadBitMaskNative()) == 0
  48. assert int(QuadBitMaskNative(1)) == 1
  49. assert int(QuadBitMaskNative(1 << (quad_num_bits // 2))) == 1 << (quad_num_bits // 2)
  50. assert int(QuadBitMaskNative(0xffff0001feff0002)) == 0xffff0001feff0002
  51. assert int(QuadBitMaskNative((1 << quad_num_bits) - 1)) == (1 << quad_num_bits) - 1
  52. def test_bitmask_pickle():
  53. assert pickle.loads(pickle.dumps(BitMask16(0), -1)).is_zero()
  54. mask1 = BitMask16(123)
  55. data = pickle.dumps(mask1, -1)
  56. mask2 = pickle.loads(data)
  57. assert mask1 == mask2
  58. assert pickle.loads(pickle.dumps(DoubleBitMaskNative(0), -1)).is_zero()
  59. mask1 = DoubleBitMaskNative(0xffff0001)
  60. data = pickle.dumps(mask1, -1)
  61. mask2 = pickle.loads(data)
  62. assert mask1 == mask2