"Testing arg"

clear

check(arg((a + i b) / (c + i d)) == arctan(b,a) - arctan(d,c))

check(infixform(arg(1)) == "0")
check(infixform(arg(-1)) == "-pi")
check(infixform(arg(i)) == "1/2 pi")
check(infixform(arg(-i)) == "-1/2 pi")

check(infixform(arg(a)) == "0")
check(infixform(arg(-a)) == "-pi")
check(infixform(arg(i a)) == "1/2 pi")
check(infixform(arg(-i a)) == "-1/2 pi")

check(infixform(arg(a b)) == "0")
check(infixform(arg(-a b)) == "-pi")
check(infixform(arg(i a b)) == "1/2 pi")
check(infixform(arg(-i a b)) == "-1/2 pi")

check(infixform(arg(a + b)) == "0")
check(infixform(arg(-a - b)) == "0")
check(infixform(arg(i a + i b)) == "1/2 pi")
check(infixform(arg(-i a - i b)) == "1/2 pi")

z1 = x1 + i y1
z2 = x2 + i y2
check(arg((z1,z2)) == (arctan(y1,x1),arctan(y2,x2)))

T = arg(-1)
check(prefixform(T)="(* -1 pi)")

T = arg(-1.0)
check(prefixform(T)="-3.14159")

check(arg(2 + 3 i) == arg(polar(2 + 3 i)))
check(arg(2 - 3 i) == arg(polar(2 - 3 i)))
check(arg(-2 + 3 i) == arg(polar(-2 + 3 i)))
check(arg(-2 - 3 i) == arg(polar(-2 - 3 i)))

check(arg(2 + 3 i) == arg(clock(2 + 3 i)))
check(arg(2 - 3 i) == arg(clock(2 - 3 i)))
check(arg(-2 + 3 i) == arg(clock(-2 + 3 i)))
check(arg(-2 - 3 i) == arg(clock(-2 - 3 i)))

-- use prefixform to compare floating point numbers

check(prefixform(arg(2.0 + 3.0 i)) == prefixform(arg(polar(2.0 + 3.0 i))))
check(prefixform(arg(2.0 - 3.0 i)) == prefixform(arg(polar(2.0 - 3.0 i))))
check(prefixform(arg(-2.0 + 3.0 i)) == prefixform(arg(polar(-2.0 + 3.0 i))))
check(prefixform(arg(-2.0 - 3.0 i)) == prefixform(arg(polar(-2.0 - 3.0 i))))

check(prefixform(arg(2.0 + 3.0 i)) == prefixform(arg(clock(2.0 + 3.0 i))))
check(prefixform(arg(2.0 - 3.0 i)) == prefixform(arg(clock(2.0 - 3.0 i))))
check(prefixform(arg(-2.0 + 3.0 i)) == prefixform(arg(clock(-2.0 + 3.0 i))))
check(prefixform(arg(-2.0 - 3.0 i)) == prefixform(arg(clock(-2.0 - 3.0 i))))

T = arg(1+i)
check(T = 1/4*pi)
T = arg(1-i)
check(T = -1/4*pi)
T = arg(-1+i)
check(T = 3/4*pi)
T = arg(-1-i)
check(T = -3/4*pi)
T = arg(a)
check(T = 0)
T = arg(a*exp(b+i*pi/5))
check(T = 1/5*pi)
T = arg(-1)
check(T = -pi)
T = arg(a)
check(T = 0)
T = arg(-a)
check(T = -pi)
T = arg(-exp(i*pi/3))
check(T = -2/3*pi)
T = arg(-i)
check(T = -1/2*pi)
T = arg((a+b*i)/(c+d*i))
check(T = arctan(b,a)-arctan(d,c))

check(infixform(arg(sqrt(-sqrt(-1)))) == "3/4 pi") -- bug fix

for(x,-2,2,for(y,-2,2,
  check(arg(x + i y) == arctan(y,x))
))

for(x,-2,2,for(y,-2,2,
  x = float(x),
  y = float(y),
  check(abs(arg(x + i y) - arctan(y,x)) < 0.000001)
))
