[GiNaC-devel] [PATCH] check: indicate the test failures with non-zero exit code; split test programs.
Alexei Sheplyakov
varg at theor.jinr.ru
Thu Feb 28 08:28:27 CET 2008
IMNSHO parsing the output of test programs in order to check if the
tests passed is a bad idea (and it causes *real* problems, see e.g.
http://www.ginac.de/pipermail/ginac-list/2008-February/001345.html).
It's much simpler and cleaner to indicate the failure in a genuine
*NIX way: exit with nonzero code.
---
check/Makefile.am | 245 ++++++++++++++++++++++++++++++++++-----
check/check_inifcns.cpp | 19 ++--
check/check_lsolve.cpp | 22 ++--
check/check_matrices.cpp | 26 +++--
check/check_numeric.cpp | 18 ++--
check/checks.cpp | 60 ----------
check/checks.h | 47 --------
check/checks.ref | 8 --
check/exam_archive.cpp | 21 ++--
check/exam_clifford.cpp | 18 ++--
check/exam_color.cpp | 18 ++--
check/exam_differentiation.cpp | 17 ++--
check/exam_hashmap.cpp | 19 ++--
check/exam_indexed.cpp | 18 ++--
check/exam_inifcns.cpp | 18 ++--
check/exam_inifcns_nstdsums.cpp | 20 ++--
check/exam_lsolve.cpp | 18 ++--
check/exam_matrices.cpp | 18 ++--
check/exam_misc.cpp | 19 ++--
check/exam_normalization.cpp | 18 ++--
check/exam_numeric.cpp | 20 ++--
check/exam_paranoia.cpp | 18 ++--
check/exam_polygcd.cpp | 18 ++--
check/exam_powerlaws.cpp | 18 ++--
check/exam_pseries.cpp | 17 ++--
check/exam_structure.cpp | 20 ++--
check/exams.cpp | 70 -----------
check/exams.h | 51 --------
check/exams.ref | 36 ------
check/randomize_serials.cpp | 31 +++++
check/run_checks | 4 -
check/run_exams | 4 -
check/run_times | 4 -
check/time_antipode.cpp | 23 ++--
check/time_dennyfliegner.cpp | 24 +++--
check/time_fateman_expand.cpp | 22 +++--
check/time_gammaseries.cpp | 23 +++--
check/time_hashmap.cpp | 24 +++--
check/time_lw_A.cpp | 24 +++--
check/time_lw_B.cpp | 23 +++--
check/time_lw_C.cpp | 24 +++--
check/time_lw_D.cpp | 24 +++--
check/time_lw_E.cpp | 24 +++--
check/time_lw_F.cpp | 24 +++--
check/time_lw_G.cpp | 24 +++--
check/time_lw_H.cpp | 24 +++--
check/time_lw_IJKL.cpp | 28 +++--
check/time_lw_M1.cpp | 23 +++--
check/time_lw_M2.cpp | 24 +++--
check/time_lw_N.cpp | 25 +++--
check/time_lw_O.cpp | 34 +++---
check/time_lw_P.cpp | 25 +++--
check/time_lw_Pprime.cpp | 24 +++--
check/time_lw_Q.cpp | 25 +++--
check/time_lw_Qprime.cpp | 25 +++--
check/time_toeplitz.cpp | 23 +++--
check/time_vandermonde.cpp | 23 +++--
check/times.cpp | 104 -----------------
check/times.h | 63 ----------
check/times.ref | 56 ---------
60 files changed, 820 insertions(+), 967 deletions(-)
delete mode 100644 check/checks.cpp
delete mode 100644 check/checks.h
delete mode 100644 check/checks.ref
delete mode 100644 check/exams.cpp
delete mode 100644 check/exams.h
delete mode 100644 check/exams.ref
create mode 100644 check/randomize_serials.cpp
delete mode 100755 check/run_checks
delete mode 100755 check/run_exams
delete mode 100755 check/run_times
delete mode 100644 check/times.cpp
delete mode 100644 check/times.h
delete mode 100644 check/times.ref
diff --git a/check/Makefile.am b/check/Makefile.am
index b7c9d0f..d7f372b 100644
--- a/check/Makefile.am
+++ b/check/Makefile.am
@@ -1,31 +1,218 @@
## Process this file with automake to produce Makefile.in
-TESTS = run_exams run_checks run_times
-check_PROGRAMS = exams checks times
-TESTS_ENVIRONMENT = EXEEXT=$(EXEEXT) srcdir=$(srcdir)
-
-checks_SOURCES = check_numeric.cpp check_inifcns.cpp check_matrices.cpp \
- check_lsolve.cpp genex.cpp checks.cpp checks.h
-checks_LDADD = ../ginac/libginac.la
-
-exams_SOURCES = exam_paranoia.cpp exam_numeric.cpp exam_powerlaws.cpp \
- exam_inifcns.cpp exam_inifcns_nstdsums.cpp exam_inifcns_nstdsums.h \
- exam_differentiation.cpp exam_polygcd.cpp exam_normalization.cpp \
- exam_pseries.cpp exam_matrices.cpp exam_lsolve.cpp exam_indexed.cpp \
- exam_color.cpp exam_clifford.cpp exam_archive.cpp exam_structure.cpp \
- exam_hashmap.cpp exam_misc.cpp exams.cpp exams.h
-exams_LDADD = ../ginac/libginac.la
-
-times_SOURCES = time_dennyfliegner.cpp time_gammaseries.cpp \
- time_vandermonde.cpp time_toeplitz.cpp time_hashmap.cpp time_lw_A.cpp \
- time_lw_B.cpp time_lw_C.cpp time_lw_D.cpp time_lw_E.cpp time_lw_F.cpp \
- time_lw_G.cpp time_lw_H.cpp time_lw_IJKL.cpp time_lw_M1.cpp time_lw_M2.cpp \
- time_lw_N.cpp time_lw_O.cpp time_lw_P.cpp time_lw_Pprime.cpp time_lw_Q.cpp \
- time_lw_Qprime.cpp time_antipode.cpp time_fateman_expand.cpp timer.cpp \
- timer.h times.cpp times.h
-times_LDADD = ../ginac/libginac.la
-
-INCLUDES = -I$(srcdir)/../ginac -I../ginac
-
-CLEANFILES = exams.out checks.out times.out exam.gar
-EXTRA_DIST = exams.ref checks.ref times.ref run_exams run_checks run_times
+CHECKS = check_numeric \
+ check_inifcns \
+ check_matrices \
+ check_lsolve
+
+EXAMS = exam_paranoia \
+ exam_numeric \
+ exam_powerlaws \
+ exam_inifcns \
+ exam_inifcns_nstdsums \
+ exam_differentiation \
+ exam_polygcd \
+ exam_normalization \
+ exam_pseries \
+ exam_matrices \
+ exam_lsolve \
+ exam_indexed \
+ exam_color \
+ exam_clifford \
+ exam_archive \
+ exam_structure \
+ exam_hashmap \
+ exam_misc
+
+TIMES = time_dennyfliegner \
+ time_gammaseries \
+ time_vandermonde \
+ time_toeplitz \
+ time_hashmap \
+ time_lw_A \
+ time_lw_B \
+ time_lw_C \
+ time_lw_D \
+ time_lw_E \
+ time_lw_F \
+ time_lw_G \
+ time_lw_H \
+ time_lw_IJKL \
+ time_lw_M1 \
+ time_lw_M2 \
+ time_lw_N \
+ time_lw_O \
+ time_lw_P \
+ time_lw_Pprime \
+ time_lw_Q \
+ time_lw_Qprime \
+ time_antipode \
+ time_fateman_expand
+
+TESTS = $(CHECKS) $(EXAMS) $(TIMES)
+check_PROGRAMS = $(CHECKS) $(EXAMS) $(TIMES)
+
+check_numeric_SOURCES = check_numeric.cpp
+check_numeric_LDADD = ../ginac/libginac.la
+
+check_inifcns_SOURCES = check_inifcns.cpp
+check_inifcns_LDADD = ../ginac/libginac.la
+
+check_matrices_SOURCES = check_matrices.cpp genex.cpp
+check_matrices_LDADD = ../ginac/libginac.la
+
+check_lsolve_SOURCES = check_lsolve.cpp genex.cpp
+check_lsolve_LDADD = ../ginac/libginac.la
+
+exam_paranoia_SOURCES = exam_paranoia.cpp
+exam_paranoia_LDADD = ../ginac/libginac.la
+
+exam_numeric_SOURCES = exam_numeric.cpp
+exam_numeric_LDADD = ../ginac/libginac.la
+
+exam_powerlaws_SOURCES = exam_powerlaws.cpp
+exam_powerlaws_LDADD = ../ginac/libginac.la
+
+exam_inifcns_SOURCES = exam_inifcns.cpp
+exam_inifcns_LDADD = ../ginac/libginac.la
+
+exam_inifcns_nstdsums_SOURCES = exam_inifcns_nstdsums.cpp \
+ exam_inifcns_nstdsums.h
+exam_inifcns_nstdsums_LDADD = ../ginac/libginac.la
+
+exam_differentiation_SOURCES = exam_differentiation.cpp
+exam_differentiation_LDADD = ../ginac/libginac.la
+
+exam_polygcd_SOURCES = exam_polygcd.cpp
+exam_polygcd_LDADD = ../ginac/libginac.la
+
+exam_normalization_SOURCES = exam_normalization.cpp
+exam_normalization_LDADD = ../ginac/libginac.la
+
+exam_pseries_SOURCES = exam_pseries.cpp
+exam_pseries_LDADD = ../ginac/libginac.la
+
+exam_matrices_SOURCES = exam_matrices.cpp
+exam_matrices_LDADD = ../ginac/libginac.la
+
+exam_lsolve_SOURCES = exam_lsolve.cpp
+exam_lsolve_LDADD = ../ginac/libginac.la
+
+exam_indexed_SOURCES = exam_indexed.cpp
+exam_indexed_LDADD = ../ginac/libginac.la
+
+exam_color_SOURCES = exam_color.cpp
+exam_color_LDADD = ../ginac/libginac.la
+
+exam_clifford_SOURCES = exam_clifford.cpp
+exam_clifford_LDADD = ../ginac/libginac.la
+
+exam_archive_SOURCES = exam_archive.cpp
+exam_archive_LDADD = ../ginac/libginac.la
+
+exam_structure_SOURCES = exam_structure.cpp
+exam_structure_LDADD = ../ginac/libginac.la
+
+exam_hashmap_SOURCES = exam_hashmap.cpp
+exam_hashmap_LDADD = ../ginac/libginac.la
+
+exam_misc_SOURCES = exam_misc.cpp
+exam_misc_LDADD = ../ginac/libginac.la
+
+
+time_dennyfliegner_SOURCES = time_dennyfliegner.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_dennyfliegner_LDADD = ../ginac/libginac.la
+
+time_gammaseries_SOURCES = time_gammaseries.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_gammaseries_LDADD = ../ginac/libginac.la
+
+time_vandermonde_SOURCES = time_vandermonde.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_vandermonde_LDADD = ../ginac/libginac.la
+
+time_toeplitz_SOURCES = time_toeplitz.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_toeplitz_LDADD = ../ginac/libginac.la
+time_hashmap_SOURCES = time_hashmap.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_hashmap_LDADD = ../ginac/libginac.la
+
+time_lw_A_SOURCES = time_lw_A.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_A_LDADD = ../ginac/libginac.la
+
+time_lw_B_SOURCES = time_lw_B.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_B_LDADD = ../ginac/libginac.la
+
+time_lw_C_SOURCES = time_lw_C.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_C_LDADD = ../ginac/libginac.la
+
+time_lw_D_SOURCES = time_lw_D.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_D_LDADD = ../ginac/libginac.la
+
+time_lw_E_SOURCES = time_lw_E.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_E_LDADD = ../ginac/libginac.la
+
+time_lw_F_SOURCES = time_lw_F.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_F_LDADD = ../ginac/libginac.la
+
+time_lw_G_SOURCES = time_lw_G.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_G_LDADD = ../ginac/libginac.la
+
+time_lw_H_SOURCES = time_lw_H.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_H_LDADD = ../ginac/libginac.la
+
+time_lw_IJKL_SOURCES = time_lw_IJKL.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_IJKL_LDADD = ../ginac/libginac.la
+
+time_lw_M1_SOURCES = time_lw_M1.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_M1_LDADD = ../ginac/libginac.la
+
+time_lw_M2_SOURCES = time_lw_M2.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_M2_LDADD = ../ginac/libginac.la
+
+time_lw_N_SOURCES = time_lw_N.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_N_LDADD = ../ginac/libginac.la
+
+time_lw_O_SOURCES = time_lw_O.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_O_LDADD = ../ginac/libginac.la
+
+time_lw_P_SOURCES = time_lw_P.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_P_LDADD = ../ginac/libginac.la
+
+time_lw_Pprime_SOURCES = time_lw_Pprime.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_Pprime_LDADD = ../ginac/libginac.la
+
+time_lw_Q_SOURCES = time_lw_Q.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_Q_LDADD = ../ginac/libginac.la
+
+time_lw_Qprime_SOURCES = time_lw_Qprime.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_lw_Qprime_LDADD = ../ginac/libginac.la
+
+time_antipode_SOURCES = time_antipode.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_antipode_LDADD = ../ginac/libginac.la
+
+time_fateman_expand_SOURCES = time_fateman_expand.cpp \
+ randomize_serials.cpp timer.cpp timer.h
+time_fateman_expand_LDADD = ../ginac/libginac.la
+
+AM_CPPFLAGS = -I$(srcdir)/../ginac -I../ginac
diff --git a/check/check_inifcns.cpp b/check/check_inifcns.cpp
index 2b10178..293fd8b 100644
--- a/check/check_inifcns.cpp
+++ b/check/check_inifcns.cpp
@@ -21,7 +21,11 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "checks.h"
+#include <iostream>
+#include <cstdlib> // rand()
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
/* Some tests on the sine trigonometric function. */
static unsigned inifcns_check_sin()
@@ -195,19 +199,16 @@ unsigned check_inifcns()
unsigned result = 0;
cout << "checking consistency of symbolic functions" << flush;
- clog << "---------consistency of symbolic functions:" << endl;
result += inifcns_check_sin(); cout << '.' << flush;
result += inifcns_check_cos(); cout << '.' << flush;
result += inifcns_check_tan(); cout << '.' << flush;
result += inifcns_check_Li2(); cout << '.' << flush;
- if (!result) {
- cout << " passed " << endl;
- clog << "(no output)" << endl;
- } else {
- cout << " failed " << endl;
- }
-
return result;
}
+
+int main(int argc, char** argv)
+{
+ return check_inifcns();
+}
diff --git a/check/check_lsolve.cpp b/check/check_lsolve.cpp
index 02a1df5..5f3c78a 100644
--- a/check/check_lsolve.cpp
+++ b/check/check_lsolve.cpp
@@ -22,8 +22,15 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "checks.h"
+#include <iostream>
#include <sstream>
+#include <cstdlib> // rand()
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
+
+extern const ex
+dense_univariate_poly(const symbol & x, unsigned degree);
static unsigned check_matrix_solve(unsigned m, unsigned n, unsigned p,
unsigned degree)
@@ -161,7 +168,6 @@ unsigned check_lsolve()
unsigned result = 0;
cout << "checking linear solve" << flush;
- clog << "---------linear solve:" << endl;
// solve some numeric linear systems
for (unsigned n=1; n<14; ++n)
@@ -191,12 +197,10 @@ unsigned check_lsolve()
result += check_inifcns_lsolve(5); cout << '.' << flush;
result += check_inifcns_lsolve(6); cout << '.' << flush;
- if (!result) {
- cout << " passed " << endl;
- clog << "(no output)" << endl;
- } else {
- cout << " failed " << endl;
- }
-
return result;
}
+
+int main(int argc, char** argv)
+{
+ return check_lsolve();
+}
diff --git a/check/check_matrices.cpp b/check/check_matrices.cpp
index 38c87f4..1b310d4 100644
--- a/check/check_matrices.cpp
+++ b/check/check_matrices.cpp
@@ -22,7 +22,18 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "checks.h"
+#include <iostream>
+#include <cstdlib> // rand(), RAND_MAX
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
+
+extern const ex
+sparse_tree(const symbol & x, const symbol & y, const symbol & z,
+ int level, bool trig = false, bool rational = true,
+ bool complex = false);
+extern const ex
+dense_univariate_poly(const symbol & x, unsigned degree);
/* determinants of some sparse symbolic matrices with coefficients in
* an integral domain. */
@@ -200,7 +211,6 @@ unsigned check_matrices()
unsigned result = 0;
cout << "checking symbolic matrix manipulations" << flush;
- clog << "---------symbolic matrix manipulations:" << endl;
result += integdom_matrix_determinants(); cout << '.' << flush;
result += rational_matrix_determinants(); cout << '.' << flush;
@@ -208,12 +218,10 @@ unsigned check_matrices()
result += compare_matrix_determinants(); cout << '.' << flush;
result += symbolic_matrix_inverse(); cout << '.' << flush;
- if (!result) {
- cout << " passed " << endl;
- clog << "(no output)" << endl;
- } else {
- cout << " failed " << endl;
- }
-
return result;
}
+
+int main(int argc, char** argv)
+{
+ return check_matrices();
+}
diff --git a/check/check_numeric.cpp b/check/check_numeric.cpp
index ec1eaf2..ce79a27 100644
--- a/check/check_numeric.cpp
+++ b/check/check_numeric.cpp
@@ -21,7 +21,11 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "checks.h"
+#include <iostream>
+#include <cstdlib> // rand()
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
/* Simple and maybe somewhat pointless consistency tests of assorted tests and
* conversions. */
@@ -115,12 +119,10 @@ unsigned check_numeric()
result += check_numeric1(); cout << '.' << flush;
result += check_numeric2(); cout << '.' << flush;
- if (!result) {
- cout << " passed " << endl;
- clog << "(no output)" << endl;
- } else {
- cout << " failed " << endl;
- }
-
return result;
}
+
+int main(int argc, char** argv)
+{
+ return check_numeric();
+}
diff --git a/check/checks.cpp b/check/checks.cpp
deleted file mode 100644
index 3f063ac..0000000
--- a/check/checks.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/** @file checks.cpp
- *
- * Main program that calls the individual tests. */
-
-/*
- * 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
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdexcept>
-#include <time.h>
-
-#include "checks.h"
-
-int main()
-{
- unsigned result = 0;
-
- srand((unsigned)time(NULL));
-
-#define CHECK(which) \
-try { \
- for (int i=0; i<1; ++i) \
- result += check_ ## which (); \
-} catch (const exception &e) { \
- cout << "Error: caught exception " << e.what() << endl; \
- ++result; \
-}
-
- CHECK(numeric)
- CHECK(inifcns)
- CHECK(matrices)
- CHECK(lsolve)
-
- if (result) {
- cout << "Error: something went wrong. ";
- if (result == 1) {
- cout << "(one failure)" << endl;
- } else {
- cout << "(" << result << " individual failures)" << endl;
- }
- cout << "please check checks.out against check.ref for more details."
- << endl << "happy debugging!" << endl;
- }
-
- return result;
-}
diff --git a/check/checks.h b/check/checks.h
deleted file mode 100644
index 61e043f..0000000
--- a/check/checks.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/** @file checks.h
- *
- * Prototypes for all individual checks. */
-
-/*
- * 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
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef CHECKS_H
-#define CHECKS_H
-
-#include <iostream>
-
-#include "config.h"
-#include "ginac.h"
-using namespace std;
-using namespace GiNaC;
-
-// prototypes for the expression generating functions in:
-const ex dense_univariate_poly(const symbol & x, unsigned degree);
-const ex dense_bivariate_poly(const symbol & x1, const symbol & x2,
- unsigned degree);
-const ex sparse_tree(const symbol & x, const symbol & y, const symbol & z,
- int level,
- bool trig = false, bool rational = true, bool complex = false);
-
-// prototypes for all individual checks should be unsigned fcn():
-unsigned check_numeric();
-unsigned check_inifcns();
-unsigned check_matrices();
-unsigned check_lsolve();
-
-#endif // ndef CHECKS_H
diff --git a/check/checks.ref b/check/checks.ref
deleted file mode 100644
index a109f51..0000000
--- a/check/checks.ref
+++ /dev/null
@@ -1,8 +0,0 @@
----------consistency of numeric types:
-(no output)
----------consistency of symbolic functions:
-(no output)
----------symbolic matrix manipulations:
-(no output)
----------linear solve:
-(no output)
diff --git a/check/exam_archive.cpp b/check/exam_archive.cpp
index a2e19c4..0fcb616 100644
--- a/check/exam_archive.cpp
+++ b/check/exam_archive.cpp
@@ -20,16 +20,17 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
-
+#include <iostream>
#include <fstream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
unsigned exam_archive()
{
unsigned result = 0;
cout << "examining archiving system" << flush;
- clog << "----------archiving system:" << endl;
symbol x("x"), y("y"), mu("mu"), dim("dim", "\\Delta");
ex e, f;
@@ -70,14 +71,10 @@ unsigned exam_archive()
++result;
}
- 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_archive();
+}
diff --git a/check/exam_clifford.cpp b/check/exam_clifford.cpp
index 006c076..4dbfacf 100644
--- a/check/exam_clifford.cpp
+++ b/check/exam_clifford.cpp
@@ -20,7 +20,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
const numeric half(1, 2);
@@ -539,7 +542,6 @@ unsigned exam_clifford()
unsigned result = 0;
cout << "examining clifford objects" << flush;
- clog << "----------clifford objects:" << endl;
result += clifford_check1(); cout << '.' << flush;
result += clifford_check2(); cout << '.' << flush;
@@ -600,12 +602,10 @@ unsigned exam_clifford()
result += clifford_check7(indexed(-2*minkmetric(), sy_symm(), xi, chi), dim); cout << '.' << flush;
result += clifford_check7(-2*delta_tensor(xi, chi), dim); 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_clifford();
+}
diff --git a/check/exam_color.cpp b/check/exam_color.cpp
index f2342a3..382f6d3 100644
--- a/check/exam_color.cpp
+++ b/check/exam_color.cpp
@@ -20,7 +20,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
static unsigned check_equal(const ex &e1, const ex &e2)
{
@@ -145,18 +148,15 @@ unsigned exam_color()
unsigned result = 0;
cout << "examining color objects" << flush;
- clog << "----------color objects:" << endl;
result += color_check1(); cout << '.' << flush;
result += color_check2(); cout << '.' << flush;
result += color_check3(); 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_color();
+}
diff --git a/check/exam_differentiation.cpp b/check/exam_differentiation.cpp
index 1eb5dfc..f2d6dbb 100644
--- a/check/exam_differentiation.cpp
+++ b/check/exam_differentiation.cpp
@@ -20,7 +20,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
static unsigned check_diff(const ex &e, const symbol &x,
const ex &d, unsigned nth=1)
@@ -260,7 +263,6 @@ unsigned exam_differentiation()
unsigned result = 0;
cout << "examining symbolic differentiation" << flush;
- clog << "----------symbolic differentiation:" << endl;
result += exam_differentiation1(); cout << '.' << flush;
result += exam_differentiation2(); cout << '.' << flush;
@@ -270,11 +272,10 @@ unsigned exam_differentiation()
result += exam_differentiation6(); cout << '.' << flush;
result += exam_differentiation7(); 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_differentiation();
+}
diff --git a/check/exam_hashmap.cpp b/check/exam_hashmap.cpp
index ae6a324..289c226 100644
--- a/check/exam_hashmap.cpp
+++ b/check/exam_hashmap.cpp
@@ -20,7 +20,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
unsigned exam_hashmap()
{
@@ -28,7 +31,6 @@ unsigned exam_hashmap()
unsigned N = 100;
cout << "examining hash maps" << flush;
- clog << "----------hash maps:" << endl;
// Create empty container
exhashmap<unsigned> M1;
@@ -279,15 +281,12 @@ unsigned exam_hashmap()
clog << "count(4*x^y) returns " << n << " instead of 1" << endl;
++result;
}
-
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_hashmap();
+}
diff --git a/check/exam_indexed.cpp b/check/exam_indexed.cpp
index 06bdbaa..722f53f 100644
--- a/check/exam_indexed.cpp
+++ b/check/exam_indexed.cpp
@@ -20,7 +20,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
static unsigned check_equal(const ex &e1, const ex &e2)
{
@@ -392,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;
@@ -403,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();
+}
diff --git a/check/exam_inifcns.cpp b/check/exam_inifcns.cpp
index e0d595a..0b3c614 100644
--- a/check/exam_inifcns.cpp
+++ b/check/exam_inifcns.cpp
@@ -21,7 +21,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
/* Assorted tests on other transcendental functions. */
static unsigned inifcns_consist_trans()
@@ -217,19 +220,16 @@ unsigned exam_inifcns()
unsigned result = 0;
cout << "examining consistency of symbolic functions" << flush;
- clog << "----------consistency of symbolic functions:" << endl;
result += inifcns_consist_trans(); cout << '.' << flush;
result += inifcns_consist_gamma(); cout << '.' << flush;
result += inifcns_consist_psi(); cout << '.' << flush;
result += inifcns_consist_zeta(); 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_inifcns();
+}
diff --git a/check/exam_inifcns_nstdsums.cpp b/check/exam_inifcns_nstdsums.cpp
index 68b11b4..86c1e45 100644
--- a/check/exam_inifcns_nstdsums.cpp
+++ b/check/exam_inifcns_nstdsums.cpp
@@ -21,9 +21,12 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
-
+#include <iostream>
#include <fstream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
+
////////////////////////////////////////////////////////////////////////////////
@@ -292,19 +295,16 @@ unsigned exam_inifcns_nstdsums(void)
unsigned result = 0;
cout << "examining consistency of nestedsums functions" << flush;
- clog << "----------consistency of nestedsums functions:" << endl;
result += inifcns_test_zeta();
result += inifcns_test_S();
result += inifcns_test_HLi();
result += inifcns_test_LiG();
- if (!result) {
- cout << " passed " << endl;
- clog << "(no output)" << endl;
- } else {
- cout << " failed " << endl;
- }
-
return result;
}
+
+int main(int argc, char** argv)
+{
+ return exam_inifcns_nstdsums();
+}
diff --git a/check/exam_lsolve.cpp b/check/exam_lsolve.cpp
index 7df0fc4..67aae4e 100644
--- a/check/exam_lsolve.cpp
+++ b/check/exam_lsolve.cpp
@@ -20,7 +20,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
static unsigned exam_lsolve1()
{
@@ -188,7 +191,6 @@ unsigned exam_lsolve()
unsigned result = 0;
cout << "examining linear solve" << flush;
- clog << "----------linear solve:" << endl;
result += exam_lsolve1(); cout << '.' << flush;
result += exam_lsolve2a(); cout << '.' << flush;
@@ -197,12 +199,10 @@ unsigned exam_lsolve()
result += exam_lsolve2S(); cout << '.' << flush;
result += exam_lsolve3S(); 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_lsolve();
+}
diff --git a/check/exam_matrices.cpp b/check/exam_matrices.cpp
index 88bc581..f4c84f9 100644
--- a/check/exam_matrices.cpp
+++ b/check/exam_matrices.cpp
@@ -21,7 +21,10 @@
*/
#include <stdexcept>
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
static unsigned matrix_determinants()
{
@@ -337,7 +340,6 @@ unsigned exam_matrices()
unsigned result = 0;
cout << "examining symbolic matrix manipulations" << flush;
- clog << "----------symbolic matrix manipulations:" << endl;
result += matrix_determinants(); cout << '.' << flush;
result += matrix_invert1(); cout << '.' << flush;
@@ -348,12 +350,10 @@ unsigned exam_matrices()
result += matrix_rank(); cout << "." << flush;
result += matrix_misc(); 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_matrices();
+}
diff --git a/check/exam_misc.cpp b/check/exam_misc.cpp
index 29febf6..13cb2f9 100644
--- a/check/exam_misc.cpp
+++ b/check/exam_misc.cpp
@@ -20,8 +20,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
#define VECSIZE 30
static unsigned exam_expand_subs()
@@ -291,7 +293,6 @@ unsigned exam_misc()
unsigned result = 0;
cout << "examining miscellaneous other things" << flush;
- clog << "----------miscellaneous other things:" << endl;
result += exam_expand_subs(); cout << '.' << flush;
result += exam_expand_subs2(); cout << '.' << flush;
@@ -302,12 +303,10 @@ unsigned exam_misc()
result += exam_joris(); cout << '.' << flush;
result += exam_subs_algebraic(); 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_misc();
+}
diff --git a/check/exam_normalization.cpp b/check/exam_normalization.cpp
index 34176dd..7eb4531 100644
--- a/check/exam_normalization.cpp
+++ b/check/exam_normalization.cpp
@@ -20,7 +20,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
static symbol w("w"), x("x"), y("y"), z("z");
@@ -219,7 +222,6 @@ unsigned exam_normalization()
unsigned result = 0;
cout << "examining rational function normalization" << flush;
- clog << "----------rational function normalization:" << endl;
result += exam_normal1(); cout << '.' << flush;
result += exam_normal2(); cout << '.' << flush;
@@ -227,12 +229,10 @@ unsigned exam_normalization()
result += exam_normal4(); cout << '.' << flush;
result += exam_content(); 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_normalization();
+}
diff --git a/check/exam_numeric.cpp b/check/exam_numeric.cpp
index 5a916e9..8f45dfe 100644
--- a/check/exam_numeric.cpp
+++ b/check/exam_numeric.cpp
@@ -21,9 +21,12 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
-
+#include <iostream>
#include <sstream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
+
/* Simple and maybe somewhat pointless consistency tests of assorted tests and
* conversions. */
@@ -378,7 +381,6 @@ unsigned exam_numeric()
unsigned result = 0;
cout << "examining consistency of numeric types" << flush;
- clog << "----------consistency of numeric types:" << endl;
result += exam_numeric1(); cout << '.' << flush;
result += exam_numeric2(); cout << '.' << flush;
@@ -387,12 +389,10 @@ unsigned exam_numeric()
result += exam_numeric5(); cout << '.' << flush;
result += exam_numeric6(); 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_numeric();
+}
diff --git a/check/exam_paranoia.cpp b/check/exam_paranoia.cpp
index 035235a..003044e 100644
--- a/check/exam_paranoia.cpp
+++ b/check/exam_paranoia.cpp
@@ -23,7 +23,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
// The very first pair of historic problems had its roots in power.cpp and was
// finally resolved on April 27th 1999. (Fixing the first on April 23rd
@@ -469,7 +472,6 @@ unsigned exam_paranoia()
unsigned result = 0;
cout << "examining several historic failures just out of paranoia" << flush;
- clog << "----------several historic failures:" << endl;
result += exam_paranoia1(); cout << '.' << flush;
result += exam_paranoia2(); cout << '.' << flush;
@@ -489,12 +491,10 @@ unsigned exam_paranoia()
result += exam_paranoia16(); cout << '.' << flush;
result += exam_paranoia17(); 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_paranoia();
+}
diff --git a/check/exam_polygcd.cpp b/check/exam_polygcd.cpp
index bb410f2..ef90a36 100644
--- a/check/exam_polygcd.cpp
+++ b/check/exam_polygcd.cpp
@@ -21,7 +21,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
const int MAX_VARIABLES = 3;
@@ -231,7 +234,6 @@ unsigned exam_polygcd()
unsigned result = 0;
cout << "examining polynomial GCD computation" << flush;
- clog << "----------polynomial GCD computation:" << endl;
result += poly_gcd1(); cout << '.' << flush;
result += poly_gcd2(); cout << '.' << flush;
@@ -243,12 +245,10 @@ unsigned exam_polygcd()
result += poly_gcd6(); cout << '.' << flush;
result += poly_gcd7(); 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_polygcd();
+}
diff --git a/check/exam_powerlaws.cpp b/check/exam_powerlaws.cpp
index 5af3c86..d84a081 100644
--- a/check/exam_powerlaws.cpp
+++ b/check/exam_powerlaws.cpp
@@ -21,7 +21,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
static unsigned exam_powerlaws1()
{
@@ -289,7 +292,6 @@ unsigned exam_powerlaws()
unsigned result = 0;
cout << "examining power laws" << flush;
- clog << "----------power laws:" << endl;
result += exam_powerlaws1(); cout << '.' << flush;
result += exam_powerlaws2(); cout << '.' << flush;
@@ -297,12 +299,10 @@ unsigned exam_powerlaws()
result += exam_powerlaws4(); cout << '.' << flush;
result += exam_powerlaws5(); 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_powerlaws();
+}
diff --git a/check/exam_pseries.cpp b/check/exam_pseries.cpp
index 2e5d2d6..e24ef41 100644
--- a/check/exam_pseries.cpp
+++ b/check/exam_pseries.cpp
@@ -20,7 +20,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
static symbol x("x");
@@ -367,7 +370,6 @@ unsigned exam_pseries()
unsigned result = 0;
cout << "examining series expansion" << flush;
- clog << "----------series expansion:" << endl;
result += exam_series1(); cout << '.' << flush;
result += exam_series2(); cout << '.' << flush;
@@ -383,11 +385,10 @@ unsigned exam_pseries()
result += exam_series12(); cout << '.' << flush;
result += exam_series13(); 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_pseries();
+}
diff --git a/check/exam_structure.cpp b/check/exam_structure.cpp
index 84de56b..b433600 100644
--- a/check/exam_structure.cpp
+++ b/check/exam_structure.cpp
@@ -20,7 +20,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "exams.h"
+#include <iostream>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
struct sprod_s {
@@ -72,7 +75,6 @@ unsigned exam_structure()
unsigned result = 0;
cout << "examining structure template" << flush;
- clog << "----------structure template:" << endl;
symbol x("x"), y("y");
ex e;
@@ -91,14 +93,10 @@ unsigned exam_structure()
++result;
}
- 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_structure();
+}
diff --git a/check/exams.cpp b/check/exams.cpp
deleted file mode 100644
index 4f669e5..0000000
--- a/check/exams.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/** @file exams.cpp
- *
- * Main program that calls all individual exams. */
-
-/*
- * 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
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdexcept>
-
-#include "exams.h"
-
-int main()
-{
- unsigned result = 0;
-
-#define EXAM(which) \
-try { \
- result += exam_ ## which (); \
-} catch (const exception &e) { \
- cout << "Error: caught exception " << e.what() << endl; \
- ++result; \
-}
-
- EXAM(paranoia)
- EXAM(numeric)
- EXAM(powerlaws)
- EXAM(inifcns)
- EXAM(inifcns_nstdsums)
- EXAM(differentiation)
- EXAM(polygcd)
- EXAM(normalization)
- EXAM(pseries)
- EXAM(matrices)
- EXAM(lsolve)
- EXAM(indexed)
- EXAM(color)
- EXAM(clifford)
- EXAM(archive)
- EXAM(structure)
- EXAM(hashmap)
- EXAM(misc)
-
- if (result) {
- cout << "Error: something went wrong. ";
- if (result == 1) {
- cout << "(one failure)" << endl;
- } else {
- cout << "(" << result << " individual failures)" << endl;
- }
- cout << "please check exams.out against exams.ref for more details."
- << endl << "happy debugging!" << endl;
- }
-
- return result;
-}
diff --git a/check/exams.h b/check/exams.h
deleted file mode 100644
index 8cac4fe..0000000
--- a/check/exams.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/** @file exams.h
- *
- * Prototypes for all individual exams. */
-
-/*
- * 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
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef EXAMS_H
-#define EXAMS_H
-
-#include <iostream>
-#include "ginac.h"
-using namespace std;
-using namespace GiNaC;
-
-// prototypes for all individual checks should be unsigned fcn():
-unsigned exam_paranoia();
-unsigned exam_numeric();
-unsigned exam_powerlaws();
-unsigned exam_inifcns();
-unsigned exam_inifcns_nstdsums();
-unsigned exam_differentiation();
-unsigned exam_polygcd();
-unsigned exam_normalization();
-unsigned exam_pseries();
-unsigned exam_matrices();
-unsigned exam_lsolve();
-unsigned exam_indexed();
-unsigned exam_color();
-unsigned exam_clifford();
-unsigned exam_archive();
-unsigned exam_structure();
-unsigned exam_hashmap();
-unsigned exam_misc();
-
-#endif // ndef EXAMS_H
diff --git a/check/exams.ref b/check/exams.ref
deleted file mode 100644
index 016a9c2..0000000
--- a/check/exams.ref
+++ /dev/null
@@ -1,36 +0,0 @@
-----------several historic failures:
-(no output)
-----------consistency of numeric types:
-(no output)
-----------power laws:
-(no output)
-----------consistency of symbolic functions:
-(no output)
-----------consistency of nestedsums functions:
-(no output)
-----------symbolic differentiation:
-(no output)
-----------polynomial GCD computation:
-(no output)
-----------rational function normalization:
-(no output)
-----------series expansion:
-(no output)
-----------symbolic matrix manipulations:
-(no output)
-----------linear solve:
-(no output)
-----------indexed objects:
-(no output)
-----------color objects:
-(no output)
-----------clifford objects:
-(no output)
-----------archiving system:
-(no output)
-----------structure template:
-(no output)
-----------hash maps:
-(no output)
-----------miscellaneous other things:
-(no output)
diff --git a/check/randomize_serials.cpp b/check/randomize_serials.cpp
new file mode 100644
index 0000000..ad29a1b
--- /dev/null
+++ b/check/randomize_serials.cpp
@@ -0,0 +1,31 @@
+#include <cstdlib>
+#include <ctime>
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
+
+/** Generate a random amount of symbols and destroy them again immediatly.
+ * This operation effectively makes the serial numbers of all subsequent
+ * symbols unpredictable. If the serials are unpredictable, then so are
+ * their hash values. If the hash values are unpredictable, then so are
+ * the canonical orderings. If the canonical orderings are unpredictable,
+ * all subsequent times are subject to some variation. This variation,
+ * however is natural and desireable for two reasons: First, we cannot know
+ * how many symbols have been generated before in real world computations.
+ * Second, the following timings are subject to some semi-random variation
+ * anyways because short timings need to be repeated until enough time has
+ * gone by for the measurement to be reliable. During this process the serial
+ * numbers will be shifted anyways in a semi-random way. It is better not
+ * to lull the user in a false sense of reproducibility and instead confront
+ * her with the normal variation to be expected.
+ */
+void randomify_symbol_serials()
+{
+ srand(time(NULL));
+ const int m = rand() % 666;
+ for (int s=0; s<m; ++s ) {
+ symbol("dummy");
+ }
+}
+
+
diff --git a/check/run_checks b/check/run_checks
deleted file mode 100755
index 93b7706..0000000
--- a/check/run_checks
+++ /dev/null
@@ -1,4 +0,0 @@
-#! /bin/sh
-echo "GiNaC will now run through some rather costly random consistency checks:"
-./checks${EXEEXT} 2>checks.out
-cmp ${srcdir}/checks.ref checks.out
diff --git a/check/run_exams b/check/run_exams
deleted file mode 100755
index 1e7ba46..0000000
--- a/check/run_exams
+++ /dev/null
@@ -1,4 +0,0 @@
-#! /bin/sh
-echo "GiNaC will now take an exam with specific input (like a pupils' exam):"
-./exams${EXEEXT} 2>exams.out
-cmp ${srcdir}/exams.ref exams.out
diff --git a/check/run_times b/check/run_times
deleted file mode 100755
index eb2380b..0000000
--- a/check/run_times
+++ /dev/null
@@ -1,4 +0,0 @@
-#! /bin/sh
-echo "GiNaC will now run through some basic timings:"
-./times${EXEEXT} 2>times.out
-cmp ${srcdir}/times.ref times.out
diff --git a/check/time_antipode.cpp b/check/time_antipode.cpp
index 67f410c..787dea2 100644
--- a/check/time_antipode.cpp
+++ b/check/time_antipode.cpp
@@ -33,13 +33,16 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "times.h"
#include <utility>
#include <vector>
#include <set>
#include <map>
#include <typeinfo>
#include <stdexcept>
+#include "timer.h"
+#include "ginac.h"
+using namespace std;
+using namespace GiNaC;
// whether to run this beast or not:
static const bool do_test = true;
@@ -479,7 +482,6 @@ unsigned time_antipode()
timer jaeger_le_coultre;
cout << "timing computation of antipodes in Yukawa theory" << flush;
- clog << "-------computation of antipodes in Yukawa theory:" << endl;
if (do_test) {
jaeger_le_coultre.start();
@@ -490,17 +492,18 @@ unsigned time_antipode()
result += test_tree(tree5); cout << '.' << flush;
result += test_tree(tree6); cout << '.' << flush;
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << jaeger_le_coultre.read() << "s (total)" << endl;
} else {
cout << " disabled" << endl;
- clog << "(no output)" << endl;
}
-
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_antipode();
+}
diff --git a/check/time_dennyfliegner.cpp b/check/time_dennyfliegner.cpp
index 3f6d6de..aca6e0e 100644
--- a/check/time_dennyfliegner.cpp
+++ b/check/time_dennyfliegner.cpp
@@ -24,7 +24,13 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "times.h"
+#include <iostream>
+#include <sstream>
+#include <vector>
+#include "ginac.h"
+#include "timer.h"
+using namespace std;
+using namespace GiNaC;
static unsigned expand_subs(unsigned size)
{
@@ -58,7 +64,6 @@ unsigned time_dennyfliegner()
unsigned result = 0;
cout << "timing commutative expansion and substitution" << flush;
- clog << "-------commutative expansion and substitution:" << endl;
vector<unsigned> sizes;
vector<double> times;
@@ -76,12 +81,6 @@ unsigned time_dennyfliegner()
cout << '.' << flush;
}
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
// print the report:
cout << endl << " size: ";
for (vector<unsigned>::iterator i=sizes.begin(); i!=sizes.end(); ++i)
@@ -93,3 +92,12 @@ unsigned time_dennyfliegner()
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_dennyfliegner();
+}
diff --git a/check/time_fateman_expand.cpp b/check/time_fateman_expand.cpp
index 904d653..08590d2 100644
--- a/check/time_fateman_expand.cpp
+++ b/check/time_fateman_expand.cpp
@@ -23,7 +23,11 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "times.h"
+#include <iostream>
+#include "ginac.h"
+#include "timer.h"
+using namespace std;
+using namespace GiNaC;
static unsigned test()
{
@@ -50,7 +54,6 @@ unsigned time_fateman_expand()
double time = .0;
cout << "timing Fateman's polynomial expand benchmark" << flush;
- clog << "-------Fateman's polynomial expand benchmark:" << endl;
concord.start();
// correct for very small times:
@@ -60,13 +63,16 @@ unsigned time_fateman_expand()
} while ((time=concord.read())<0.1 && !result);
cout << '.' << flush;
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_fateman_expand();
+}
diff --git a/check/time_gammaseries.cpp b/check/time_gammaseries.cpp
index 3ff55d6..f322787 100644
--- a/check/time_gammaseries.cpp
+++ b/check/time_gammaseries.cpp
@@ -20,7 +20,12 @@
* 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;
unsigned tgammaseries(unsigned order)
{
@@ -48,7 +53,6 @@ unsigned time_gammaseries()
unsigned result = 0;
cout << "timing Laurent series expansion of Gamma function" << flush;
- clog << "-------Laurent series expansion of Gamma function:" << endl;
vector<unsigned> sizes;
vector<double> times;
@@ -66,12 +70,6 @@ unsigned time_gammaseries()
cout << '.' << flush;
}
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
// print the report:
cout << endl << " order: ";
for (vector<unsigned>::iterator i=sizes.begin(); i!=sizes.end(); ++i)
@@ -83,3 +81,12 @@ unsigned time_gammaseries()
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_gammaseries();
+}
diff --git a/check/time_hashmap.cpp b/check/time_hashmap.cpp
index 2bd2f12..cea635b 100644
--- a/check/time_hashmap.cpp
+++ b/check/time_hashmap.cpp
@@ -20,7 +20,12 @@
* 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;
template <class T>
static void run_timing(unsigned size, double &time_insert, double &time_find, double &time_erase)
@@ -67,7 +72,6 @@ unsigned time_hashmap()
unsigned result = 0;
cout << "timing hash map operations" << flush;
- clog << "-------hash map operations:" << endl;
unsigned s[] = {10000, 50000, 100000, 500000};
vector<unsigned> sizes(s, s+sizeof(s)/sizeof(*s));
@@ -88,13 +92,6 @@ unsigned time_hashmap()
cout << '.' << flush;
}
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
-
// print the report:
cout << endl << " size:\t";
copy(sizes.begin(), sizes.end(), ostream_iterator<unsigned>(cout, "\t"));
@@ -108,3 +105,12 @@ unsigned time_hashmap()
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_hashmap();
+}
diff --git a/check/time_lw_A.cpp b/check/time_lw_A.cpp
index 94450eb..d7fdc47 100644
--- a/check/time_lw_A.cpp
+++ b/check/time_lw_A.cpp
@@ -21,7 +21,12 @@
* 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()
{
@@ -44,7 +49,6 @@ unsigned time_lw_A()
double time = .0;
cout << "timing Lewis-Wester test A (divide factorials)" << flush;
- clog << "-------Lewis-Wester test A (divide factorials):" << endl;
rolex.start();
// correct for very small times:
@@ -53,14 +57,16 @@ unsigned time_lw_A()
++count;
} while ((time=rolex.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_A();
+}
diff --git a/check/time_lw_B.cpp b/check/time_lw_B.cpp
index abf446e..396bdf8 100644
--- a/check/time_lw_B.cpp
+++ b/check/time_lw_B.cpp
@@ -21,7 +21,12 @@
* 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()
{
@@ -45,7 +50,6 @@ unsigned time_lw_B()
double time = .0;
cout << "timing Lewis-Wester test B (sum of rational numbers)" << flush;
- clog << "-------Lewis-Wester test B (sum of rational numbers):" << endl;
rolex.start();
// correct for very small times:
@@ -54,14 +58,15 @@ unsigned time_lw_B()
++count;
} while ((time=rolex.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
return result;
}
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_B();
+}
diff --git a/check/time_lw_C.cpp b/check/time_lw_C.cpp
index 07f0eba..e5e79f4 100644
--- a/check/time_lw_C.cpp
+++ b/check/time_lw_C.cpp
@@ -21,7 +21,12 @@
* 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()
{
@@ -49,7 +54,6 @@ unsigned time_lw_C()
double time = .0;
cout << "timing Lewis-Wester test C (gcd of big integers)" << flush;
- clog << "-------Lewis-Wester test C (gcd of big integers):" << endl;
rolex.start();
// correct for very small times:
@@ -58,14 +62,16 @@ unsigned time_lw_C()
++count;
} while ((time=rolex.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_C();
+}
diff --git a/check/time_lw_D.cpp b/check/time_lw_D.cpp
index e3fa86d..8599151 100644
--- a/check/time_lw_D.cpp
+++ b/check/time_lw_D.cpp
@@ -21,7 +21,12 @@
* 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()
{
@@ -49,7 +54,6 @@ unsigned time_lw_D()
double time = .0;
cout << "timing Lewis-Wester test D (normalized sum of rational fcns)" << flush;
- clog << "-------Lewis-Wester test D (normalized sum of rational fcns):" << endl;
rolex.start();
// correct for very small times:
@@ -58,14 +62,16 @@ unsigned time_lw_D()
++count;
} while ((time=rolex.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_D();
+}
diff --git a/check/time_lw_E.cpp b/check/time_lw_E.cpp
index c50cc29..c0b5212 100644
--- a/check/time_lw_E.cpp
+++ b/check/time_lw_E.cpp
@@ -21,7 +21,12 @@
* 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()
{
@@ -49,7 +54,6 @@ unsigned time_lw_E()
double time = .0;
cout << "timing Lewis-Wester test E (normalized sum of rational fcns)" << flush;
- clog << "-------Lewis-Wester test E (normalized sum of rational fcns):" << endl;
rolex.start();
// correct for very small times:
@@ -58,14 +62,16 @@ unsigned time_lw_E()
++count;
} while ((time=rolex.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_E();
+}
diff --git a/check/time_lw_F.cpp b/check/time_lw_F.cpp
index 31366f6..33fbc3c 100644
--- a/check/time_lw_F.cpp
+++ b/check/time_lw_F.cpp
@@ -21,7 +21,12 @@
* 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()
{
@@ -46,7 +51,6 @@ unsigned time_lw_F()
double time = .0;
cout << "timing Lewis-Wester test F (gcd of 2-var polys)" << flush;
- clog << "-------Lewis-Wester test F (gcd of 2-var polys):" << endl;
rolex.start();
// correct for very small times:
@@ -55,14 +59,16 @@ unsigned time_lw_F()
++count;
} while ((time=rolex.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_F();
+}
diff --git a/check/time_lw_G.cpp b/check/time_lw_G.cpp
index a752d52..1295a2d 100644
--- a/check/time_lw_G.cpp
+++ b/check/time_lw_G.cpp
@@ -21,7 +21,12 @@
* 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()
{
@@ -49,7 +54,6 @@ unsigned time_lw_G()
double time = .0;
cout << "timing Lewis-Wester test G (gcd of 3-var polys)" << flush;
- clog << "-------Lewis-Wester test G (gcd of 3-var polys):" << endl;
rolex.start();
// correct for very small times:
@@ -58,14 +62,16 @@ unsigned time_lw_G()
++count;
} while ((time=rolex.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_G();
+}
diff --git a/check/time_lw_H.cpp b/check/time_lw_H.cpp
index d17b729..afbb48b 100644
--- a/check/time_lw_H.cpp
+++ b/check/time_lw_H.cpp
@@ -21,7 +21,12 @@
* 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)
{
@@ -61,7 +66,6 @@ unsigned time_lw_H()
double time = .0;
cout << "timing Lewis-Wester test H (det of 80x80 Hilbert)" << flush;
- clog << "-------Lewis-Wester test H (det of 80x80 Hilbert):" << endl;
rolex.start();
// correct for very small times:
@@ -70,14 +74,16 @@ unsigned time_lw_H()
++count;
} while ((time=rolex.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_H();
+}
diff --git a/check/time_lw_IJKL.cpp b/check/time_lw_IJKL.cpp
index 7271fe0..2ad74d8 100644
--- a/check/time_lw_IJKL.cpp
+++ b/check/time_lw_IJKL.cpp
@@ -21,7 +21,12 @@
* 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)
{
@@ -31,8 +36,6 @@ static unsigned test(unsigned n)
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);
@@ -44,7 +47,6 @@ static unsigned test(unsigned n)
matrix Hinv(n,n);
Hinv = H.inverse();
cout << ". passed ";
- clog << "(no output)" << endl;
cout << cartier.read() << 's' << endl;
// check result:
@@ -52,8 +54,6 @@ static unsigned test(unsigned n)
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);
@@ -68,13 +68,8 @@ static unsigned test(unsigned n)
correct = false;
}
}
- if (correct) {
- cout << ". passed ";
- clog << "(no output)" << endl;
- } else {
- cout << ". failed ";
+ if (!correct)
++result;
- }
cout << cartier.read() << 's' << endl;
return result;
}
@@ -90,3 +85,12 @@ unsigned time_lw_IJKL()
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_IJKL();
+}
diff --git a/check/time_lw_M1.cpp b/check/time_lw_M1.cpp
index d32603c..f68ddc7 100644
--- a/check/time_lw_M1.cpp
+++ b/check/time_lw_M1.cpp
@@ -21,7 +21,11 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "times.h"
+#include <iostream>
+#include "ginac.h"
+#include "timer.h"
+using namespace std;
+using namespace GiNaC;
static unsigned test()
{
@@ -81,7 +85,6 @@ unsigned time_lw_M1()
double time = .0;
cout << "timing Lewis-Wester test M1 (26x26 sparse, det)" << flush;
- clog << "-------Lewis-Wester test M1 (26x26 sparse, det):" << endl;
rolex.start();
// correct for very small times:
@@ -90,14 +93,16 @@ unsigned time_lw_M1()
++count;
} while ((time=rolex.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_M1();
+}
diff --git a/check/time_lw_M2.cpp b/check/time_lw_M2.cpp
index f9ab775..e133378 100644
--- a/check/time_lw_M2.cpp
+++ b/check/time_lw_M2.cpp
@@ -21,7 +21,11 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "times.h"
+#include <iostream>
+#include "ginac.h"
+#include "timer.h"
+using namespace std;
+using namespace GiNaC;
static const bool do_test = false; // set to true in order to run this beast
@@ -157,7 +161,6 @@ unsigned time_lw_M2()
double time = .0;
cout << "timing Lewis-Wester test M2 (101x101 sparse, det)" << flush;
- clog << "-------Lewis-Wester test M2 (101x101 sparse, det):" << endl;
if (do_test) {
piaget.start();
@@ -167,18 +170,19 @@ unsigned time_lw_M2()
++count;
} while ((time=piaget.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
} else {
cout << " disabled" << endl;
- clog << "(no output)" << endl;
}
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_M2();
+}
diff --git a/check/time_lw_N.cpp b/check/time_lw_N.cpp
index 27bb9f7..d6e96b1 100644
--- a/check/time_lw_N.cpp
+++ b/check/time_lw_N.cpp
@@ -22,7 +22,12 @@
* 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 const bool do_test = false; // set to true in order to run this beast
@@ -60,7 +65,6 @@ unsigned time_lw_N()
double time = .0;
cout << "timing Lewis-Wester test N (poly at rational fcns)" << flush;
- clog << "-------Lewis-Wester test N (poly at rational fcns):" << endl;
if (do_test) {
tag_heuer.start();
@@ -70,18 +74,19 @@ unsigned time_lw_N()
++count;
} while ((time=tag_heuer.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
} else {
cout << " disabled" << endl;
- clog << "(no output)" << endl;
}
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_N();
+}
diff --git a/check/time_lw_O.cpp b/check/time_lw_O.cpp
index 4bf31e9..f2a6094 100644
--- a/check/time_lw_O.cpp
+++ b/check/time_lw_O.cpp
@@ -21,7 +21,12 @@
* 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 const bool do_test2 = false; // set to true in order to run this beast
@@ -133,7 +138,6 @@ unsigned time_lw_O()
double time = .0;
cout << "timing Lewis-Wester test O1 (three 15x15 dets)" << flush;
- clog << "-------Lewis-Wester test O1 (three 15x15 dets):" << endl;
rolex.start();
// correct for very small times:
@@ -142,32 +146,30 @@ unsigned time_lw_O()
++count;
} while ((time=rolex.read())<0.1 && !result);
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
+ if (result)
+ return result;
+
cout << time/(3*count) << "s (average)" << endl;
cout << "timing Lewis-Wester test O2 (Resultant)" << flush;
- clog << "-------Lewis-Wester test O2 (Resultant):" << endl;
if (do_test2) {
rolex.reset();
result += test_O2();
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << rolex.read() << "s (combined)" << endl;
} else {
cout << " disabled" << endl;
- clog << "(no output)" << endl;
}
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_O();
+}
diff --git a/check/time_lw_P.cpp b/check/time_lw_P.cpp
index c95bbe2..d04e11a 100644
--- a/check/time_lw_P.cpp
+++ b/check/time_lw_P.cpp
@@ -21,7 +21,12 @@
* 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()
{
@@ -59,7 +64,6 @@ unsigned time_lw_P()
double time = .0;
cout << "timing Lewis-Wester test P (det of sparse rank 101)" << flush;
- clog << "-------Lewis-Wester test P (det of sparse rank 101):" << endl;
rolex.start();
// correct for very small times:
@@ -67,15 +71,16 @@ unsigned time_lw_P()
result = test();
++count;
} while ((time=rolex.read())<0.1 && !result);
- cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_P();
+}
diff --git a/check/time_lw_Pprime.cpp b/check/time_lw_Pprime.cpp
index 5174efc..4c7e587 100644
--- a/check/time_lw_Pprime.cpp
+++ b/check/time_lw_Pprime.cpp
@@ -21,7 +21,12 @@
* 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()
{
@@ -72,7 +77,6 @@ unsigned time_lw_Pprime()
double time = .0;
cout << "timing Lewis-Wester test P' (det of less sparse rank 101)" << flush;
- clog << "-------Lewis-Wester test P' (det of less sparse rank 101):" << endl;
rolex.start();
// correct for very small times:
@@ -81,14 +85,16 @@ unsigned time_lw_Pprime()
++count;
} while ((time=rolex.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_Pprime();
+}
diff --git a/check/time_lw_Q.cpp b/check/time_lw_Q.cpp
index e506a35..1236dec 100644
--- a/check/time_lw_Q.cpp
+++ b/check/time_lw_Q.cpp
@@ -21,7 +21,12 @@
* 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 const bool do_test = true; // set to true in order to run this beast
@@ -62,7 +67,6 @@ unsigned time_lw_Q()
double time = .0;
cout << "timing Lewis-Wester test Q (charpoly(P))" << flush;
- clog << "-------Lewis-Wester test Q (charpoly(P)):" << endl;
if (do_test) {
rolex.start();
@@ -72,18 +76,19 @@ unsigned time_lw_Q()
++count;
} while ((time=rolex.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
} else {
cout << " disabled" << endl;
- clog << "(no output)" << endl;
}
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_Q();
+}
diff --git a/check/time_lw_Qprime.cpp b/check/time_lw_Qprime.cpp
index 6437412..0046dde 100644
--- a/check/time_lw_Qprime.cpp
+++ b/check/time_lw_Qprime.cpp
@@ -21,7 +21,12 @@
* 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 const bool do_test = true; // set to true in order to run this beast
@@ -74,7 +79,6 @@ unsigned time_lw_Qprime()
double time = .0;
cout << "timing Lewis-Wester test Q' (charpoly(P'))" << flush;
- clog << "-------Lewis-Wester test Q' (charpoly(P')):" << endl;
if (do_test) {
rolex.start();
@@ -84,18 +88,19 @@ unsigned time_lw_Qprime()
++count;
} while ((time=rolex.read())<0.1 && !result);
cout << '.' << flush;
-
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
cout << time/count << 's' << endl;
} else {
cout << " disabled" << endl;
- clog << "(no output)" << endl;
}
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_lw_Qprime();
+}
diff --git a/check/time_toeplitz.cpp b/check/time_toeplitz.cpp
index 9bf569a..2b27e90 100644
--- a/check/time_toeplitz.cpp
+++ b/check/time_toeplitz.cpp
@@ -23,7 +23,12 @@
* 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 toeplitz_det(unsigned size)
{
@@ -69,7 +74,6 @@ unsigned time_toeplitz()
unsigned result = 0;
cout << "timing determinant of polyvariate symbolic Toeplitz matrices" << flush;
- clog << "-------determinant of polyvariate symbolic Toeplitz matrices:" << endl;
vector<unsigned> sizes;
vector<double> times;
@@ -93,12 +97,6 @@ unsigned time_toeplitz()
cout << '.' << flush;
}
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
// print the report:
cout << endl << " dim: ";
for (vector<unsigned>::iterator i=sizes.begin(); i!=sizes.end(); ++i)
@@ -110,3 +108,12 @@ unsigned time_toeplitz()
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_toeplitz();
+}
diff --git a/check/time_vandermonde.cpp b/check/time_vandermonde.cpp
index fccc139..1caaa40 100644
--- a/check/time_vandermonde.cpp
+++ b/check/time_vandermonde.cpp
@@ -24,7 +24,12 @@
* 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 vandermonde_det(unsigned size)
{
@@ -66,7 +71,6 @@ unsigned time_vandermonde()
unsigned result = 0;
cout << "timing determinant of univariate symbolic Vandermonde matrices" << flush;
- clog << "-------determinant of univariate symbolic Vandermonde matrices:" << endl;
vector<unsigned> sizes;
vector<double> times;
@@ -90,12 +94,6 @@ unsigned time_vandermonde()
cout << '.' << flush;
}
- if (!result) {
- cout << " passed ";
- clog << "(no output)" << endl;
- } else {
- cout << " failed ";
- }
// print the report:
cout << endl << " dim: ";
for (vector<unsigned>::iterator i=sizes.begin(); i!=sizes.end(); ++i)
@@ -107,3 +105,12 @@ unsigned time_vandermonde()
return result;
}
+
+extern void randomify_symbol_serials();
+
+int main(int argc, char** argv)
+{
+ randomify_symbol_serials();
+ cout << setprecision(2) << showpoint;
+ return time_vandermonde();
+}
diff --git a/check/times.cpp b/check/times.cpp
deleted file mode 100644
index b825543..0000000
--- a/check/times.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/** @file times.cpp
- *
- * Main program that calls the individual timings. */
-
-/*
- * 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
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdexcept>
-#include "times.h"
-
-/** Generate a random amount of symbols and destroy them again immediatly.
- * This operation effectively makes the serial numbers of all subsequent
- * symbols unpredictable. If the serials are unpredictable, then so are
- * their hash values. If the hash values are unpredictable, then so are
- * the canonical orderings. If the canonical orderings are unpredictable,
- * all subsequent times are subject to some variation. This variation,
- * however is natural and desireable for two reasons: First, we cannot know
- * how many symbols have been generated before in real world computations.
- * Second, the following timings are subject to some semi-random variation
- * anyways because short timings need to be repeated until enough time has
- * gone by for the measurement to be reliable. During this process the serial
- * numbers will be shifted anyways in a semi-random way. It is better not
- * to lull the user in a false sense of reproducibility and instead confront
- * her with the normal variation to be expected.
- */
-void randomify_symbol_serials()
-{
- srand(time(NULL));
- const int m = rand() % 666;
- for (int s=0; s<m; ++s ) {
- symbol("dummy");
- }
-}
-
-int main()
-{
- randomify_symbol_serials();
-
- unsigned result = 0;
-
- // For all timings:
- cout << setprecision(2) << showpoint;
-
-#define TIME(which) \
-try { \
- result += time_ ## which (); \
-} catch (const exception &e) { \
- cout << "Error: caught exception " << e.what() << endl; \
- ++result; \
-}
-
- TIME(dennyfliegner)
- TIME(gammaseries)
- TIME(vandermonde)
- TIME(toeplitz)
- TIME(hashmap)
- TIME(lw_A)
- TIME(lw_B)
- TIME(lw_C)
- TIME(lw_D)
- TIME(lw_E)
- TIME(lw_F)
- TIME(lw_G)
- TIME(lw_H)
- TIME(lw_IJKL)
- TIME(lw_M1)
- TIME(lw_M2)
- TIME(lw_N)
- TIME(lw_O)
- TIME(lw_P)
- TIME(lw_Pprime)
- TIME(lw_Q)
- TIME(lw_Qprime)
- TIME(antipode)
- TIME(fateman_expand)
-
- if (result) {
- cout << "Error: something went wrong. ";
- if (result == 1) {
- cout << "(one failure)" << endl;
- } else {
- cout << "(" << result << " individual failures)" << endl;
- }
- cout << "please check times.out against times.ref for more details."
- << endl << "happy debugging!" << endl;
- }
-
- return result;
-}
diff --git a/check/times.h b/check/times.h
deleted file mode 100644
index 40b1340..0000000
--- a/check/times.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/** @file times.h
- *
- * Prototypes for all individual timings. */
-
-/*
- * 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
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef CHECKS_H
-#define CHECKS_H
-
-#include <cstdlib>
-#include <iostream>
-#include <sstream>
-#include <vector>
-#include "config.h"
-#include "ginac.h"
-using namespace std;
-using namespace GiNaC;
-
-#include "timer.h"
-
-// prototypes for all individual timings should be unsigned fcn():
-unsigned time_dennyfliegner();
-unsigned time_gammaseries();
-unsigned time_vandermonde();
-unsigned time_toeplitz();
-unsigned time_hashmap();
-unsigned time_lw_A();
-unsigned time_lw_B();
-unsigned time_lw_C();
-unsigned time_lw_D();
-unsigned time_lw_E();
-unsigned time_lw_F();
-unsigned time_lw_G();
-unsigned time_lw_H();
-unsigned time_lw_IJKL();
-unsigned time_lw_M1();
-unsigned time_lw_M2();
-unsigned time_lw_N();
-unsigned time_lw_O();
-unsigned time_lw_P();
-unsigned time_lw_Pprime();
-unsigned time_lw_Q();
-unsigned time_lw_Qprime();
-unsigned time_antipode();
-unsigned time_fateman_expand();
-
-#endif // ndef CHECKS_H
diff --git a/check/times.ref b/check/times.ref
deleted file mode 100644
index 08e9b39..0000000
--- a/check/times.ref
+++ /dev/null
@@ -1,56 +0,0 @@
--------commutative expansion and substitution:
-(no output)
--------Laurent series expansion of Gamma function:
-(no output)
--------determinant of univariate symbolic Vandermonde matrices:
-(no output)
--------determinant of polyvariate symbolic Toeplitz matrices:
-(no output)
--------hash map operations:
-(no output)
--------Lewis-Wester test A (divide factorials):
-(no output)
--------Lewis-Wester test B (sum of rational numbers):
-(no output)
--------Lewis-Wester test C (gcd of big integers):
-(no output)
--------Lewis-Wester test D (normalized sum of rational fcns):
-(no output)
--------Lewis-Wester test E (normalized sum of rational fcns):
-(no output)
--------Lewis-Wester test F (gcd of 2-var polys):
-(no output)
--------Lewis-Wester test G (gcd of 3-var polys):
-(no output)
--------Lewis-Wester test H (det of 80x80 Hilbert):
-(no output)
--------Lewis-Wester test I (invert rank 40 Hilbert):
-(no output)
--------Lewis-Wester test J (check rank 40 Hilbert):
-(no output)
--------Lewis-Wester test K (invert rank 70 Hilbert):
-(no output)
--------Lewis-Wester test L (check rank 70 Hilbert):
-(no output)
--------Lewis-Wester test M1 (26x26 sparse, det):
-(no output)
--------Lewis-Wester test M2 (101x101 sparse, det):
-(no output)
--------Lewis-Wester test N (poly at rational fcns):
-(no output)
--------Lewis-Wester test O1 (three 15x15 dets):
-(no output)
--------Lewis-Wester test O2 (Resultant):
-(no output)
--------Lewis-Wester test P (det of sparse rank 101):
-(no output)
--------Lewis-Wester test P' (det of less sparse rank 101):
-(no output)
--------Lewis-Wester test Q (charpoly(P)):
-(no output)
--------Lewis-Wester test Q' (charpoly(P')):
-(no output)
--------computation of antipodes in Yukawa theory:
-(no output)
--------Fateman's polynomial expand benchmark:
-(no output)
--
1.5.4.2
Best regards,
Alexei
--
All science is either physics or stamp collecting.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: Digital signature
Url : http://www.cebix.net/pipermail/ginac-devel/attachments/20080228/38a1e544/attachment-0001.sig
More information about the GiNaC-devel
mailing list