"Testing arccos"

clear

check(arccos(1 / sqrt(2)) == 1/4 pi)
check(arccos(-1 / sqrt(2)) == 3/4 pi)

check(arccos(-1) == pi)
check(arccos(-1/2) == 2/3 pi)
check(arccos(0) == 1/2 pi)
check(arccos(1/2) == 1/3 pi)
check(arccos(1) == 0)

-- compare intrinsic

for(x,-12,12,
  d = float(arccos(x/12)) - arccos(float(x/12)),
  check(abs(d) < 1.0 10^(-6))
)

-- complex arg

for(x,-2,2,for(y,-2,2,
  z = 1/3.0 (x + i y),
  w = -i log(z + i sqrt(1 - z^2)),
  check(abs(arccos(z) - w) < 1.0 10^(-6))
))

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(cos(z1) == cos(z4)) -- because cos(-x) = cos(x)
check(cos(z2) == cos(z3)) -- because cos(-x) = cos(x)

check(infixform(arccos(cos(z1))) == infixform(z1))
check(infixform(arccos(cos(z2))) == infixform(z2))
check(infixform(arccos(cos(z3))) == infixform(z2)) -- because cos(-x) = cos(x)
check(infixform(arccos(cos(z4))) == infixform(z1)) -- because cos(-x) = cos(x)

-- test domain beyond [-1,1]

for(x,-10,10,
  d = cos(arccos(x/3.0)) - x/3.0,
  check(abs(d) < 1.0 10^(-6))
)
