901_array2d_extra1.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. from array2d import array2d, chunked_array2d
  2. from vmath import color32, vec2i
  3. '''
  4. src/modules/array2d.c
  5. '''
  6. # =====array2d_like_render
  7. data = [
  8. [1,2,3],
  9. [4,5,6],
  10. ]
  11. assert array2d.fromlist(data).render() == "123\n456"
  12. # ====array2d_like_render_with_color
  13. text_data = []
  14. color_fg = []
  15. color_bg = []
  16. for i in range(51):
  17. r = i * 5 # r in [0,5,10,15...250,255]
  18. g = i * 5 # g in [0,5,10,15...250,255]
  19. row_fg = []
  20. row_bg = []
  21. row_text_data = []
  22. for j in range(51):
  23. b = j * 5 # j in [0,5,10,15...250,255]
  24. row_fg.append(color32(255-r, 255-g, 255-b, 255))
  25. row_bg.append(color32(r, g, b, 255))
  26. row_text_data.append("A")
  27. color_fg.append(row_fg)
  28. color_bg.append(row_bg)
  29. text_data.append(row_text_data)
  30. array2d.fromlist(text_data).render_with_color(
  31. array2d.fromlist(color_fg),
  32. array2d.fromlist(color_bg)
  33. )
  34. array2d.fromlist(text_data).render_with_color(
  35. array2d.fromlist(color_fg),
  36. array2d(51, 51, None)
  37. )
  38. array2d.fromlist(text_data).render_with_color(
  39. array2d(51, 51, None),
  40. array2d.fromlist(color_bg)
  41. )
  42. # (curr_fg.u32 != 0 || curr_bg.u32 != 0) == false
  43. array2d.fromlist(text_data).render_with_color(
  44. array2d(51, 51, None),
  45. array2d(51, 51, None)
  46. )
  47. try:
  48. array2d.fromlist(text_data).render_with_color(
  49. array2d.fromlist(color_fg),
  50. array2d(51, 51, 1)
  51. )
  52. assert False, "here expect a TypeError"
  53. except TypeError as e:
  54. assert "color32" in str(e) or "None" in str(e)
  55. try:
  56. array2d.fromlist(text_data).render_with_color(
  57. array2d(51, 51, 1),
  58. array2d.fromlist(color_bg)
  59. )
  60. assert False, "here expect a TypeError"
  61. except TypeError as e:
  62. assert "color32" in str(e) or "None" in str(e)
  63. # ====array2d_like_any
  64. data = [[False, False], [False, False]]
  65. assert array2d.fromlist(data).any() == False
  66. # ====c11_array2d_view__set
  67. data = chunked_array2d(4)
  68. data[vec2i(3,3)] = 0
  69. data.view()[1,1] = 10
  70. assert data.view() == array2d.fromlist([
  71. [None, None, None, None,],
  72. [None, 10, None, None,],
  73. [None, None, 0, None,],
  74. [None, None, None, None,],
  75. ])
  76. # ====array2d_view_origin
  77. assert data.view()[vec2i(1,1)-data.view().origin] == data[vec2i(1,1)]
  78. assert data.view()[vec2i(3,3)-data.view().origin] == data[vec2i(3,3)]
  79. # ====chunked_array2d__delitem__
  80. data = chunked_array2d(4)
  81. for i in range(10):
  82. for j in range(10):
  83. data[vec2i(i,j)] = 10
  84. del data[vec2i(0,0)]
  85. assert data[vec2i(0,0)] == data.default
  86. # ====chunked_array2d__len__
  87. data = chunked_array2d(4)
  88. for i in range(10):
  89. for j in range(10):
  90. data[vec2i(i,j)] = 10
  91. assert len(data) == 9
  92. # ====c11_chunked_array2d__mark
  93. import gc
  94. def gc_collect_callback(statue, msg):
  95. if statue == 'stop':
  96. for line in msg.split('\n'):
  97. print(line)
  98. if "5290" in line and "str" in line:
  99. return
  100. print(msg)
  101. raise AssertionError("Expected GC output not found")
  102. gc.collect()
  103. gc.setup_debug_callback(gc_collect_callback)
  104. def create_garbage():
  105. data = chunked_array2d(4)
  106. # [str ] small: 0 large: 5290
  107. for x in range(23):
  108. for y in range(230):
  109. data[vec2i(x, y)] = "garbage"*100
  110. create_garbage()
  111. gc.collect()
  112. # ====chunked_array2d_view_chunks
  113. data = chunked_array2d(4, default = 0)
  114. data[vec2i(-10,-10)] = -1
  115. assert data.view_chunks(vec2i(-3, -3), 6, 6)[vec2i(2, 2)] == -1
  116. data.view_chunks(vec2i(-3, -3), 6, 6)[vec2i(22, 22)] = 1
  117. assert data[vec2i(10,10)] == 1