From 2e7dc9e4f4a3f95822656d71c53007eb416ce996 Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 20 Feb 2023 19:05:37 +0100 Subject: [PATCH] tests: Add unit test for GeomVertexFormat arrays list --- tests/gobj/test_geom_vertex_format.py | 114 ++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 tests/gobj/test_geom_vertex_format.py diff --git a/tests/gobj/test_geom_vertex_format.py b/tests/gobj/test_geom_vertex_format.py new file mode 100644 index 0000000000..d4c9472649 --- /dev/null +++ b/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)