"Testing eval"

clear

check(eval(a b c d, b d, 2) == 2 a c)
check(eval(a b c d + e, b d, 2) == 2 a c + e)
check(eval(a + b + c + d, b + d, 2) == a + c + 2)

f = sqrt(1 - cos(theta)^2)
check(eval(f,sqrt(1 - cos(theta)^2),sin(theta)) == sin(theta))
f = exp(a+b+c)
check(eval(f,exp(a),d) == d exp(b+c))
check(eval(f,exp(b),d) == d exp(a+c))
check(eval(f,exp(c),d) == d exp(a+b))
check(eval(f,exp(a+b),d) == d exp(c))
check(eval(f,exp(a+c),d) == d exp(b))
check(eval(f,exp(b+c),d) == d exp(a))
check(eval(f,exp(a+b+c),d) == d)
f = a exp(b+c)
check(eval(f,a,d) == d exp(b+c))
check(eval(f,exp(b+c),d) == a d)
check(eval(f,exp(b),d) == a d exp(c))
check(eval(f,exp(c),d) == a d exp(b))
check(eval(f,a exp(b),d) == d exp(c))
check(eval(f,a exp(c),d) == d exp(b))
check(eval(f,a exp(b+c),d) == d)

phi1 = r1(x) exp(i theta1(x)) -- note that conj(phi1) phi1 == r1(x)^2
phi2 = r2(x) exp(i theta2(x)) -- note that conj(phi2) phi2 == r2(x)^2
psi = 1/2 (phi1 + phi2) exp(-i E1 t / hbar) +
      1/2 (phi1 - phi2) exp(-i E2 t / hbar)
A(f) = eval(f, phi1, a1 phi1, phi2, a2 phi2) -- eigenvalues
f = conj(psi) A(psi)
Abar = eval(f, r1(x)^2, 1, r2(x)^2, 1, r1(x) r2(x), 0) -- integral
check(Abar == (a1 + a2) / 2 + (a1 - a2) / 2 cos((E1 - E2) t / hbar))
