Source code for sfepy.base.testing

import inspect

import numpy as nm
import numpy.linalg as nla

from sfepy.base.base import Struct

##
# 30.05.2007, c
[docs]class TestCommon( Struct ): @staticmethod
[docs] def xfail(test_method): """ Decorator that allows a test to fail. """ def wrapper(self): try: ret = test_method(self) except: if self.debug: raise ret = False if not ret: print '--- test expected to fail.' ret = True return ret return wrapper
## # 16.07.2007, c
[docs] def get_number( self ): methods = inspect.getmembers( self, inspect.ismethod ) tests = [ii for ii in methods if (len( ii[0] ) > 5) and ii[0][:5] == 'test_'] return len( tests )
## # c: 30.05.2007, r: 05.02.2008
[docs] def run( self, debug = False ): self.debug = debug ok = True n_fail = 0 methods = inspect.getmembers( self, inspect.ismethod ) if hasattr( self, 'tests' ): dmethods = {} for key, method in methods: dmethods[key] = method tests = [(ii, dmethods[ii]) for ii in self.tests] print tests else: tests = [ii for ii in methods if (len( ii[0] ) > 5) and ii[0][:5] == 'test_'] for test_name, test_method in tests: aux = ' %s: ' % test_name try: ret = test_method() except: if debug: raise ret = False if not ret: aux = '---' + aux + 'failed!' n_fail += 1 ok = False else: aux = '+++' + aux + 'ok' print aux return ok, n_fail, len( tests )
## # c: 31.05.2007, r: 02.05.2008
[docs] def report( *argc ): """All tests should print via this function.""" format = '...' + ' %s' * len( argc ) msg = format % argc print msg
report = staticmethod( report ) ## # c: 30.05.2007, r: 09.05.2008
[docs] def eval_coor_expression( expression, coor ): x = coor[:,0] y = coor[:,1] if coor.shape[1] == 3: z = coor[:,2] else: z = None env = {'x' : x, 'y' : y, 'z' : z} out = eval( expression, nm.__dict__, env ) if isinstance(out, float): aux = nm.empty(coor.shape[0], dtype=nm.float64) aux.fill(out) out = aux return out
eval_coor_expression = staticmethod( eval_coor_expression ) ## # c: 30.05.2007, r: 07.05.2008
[docs] def compare_vectors( vec1, vec2, allowed_error = 1e-8, label1 = 'vec1', label2 = 'vec2', norm = None ): diff_norm = nla.norm( vec1 - vec2, ord = norm ) TestCommon.report( '||%s - %s||: %e' % (label1, label2, diff_norm) ) if diff_norm > allowed_error: return False else: return True
compare_vectors = staticmethod( compare_vectors )