Salome HOME
bos #29484 Add a test service to build tesselation on a shape
[modules/geom.git] / test / test_perf_01.py
diff --git a/test/test_perf_01.py b/test/test_perf_01.py
new file mode 100644 (file)
index 0000000..3e02241
--- /dev/null
@@ -0,0 +1,49 @@
+from contextlib import contextmanager
+from datetime import datetime, timedelta
+from inspect import getfile
+from os.path import abspath, dirname, join
+from unittest import TestCase, main
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+geom_builder = geomBuilder.New()
+
+data_dir = abspath(join(dirname(getfile(lambda: None)), 'data'))
+
+@contextmanager
+def no_longer_than(seconds):
+    """
+    Context mananger to check that an execution of given code does not
+    exceed maximum expected time.   
+
+    Example of usage:
+
+        with wait(5):
+            do_something_that_should_take_no_more_than_five_seconds()
+
+    Arguments:
+        seconds: max time limit
+
+    Raises:
+        AssertionError: if time limit is exceeded.
+    """
+    expected = timedelta(seconds=seconds)
+    start = datetime.now()
+    yield
+    end = datetime.now()
+    spent = end-start
+    assert spent <= expected, f'Expected maximum delay is exceeded: {spent.total_seconds():.2f} > {seconds:.2f}!'
+
+class TesselationTest(TestCase):
+    """Test Tesselate() method."""
+
+    def test_performance_01(self):
+        """Check performance of Tesselate() method: case 01."""
+        shape = geom_builder.ImportBREP(join(data_dir, 'test_performance_01.brep'))
+        with no_longer_than(5):
+            geom_builder.Tesselate(shape, 0.17, False, 20)
+
+if __name__ == "__main__":
+    main()