build123d/tests/test_persistence.py

91 lines
3.3 KiB
Python

# write me the test for testing the persistence module with unittest
import unittest
from build123d.persistence import (
serialize_shape,
deserialize_shape,
serialize_location,
deserialize_location,
)
from build123d import *
import pickle
class TestPersistence(unittest.TestCase):
def test_serialize_shape(self):
edge = Edge.make_line((10, 5, 0), (10, 5, 2))
wire = Wire.make_circle(10)
face = Face.make_rect(10, 5)
solid = Solid.make_box(10, 5, 2)
compound = Compound([edge, wire, face, solid])
buffer = serialize_shape(edge.wrapped)
retrived_edge = deserialize_shape(buffer)
self.assertAlmostEqual(edge.length, Edge(retrived_edge).length)
buffer = serialize_shape(wire.wrapped)
retrived_wire = deserialize_shape(buffer)
self.assertAlmostEqual(len(wire.edges()), len(Wire(retrived_wire).edges()))
buffer = serialize_shape(face.wrapped)
retrived_face = deserialize_shape(buffer)
self.assertAlmostEqual(face.area, Face(retrived_face).area)
buffer = serialize_shape(solid.wrapped)
retrived_solid = deserialize_shape(buffer)
self.assertAlmostEqual(solid.volume, Solid(retrived_solid).volume)
buffer = serialize_shape(compound.wrapped)
retrived_comp = deserialize_shape(buffer)
self.assertEqual(len(compound.solids()), len(Compound(retrived_comp).solids()))
def test_serialize_location(self):
loc = Location((10, 5, 0), (16, 1, 1)).wrapped
transfo = loc.Transformation()
buffer = serialize_location(loc)
retrived_loc = deserialize_location(buffer)
retrived_transfo = retrived_loc.Transformation()
self.assertAlmostEqual(
retrived_transfo.TranslationPart().X(), transfo.TranslationPart().X()
)
self.assertAlmostEqual(
retrived_transfo.TranslationPart().Y(), transfo.TranslationPart().Y()
)
self.assertAlmostEqual(
retrived_transfo.TranslationPart().Z(), transfo.TranslationPart().Z()
)
self.assertAlmostEqual(
retrived_transfo.GetRotation().X(), transfo.GetRotation().X()
)
self.assertAlmostEqual(
retrived_transfo.GetRotation().Y(), transfo.GetRotation().Y()
)
self.assertAlmostEqual(
retrived_transfo.GetRotation().Z(), transfo.GetRotation().Z()
)
self.assertAlmostEqual(
retrived_transfo.GetRotation().W(), transfo.GetRotation().W()
)
def test_serialize_obj(self):
# The pickle test tests the serialization of toplevel objects (OCP Shapes and OCP Locs are also tested this way)
line = Line((10, 5, 0), (0, 5, 2))
face = Circle(50)
solid = Box(10, 5, 2)
dumped_line = pickle.dumps(line)
retrived_line = pickle.loads(dumped_line)
self.assertAlmostEqual(line.length, retrived_line.length)
dumped_face = pickle.dumps(face)
retrived_face = pickle.loads(dumped_face)
self.assertAlmostEqual(face.area, retrived_face.area)
dumped_solid = pickle.dumps(solid)
retrived_solid = pickle.loads(dumped_solid)
self.assertAlmostEqual(solid.volume, retrived_solid.volume)
if __name__ == "__main__":
unittest.main()