From 5ad46ae02134c6f9276b0818519af0548fdafd0a Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Wed, 30 Sep 2020 08:49:55 +0200 Subject: [PATCH] completely tested --- python/damask/_config.py | 14 ++++++-- python/damask/_configmaterial.py | 12 +++++++ python/tests/test_Config.py | 34 +++++++++++++++++++ ...terialConfig.py => test_ConfigMaterial.py} | 29 ++++++++++++---- 4 files changed, 79 insertions(+), 10 deletions(-) create mode 100644 python/tests/test_Config.py rename python/tests/{test_MaterialConfig.py => test_ConfigMaterial.py} (73%) diff --git a/python/damask/_config.py b/python/damask/_config.py index 8fd52a046..7b9d950a7 100644 --- a/python/damask/_config.py +++ b/python/damask/_config.py @@ -28,21 +28,29 @@ class Config(dict): @classmethod def load(cls,fname): - """Load from yaml file.""" + """ + Load from yaml file. + + Parameters + ---------- + fname : file, str, or pathlib.Path + Filename or file for writing. + + """ try: fhandle = open(fname) except TypeError: fhandle = fname return cls(yaml.safe_load(fhandle)) - def save(self,fname='material.yaml'): + def save(self,fname): """ Save to yaml file. Parameters ---------- fname : file, str, or pathlib.Path - Filename or file for reading. + Filename or file for writing. """ try: diff --git a/python/damask/_configmaterial.py b/python/damask/_configmaterial.py index 861e41464..8b6739763 100644 --- a/python/damask/_configmaterial.py +++ b/python/damask/_configmaterial.py @@ -9,6 +9,18 @@ from . import Rotation class ConfigMaterial(Config): """Material configuration.""" + def save(self,fname='material.yaml'): + """ + Save to yaml file. + + Parameters + ---------- + fname : file, str, or pathlib.Path, optional + Filename or file for writing. Defaults to 'material.yaml'. + + """ + super().save(fname) + @property def is_complete(self): """Check for completeness.""" diff --git a/python/tests/test_Config.py b/python/tests/test_Config.py new file mode 100644 index 000000000..e4d05cffb --- /dev/null +++ b/python/tests/test_Config.py @@ -0,0 +1,34 @@ +from damask import Config + +class TestConfig: + + def test_load_save_str(self,tmp_path): + config = Config() + config['A'] = 1 + config['B'] = [2,3] + config.save(tmp_path/'config.yaml') + assert Config.load(tmp_path/'config.yaml') == config + + def test_load_save_file(self,tmp_path): + config = Config() + config['A'] = 1 + config['B'] = [2,3] + with open(tmp_path/'config.yaml','w') as f: + config.save(f) + with open(tmp_path/'config.yaml') as f: + assert Config.load(f) == config + + def test_repr(self,tmp_path): + config = Config() + config['A'] = 1 + config['B'] = [2,3] + with open(tmp_path/'config.yaml','w') as f: + f.write(config.__repr__()) + assert Config.load(tmp_path/'config.yaml') == config + + + def test_abstract_is_valid(self): + assert Config().is_valid is None + + def test_abstract_is_complete(self): + assert Config().is_complete is None diff --git a/python/tests/test_MaterialConfig.py b/python/tests/test_ConfigMaterial.py similarity index 73% rename from python/tests/test_MaterialConfig.py rename to python/tests/test_ConfigMaterial.py index 1be07fe58..27889d564 100644 --- a/python/tests/test_MaterialConfig.py +++ b/python/tests/test_ConfigMaterial.py @@ -10,8 +10,8 @@ def reference_dir(reference_dir_base): return reference_dir_base/'ConfigMaterial' -class TestMaterial: - +class TestConfigMaterial: + @pytest.mark.parametrize('fname',[None,'test.yaml']) def test_load_save(self,reference_dir,tmp_path,fname): reference = ConfigMaterial.load(reference_dir/'material.yaml') @@ -32,29 +32,44 @@ class TestMaterial: material_config = ConfigMaterial.load(reference_dir/'material.yaml') material_config['phase']['Aluminum']['lattice']='fxc' assert not material_config.is_valid - + def test_invalid_orientation(self,reference_dir): material_config = ConfigMaterial.load(reference_dir/'material.yaml') material_config['microstructure'][0]['constituents'][0]['orientation']=[0,0,0,0] assert not material_config.is_valid - + def test_invalid_fraction(self,reference_dir): material_config = ConfigMaterial.load(reference_dir/'material.yaml') material_config['microstructure'][0]['constituents'][0]['fraction']=.9 assert not material_config.is_valid - @pytest.mark.parametrize('item',['homogenization','phase','microstructure']) def test_incomplete_missing(self,reference_dir,item): material_config = ConfigMaterial.load(reference_dir/'material.yaml') del material_config[item] assert not material_config.is_complete - + + @pytest.mark.parametrize('item',['orientation','phase']) + def test_incomplete_material_constituent(self,reference_dir,item): + material_config = ConfigMaterial.load(reference_dir/'material.yaml') + del material_config['microstructure'][0]['constituents'][0][item] + assert not material_config.is_complete + + def test_incomplete_material_homogenization(self,reference_dir): + material_config = ConfigMaterial.load(reference_dir/'material.yaml') + del material_config['microstructure'][0]['homogenization'] + assert not material_config.is_complete + + def test_incomplete_phase_lattice(self,reference_dir): + material_config = ConfigMaterial.load(reference_dir/'material.yaml') + del material_config['phase']['Aluminum']['lattice'] + assert not material_config.is_complete + def test_incomplete_wrong_phase(self,reference_dir): material_config = ConfigMaterial.load(reference_dir/'material.yaml') new = material_config.microstructure_rename_phase({'Steel':'FeNbC'}) assert not new.is_complete - + def test_incomplete_wrong_homogenization(self,reference_dir): material_config = ConfigMaterial.load(reference_dir/'material.yaml') new = material_config.microstructure_rename_homogenization({'Taylor':'isostrain'})