* by Robert H. Lewis and Michael Wester. */
/*
- * GiNaC Copyright (C) 1999-2000 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
*
* 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 "times.h"
+#include <iostream>
+#include <vector>
+#include "ginac.h"
+#include "timer.h"
+using namespace std;
+using namespace GiNaC;
static unsigned test(unsigned n)
{
- unsigned result = 0;
- timer cartier;
- char name = (n==40?'I':(n==70?'K':'?'));
-
- cout << "timing Lewis-Wester test " << name
- << " (invert rank " << n << " Hilbert)" << flush;
- clog << "-------Lewis-Wester test " << name
- << " (invert rank " << n << " Hilbert)" << endl;
-
- // Create a rank n Hilbert matrix:
- matrix H(n,n);
- for (unsigned r=0; r<n; ++r)
- for (unsigned c=0; c<n; ++c)
- H.set(r,c,numeric(1,r+c+1));
- // invert it:
- cartier.start();
- matrix Hinv(n,n);
- Hinv = H.inverse();
- cout << ". passed ";
- clog << "(no output)" << endl;
- cout << int(1000*cartier.read())*0.001 << 's' << endl;
-
- // check result:
- name = (n==40?'J':(n==70?'L':'?'));
-
- cout << "timing Lewis-Wester test " << name
- << " (check rank " << n << " Hilbert)" << flush;
- clog << "-------Lewis-Wester test " << name
- << " (check rank " << n << " Hilbert)" << endl;
-
- cartier.reset();
- matrix identity = H.mul(Hinv);
- bool correct = true;
- for (unsigned r=0; r<n; ++r)
- for (unsigned c=0; c<n; ++c) {
- if (r==c) {
- if (identity(r,c)!=1)
- correct = false;
- } else {
- if (identity(r,c)!=0)
- correct = false;
- }
- }
- if (correct) {
- cout << ". passed ";
- clog << "(no output)" << endl;
- } else {
- cout << ". failed ";
- ++result;
- }
- cout << int(1000*cartier.read())*0.001 << 's' << endl;
- return result;
+ unsigned result = 0;
+ timer cartier;
+ char name = (n==40?'I':(n==70?'K':'?'));
+
+ cout << "timing Lewis-Wester test " << name
+ << " (invert rank " << n << " Hilbert)" << flush;
+
+ // Create a rank n Hilbert matrix:
+ matrix H(n,n);
+ for (unsigned r=0; r<n; ++r)
+ for (unsigned c=0; c<n; ++c)
+ H.set(r,c,numeric(1,r+c+1));
+ // invert it:
+ cartier.start();
+ matrix Hinv(n,n);
+ Hinv = H.inverse();
+ cout << ". passed ";
+ cout << cartier.read() << 's' << endl;
+
+ // check result:
+ name = (n==40?'J':(n==70?'L':'?'));
+
+ cout << "timing Lewis-Wester test " << name
+ << " (check rank " << n << " Hilbert)" << flush;
+
+ cartier.reset();
+ matrix identity = H.mul(Hinv);
+ bool correct = true;
+ for (unsigned r=0; r<n; ++r)
+ for (unsigned c=0; c<n; ++c) {
+ if (r==c) {
+ if (identity(r,c)!=1)
+ correct = false;
+ } else {
+ if (identity(r,c)!=0)
+ correct = false;
+ }
+ }
+ if (!correct)
+ ++result;
+ cout << cartier.read() << 's' << endl;
+ return result;
}
-unsigned time_lw_IJKL(void)
+unsigned time_lw_IJKL()
{
- unsigned result = 0;
-
- // Tests I and J:
- result += test(40);
- // Tests K and L:
- result += test(70);
-
- return result;
+ unsigned result = 0;
+
+ // Tests I and J:
+ result += test(40);
+ // Tests K and L:
+ result += test(70);
+
+ return result;
+}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_IJKL();
}