from sympy.core.cache import cacheit from sympy.testing.pytest import raises def test_cacheit_doc(): @cacheit def testfn(): "test docstring" pass assert testfn.__doc__ == "test docstring" assert testfn.__name__ == "testfn" def test_cacheit_unhashable(): @cacheit def testit(x): return x assert testit(1) == 1 assert testit(1) == 1 a = {} assert testit(a) == {} a[1] = 2 assert testit(a) == {1: 2} def test_cachit_exception(): # Make sure the cache doesn't call functions multiple times when they # raise TypeError a = [] @cacheit def testf(x): a.append(0) raise TypeError raises(TypeError, lambda: testf(1)) assert len(a) == 1 a.clear() # Unhashable type raises(TypeError, lambda: testf([])) assert len(a) == 1 @cacheit def testf2(x): a.append(0) raise TypeError("Error") a.clear() raises(TypeError, lambda: testf2(1)) assert len(a) == 1 a.clear() # Unhashable type raises(TypeError, lambda: testf2([])) assert len(a) == 1