From 3621bd64c5d86ae787fd55ae04ddad791d0a17ef Mon Sep 17 00:00:00 2001 From: rdb Date: Wed, 8 Nov 2017 01:56:31 +0100 Subject: [PATCH] tests: add unit tests for bullet bam serializability --- tests/bullet/test_bullet_bam.py | 133 ++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 tests/bullet/test_bullet_bam.py diff --git a/tests/bullet/test_bullet_bam.py b/tests/bullet/test_bullet_bam.py new file mode 100644 index 0000000000..c6b9d2c282 --- /dev/null +++ b/tests/bullet/test_bullet_bam.py @@ -0,0 +1,133 @@ +import pytest + +# Skip these tests if we can't import bullet. +bullet = pytest.importorskip("panda3d.bullet") +from panda3d import core + + +def reconstruct(object): + # Create a temporary buffer, which we first write the object into, and + # subsequently read it from again. + buffer = core.DatagramBuffer() + + writer = core.BamWriter(buffer) + writer.init() + writer.write_object(object) + + reader = core.BamReader(buffer) + reader.init() + object = reader.read_object() + reader.resolve() + return object + + +def test_box_shape(): + shape = bullet.BulletBoxShape((1, 2, 3)) + shape.margin = 0.5 + + shape2 = reconstruct(shape) + + assert type(shape) is type(shape2) + assert shape.margin == shape2.margin + assert shape.name == shape2.name + assert shape.half_extents_without_margin == shape2.half_extents_without_margin + assert shape.half_extents_with_margin == shape2.half_extents_with_margin + + +def test_capsule_shape(): + shape = bullet.BulletCapsuleShape(1.4, 3.5, bullet.Y_up) + shape.margin = 0.5 + + shape2 = reconstruct(shape) + + assert type(shape) is type(shape2) + assert shape.margin == shape2.margin + assert shape.name == shape2.name + assert shape.radius == shape2.radius + assert shape.height == shape2.height + + +def test_cone_shape(): + shape = bullet.BulletConeShape(1.4, 3.5, bullet.Y_up) + shape.margin = 0.5 + + shape2 = reconstruct(shape) + + assert type(shape) is type(shape2) + assert shape.margin == shape2.margin + assert shape.name == shape2.name + assert shape.radius == shape2.radius + assert shape.height == shape2.height + + +def test_cylinder_shape(): + shape = bullet.BulletCylinderShape(1.4, 3.5, bullet.Y_up) + shape.margin = 0.5 + + shape2 = reconstruct(shape) + + assert type(shape) is type(shape2) + assert shape.margin == shape2.margin + assert shape.name == shape2.name + assert shape.radius == shape2.radius + assert shape.half_extents_without_margin == shape2.half_extents_without_margin + assert shape.half_extents_with_margin == shape2.half_extents_with_margin + + +def test_minkowski_sum_shape(): + box = bullet.BulletBoxShape((1, 2, 3)) + sphere = bullet.BulletSphereShape(2.0) + + shape = bullet.BulletMinkowskiSumShape(box, sphere) + shape.transform_a = core.TransformState.make_pos((8, 7, 3)) + shape.transform_b = core.TransformState.make_hpr((45, -10, 110)) + shape.margin = 0.5 + + shape2 = reconstruct(shape) + + assert type(shape) is type(shape2) + assert shape.margin == shape2.margin + assert shape.name == shape2.name + assert shape.transform_a.compare_to(shape2.transform_a, True) == 0 + assert shape.transform_b.compare_to(shape2.transform_b, True) == 0 + assert type(shape.shape_a) == type(shape2.shape_a) + assert type(shape.shape_b) == type(shape2.shape_b) + + +def test_multi_sphere_shape(): + shape = bullet.BulletMultiSphereShape([(1, 2, 3), (4, 5, 6)], [1.5, 2.5]) + shape.margin = 0.5 + + shape2 = reconstruct(shape) + + assert type(shape) is type(shape2) + assert shape.margin == shape2.margin + assert shape.name == shape2.name + assert shape.sphere_count == shape2.sphere_count + assert tuple(shape.sphere_pos) == tuple(shape2.sphere_pos) + assert tuple(shape.sphere_radius) == tuple(shape2.sphere_radius) + + +def test_plane_shape(): + shape = bullet.BulletPlaneShape((1.2, 0.2, 0.5), 2.5) + shape.margin = 0.5 + + shape2 = reconstruct(shape) + + assert type(shape) is type(shape2) + assert shape.margin == shape2.margin + assert shape.name == shape2.name + assert shape.plane_normal == shape2.plane_normal + assert shape.plane_constant == shape2.plane_constant + + +def test_sphere_shape(): + shape = bullet.BulletSphereShape(1.4) + shape.margin = 0.5 + + shape2 = reconstruct(shape) + + assert type(shape) is type(shape2) + assert shape.margin == shape2.margin + assert shape.name == shape2.name + assert shape.radius == shape2.radius