3
0
mirror of https://github.com/triqs/dft_tools synced 2024-12-23 12:55:17 +01:00
dft_tools/test/python/plovasp/proj_group/mytest.py
Alexander Hampel 11d394fd5b synchronize dfttools with app4triqs structure
* moved the plovasp C++ code to c++/triqs_dft_tools/converters/vasp
* added global header triqs_dft_tools/triqs_dft_tools.hpp
* python dir based on single cmakelist file
* registered C++ tests for plovasp
* corrected imports for py3 tests for plovasp
* corrected block order in sigma_from_file and srvo3_Gloc
* exchanged ref files for sigma_from_file, srvo3_Gloc, SrVO3.ref.h5
* moved vasp converter bash scripts from dir shells to bin dir
2020-06-10 17:45:53 +02:00

71 lines
2.2 KiB
Python

r"""
Module defining a custom TestCase with extra functionality.
"""
import unittest
import numpy as np
import difflib
from triqs.utility.h5diff import h5diff
class MyTestCase(unittest.TestCase):
"""
Custom TestCase class supporting additional equality checks:
- numpy array equality
- file equality
"""
def __init__(self, *args, **kwargs):
"""
Initializes a custom equality function for comparing numpy arrays.
"""
super(MyTestCase, self).__init__(*args, **kwargs)
np.set_printoptions(suppress=True)
self.addTypeEqualityFunc(np.ndarray, self.is_arrays_equal)
def is_arrays_equal(self, arr1, arr2, msg=None):
"""
Raises self.failureException is arrays arr1 and arr2
are not equal.
"""
if not np.allclose(arr1, arr2):
raise self.failureException(msg)
def assertFileEqual(self, file1, file2):
"""
Compares two files using difflib.
Empty lines are ignored.
Files are assumed to be relatively small;
the data is truncated for files larger than MAX_SIZE bytes.
"""
MAX_SIZE = 100000
with open(file1, 'r') as f1:
str1 = f1.read(MAX_SIZE)
with open(file2, 'r') as f2:
str2 = f2.read(MAX_SIZE)
#
# Make a diff
#
# Remove empty lines
lstr1 = [s for s in str1.splitlines(True) if s.strip() != '']
lstr2 = [s for s in str2.splitlines(True) if s.strip() != '']
# diff
delta = difflib.unified_diff(lstr1, lstr2)
# combine delta's to a string
diff = ''.join(delta)
# if 'diff' is non-empty, files are different
if diff:
return self.fail("Files '%s' and '%s' differ"%(file1, file2))
def assertH5FileEqual(self, file1, file2):
"""
Compares two files using difflib.
Empty lines are ignored.
Files are assumed to be relatively small;
the data is truncated for files larger than MAX_SIZE bytes.
"""
try:
h5diff(file1, file2, precision=1e-6)
except RuntimeError as err:
if "FAILED" in err:
return self.fail("Files '%s' and '%s' differ"%(file1, file2))