1- import platform
2-
31import dartpy as dart
42import numpy as np
53import pytest
64
75
8- def collision_groups_tester (cd ):
9- size = [1 , 1 , 1 ]
10- pos1 = [0 , 0 , 0 ]
11- pos2 = [0.5 , 0 , 0 ]
6+ def _collision_detector_factories ():
7+ detectors = [("fcl" , dart .FCLCollisionDetector )]
8+
9+ if hasattr (dart , "DARTCollisionDetector" ):
10+ detectors .append (("dart" , dart .DARTCollisionDetector ))
11+
12+ if hasattr (dart , "BulletCollisionDetector" ):
13+ detectors .append (("bullet" , dart .BulletCollisionDetector ))
14+
15+ if hasattr (dart , "OdeCollisionDetector" ):
16+ detectors .append (("ode" , dart .OdeCollisionDetector ))
17+
18+ return detectors
1219
20+
21+ _COLLISION_DETECTORS = _collision_detector_factories ()
22+ if not _COLLISION_DETECTORS :
23+ pytest .skip ("No collision detectors available" , allow_module_level = True )
24+
25+
26+ def collision_groups_tester (cd ):
1327 simple_frame1 = dart .SimpleFrame ()
1428 simple_frame2 = dart .SimpleFrame ()
1529
@@ -102,25 +116,16 @@ def collision_groups_tester(cd):
102116 assert not group .collide (group2 )
103117
104118
105- def test_collision_groups ():
106- cd = dart .FCLCollisionDetector ()
107- collision_groups_tester (cd )
119+ _COLLISION_IDS = [name for name , _ in _COLLISION_DETECTORS ]
108120
109- cd = dart .DARTCollisionDetector ()
110- collision_groups_tester (cd )
111121
112- if hasattr (dart , "BulletCollisionDetector" ):
113- cd = dart .BulletCollisionDetector ()
114- collision_groups_tester (cd )
115-
116- if hasattr (dart , "OdeCollisionDetector" ):
117- cd = dart .OdeCollisionDetector ()
118- collision_groups_tester (cd )
122+ @pytest .mark .parametrize ("name, cd_factory" , _COLLISION_DETECTORS , ids = _COLLISION_IDS )
123+ def test_collision_groups (name , cd_factory ):
124+ collision_groups_tester (cd_factory ())
119125
120126
121- # TODO: Add more collision detectors
122- @pytest .mark .parametrize ("cd" , [dart .FCLCollisionDetector ()])
123- def test_filter (cd ):
127+ @pytest .mark .parametrize ("name, cd_factory" , _COLLISION_DETECTORS , ids = _COLLISION_IDS )
128+ def test_filter (name , cd_factory ):
124129 # Create two bodies skeleton. The two bodies are placed at the same position
125130 # with the same size shape so that they collide by default.
126131 skel = dart .Skeleton ()
@@ -143,7 +148,7 @@ def test_filter(cd):
143148
144149 # Set a new collision detector
145150 constraint_solver = world .get_constraint_solver ()
146- constraint_solver .set_collision_detector (cd )
151+ constraint_solver .set_collision_detector (cd_factory () )
147152
148153 # Get the collision group from the constraint solver
149154 group = constraint_solver .get_collision_group ()
0 commit comments