/* -*- C++ -*- * * --------------------------------------------------------------------- * $Id: testascio.cpp,v 1.3.4.1 2005/10/03 22:59:48 drory Exp $ * --------------------------------------------------------------------- * * Copyright (C) 2000-2002 Jan Snigula * * 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * * --------------------------------------------------------------------- * */ #define LTL_RANGE_CHECKING #include #include #include #include #include #include using namespace ltl; using std::cout; using std::endl; int main(int argc, char **argv); void testint( void ) { MArray res1(7); res1 = 3, 4, 5, 6, 7, 8, 9; MArray res2(3,7); res2 = 3, 4, 5, 4, 5, 6, 5, 6, 7, 6, 7, 8, 7, 8, 9, 8, 9, 0, 9, 0, 1; cerr << endl << "Testing integer data file" << endl; cerr << "Creating testfile..."; std::ofstream file("test.dat"); file << "1 2 3 4 5" << endl << " # ugly comment" << endl << "2 3 4 5 6" << endl << " 3 4 5 6 7" << endl << "4 5 6 07 8" << endl << "#comment" << endl << "5 6 7 8 9" << endl << "6 7 8 9 0" << endl << "7 8 9 0 1" << endl; file.close(); cerr << "done" << endl; AscFile f( "test.dat" ); cerr << "Testing rows()..."; if( f.rows() != 7 ) { cerr << "failed" << endl; exit(-1); } else cerr << "passed" << endl; cerr << "Testing cols()..."; if( f.cols() != 5 ) { cerr << "failed" << endl; exit(-1); } else cerr << "passed" << endl; cerr << "Testing readIntColumn()..."; MArray read1 = f.readIntColumn(3); if( ! allof( read1 == res1 ) ) { cerr << "failed" << endl; exit(-1); } else cerr << "passed" << endl; cerr << "Testing readIntColumns()..."; MArray read2 = f.readIntColumns(3,5); if( ! allof( read2 == res2 ) ) { cerr << "failed" << endl; exit(-1); } else cerr << "passed" << endl; } void testfloat( void ) { MArray res1(7); res1 = 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8; MArray res2(3,7); res2 = 3.2, 4.3, 5.4, 4.3, 5.4, 6.5, 5.4, 6.5, 7.6, 6.5, 7.6, 8.7, 7.6, 8.7, 9.8, 8.7, 9.8, 0.9, 9.8, 0.9, 1.0; cerr << endl << "Testing float data file" << endl; cerr << "Creating testfile..."; std::ofstream file("test.dat"); file << "1.0 2.1 3.20 4.3 5.4" << endl << " # ugly comment" << endl << "2.100000 3.2 4.3 5.40 6.5" << endl << " 3.200 04.30 5.4 6.5 7.6" << endl << "4.3 5.4 6.50 7.6 8.7" << endl << "#comment" << endl << "5.40000000000000000000000000000 6.5 7.60 8.70 9.8" << endl << "6.5 7.6 8.7 9.8 0.9000000000000000000000000000000000000000" << endl << "7.6 8.7000 9.80 0.90 1.00" << endl; file.close(); cerr << "done" << endl; AscFile f( "test.dat" ); cerr << "Testing rows()..."; if( f.rows() != 7 ) { cerr << "failed" << endl; exit(-1); } else cerr << "passed" << endl; cerr << "Testing cols()..."; if( f.cols() != 5 ) { cerr << "failed" << endl; exit(-1); } else cerr << "passed" << endl; cerr << "Testing readFloatColumn()..."; MArray read1 = f.readFloatColumn(3); if( ! allof( read1 == res1 ) ) { cerr << "failed" << endl; exit(-1); } else cerr << "passed" << endl; cerr << "Testing readFloatColumns()..."; MArray read2 = f.readFloatColumns(3,5); if( ! allof( read2 == res2 ) ) { cerr << "failed" << endl; exit(-1); } else cerr << "passed" << endl; MArray res3(2,7); res3 = 3.2, 5.4, 4.3, 6.5, 5.4, 7.6, 6.5, 8.7, 7.6, 9.8, 8.7, 0.9, 9.8, 1.0; int c[2] = {3,5}; MArray read3 = f.readFloatColumns(c,2); if( ! allof( read3 == res3 ) ) { cerr << "failed" << endl; exit(-1); } else cerr << "passed" << endl; } void testheader( void ) { cerr << endl << "Testing getHeader with normal comments" << endl; cerr << "Creating testfile..."; std::ofstream file("test.dat"); file << "# Comment line 1 " << endl << " # Comment line 2 " << endl << "# Comment line 3 " << endl << " " << endl << "# Comment line 4 " << endl << "" << endl << " # Comment line 5 " << endl << "# Comment line 6 " << endl << "1.0 2.1 3.20 4.3 5.4" << endl << " # ugly comment" << endl << "2.100000 3.2 4.3 5.40 6.5" << endl << " 3.200 04.30 5.4 6.5 7.6" << endl << "4.3 5.4 6.50 7.6 8.7" << endl << "#comment" << endl << "5.40000000000000000000000000000 6.5 7.60 8.70 9.8" << endl << "6.5 7.6 8.7 9.8 0.9000000000000000000000000000000000000000" << endl << "7.6 8.7000 9.80 0.90 1.00" << endl; file.close(); cerr << "done" << endl; AscFile f( "test.dat" ); cerr << "Testing with skipped comment signs..."; vector v1; f.getHeader( v1, false ); if( v1[0] != " Comment line 1 " ) cerr << "failed" << endl << "Expected \" Comment line 1 \" got \"" << v1[0] << "\"" << endl; else if( v1[1] != " Comment line 2 " ) cerr << "failed" << endl << "Expected \" Comment line 2 \" got \"" << v1[1] << "\"" << endl; else if( v1[2] != " Comment line 3 " ) cerr << "failed" << endl << "Expected \" Comment line 3 \" got \"" << v1[2] << "\"" << endl; else if( v1[3] != " Comment line 4 " ) cerr << "failed" << endl << "Expected \" Comment line 4 \" got \"" << v1[3] << "\"" << endl; else if( v1[4] != " Comment line 5 " ) cerr << "failed" << endl << "Expected \" Comment line 5 \" got \"" << v1[4] << "\"" << endl; else if( v1[5] != " Comment line 6 " ) cerr << "failed" << endl << "Expected \" Comment line 6 \" got \"" << v1[5] << "\"" << endl; else cerr << "passed" << endl; cerr << "Testing without skipped comment signs..."; v1.clear(); f.getHeader( v1, true ); if( v1[0] != "# Comment line 1 " ) cerr << "failed" << endl << "Expected \"# Comment line 1 \" got \"" << v1[0] << "\"" << endl; else if( v1[1] != "# Comment line 2 " ) cerr << "failed" << endl << "Expected \"# Comment line 2 \" got \"" << v1[1] << "\"" << endl; else if( v1[2] != "# Comment line 3 " ) cerr << "failed" << endl << "Expected \"# Comment line 3 \" got \"" << v1[2] << "\"" << endl; else if( v1[3] != "# Comment line 4 " ) cerr << "failed" << endl << "Expected \"# Comment line 4 \" got \"" << v1[3] << "\"" << endl; else if( v1[4] != "# Comment line 5 " ) cerr << "failed" << endl << "Expected \"# Comment line 5 \" got \"" << v1[4] << "\"" << endl; else if( v1[5] != "# Comment line 6 " ) cerr << "failed" << endl << "Expected \"# Comment line 6 \" got \"" << v1[5] << "\"" << endl; else cerr << "passed" << endl; cerr << endl << "Testing getHeader with weird comments" << endl; cerr << "Creating testfile..."; std::ofstream file2("test.dat"); file2 << "COMMENT Comment line 1 " << endl << " COMMENT Comment line 2 " << endl << "COMMENT Comment line 3 " << endl << " " << endl << "COMMENT Comment line 4 " << endl << "" << endl << " COMMENT Comment line 5 " << endl << "COMMENT Comment line 6 " << endl << "1.0 2.1 3.20 4.3 5.4" << endl << " COMMENT ugly comment" << endl << "2.100000 3.2 4.3 5.40 6.5" << endl << " 3.200 04.30 5.4 6.5 7.6" << endl << "4.3 5.4 6.50 7.6 8.7" << endl << "COMMENTcomment" << endl << "5.40000000000000000000000000000 6.5 7.60 8.70 9.8" << endl << "6.5 7.6 8.7 9.8 0.9000000000000000000000000000000000000000" << endl << "7.6 8.7000 9.80 0.90 1.00" << endl; file.close(); cerr << "done" << endl; AscFile f2( "test.dat", 0, "COMMENT" ); cerr << "Testing with skipped comment signs..."; v1.clear(); f2.getHeader( v1, false ); if( v1[0] != " Comment line 1 " ) cerr << "failed" << endl << "Expected \" Comment line 1 \" got \"" << v1[0] << "\"" << endl; else if( v1[1] != " Comment line 2 " ) cerr << "failed" << endl << "Expected \" Comment line 2 \" got \"" << v1[1] << "\"" << endl; else if( v1[2] != " Comment line 3 " ) cerr << "failed" << endl << "Expected \" Comment line 3 \" got \"" << v1[2] << "\"" << endl; else if( v1[3] != " Comment line 4 " ) cerr << "failed" << endl << "Expected \" Comment line 4 \" got \"" << v1[3] << "\"" << endl; else if( v1[4] != " Comment line 5 " ) cerr << "failed" << endl << "Expected \" Comment line 5 \" got \"" << v1[4] << "\"" << endl; else if( v1[5] != " Comment line 6 " ) cerr << "failed" << endl << "Expected \" Comment line 6 \" got \"" << v1[5] << "\"" << endl; else cerr << "passed" << endl; cerr << "Testing without skipped comment signs..."; v1.clear(); f2.getHeader( v1, true ); if( v1[0] != "COMMENT Comment line 1 " ) cerr << "failed" << endl << "Expected \"COMMENT Comment line 1 \" got \"" << v1[0] << "\"" << endl; else if( v1[1] != "COMMENT Comment line 2 " ) cerr << "failed" << endl << "Expected \"COMMENT Comment line 2 \" got \"" << v1[1] << "\"" << endl; else if( v1[2] != "COMMENT Comment line 3 " ) cerr << "failed" << endl << "Expected \"COMMENT Comment line 3 \" got \"" << v1[2] << "\"" << endl; else if( v1[3] != "COMMENT Comment line 4 " ) cerr << "failed" << endl << "Expected \"COMMENT Comment line 4 \" got \"" << v1[3] << "\"" << endl; else if( v1[4] != "COMMENT Comment line 5 " ) cerr << "failed" << endl << "Expected \"COMMENT Comment line 5 \" got \"" << v1[4] << "\"" << endl; else if( v1[5] != "COMMENT Comment line 6 " ) cerr << "failed" << endl << "Expected \"COMMENT Comment line 6 \" got \"" << v1[5] << "\"" << endl; else cerr << "passed" << endl; } int main(int argc, char **argv) { cerr << "Testing MArray ASCII I/O ..." << endl; testint(); testfloat(); testheader(); }