/** @file check_matrices.cpp
*
- * Here we test manipulations on GiNaC's symbolic matrices. */
+ * Here we test manipulations on GiNaC's symbolic matrices. They are a
+ * well-tried resource for cross-checking the underlying symbolic
+ * manipulations. */
/*
- * GiNaC Copyright (C) 1999-2003 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
*
* 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 "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. */
-static unsigned integdom_matrix_determinants(void)
+static unsigned integdom_matrix_determinants()
{
unsigned result = 0;
symbol a("a");
- for (unsigned size=3; size<20; ++size) {
+ for (unsigned size=3; size<22; ++size) {
matrix A(size,size);
// populate one element in each row:
for (unsigned r=0; r<size-1; ++r)
/* determinants of some symbolic matrices with multivariate rational function
* coefficients. */
-static unsigned rational_matrix_determinants(void)
+static unsigned rational_matrix_determinants()
{
unsigned result = 0;
symbol a("a"), b("b"), c("c");
- for (unsigned size=3; size<8; ++size) {
+ for (unsigned size=3; size<9; ++size) {
matrix A(size,size);
for (unsigned r=0; r<size-1; ++r) {
// populate one or two elements in each row:
}
/* Some quite funny determinants with functions and stuff like that inside. */
-static unsigned funny_matrix_determinants(void)
+static unsigned funny_matrix_determinants()
{
unsigned result = 0;
symbol a("a"), b("b"), c("c");
- for (unsigned size=3; size<7; ++size) {
+ for (unsigned size=3; size<8; ++size) {
matrix A(size,size);
for (unsigned co=0; co<size-1; ++co) {
// populate one or two elements in each row:
}
/* compare results from different determinant algorithms.*/
-static unsigned compare_matrix_determinants(void)
+static unsigned compare_matrix_determinants()
{
unsigned result = 0;
symbol a("a");
- for (unsigned size=2; size<7; ++size) {
+ for (unsigned size=2; size<8; ++size) {
matrix A(size,size);
for (unsigned co=0; co<size; ++co) {
for (unsigned ro=0; ro<size; ++ro) {
return result;
}
-static unsigned symbolic_matrix_inverse(void)
+static unsigned symbolic_matrix_inverse()
{
unsigned result = 0;
symbol a("a"), b("b"), c("c");
- for (unsigned size=2; size<5; ++size) {
+ for (unsigned size=2; size<6; ++size) {
matrix A(size,size);
do {
for (unsigned co=0; co<size; ++co) {
return result;
}
-unsigned check_matrices(void)
+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;
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();
+}