test_abs = ->
  run_test [

    "abs(a+i*b)",
    "(a^2+b^2)^(1/2)",

    "abs(a+b+i*c)",
    "(2*a*b+a^2+b^2+c^2)^(1/2)",

    "abs(exp(a+i*b))",
    "exp(a)",

    "abs(((-1)^(1/3)+1)^(1/2))",
    "3^(1/4)",

    "abs((-2*(-1)^(1/6)/(3^(1/2)))^(1/4))",
    "(2/(3^(1/2)))^(1/4)",

    "abs((-2*(-1)^(1/6)/(3^(1/2))+1)^(1/4))",
    "1/3^(1/8)",

    "abs((2*(-1)^(5/6)/(3^(1/2)))^(1/4))",
    "(2/(3^(1/2)))^(1/4)",

    "abs(1+1.0*(-1)^(1/2))",
    "1.414214...",

    "abs(1-1.0*(-1)^(1/2))",
    "1.414214...",

    "abs(1+2.0*(-1)^(1/2))",
    "2.236068...",

    "abs(1-2.0*(-1)^(1/2))",
    "2.236068...",

    "abs(1)",
    "1",

    "abs(x)",
    "abs(x)",

    # true only if x is real,
    # counterexample: i, which makes 1 and -1
    "abs(x)^2",
    "x^2",

    "abs(-x)",
    "abs(x)",

    "abs(abs(-x))",
    "abs(x)",

    "abs(abs(abs(-x)))",
    "abs(x)",

    "abs(a+b)",
    "abs(a+b)",

    "abs(a*b)",
    "abs(a)*abs(b)",

    "abs(-1)",
    "1",

    "abs(1+exp(i*pi/3))",
    "3^(1/2)",

    "abs((a+i*b)/(c+i*d))",
    "(a^2+b^2)^(1/2)/((c^2+d^2)^(1/2))",

    "abs(((-1)^(1/2) / (3^(1/2)))^(1/2))",
    "1/3^(1/4)",

    "abs(exp(i theta))",
    "1",

    "abs(exp(-i theta))",
    "1",

    "abs((-1)^theta)",
    "1",

    "abs((-1)^(-theta))",
    "1",

    "abs(3*(-1)^theta)",
    "3",

    "abs(3*(-1)^(-theta))",
    "3",

    "abs(-3*(-1)^theta)",
    "3",

    "abs(-3*(-1)^(-theta))",
    "3",

    "abs(-5 i pi / a)",
    "5*pi/abs(a)",

    "abs(1 / a)",
    "1/(abs(a))",

    # ---------- old abs tests

    "abs(2)",
    "2",

    "abs(2.0)",
    "2.0",

    "abs(-2)",
    "2",

    "abs(-2.0)",
    "2.0",

    "abs(a)",
    "abs(a)",

    "abs(-a)",
    "abs(a)",

    "abs(2*a)",
    "2*abs(a)",

    "abs(-2*a)",
    "2*abs(a)",

    "abs(2.0*a)",
    "2.0*abs(a)",

    "abs(-2.0*a)",
    "2.0*abs(a)",

    "abs(a-b)+abs(b-a)",
    "2*abs(a-b)",

    "abs(3 + 4 i)",
    "5",

    "abs([2,3,4])",
    "29^(1/2)",

    "abs(a*b)",
    "abs(a)*abs(b)",

    "abs(a/b)",
    "abs(a)/abs(b)",

    "abs(1/a^b)",
    "1/(abs(a^b))",

    # Check that vector length is simplified

    "P=[u*cos(v),u*sin(v),v]",
    "",

    "abs(cross(d(P,u),d(P,v)))",
    "(1+u^2)^(1/2)",

    "abs((-1)^(-0.666667+0.0291367/pi))",
    "1.0",

    "abs((-1)^(9/3))",
    "1",

    "abs((1)^(9/3))",
    "1",

    "abs((-1.0)^(9/3))",
    "1.0",

  ]
