X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=check%2Fexam_paranoia.cpp;h=035235a5086df29230e0a02d6b4586c2e3d95526;hp=7c82e48662d9181256a5ebc044edd2b501f3d3e4;hb=836d606a1657629dcd7fb1b763e21dd296e9b164;hpb=da64e515abf7243bc4c84ca3631470931c4e6691 diff --git a/check/exam_paranoia.cpp b/check/exam_paranoia.cpp index 7c82e486..035235a5 100644 --- a/check/exam_paranoia.cpp +++ b/check/exam_paranoia.cpp @@ -6,7 +6,7 @@ * these oopses for good, so we run those stupid tests... */ /* - * GiNaC Copyright (C) 1999-2005 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2007 Johannes Gutenberg University Mainz, Germany * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -283,7 +283,7 @@ static unsigned exam_paranoia11() ex e = ((-5-2*x)-((2-5*x)/(-2+x))*(3+2*x))/(5-4*x); ex f = e.normal(); - ex d = (4+10*x+8*pow(x,2))/(x-2)/(5-4*x); + ex d = normal((4+10*x+8*pow(x,2))/(x-2)/(5-4*x)); if (!(f - d).expand().is_zero()) { clog << "normal(" << e << ") returns " << f << " instead of " << d << endl; @@ -437,6 +437,33 @@ static unsigned exam_paranoia16() return result; } +// Bug in reposition_dummy_indices() could result in correct expression +// turned into one with inconsistent indices. Fixed on Aug 29, 2006 +static unsigned exam_paranoia17() +{ + varidx mu1(symbol("mu1"), 4); + varidx mu2(symbol("mu2"), 4); + varidx mu3(symbol("mu3"), 4); + varidx mu4(symbol("mu4"), 4); + varidx mu5(symbol("mu5"), 4); + varidx mu6(symbol("mu6"), 4); + + exvector ev2; + ev2.push_back(mu3.toggle_variance()); + ev2.push_back(mu6); + ev2.push_back(mu5.toggle_variance()); + ev2.push_back(mu6.toggle_variance()); + ev2.push_back(mu5); + ev2.push_back(mu3); + // notice: all indices are contracted ... + + ex test_cycl = indexed(symbol("A"), sy_cycl(), ev2); + test_cycl = test_cycl.simplify_indexed(); + // ... so there should be zero free indices in the end. + return test_cycl.get_free_indices().size(); +} + + unsigned exam_paranoia() { unsigned result = 0; @@ -460,6 +487,7 @@ unsigned exam_paranoia() result += exam_paranoia14(); cout << '.' << flush; result += exam_paranoia15(); cout << '.' << flush; result += exam_paranoia16(); cout << '.' << flush; + result += exam_paranoia17(); cout << '.' << flush; if (!result) { cout << " passed " << endl;