Browse Source

tests: Add unit test for GeomVertexFormat arrays list

rdb 2 years ago
parent
commit
2e7dc9e4f4
1 changed files with 114 additions and 0 deletions
  1. 114 0
      tests/gobj/test_geom_vertex_format.py

+ 114 - 0
tests/gobj/test_geom_vertex_format.py

@@ -0,0 +1,114 @@
+from panda3d.core import GeomVertexArrayFormat, GeomVertexFormat, Geom
+
+
+def test_format_arrays():
+    array1 = GeomVertexArrayFormat("vertex", 3, Geom.NT_float32, Geom.C_point)
+    array2 = GeomVertexArrayFormat("normal", 3, Geom.NT_float32, Geom.C_normal)
+    array3 = GeomVertexArrayFormat("color", 4, Geom.NT_float32, Geom.C_color)
+    array4 = GeomVertexArrayFormat("texcoord", 2, Geom.NT_float32, Geom.C_texcoord)
+
+    # Verify initial refcounts
+    assert array1.get_ref_count() == 1
+    assert array2.get_ref_count() == 1
+    assert array3.get_ref_count() == 1
+    assert array4.get_ref_count() == 1
+
+    format = GeomVertexFormat()
+
+    def expect_arrays(*args):
+        assert format.get_num_arrays() == len(args)
+        assert len(format.arrays) == len(args)
+        assert tuple(format.arrays) == args
+        arrays = format.get_arrays()
+        assert tuple(arrays) == args
+
+        assert array1.get_ref_count() == 1 + arrays.count(array1) * 2
+        assert array2.get_ref_count() == 1 + arrays.count(array2) * 2
+        assert array3.get_ref_count() == 1 + arrays.count(array3) * 2
+        assert array4.get_ref_count() == 1 + arrays.count(array4) * 2
+
+    # Verify empty state
+    expect_arrays()
+
+    # Append to end
+    format.add_array(array1)
+    expect_arrays(array1,)
+    format.add_array(array2)
+    expect_arrays(array1, array2)
+    format.add_array(array3)
+    expect_arrays(array1, array2, array3)
+    format.add_array(array4)
+    expect_arrays(array1, array2, array3, array4)
+
+    # Verify other accessors
+    assert format.get_num_arrays() == 4
+    assert len(format.arrays) == 4
+    assert tuple(format.get_arrays()) == (array1, array2, array3, array4)
+
+    # Remove from beginning
+    format.remove_array(0)
+    expect_arrays(array2, array3, array4)
+    format.remove_array(0)
+    expect_arrays(array3, array4)
+    format.remove_array(0)
+    expect_arrays(array4,)
+    format.remove_array(0)
+    expect_arrays()
+
+    # Insert at end
+    format.insert_array(0, array1)
+    expect_arrays(array1,)
+    format.insert_array(1, array2)
+    expect_arrays(array1, array2)
+    format.insert_array(2, array3)
+    expect_arrays(array1, array2, array3)
+    format.insert_array(3, array4)
+    expect_arrays(array1, array2, array3, array4)
+
+    # Remove from end
+    format.remove_array(3)
+    expect_arrays(array1, array2, array3)
+    format.remove_array(2)
+    expect_arrays(array1, array2)
+    format.remove_array(1)
+    expect_arrays(array1,)
+    format.remove_array(0)
+    expect_arrays()
+
+    # Insert at beginning
+    format.insert_array(0, array4)
+    expect_arrays(array4,)
+    format.insert_array(0, array3)
+    expect_arrays(array3, array4)
+    format.insert_array(0, array2)
+    expect_arrays(array2, array3, array4)
+    format.insert_array(0, array1)
+    expect_arrays(array1, array2, array3, array4)
+
+    # Remove from middle and insert back in middle
+    format.remove_array(2)
+    expect_arrays(array1, array2, array4)
+    format.insert_array(2, array3)
+    expect_arrays(array1, array2, array3, array4)
+    format.remove_array(1)
+    expect_arrays(array1, array3, array4)
+    format.remove_array(1)
+    expect_arrays(array1, array4)
+    format.insert_array(1, array2)
+    expect_arrays(array1, array2, array4)
+    format.insert_array(2, array3)
+    expect_arrays(array1, array2, array3, array4)
+
+    # Clear
+    format.clear_arrays()
+    expect_arrays()
+
+    # Add to end but with very high index
+    format.insert_array(0xffffffff, array1)
+    expect_arrays(array1,)
+    format.insert_array(0xffffffff, array2)
+    expect_arrays(array1, array2)
+    format.insert_array(0xffffffff, array3)
+    expect_arrays(array1, array2, array3)
+    format.insert_array(0xffffffff, array4)
+    expect_arrays(array1, array2, array3, array4)