|
|
@@ -0,0 +1,145 @@
|
|
|
+from array2d import array2d, chunked_array2d
|
|
|
+from vmath import color32, vec2i
|
|
|
+
|
|
|
+'''
|
|
|
+src/modules/array2d.c
|
|
|
+'''
|
|
|
+
|
|
|
+# =====array2d_like_render
|
|
|
+data = [
|
|
|
+ [1,2,3],
|
|
|
+ [4,5,6],
|
|
|
+]
|
|
|
+assert array2d.fromlist(data).render() == "123\n456"
|
|
|
+
|
|
|
+# ====array2d_like_render_with_color
|
|
|
+text_data = []
|
|
|
+color_fg = []
|
|
|
+color_bg = []
|
|
|
+for i in range(51):
|
|
|
+ r = i * 5 # r in [0,5,10,15...250,255]
|
|
|
+ g = i * 5 # g in [0,5,10,15...250,255]
|
|
|
+
|
|
|
+ row_fg = []
|
|
|
+ row_bg = []
|
|
|
+ row_text_data = []
|
|
|
+ for j in range(51):
|
|
|
+ b = j * 5 # j in [0,5,10,15...250,255]
|
|
|
+ row_fg.append(color32(255-r, 255-g, 255-b, 255))
|
|
|
+ row_bg.append(color32(r, g, b, 255))
|
|
|
+ row_text_data.append("A")
|
|
|
+
|
|
|
+ color_fg.append(row_fg)
|
|
|
+ color_bg.append(row_bg)
|
|
|
+ text_data.append(row_text_data)
|
|
|
+
|
|
|
+
|
|
|
+array2d.fromlist(text_data).render_with_color(
|
|
|
+ array2d.fromlist(color_fg),
|
|
|
+ array2d.fromlist(color_bg)
|
|
|
+ )
|
|
|
+
|
|
|
+array2d.fromlist(text_data).render_with_color(
|
|
|
+ array2d.fromlist(color_fg),
|
|
|
+ array2d(51, 51, None)
|
|
|
+ )
|
|
|
+
|
|
|
+array2d.fromlist(text_data).render_with_color(
|
|
|
+ array2d(51, 51, None),
|
|
|
+ array2d.fromlist(color_bg)
|
|
|
+ )
|
|
|
+
|
|
|
+# (curr_fg.u32 != 0 || curr_bg.u32 != 0) == false
|
|
|
+array2d.fromlist(text_data).render_with_color(
|
|
|
+ array2d(51, 51, None),
|
|
|
+ array2d(51, 51, None)
|
|
|
+ )
|
|
|
+
|
|
|
+try:
|
|
|
+ array2d.fromlist(text_data).render_with_color(
|
|
|
+ array2d.fromlist(color_fg),
|
|
|
+ array2d(51, 51, 1)
|
|
|
+ )
|
|
|
+ assert False, "here expect a TypeError"
|
|
|
+except TypeError as e:
|
|
|
+ assert "color32" in str(e) or "None" in str(e)
|
|
|
+
|
|
|
+try:
|
|
|
+ array2d.fromlist(text_data).render_with_color(
|
|
|
+ array2d(51, 51, 1),
|
|
|
+ array2d.fromlist(color_bg)
|
|
|
+ )
|
|
|
+ assert False, "here expect a TypeError"
|
|
|
+except TypeError as e:
|
|
|
+ assert "color32" in str(e) or "None" in str(e)
|
|
|
+
|
|
|
+
|
|
|
+# ====array2d_like_any
|
|
|
+data = [[False, False], [False, False]]
|
|
|
+assert array2d.fromlist(data).any() == False
|
|
|
+
|
|
|
+# ====c11_array2d_view__set
|
|
|
+data = chunked_array2d(4)
|
|
|
+data[vec2i(3,3)] = 0
|
|
|
+data.view()[1,1] = 10
|
|
|
+assert data.view() == array2d.fromlist([
|
|
|
+ [None, None, None, None,],
|
|
|
+ [None, 10, None, None,],
|
|
|
+ [None, None, 0, None,],
|
|
|
+ [None, None, None, None,],
|
|
|
+ ])
|
|
|
+
|
|
|
+# ====array2d_view_origin
|
|
|
+assert data.view()[vec2i(1,1)-data.view().origin] == data[vec2i(1,1)]
|
|
|
+assert data.view()[vec2i(3,3)-data.view().origin] == data[vec2i(3,3)]
|
|
|
+
|
|
|
+# ====chunked_array2d__delitem__
|
|
|
+data = chunked_array2d(4)
|
|
|
+for i in range(10):
|
|
|
+ for j in range(10):
|
|
|
+ data[vec2i(i,j)] = 10
|
|
|
+
|
|
|
+del data[vec2i(0,0)]
|
|
|
+assert data[vec2i(0,0)] == data.default
|
|
|
+
|
|
|
+# ====chunked_array2d__len__
|
|
|
+data = chunked_array2d(4)
|
|
|
+for i in range(10):
|
|
|
+ for j in range(10):
|
|
|
+ data[vec2i(i,j)] = 10
|
|
|
+
|
|
|
+assert len(data) == 9
|
|
|
+
|
|
|
+# ====c11_chunked_array2d__mark
|
|
|
+import gc
|
|
|
+
|
|
|
+def gc_collect_callback(statue, msg):
|
|
|
+ if statue == 'stop':
|
|
|
+ for line in msg.split('\n'):
|
|
|
+ print(line)
|
|
|
+ if "5290" in line and "str" in line:
|
|
|
+ return
|
|
|
+ print(msg)
|
|
|
+ raise AssertionError("Expected GC output not found")
|
|
|
+
|
|
|
+gc.collect()
|
|
|
+gc.setup_debug_callback(gc_collect_callback)
|
|
|
+def create_garbage():
|
|
|
+ data = chunked_array2d(4)
|
|
|
+ # [str ] small: 0 large: 5290
|
|
|
+ for x in range(23):
|
|
|
+ for y in range(230):
|
|
|
+ data[vec2i(x, y)] = "garbage"*100
|
|
|
+
|
|
|
+create_garbage()
|
|
|
+gc.collect()
|
|
|
+
|
|
|
+
|
|
|
+# ====chunked_array2d_view_chunks
|
|
|
+data = chunked_array2d(4, default = 0)
|
|
|
+data[vec2i(-10,-10)] = -1
|
|
|
+assert data.view_chunks(vec2i(-3, -3), 6, 6)[vec2i(2, 2)] == -1
|
|
|
+data.view_chunks(vec2i(-3, -3), 6, 6)[vec2i(22, 22)] = 1
|
|
|
+assert data[vec2i(10,10)] == 1
|
|
|
+
|
|
|
+
|