From 2810531c97896497af351cc1e59fd5bc8eb138f4 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sat, 23 Nov 2019 12:59:41 +0100 Subject: [PATCH] a test with reference results --- python/tests/conftest.py | 21 +++++++++ python/tests/reference/Geom/mirror.geom | 35 +++++++++++++++ python/tests/test_Geom.py | 59 +++++++++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 python/tests/conftest.py create mode 100644 python/tests/reference/Geom/mirror.geom create mode 100644 python/tests/test_Geom.py diff --git a/python/tests/conftest.py b/python/tests/conftest.py new file mode 100644 index 000000000..6145c66d5 --- /dev/null +++ b/python/tests/conftest.py @@ -0,0 +1,21 @@ +import os + +import pytest + +import damask + +def pytest_addoption(parser): + parser.addoption("--update", + action="store_true", + default=False) + +@pytest.fixture +def update(request): + """store current results as new reference results.""" + return request.config.getoption("--update") + +@pytest.fixture +def reference_dir_base(): + """directory containing reference results.""" + env = damask.Environment() + return os.path.join(env.rootDir(),'python','tests','reference') diff --git a/python/tests/reference/Geom/mirror.geom b/python/tests/reference/Geom/mirror.geom new file mode 100644 index 000000000..1bc4c8640 --- /dev/null +++ b/python/tests/reference/Geom/mirror.geom @@ -0,0 +1,35 @@ +4 header +grid a 14 b 5 c 6 +size x 1.4e-05 y 5e-06 z 6e-06 +origin x 0.0 y 0.0 z 0.0 +homogenization 1 + 1 1 2 22 2 2 1 21 1 2 2 22 2 1 + 1 1 6 26 2 2 5 25 5 2 2 26 6 1 + 1 1 10 30 2 2 9 29 9 2 2 30 10 1 + 1 1 14 34 2 2 13 33 13 2 2 34 14 1 + 1 1 18 38 2 2 17 37 17 2 2 38 18 1 + 1 1 3 23 2 2 2 22 2 2 2 23 3 1 + 1 1 7 27 2 2 6 26 6 2 2 27 7 1 + 1 1 11 31 2 2 10 30 10 2 2 31 11 1 + 1 1 15 35 2 2 14 34 14 2 2 35 15 1 + 1 1 19 39 2 2 18 38 18 2 2 39 19 1 + 1 1 4 24 2 2 3 23 3 2 2 24 4 1 + 1 1 8 28 2 2 7 27 7 2 2 28 8 1 + 1 1 12 32 2 2 11 31 11 2 2 32 12 1 + 1 1 16 36 2 2 15 35 15 2 2 36 16 1 + 1 1 20 40 2 2 19 39 19 2 2 40 20 1 + 1 1 5 25 2 2 4 24 4 2 2 25 5 1 + 1 1 9 29 2 2 8 28 8 2 2 29 9 1 + 1 1 13 33 2 2 12 32 12 2 2 33 13 1 + 1 1 17 37 2 2 16 36 16 2 2 37 17 1 + 1 1 21 41 2 2 20 40 20 2 2 41 21 1 + 1 1 4 24 2 2 3 23 3 2 2 24 4 1 + 1 1 8 28 2 2 7 27 7 2 2 28 8 1 + 1 1 12 32 2 2 11 31 11 2 2 32 12 1 + 1 1 16 36 2 2 15 35 15 2 2 36 16 1 + 1 1 20 40 2 2 19 39 19 2 2 40 20 1 + 1 1 3 23 2 2 2 22 2 2 2 23 3 1 + 1 1 7 27 2 2 6 26 6 2 2 27 7 1 + 1 1 11 31 2 2 10 30 10 2 2 31 11 1 + 1 1 15 35 2 2 14 34 14 2 2 35 15 1 + 1 1 19 39 2 2 18 38 18 2 2 39 19 1 diff --git a/python/tests/test_Geom.py b/python/tests/test_Geom.py new file mode 100644 index 000000000..3c15d704e --- /dev/null +++ b/python/tests/test_Geom.py @@ -0,0 +1,59 @@ +import copy +import os + +import pytest +import numpy as np + +from damask import Geom + + +def geom_equal(a,b): + return np.all(a.get_microstructure() == b.get_microstructure()) and \ + np.all(a.get_size() == b.get_size()) and \ + np.all(a.get_grid() == b.get_grid()) + +@pytest.fixture +def default(): + """Simple geometry.""" + x=np.concatenate((np.ones(40,dtype=int), + np.arange(2,42), + np.ones(40,dtype=int)*2, + np.arange(1,41))).reshape((8,5,4)) + return Geom(x,[8e-6,5e-6,4e-6]) + +@pytest.fixture +def reference_dir(reference_dir_base): + """directory containing reference results.""" + return os.path.join(reference_dir_base,'Geom') + + +class TestGeom: + + def test_update(self,default): + modified = copy.deepcopy(default) + modified.update( + default.get_microstructure(), + default.get_size(), + default.get_origin() + ) + assert geom_equal(modified,default) + + + def test_write_read_str(self,default,tmpdir): + default.to_file(str(tmpdir.join('default.geom'))) + new = Geom.from_file(str(tmpdir.join('default.geom'))) + assert geom_equal(new,default) + + def test_write_read_file(self,default,tmpdir): + with open(tmpdir.join('default.geom'),'w') as f: + default.to_file(f) + with open(tmpdir.join('default.geom')) as f: + new = Geom.from_file(f) + assert geom_equal(new,default) + + def test_mirror(self,default,update,reference_dir): + modified = copy.deepcopy(default) + modified.mirror(['x','z']) + reference = os.path.join(reference_dir,'mirror.geom') + if update: modified.to_file(reference) + assert geom_equal(modified,Geom.from_file(reference))