"Testing derivative"

clear

T = d(a,x)
check(T = 0)
T = d(x,x)
check(T = 1)
T = d(x^2,x)
check(T = 2*x)
T = d(log(x),x)
check(T = 1/x)
T = d(exp(x),x)
check(T = exp(x))
T = d(a^x,x)
check(T = a^x*log(a))
T = d(x^x,x)-(x^x+x^x*log(x))
check(T = 0)
T = d(log(x^2+5),x)-(2*x/(5+x^2))
check(T = 0)
T = d(d(f(x),x),y)
check(T = 0)
T = d(d(f(x),y),x)
check(T = 0)
T = d(d(f(y),x),y)
check(T = 0)
T = d(d(f(y),y),x)
check(T = 0)
x=quote(x)
y=quote(y)
z=quote(z)
T = d((x*y*z,y,x+z),(x,y,z))
check(T = ((y*z,x*z,x*y),(0,1,0),(1,0,1)))
T = d(x+z,(x,y,z))
check(T = (1,0,1))
T = d(f())
check(T = d(f(),x))
T = d(x^2)
check(T = 2*x)
T = d(t^2 x^2)
check(T = 2*t^2*x)
T = d(sin(x),x)-cos(x)
check(T = 0)
T = d(cos(x),x)+sin(x)
check(T = 0)
T = d(tan(x),x)-cos(x)^(-2)
check(T = 0)
T = d(arcsin(x),x)-1/sqrt(1-x^2)
check(T = 0)
T = d(arccos(x),x)+1/sqrt(1-x^2)
check(T = 0)
T = d(arctan(x),x)-1/(1+x^2)
check(T = 0)
T = d(arctan(y/x),x)
check(T = -y/(x^2+y^2))
T = d(arctan(y/x),y)
check(T = x/(x^2+y^2))
T = d(arctan(y,x),x)
check(T = -y / (x^2 + y^2))
T = d(arctan(y,x),y)
check(T = x / (x^2 + y^2))
check(infixform(d(arctan(x,0),x))=="d(arctan(x,0),x)")
check(infixform(d(arctan(0,x),x))=="d(arctan(0,x),x)")
check(d(arctan(y,x),z)==0)
T = d(sinh(x),x)-cosh(x)
check(T = 0)
T = d(cosh(x),x)-sinh(x)
check(T = 0)
T = d(tanh(x),x)-cosh(x)^(-2)
check(T = 0)
T = d(arcsinh(x),x)-1/sqrt(x^2+1)
check(T = 0)
T = d(arccosh(x),x)-1/sqrt(x^2-1)
check(T = 0)
T = d(arctanh(x),x)-1/(1-x^2)
check(T = 0)
T = d(sin(cos(x)),x)+cos(cos(x))*sin(x)
check(T = 0)
T = d(sin(x)^2,x)-2*sin(x)*cos(x)
check(T = 0)
T = d(f(),x)
check(T = d(f(),x))
T = d(f(x),x)
check(T = d(f(x),x))
T = d(f(y),x)
check(T = 0)
T = d(g(f(x)),x)
check(T = d(g(f(x)),x))
T = d(erf(x))-2*exp(-x^2)/sqrt(pi)
check(T = 0)

f=x^5*y^7

T = d(f)
check(T = 5*x^4*y^7)
T = d(f,x)
check(T = 5*x^4*y^7)
T = d(f,x,0)
check(T = x^5*y^7)
T = d(f,x,1)
check(T = 5*x^4*y^7)
T = d(f,x,2)
check(T = 20*x^3*y^7)
T = d(f,2)
check(T = 20*x^3*y^7)
T = d(f,2,y)
check(T = 140*x^3*y^6)
T = d(f,x,x,y,y)
check(T = 840*x^3*y^5)

clear

-- derivative of derivative

check(infixform(d(f(x),x,x)) == "d(d(f(x),x),x)")
check(infixform(d(f(x),x,y)) == "0")
check(infixform(d(f(x),y,x)) == "0")
check(infixform(d(f(x),y,y)) == "0")

-- derivative of integral

check(infixform(d(integral(f(x),x),x)) == "f(x)")
check(infixform(d(integral(f(x),x),y)) == "0")
check(infixform(d(integral(f(x),y),x)) == "y d(f(x),x)")

check(infixform(d(integral(f(x,y),x),y)) == "integral(d(f(x,y),y),x)")
check(infixform(d(integral(f(x,y),y),x)) == "integral(d(f(x,y),x),y)")

check(infixform(d(integral(f(x,y),x,y),x)) == "integral(f(x,y),y)")
check(infixform(d(integral(f(x,y),x,y),y)) == "integral(f(x,y),x)")

check(infixform(d(integral(f(x,y),y,x),x)) == "integral(f(x,y),y)")
check(infixform(d(integral(f(x,y),y,x),y)) == "integral(f(x,y),x)")

check(infixform(d(integral(f(x,y),x),x,y)) == "d(f(x,y),y)")
check(infixform(d(integral(f(x,y),x),y,x)) == "d(f(x,y),y)")

-- derivative of function of function

check(infixform(d(f(g()),x)) == "d(f(g()),x)")
check(infixform(d(f(g(x)),x)) == "d(f(g(x)),x)")
check(infixform(d(f(g(y)),x)) == "0")
