diff --git a/tests/test_wdb.py b/tests/test_wdb.py index 52b7da3..98cd063 100644 --- a/tests/test_wdb.py +++ b/tests/test_wdb.py @@ -1,30 +1,18 @@ +import os import unittest -from brlcad.vmath import Vector +from brlcad.vmath import Vector import brlcad.wdb as wdb import brlcad.ctypes_adaptors as cta -import functools class WDBTestCase(unittest.TestCase): - def check_arb(self, brl_db, name, expected_points): - shape = brl_db.lookup_internal(name) - expected = Vector(expected_points) - if not expected.is_same(shape.points): - self.fail("{0} != {1}".format(expected, shape.points)) - - def check_tgc(self, brl_db, name, expected_points): - shape = brl_db.lookup_internal(name) - expected = Vector(expected_points) - actual = cta.flatten_floats([shape.base, shape.height, shape.a, shape.b, shape.c, shape.d]) - if not expected.is_same(actual): - self.fail("{0} != {1}".format(expected, actual)) - - def test_defaults(self): - """ - Tests default values for primitive creation - """ + @classmethod + def setUpClass(cls): + # create the test DB: + if os.path.isfile("test_defaults.g"): + os.remove("test_defaults.g") with wdb.WDB("test_defaults.g", "BRL-CAD geometry for testing wdb defaults") as brl_db: brl_db.sphere("sphere.s") brl_db.rpp("rpp.s") @@ -49,78 +37,146 @@ def test_defaults(self): brl_db.arbn("arbn.s") brl_db.particle("particle.s") brl_db.pipe("pipe.s") - with wdb.WDB("test_defaults.g") as brl_db: - check_arb = functools.partial(self.check_arb, brl_db) - check_arb("rpp.s", "1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1") - check_arb("wedge.s", "0, 0, 0, 1, 0, 0, 1, -1, 0, 0, -1, 0, 0, 0, 1, 0.5, 0, 1, 0.5, -1, 1, 0, -1, 1") - check_arb("arb4.s", "0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1") - check_arb("arb5.s", "1, 1, 0, 1, -1, 0, -1, -1, 0, -1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1") - check_arb("arb6.s", "1, 1, 0, 1, -1, 0, -1, -1, 0, -1, 1, 0, 1, 0, 1, 1, 0, 1, -1, 0, 1, -1, 0, 1") - check_arb("arb7.s", "1, 1, -1, 1, -1, -1, -3, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1") - check_arb("arb8.s", "1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1") - shape = brl_db.lookup_internal("arbn.s") - expected = Vector((1, 0, 0, 1, -1, 0, 0, 1, 0, 1, 0, 1, 0, -1, 0, 1, 0, 0, 1, 1, 0, 0, -1, 1)) - self.assertTrue(expected.is_same(cta.flatten_floats(shape.planes))) - shape = brl_db.lookup_internal("sphere.s") - self.assertTrue(shape.center.is_same((0, 0, 0))) - self.assertEqual(1, shape.radius) - shape = brl_db.lookup_internal("ellipsoid.s") - self.assertTrue(shape.center.is_same((0, 0, 0))) - self.assertEqual(1, shape.radius) - self.assertTrue(shape.a.is_same((1, 0, 0))) - self.assertTrue(shape.b.is_same((0, 1, 0))) - self.assertTrue(shape.c.is_same((0, 0, 1))) - shape = brl_db.lookup_internal("rpc.s") - self.assertTrue(shape.base.is_same((0, 0, 0))) - self.assertTrue(shape.height.is_same((-1, 0, 0))) - self.assertTrue(shape.breadth.is_same((0, 0, 1))) - self.assertEqual(0.5, shape.half_width) - shape = brl_db.lookup_internal("rhc.s") - self.assertTrue(shape.base.is_same((0, 0, 0))) - self.assertTrue(shape.height.is_same((-1, 0, 0))) - self.assertTrue(shape.breadth.is_same((0, 0, 1))) - self.assertEqual(0.5, shape.half_width) - self.assertEqual(0.1, shape.asymptote) - check_tgc = functools.partial(self.check_tgc, brl_db) - check_tgc("rcc.s", "0, 0, 0, 0, 0, 1, 0, -1, 0, -1, 0, 0, 0, -1, 0, -1, 0, 0") - check_tgc("tgc.s", "0, 0, 0, 0, 0, 1, 0, 1, 0, 0.5, 0, 0, 0, 0.5, 0, 1, 0, 0") - check_tgc("cone.s", "0, 0, 0, 0, 0, 1, 0, -1, 0, 1, 0, 0, 0, -0.5, 0, 0.5, 0, 0") - check_tgc("trc.s", "0, 0, 0, 0, 0, 1, 0, -1, 0, -1, 0, 0, 0, -0.5, 0, -0.5, 0, 0") - shape = brl_db.lookup_internal("torus.s") - self.assertTrue(shape.center.is_same((0, 0, 0))) - self.assertTrue(shape.n.is_same((0, 0, 1))) - self.assertEqual(1, shape.r_revolution) - self.assertEqual(0.2, shape.r_cross) - shape = brl_db.lookup_internal("eto.s") - self.assertTrue(shape.center.is_same((0, 0, 0))) - self.assertTrue(shape.n.is_same((0, 0, 1))) - self.assertTrue(shape.s_major.is_same((0, 0.5, 0.5))) - self.assertEqual(1, shape.r_revolution) - self.assertEqual(0.2, shape.r_minor) - shape = brl_db.lookup_internal("epa.s") - self.assertTrue(shape.base.is_same((0, 0, 0))) - self.assertTrue(shape.height.is_same((0, 0, 1))) - self.assertTrue(shape.n_major.is_same((0, 1, 0))) - self.assertEqual(1, shape.r_major) - self.assertEqual(0.5, shape.r_minor) - shape = brl_db.lookup_internal("ehy.s") - self.assertTrue(shape.base.is_same((0, 0, 0))) - self.assertTrue(shape.height.is_same((0, 0, 1))) - self.assertTrue(shape.n_major.is_same((0, 1, 0))) - self.assertEqual(1, shape.r_major) - self.assertEqual(0.5, shape.r_minor) - self.assertEqual(0.1, shape.asymptote) - shape = brl_db.lookup_internal("hyperboloid.s") - self.assertTrue(shape.base.is_same((0, 0, 0))) - self.assertTrue(shape.height.is_same((0, 0, 1))) - self.assertTrue(shape.a_vec.is_same((0, 1, 0))) - self.assertEqual(0.5, shape.b_mag) - self.assertEqual(0.2, shape.base_neck_ratio) - shape = brl_db.lookup_internal("particle.s") - self.assertTrue(shape.base.is_same((0, 0, 0))) - self.assertTrue(shape.height.is_same((0, 0, 1))) - self.assertEqual(0.5, shape.r_base) - self.assertEqual(0.2, shape.r_end) + # load the DB and cache it in a class variable: + cls.brl_db = wdb.WDB("test_defaults.g") + + @classmethod + def tearDownClass(cls): + # close/delete the test DB + cls.brl_db.close() + os.remove("test_defaults.g") + + def lookup_shape(self, name): + return self.brl_db.lookup_internal(name) + + def check_arb(self, name, expected_points): + shape = self.lookup_shape(name) + expected = Vector(expected_points) + if not expected.is_same(shape.points): + self.fail("{0} != {1}".format(expected, shape.points)) + + def check_tgc(self, name, expected_points): + shape = self.lookup_shape(name) + expected = Vector(expected_points) + actual = cta.flatten_floats([shape.base, shape.height, shape.a, shape.b, shape.c, shape.d]) + if not expected.is_same(actual): + self.fail("{0} != {1}".format(expected, actual)) + + def test_rpp_defaults(self): + self.check_arb("rpp.s", "1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1") + + def test_wedge_defaults(self): + self.check_arb("wedge.s", "0, 0, 0, 1, 0, 0, 1, -1, 0, 0, -1, 0, 0, 0, 1, 0.5, 0, 1, 0.5, -1, 1, 0, -1, 1") + + def test_arb4_defaults(self): + self.check_arb("arb4.s", "0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1") + + def test_arb5_defaults(self): + self.check_arb("arb5.s", "1, 1, 0, 1, -1, 0, -1, -1, 0, -1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1") + + def test_arb6_defaults(self): + self.check_arb("arb6.s", "1, 1, 0, 1, -1, 0, -1, -1, 0, -1, 1, 0, 1, 0, 1, 1, 0, 1, -1, 0, 1, -1, 0, 1") + + def test_arb7_defaults(self): + self.check_arb( + "arb7.s", + "1, 1, -1, 1, -1, -1, -3, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1" + ) + + def test_arb8_defaults(self): + self.check_arb("arb8.s", "1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1") + + def test_arbn_defaults(self): + shape = self.lookup_shape("arbn.s") + expected = Vector((1, 0, 0, 1, -1, 0, 0, 1, 0, 1, 0, 1, 0, -1, 0, 1, 0, 0, 1, 1, 0, 0, -1, 1)) + self.assertTrue(expected.is_same(cta.flatten_floats(shape.planes))) + + def test_sphere_defaults(self): + shape = self.lookup_shape("sphere.s") + self.assertTrue(shape.center.is_same((0, 0, 0))) + self.assertEqual(1, shape.radius) + + def test_ellipsoid_defaults(self): + shape = self.lookup_shape("ellipsoid.s") + self.assertTrue(shape.center.is_same((0, 0, 0))) + self.assertEqual(1, shape.radius) + self.assertTrue(shape.a.is_same((1, 0, 0))) + self.assertTrue(shape.b.is_same((0, 1, 0))) + self.assertTrue(shape.c.is_same((0, 0, 1))) + + def test_rpc_defaults(self): + shape = self.lookup_shape("rpc.s") + self.assertTrue(shape.base.is_same((0, 0, 0))) + self.assertTrue(shape.height.is_same((-1, 0, 0))) + self.assertTrue(shape.breadth.is_same((0, 0, 1))) + self.assertEqual(0.5, shape.half_width) + + def test_rhc_defaults(self): + shape = self.lookup_shape("rhc.s") + self.assertTrue(shape.base.is_same((0, 0, 0))) + self.assertTrue(shape.height.is_same((-1, 0, 0))) + self.assertTrue(shape.breadth.is_same((0, 0, 1))) + self.assertEqual(0.5, shape.half_width) + self.assertEqual(0.1, shape.asymptote) + + def test_rcc_defaults(self): + self.check_tgc("rcc.s", "0, 0, 0, 0, 0, 1, 0, -1, 0, -1, 0, 0, 0, -1, 0, -1, 0, 0") + + def test_tgc_defaults(self): + self.check_tgc("tgc.s", "0, 0, 0, 0, 0, 1, 0, 1, 0, 0.5, 0, 0, 0, 0.5, 0, 1, 0, 0") + + def test_cone_defaults(self): + self.check_tgc("cone.s", "0, 0, 0, 0, 0, 1, 0, -1, 0, 1, 0, 0, 0, -0.5, 0, 0.5, 0, 0") + + def test_trc_defaults(self): + self.check_tgc("trc.s", "0, 0, 0, 0, 0, 1, 0, -1, 0, -1, 0, 0, 0, -0.5, 0, -0.5, 0, 0") + + def test_torus_defaults(self): + shape = self.lookup_shape("torus.s") + self.assertTrue(shape.center.is_same((0, 0, 0))) + self.assertTrue(shape.n.is_same((0, 0, 1))) + self.assertEqual(1, shape.r_revolution) + self.assertEqual(0.2, shape.r_cross) + + def test_eto_defaults(self): + shape = self.lookup_shape("eto.s") + self.assertTrue(shape.center.is_same((0, 0, 0))) + self.assertTrue(shape.n.is_same((0, 0, 1))) + self.assertTrue(shape.s_major.is_same((0, 0.5, 0.5))) + self.assertEqual(1, shape.r_revolution) + self.assertEqual(0.2, shape.r_minor) + + def test_epa_defaults(self): + shape = self.lookup_shape("epa.s") + self.assertTrue(shape.base.is_same((0, 0, 0))) + self.assertTrue(shape.height.is_same((0, 0, 1))) + self.assertTrue(shape.n_major.is_same((0, 1, 0))) + self.assertEqual(1, shape.r_major) + self.assertEqual(0.5, shape.r_minor) + + def test_ehy_defaults(self): + shape = self.lookup_shape("ehy.s") + self.assertTrue(shape.base.is_same((0, 0, 0))) + self.assertTrue(shape.height.is_same((0, 0, 1))) + self.assertTrue(shape.n_major.is_same((0, 1, 0))) + self.assertEqual(1, shape.r_major) + self.assertEqual(0.5, shape.r_minor) + self.assertEqual(0.1, shape.asymptote) + + def test_hyperboloid_defaults(self): + shape = self.lookup_shape("hyperboloid.s") + self.assertTrue(shape.base.is_same((0, 0, 0))) + self.assertTrue(shape.height.is_same((0, 0, 1))) + self.assertTrue(shape.a_vec.is_same((0, 1, 0))) + self.assertEqual(0.5, shape.b_mag) + self.assertEqual(0.2, shape.base_neck_ratio) + + def test_particle_defaults(self): + shape = self.lookup_shape("particle.s") + self.assertTrue(shape.base.is_same((0, 0, 0))) + self.assertTrue(shape.height.is_same((0, 0, 1))) + self.assertEqual(0.5, shape.r_base) + self.assertEqual(0.2, shape.r_end) if __name__ == "__main__":