def _executeTests(test, a, b, res, **kwargs): """ performes tests on operators """ almost = kwargs.get('almost', False) real = kwargs.get('real', True) res.reverse() test('_a+_b', a + b, res.pop(), **kwargs) test('_a-_b', a - b, res.pop(), **kwargs) test('_a*_b', a * b, res.pop(), **kwargs) test('_a/_b', a / b, res.pop(), **kwargs) test('_a**_b', a**b, res.pop(), **kwargs) test('_a|_b', a | b, res.pop(), **kwargs) test('_a&_b', a & b, res.pop(), **kwargs) test('_a==_b', a == b, res.pop()) test('_a!=_b', a != b, res.pop()) test('_a<<_b', a << b, res.pop(), **kwargs) test('_a>>_b', a >> b, res.pop(), **kwargs) test('-_a', -a, res.pop(), **kwargs) test('abs(-_a)', abs(-a), res.pop(), **kwargs) test('abs1(-_a)', m.ABS1(-a), res.pop(), **kwargs) test('abssq(-_a)', m.ABSSQ(-a), res.pop(), **kwargs) rcount = 11 acount = 4 + rcount if almost: # some operations only make sence on floating point test('exp(_a)', m.EXP(a), res.pop(), **kwargs) test('log(_a)', m.LOG(a), res.pop(), **kwargs) test('sin(_a)', m.SIN(a), res.pop(), **kwargs) test('cos(_a)', m.COS(a), res.pop(), **kwargs) if real: # some operations are only defined for real numbers test('tan(_a)', m.TAN(a), res.pop(), **kwargs) test('asin(_a/10)', m.ASIN(a / 10), res.pop(), **kwargs) test('acos(_a/10)', m.ACOS(a / 10), res.pop(), **kwargs) test('atan(_a)', m.ATAN(a), res.pop(), **kwargs) test('atan2(_a,1)', m.ATAN2(a, 1), res.pop(), **kwargs) test('log2(_a)', m.LOG2(a), res.pop(), **kwargs) test('log10(_a)', m.LOG10(a), res.pop(), **kwargs) test('sind(_a)', m.SIND(a), res.pop(), **kwargs) test('cosd(_a)', m.COSD(a), res.pop(), **kwargs) test('tand(_a)', m.TAND(a), res.pop(), **kwargs) test('anint(_a/3)', m.ANINT(a / 3), res.pop(), **kwargs) else: # strip results of real operations res = res[:-rcount] else: # strip results of floating operations res = res[:-acount] if real: # some binary operations are only defined for real numbers test('_a mod _b', a % b, res.pop(), **kwargs) test('_a>_b', a > b, res.pop()) test('_a>=_b', a >= b, res.pop()) test('_a<_b', a < b, res.pop()) test('_a<=_b', a <= b, res.pop())