"Testing log"

clear

check(infixform(log(0)) == "log(0)")
check(log(x^2) == 2 log(x))
check(log(1 / x) == -log(x))
check(log(x y) == log(x) + log(y))
check(log(x^y) == y log(x))
check(log(exp(x)) == x)
check(log(1/3) + log(3) == 0)
check(log(-1) == i pi)
check(infixform(log(-1.0)) == "-3.14159 i")

-- log of number is factored

check(infixform(log(1/10)) = "-log(2) - log(5)")

-- compare intrinsic

for(x,1,10,
  d = float(log(x/3)) - log(float(x/3)),
  check(abs(d) < 1.0 10^(-6))
)

-- negative arg

for(x,1,10,
  d = exp(log(-x/3.0)) + x/3.0,
  check(abs(d) < 1.0 10^(-6))
)

-- complex arg

z1 =  0.2 + 0.3 i
z2 =  0.2 - 0.3 i
z3 = -0.2 + 0.3 i
z4 = -0.2 - 0.3 i

check(infixform(exp(log(z1))) == infixform(z1))
check(infixform(exp(log(z2))) == infixform(z2))
check(infixform(exp(log(z3))) == infixform(z3))
check(infixform(exp(log(z4))) == infixform(z4))
