
# rename_dummies tests

def test01():
   __cdbkernel__=create_scope()
   {m,n,p,q}::Indices("one").
   {a,b,c,d}::Indices("two").
   ex:= A_{m} A^{m} + B_{m} C^{m} + A_{n} A^{n} + Q_{c d} R^{d c}.
   rename_dummies(ex, "one", "two")
   tst:= 2 A_{a} A^{a} + B_{a} C^{a} + Q_{c d} R^{d c} - @(ex).
   assert tst == 0, tst
   print("Test 01 passed")

test01()

def test02a():
   __cdbkernel__=create_scope()
   {n,p,q}::Indices("one").
   {m,n,p,q,r,s,t}::Indices("two").
   ex:= A_{r} = A_{m r} A^{m} + A_{n r} A^{n} + A_{s r} A^{s}.
   rename_dummies(ex, "two", "one")
   assert ex == $A_{r} = 3A_{n r} A^{n}$, ex
   print("Test 02a passed")

test02a()

def test02b():
   __cdbkernel__ = create_scope()
   {a, b, c, d, e, f}::Indices("one").
   {\alpha, \beta, \gamma, \delta}::Indices("two")
   ex1 := A_{a a \alpha \alpha};
   rename_dummies(ex1, "two", "one")
   assert ex1 == $A_{a a b b}$
   ex2 := A_{a a \alpha \alpha};
   rename_dummies(ex2, "one", "two")
   assert ex2 == $A_{\beta \beta \alpha \alpha}$
   print("Test 02b passed")

test02b()

# expand_dummies tests

def test03():
   __cdbkernel__ = create_scope()
   {t, x}::Coordinate.
   {\mu, \nu, \rho}::Indices(vector, values={t, x}).
   ex := A_{\mu} A^{\mu}.
   expand_dummies(ex)
   assert ex == $A_{t}A^{t} + A_{x}A^{x}$, ex
   print("Test 03 passed")

test03()

def test04():
   __cdbkernel__ = create_scope()
   {t, x}::Coordinate.
   {\mu, \nu, \rho}::Indices(vector, values={t, x}).
   ex := g^{\mu \nu} A_{\nu}.
   expand_dummies(ex)
   assert ex == $g^{\mu t} A_{t} + g^{\mu x} A_{x}$, ex
   print("Test 04 passed")

test04()

def test05():
   __cdbkernel__ = create_scope()
   {t, x, y, z}::Coordinate.
   {\mu, \nu, \rho, \lambda}::Indices(vector, values={t, x, y, z}).
   mink := g_{t t} = -1, g_{x x} = 1, g_{y y} = 1, g_{z z} = 1.
   ex := g_{\mu \rho} g_{\mu \lambda} k^{\rho} k^{\lambda}.
   expand_dummies(ex, mink)
   assert ex == $k^{t}k^{t} + k^{x}k^{x} + k^{y}k^{y} + k^{z}k^{z}$, ex
   print("Test 05 passed")

test05()

def test06():
   __cdbkernel__ = create_scope()
   {t, x}::Coordinate.
   {\mu, \nu, \rho, \lambda}::Indices(vector, values={t, x}).
   components := A_{t t} = a1, A_{x x} = a2, B_{x t} = b.
   ex := A_{\mu \nu}B_{\mu \nu}.
   expand_dummies(ex, components, False)
   assert ex == $a1 B_{t t} + A_{x t} b + A_{t x} B_{t x} + a2 B_{x x}$, ex
   print("Test 06 passed")

test06()

# values tests

def test07():
   __cdbkernel__ = create_scope()
   try:
      {r, s}::Indices(values={-1..a}).
      sys.exit(-1)
   except:
      print("Test 07a passed")      
   try:
      {r, s}::Indices(values={-1..999}).
      sys.exit(-1)
   except:
      print("Test 07b passed")      
   {a, b}::Indices(values={-1..2}).
   {c, d}::Indices(values={-1,1,2}).
   \delta{#}::KroneckerDelta.
   ex1 := \delta_{a b} \delta_{a b}.
   eliminate_kronecker(ex1)
   assert ex1 == 4
   print("Test 07c passed")
   ex2 := \delta_{c d} \delta_{c d}.
   eliminate_kronecker(ex2)
   assert ex2 == $\delta_{d d}$
   print("Test 07d passed")

test07()
