mirror of
https://github.com/triqs/dft_tools
synced 2024-12-27 06:43:40 +01:00
f86038a7fd
All imports inside the test cases refer now to paths relative to TRIQS python library path. For example, `import vaspio` is replaced with `import applications.dft.converters.plovasp.vasio` In this way all tests can be executed wtih `build_pytriqs` provided that the package is installed (the same practice as with other 'dft_tools' tests). Also, the underscore can now be removed from subdirectory names because there is no more conflict with module names.
57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
r"""
|
|
Module defining a custom TestCase with extra functionality.
|
|
"""
|
|
|
|
import unittest
|
|
import numpy as np
|
|
import difflib
|
|
|
|
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)
|
|
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, otherwise
|
|
the data is truncated.
|
|
"""
|
|
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 = filter(lambda s: s.strip() != '', str1.splitlines(True))
|
|
lstr2 = filter(lambda s: s.strip() != '', str2.splitlines(True))
|
|
# 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))
|
|
|
|
|