"Testing arcsin"

clear

check(arcsin(-x) == -arcsin(x))

check(arcsin(1 / sqrt(2)) == 1/4 pi)
check(arcsin(-1 / sqrt(2)) == -1/4 pi)

check(arcsin(-1) == -1/2 pi)
check(arcsin(-1/2) == -1/6 pi)
check(arcsin(0) == 0)
check(arcsin(1/2) == 1/6 pi)
check(arcsin(1) == 1/2 pi)

-- compare intrinsic

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

-- complex arg

for(x,-3,3,for(y,-3,3,
  z = 1/3.0 (x + i y),
  w = -i log(i z + sqrt(1 - z^2)),
  check(abs(arcsin(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(infixform(arcsin(sin(z1))) == infixform(z1))
check(infixform(arcsin(sin(z2))) == infixform(z2))
check(infixform(arcsin(sin(z3))) == infixform(z3))
check(infixform(arcsin(sin(z4))) == infixform(z4))

-- test domain beyond [-1,1]

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