test_sparsearray.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. from panda3d import core
  2. def test_sparse_array_set_bit_to():
  3. """Tests SparseArray behavior for set_bit_to()."""
  4. s = core.SparseArray()
  5. s.set_bit_to(5, True)
  6. assert s.get_bit(5)
  7. s = core.SparseArray.all_on()
  8. s.set_bit_to(5, False)
  9. assert not s.get_bit(5)
  10. def test_sparse_array_clear():
  11. """Tests SparseArray behavior for clear()."""
  12. s = core.SparseArray.all_on()
  13. s.clear()
  14. assert s.is_zero()
  15. assert not s.is_inverse()
  16. assert s.get_num_subranges() == 0
  17. assert s.get_num_on_bits() == 0
  18. assert s.get_num_bits() == 0
  19. s = core.SparseArray()
  20. s.set_range(5, 10)
  21. s.clear()
  22. assert s.is_zero()
  23. assert not s.is_inverse()
  24. assert s.get_num_subranges() == 0
  25. assert s.get_num_on_bits() == 0
  26. assert s.get_num_bits() == 0
  27. def test_sparse_array_clear_range():
  28. """Tests SparseArray behavior for clear_range()."""
  29. # test clear_range with single overlapping on-range
  30. # (clear_range extends beyond highest on-bit)
  31. s = core.SparseArray()
  32. s.set_range(2, 3)
  33. s.clear_range(3, 3)
  34. assert s.get_bit(2)
  35. assert not s.get_bit(3)
  36. # same as above, using set_range_to
  37. s = core.SparseArray()
  38. s.set_range_to(True, 2, 3)
  39. s.set_range_to(False, 3, 3)
  40. assert s.get_bit(2)
  41. assert not s.get_bit(3)
  42. # test clear_range using off-range which overlaps two on-ranges
  43. # (lowest off-bit in lowest on-range, highest off-bit in highest on-range)
  44. s = core.SparseArray()
  45. s.set_range(2, 3)
  46. s.set_range(7, 3)
  47. s.clear_range(3, 6)
  48. assert s.get_bit(2)
  49. assert not s.get_bit(3)
  50. assert not s.get_bit(8)
  51. assert s.get_bit(9)
  52. # same as above, using set_range_to
  53. s = core.SparseArray()
  54. s.set_range_to(True, 2, 3)
  55. s.set_range_to(True, 7, 3)
  56. s.set_range_to(False, 3, 6)
  57. assert s.get_bit(2)
  58. assert not s.get_bit(3)
  59. assert not s.get_bit(8)
  60. assert s.get_bit(9)
  61. def test_sparse_array_set_range():
  62. """Tests SparseArray behavior for set_range()."""
  63. # test set_range with single overlapping off-range
  64. # (set_range extends beyond highest off-bit)
  65. s = core.SparseArray.all_on()
  66. s.clear_range(2, 3)
  67. s.set_range(3, 3)
  68. assert not s.get_bit(2)
  69. assert s.get_bit(3)
  70. # same as above, using set_range_to
  71. s = core.SparseArray.all_on()
  72. s.set_range_to(False, 2, 3)
  73. s.set_range_to(True, 3, 3)
  74. assert not s.get_bit(2)
  75. assert s.get_bit(3)
  76. # test set_range using on-range which overlaps two off-ranges
  77. # (lowest on-bit in lowest off-range, highest on-bit in highest off-range)
  78. s = core.SparseArray.all_on()
  79. s.clear_range(2, 3)
  80. s.clear_range(7, 3)
  81. s.set_range(3, 6)
  82. assert not s.get_bit(2)
  83. assert s.get_bit(3)
  84. assert s.get_bit(8)
  85. assert not s.get_bit(9)
  86. # same as above, using set_range_to
  87. s = core.SparseArray.all_on()
  88. s.set_range_to(False, 2, 3)
  89. s.set_range_to(False, 7, 3)
  90. s.set_range_to(True, 3, 6)
  91. assert not s.get_bit(2)
  92. assert s.get_bit(3)
  93. assert s.get_bit(8)
  94. assert not s.get_bit(9)
  95. def test_sparse_array_bits_in_common():
  96. """Tests SparseArray behavior for has_bits_in_common()."""
  97. s = core.SparseArray()
  98. t = core.SparseArray()
  99. s.set_range(2, 4)
  100. t.set_range(5, 4)
  101. assert s.has_bits_in_common(t)
  102. s = core.SparseArray()
  103. t = core.SparseArray()
  104. s.set_range(2, 4)
  105. t.set_range(6, 4)
  106. assert not s.has_bits_in_common(t)
  107. def test_sparse_array_operations():
  108. """Tests SparseArray behavior for various operations."""
  109. # test bitshift to left
  110. s = core.SparseArray()
  111. s.set_bit(2)
  112. t = s << 2
  113. assert t.get_bit(4)
  114. assert not t.get_bit(2)
  115. # test bitshift to right
  116. s = core.SparseArray()
  117. s.set_bit(4)
  118. t = s >> 2
  119. assert t.get_bit(2)
  120. assert not t.get_bit(4)
  121. # test bitwise AND
  122. s = core.SparseArray()
  123. t = core.SparseArray()
  124. s.set_bit(2)
  125. s.set_bit(3)
  126. t.set_bit(1)
  127. t.set_bit(3)
  128. u = s & t
  129. assert not u.get_bit(0)
  130. assert not u.get_bit(1)
  131. assert not u.get_bit(2)
  132. assert u.get_bit(3)
  133. # test bitwise OR
  134. s = core.SparseArray()
  135. t = core.SparseArray()
  136. s.set_bit(2)
  137. s.set_bit(3)
  138. t.set_bit(1)
  139. t.set_bit(3)
  140. u = s | t
  141. assert not u.get_bit(0)
  142. assert u.get_bit(1)
  143. assert u.get_bit(2)
  144. assert u.get_bit(3)
  145. # test bitwise XOR
  146. s = core.SparseArray()
  147. t = core.SparseArray()
  148. s.set_bit(2)
  149. s.set_bit(3)
  150. t.set_bit(1)
  151. t.set_bit(3)
  152. u = s ^ t
  153. assert not u.get_bit(0)
  154. assert u.get_bit(1)
  155. assert u.get_bit(2)
  156. assert not u.get_bit(3)
  157. def test_sparse_array_augm_assignment():
  158. """Tests SparseArray behavior for augmented assignments."""
  159. # test in-place bitshift to left
  160. s = t = core.SparseArray()
  161. t <<= 2
  162. assert s is t
  163. # test in-place bitshift to right
  164. s = t = core.SparseArray()
  165. t >>= 2
  166. assert s is t
  167. # test in-place bitwise AND
  168. s = t = core.SparseArray()
  169. u = core.SparseArray()
  170. t &= u
  171. assert s is t
  172. # test in-place bitwise OR
  173. s = t = core.SparseArray()
  174. u = core.SparseArray()
  175. t |= u
  176. assert s is t
  177. # test in-place bitwise XOR
  178. s = t = core.SparseArray()
  179. u = core.SparseArray()
  180. t ^= u
  181. assert s is t