"Testing sin"

clear

check(sin(-x) == -sin(x))
check(sin(arctan(y,x)) == y (x^2 + y^2)^(-1/2))
check(sin(arccos(x)) == sqrt(1 - x^2))
check(sin((x,y)) == (sin(x),sin(y)))

-- special angles

check(sin(0/360 2 pi) == 0)
check(sin(180/360 2 pi) == 0)

check(sin(30/360 2 pi) == 1/2)
check(sin(150/360 2 pi) == 1/2)

check(sin(210/360 2 pi) == -1/2)
check(sin(330/360 2 pi) == -1/2)

check(sin(45/360 2 pi) == 1/2 sqrt(2))
check(sin(135/360 2 pi) == 1/2 sqrt(2))

check(sin(225/360 2 pi) == -1/2 sqrt(2))
check(sin(315/360 2 pi) == -1/2 sqrt(2))

check(sin(60/360 2 pi) == 1/2 sqrt(3))
check(sin(120/360 2 pi) == 1/2 sqrt(3))

check(sin(240/360 2 pi) == -1/2 sqrt(3))
check(sin(300/360 2 pi) == -1/2 sqrt(3))

check(sin(90/360 2 pi) == 1)

-- negative

check(sin(-0/360 2 pi) == 0)
check(sin(-180/360 2 pi) == 0)

check(sin(-30/360 2 pi) == -1/2)
check(sin(-150/360 2 pi) == -1/2)

check(sin(-210/360 2 pi) == 1/2)
check(sin(-330/360 2 pi) == 1/2)

check(sin(-45/360 2 pi) == -1/2 sqrt(2))
check(sin(-135/360 2 pi) == -1/2 sqrt(2))

check(sin(-225/360 2 pi) == 1/2 sqrt(2))
check(sin(-315/360 2 pi) == 1/2 sqrt(2))

check(sin(-60/360 2 pi) == -1/2 sqrt(3))
check(sin(-120/360 2 pi) == -1/2 sqrt(3))

check(sin(-240/360 2 pi) == 1/2 sqrt(3))
check(sin(-300/360 2 pi) == 1/2 sqrt(3))

check(sin(-90/360 2 pi) == -1)

-- compare intrinsic

for(x,-720,720,
  d = float(sin(2 pi x / 360)) - sin(float(2 pi x / 360)),
  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/2 exp(i z) + i/2 exp(-i z),
  check(abs(sin(z) - w) < 1.0 10^(-6))
))

-- implicit float pi

for(x,-1,1,
  a = infixform(sin(x pi / 3.0)),
  b = infixform(sin(x float(pi) / 3.0)),
  check(a == b)
)
