X-Git-Url: https://ginac.de/ginac.git//ginac.git?a=blobdiff_plain;f=check%2Fexam_indexed.cpp;h=b7c12ba2ad2a52d11ac4d613caf3343f83ff5d91;hb=8e766b8f740363f97369d07668a6609ef6d62d65;hp=69816a74bcf81c34160d69fddf6a8b9344163340;hpb=68fdf425abf14d016d5f95ee7b9d06a19a3c5926;p=ginac.git diff --git a/check/exam_indexed.cpp b/check/exam_indexed.cpp index 69816a74..b7c12ba2 100644 --- a/check/exam_indexed.cpp +++ b/check/exam_indexed.cpp @@ -3,7 +3,7 @@ * Here we test manipulations on GiNaC's indexed objects. */ /* - * GiNaC Copyright (C) 1999-2003 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2008 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 @@ -17,10 +17,13 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "exams.h" +#include +#include "ginac.h" +using namespace std; +using namespace GiNaC; static unsigned check_equal(const ex &e1, const ex &e2) { @@ -241,19 +244,17 @@ static unsigned edyn_check() // Lorentz transformation matrix (boost along x axis) matrix L(4, 4); - L(0, 0) = gamma; - L(0, 1) = -beta*gamma; - L(1, 0) = -beta*gamma; - L(1, 1) = gamma; - L(2, 2) = 1; L(3, 3) = 1; + L = gamma, -beta*gamma, 0, 0, + -beta*gamma, gamma, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1; // Electromagnetic field tensor - matrix F(4, 4, lst( - 0, -Ex, -Ey, -Ez, + matrix F(4, 4); + F = 0, -Ex, -Ey, -Ez, Ex, 0, -Bz, By, Ey, Bz, 0, -Bx, - Ez, -By, Bx, 0 - )); + Ez, -By, Bx, 0; // Indices symbol s_mu("mu"), s_nu("nu"), s_rho("rho"), s_sigma("sigma"); @@ -377,6 +378,15 @@ static unsigned dummy_check() e = indexed(p, mu.toggle_variance(), mu) - indexed(p, nu, nu.toggle_variance()); result += check_equal_simplify(e, 0); + // GiNaC 1.2.1 had a bug here because p.i*p.i -> (p.i)^2 + e = indexed(p, i) * indexed(p, i) * indexed(p, j) + indexed(p, j); + ex fi = exprseq(e.get_free_indices()); + if (!fi.is_equal(exprseq(j))) { + clog << "get_free_indices(" << e << ") erroneously returned " + << fi << " instead of (.j)" << endl; + ++result; + } + return result; } @@ -385,7 +395,6 @@ unsigned exam_indexed() unsigned result = 0; cout << "examining indexed objects" << flush; - clog << "----------indexed objects:" << endl; result += delta_check(); cout << '.' << flush; result += metric_check(); cout << '.' << flush; @@ -396,12 +405,10 @@ unsigned exam_indexed() result += spinor_check(); cout << '.' << flush; result += dummy_check(); cout << '.' << flush; - if (!result) { - cout << " passed " << endl; - clog << "(no output)" << endl; - } else { - cout << " failed " << endl; - } - return result; } + +int main(int argc, char** argv) +{ + return exam_indexed(); +}