test_derivative = ->
  run_test [

    "x=quote(x)",
    "",

    "f=quote(f)",
    "",

    "g=quote(g)",
    "",

    "d(a,x)",
    "0",

    "d(x,x)",
    "1",

    "d(x^2,x)",
    "2*x",

    "d(log(x),x)",
    "1/x",

    "d(exp(x),x)",
    "exp(x)",

    "d(a^x,x)",
    "a^x*log(a)",

    "d(x^x,x)-(x^x+x^x*log(x))",
    "0",

    "d(log(x^2+5),x)-(2*x/(5+x^2))",
    "0",

    "d(d(f(x),x),y)",
    "0",

    "d(d(f(x),y),x)",
    "0",

    "d(d(f(y),x),y)",
    "0",

    "d(d(f(y),y),x)",
    "0",

    "d([x*y*z,y,x+z],[x,y,z])",
    "[[y*z,x*z,x*y],[0,1,0],[1,0,1]]",

    "d(x+z,[x,y,z])",
    "[1,0,1]",

    "d(cos(theta)^2,cos(theta))",
    "2*cos(theta)",

    "d(f())",
    "d(f(),x)",

    "d(x^2)",
    "2*x",

    "d(t^2)",
    "2*t",

    "d(t^2 x^2)",
    "2*t^2*x",

    # trig functions

    "d(sin(x),x)-cos(x)",
    "0",

    "d(cos(x),x)+sin(x)",
    "0",

    "d(tan(x),x)-cos(x)^(-2)",
    "0",

    "d(arcsin(x),x)-1/sqrt(1-x^2)",
    "0",

    "d(arccos(x),x)+1/sqrt(1-x^2)",
    "0",

    "d(arctan(x),x)-1/(1+x^2)",
    "0",

    "d(arctan(y/x),x)",
    "-y/(x^2+y^2)",

    "d(arctan(y/x),y)",
    "x/(x^2+y^2)",

    # hyp functions

    "d(sinh(x),x)-cosh(x)",
    "0",

    "d(cosh(x),x)-sinh(x)",
    "0",

    "d(tanh(x),x)-cosh(x)^(-2)",
    "0",

    "d(arcsinh(x),x)-1/sqrt(x^2+1)",
    "0",

    "d(arccosh(x),x)-1/sqrt(x^2-1)",
    "0",

    "d(arctanh(x),x)-1/(1-x^2)",
    "0",

    "d(sin(cos(x)),x)+cos(cos(x))*sin(x)",
    "0",

    "d(sin(x)^2,x)-2*sin(x)*cos(x)",
    "0",

    "d(sin(cos(x)),cos(x))-cos(cos(x))",
    "0",

    "d(abs(x),x)",
    "sgn(x)",
    
    "d(sgn(x),x)",
    "2*dirac(x)",

    # generic functions

    "d(f(),x)",
    "d(f(),x)",

    "d(f(x),x)",
    "d(f(x),x)",

    "d(f(y),x)",
    "0",

    "d(g(f(x)),f(x))",
    "d(g(f(x)),f(x))",

    "d(g(f(x)),x)",
    "d(g(f(x)),x)",

    # other functions

    "d(erf(x))-2*exp(-x^2)/sqrt(pi)",
    "0",

    # arg lists

    "f=x^5*y^7",
    "",

    "d(f)",
    "5*x^4*y^7",

    "d(f,x)",
    "5*x^4*y^7",

    "d(f,x,0)",
    "x^5*y^7",

    "d(f,x,1)",
    "5*x^4*y^7",

    "d(f,x,2)",
    "20*x^3*y^7",

    "d(f,2)",
    "20*x^3*y^7",

    "d(f,2,y)",
    "140*x^3*y^6",

    "d(f,x,x,y,y)",
    "840*x^3*y^5",

    "f=quote(f)",
    "",
  ]
