diff options
author | Beman Dawes <bdawes@acm.org> | 2000-12-24 19:09:27 +0000 |
---|---|---|
committer | Beman Dawes <bdawes@acm.org> | 2000-12-24 19:09:27 +0000 |
commit | 338a6a8fe43b7a5f34887e2c9ce1ad8d2b93418d (patch) | |
tree | 1338cb314be7983dfb3eb4ee7bca504b92865f24 | |
parent | 2b7c570dce92b7f86fb7986a795a019ea81bad6d (diff) | |
download | boost-338a6a8fe43b7a5f34887e2c9ce1ad8d2b93418d.tar.gz |
Initial version (from Jens Maurer)
[SVN r8489]
-rw-r--r-- | libs/compiler.cfg | 95 | ||||
-rw-r--r-- | libs/regression.cfg | 34 | ||||
-rw-r--r-- | libs/regression.cpp | 253 |
3 files changed, 382 insertions, 0 deletions
diff --git a/libs/compiler.cfg b/libs/compiler.cfg new file mode 100644 index 0000000000..3ff06a9418 --- /dev/null +++ b/libs/compiler.cfg @@ -0,0 +1,95 @@ +linux +gcc +GCC 2.95.2 +g++ -ftemplate-depth-30 -I%include %source +GNU<br>GCC<br>2.95.2 + +linux +gcc-stlport +GCC 2.95.2 STLport 4.0 +g++ -V 2.95.2-stlport -ftemplate-depth-30 -I%include %source +GNU<br>GCC<br>2.95.2<br>STLport<br>4.0 + +linux +como +Comeau C++ 4.2.44 beta3 +como -I%include %source +Comeau C++<br>4.2.44 beta3<br>STLport<br>4.0 + +sunos5 +suncc +Sun WorkShop 6 2000/04/07 C++ 5.1 +CC -I%include %source +Sun C++<br>Sun WorkShop 6, C++ 5.1 + +sunos5 +gcc +GCC 2.95.2 +g++ -Wall -pedantic -ftemplate-depth-30 -Wno-long-long -I%include %source +GNU<br>GCC<br>2.95.2 + +sunos5 +kcc +KCC 3.4g +KCC --strict_warnings -I%include %source +KAI<br>KCC<br>3.4g + +osf1V5 +cxx +Compaq C++ 6.0 +cxx -std strict_ansi -D__USE_STD_IOSTREAM -I%include %source +Compaq C++<br>6.2-024 + +osf1V5 +cxx-clib +Compaq C++ 6.0 with <cXXX> headers +cxx -std strict_ansi -D__USE_STD_IOSTREAM -I$HOME/include -I%include %source +Compaq C++<br>6.2-024<br>clib + +irix6 +irixcc +IRIX CC 7.1.3.3 +CC -LANG:std -I%include %source +SGI IRIX CC<br>7.3.1.1m + +irix6 +irixcc-clib +IRIX CC 7.1.3.3 with <cXXX> headers +CC -LANG:std -I$HOME/include -I%include %source +SGI IRIX CC<br>7.3.1.1m<br>clib + +beos +gcc +GNU GCC +c++ -ftemplate-depth-30 -Wall -I%include %source +GNUPro<br>GCC 2.9 + +beos +gcc-stlport +GNU GCC +c++ -ftemplate-depth-30 -Wall -I/boot/home/config/stlport/stl330 -I%include %source +GNUPro<br>GCC 2.9<br>+<br>SGI STL 3.3 + +win32 +bcc +Borland C++ 5.5.1 +$BOOST_BCC55_PATH\bcc32 -I%include -j10 -q %source +Borland<br>BCC<br>5.5.1 + +win32 +cw +Metrowerks CodeWarrior +mwcc -maxerrors 10 -cwd source -I- -I%include %source +Metrowerks<br>CodeWarrior<br>6.0 + +win32 +vc +Microsoft Visual C++ +cl /c /nologo /Zm400 /MDd /W3 /GR /GX /Zi /Od /GZ /I "%include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" %source +Microsoft<br>VC++<br>6.0 SP4 + +win32 +vc-stlport +Microsoft Visual C++ with STLport +cl /c /nologo /Zm400 /MDd /W3 /GR /GX /Zi /Od /GZ /I "$BOOST_STLPORT_PATH" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" %source +Microsoft<br>VC++<br>6.0 SP4<br>STLport<br>4.0 diff --git a/libs/regression.cfg b/libs/regression.cfg new file mode 100644 index 0000000000..d463ca5cea --- /dev/null +++ b/libs/regression.cfg @@ -0,0 +1,34 @@ +compile libs/config/config_test.cpp +run libs/array/array1.cpp +compile libs/concept_check/concept_check_test.cpp +compile libs/concept_check/class_concept_check_test.cpp +link-fail libs/concept_check/concept_check_fail_expected.cpp +link-fail libs/concept_check/class_concept_fail_expected.cpp +run libs/functional/function_test.cpp +run libs/graph/test/graph.cpp +run libs/integer/cstdint_test.cpp +run libs/integer/integer_test.cpp +run libs/integer/integer_traits_test.cpp +run libs/rational/rational_example.cpp +run libs/random/random_test.cpp +run libs/random/random_demo.cpp +run libs/regex/demo/regress/regex_test.cpp +run libs/regex/demo/regress/wregex_test.cpp +run libs/smart_ptr/smart_ptr_test.cpp +compile libs/static_assert/static_assert_test.cpp +compile-fail libs/static_assert/static_assert_test_fail_1.cpp +compile-fail libs/static_assert/static_assert_test_fail_2.cpp +compile-fail libs/static_assert/static_assert_test_fail_3.cpp +compile-fail libs/static_assert/static_assert_test_fail_4.cpp +compile-fail libs/static_assert/static_assert_test_fail_5.cpp +compile-fail libs/static_assert/static_assert_test_fail_6.cpp +compile-fail libs/static_assert/static_assert_test_fail_7.cpp +compile-fail libs/static_assert/static_assert_test_fail_8.cpp +compile libs/utility/call_traits_test.cpp +run libs/cast_test.cpp +compile libs/utility/compressed_pair_test.cpp +run libs/utility/iterator_adaptor_test.cpp +run libs/utility/iterators_test.cpp +run libs/utility/operators_test.cpp +run libs/utility/tie_example.cpp +compile libs/utility/type_traits_test.cpp diff --git a/libs/regression.cpp b/libs/regression.cpp new file mode 100644 index 0000000000..0bf743fc5e --- /dev/null +++ b/libs/regression.cpp @@ -0,0 +1,253 @@ +/* boost regression test program + * + * Copyright Jens Maurer 2000 + * Permission to use, copy, modify, sell, and distribute this software + * is hereby granted without free provided that the above copyright notice + * appears in all copies and that both that copyright notice and this + * permission notice appear in supporting documentation, + * + * Jens Maurer makes no representations about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + * + * See http://www.boost.org for most recent version including documentation. + */ + +#include <iostream> +#include <string> +#include <list> +#include <vector> +#include <cstdlib> +#include <fstream> +#include <utility> + + +std::string get_host() +{ +#if defined __linux__ + return "linux"; +#elif defined _MSC_VER + return "win32"; +#else +#error Please adapt for your platform +#endif +} + + +struct entry +{ + std::string os, identifier, name, command, html; +}; + +void replace(std::string & s, + const std::string & name, const std::string & value) +{ + std::string::size_type p = s.find(name); + if(p != std::string::npos) + s.replace(p, name.length(), value); +} + +void replace_environment(std::string & s) +{ + std::string::size_type end = 0; + for(;;) { + std::string::size_type pos = s.find('$', end); + if(pos == std::string::npos) + break; + end = s.find_first_not_of("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", pos+1); + const char * env = getenv(s.substr(pos+1, end-pos-1).c_str()); + if(env) + replace(s, s.substr(pos, end-pos), env); + else + break; + } +} + +template<class OutputIterator> +void read_compiler_configuration(const std::string & file, OutputIterator out) +{ + std::ifstream f(file.c_str()); + int lineno = 0; + while(f.good()) { + entry e; + std::getline(f, e.os); + std::getline(f, e.identifier); + std::getline(f, e.name); + std::getline(f, e.command); + std::getline(f, e.html); + *out = e; + ++out; + std::string l; + std::getline(f, l); + lineno += 6; + if(l != "") { + std::cerr << file << ", line " << lineno + << ": Empty line expected, got " << l << "\n"; + std::exit(1); + } + } +} + +bool execute(const std::string & command) +{ + std::cout << command << "\n"; + return std::system(command.c_str()) == 0; +} + +enum test_result { + ok = 0, + unknown_type, + compile_failed, compile_ok, link_failed, link_ok, run_failed, run_ok +}; + +test_result compile(std::string command, const std::string & boostpath, + const std::string & file) +{ + replace(command, "%source", "-o boosttmp.o " + boostpath + "/" + file); + return execute(command) ? compile_ok : compile_failed; +} + +test_result link(std::string command, const std::string & boostpath, + const std::string & file) +{ + replace(command, "%source", "-o boosttmp.exe" + boostpath + "/" + file); + return execute(command) ? link_ok : link_failed; +} + +test_result run(std::string command, const std::string & boostpath, + const std::string & file) +{ + std::string exename = "boosttmp.exe"; + replace(command, "%source", "-o " + exename + " " + boostpath + "/" + file); + if(execute(command)) { + return execute( (get_host() == "win32" ? "" : "./") + exename ) ? + run_ok : run_failed; + } else { + return link_failed; + } +} + +std::pair<test_result, test_result> +run_test(const std::string & type, std::string command, + const std::string & boostpath, const std::string & source) +{ + replace(command, "%include", boostpath); + if(type == "compile") + return std::make_pair(compile(command, boostpath, source), compile_ok); + else if(type == "compile-fail") + return std::make_pair(compile(command, boostpath, source), compile_failed); + else if(type == "link") + return std::make_pair(link(command, boostpath, source), link_ok); + else if(type == "link-fail") + return std::make_pair(link(command, boostpath, source), link_failed); + else if(type == "run") + return std::make_pair(run(command, boostpath, source), run_ok); + else if(type == "run-fail") + return std::make_pair(run(command, boostpath, source), run_failed); + else + return std::make_pair(unknown_type, ok); +} + +template<class ForwardIterator> +void do_tests(std::ostream & out, + ForwardIterator firstcompiler, ForwardIterator lastcompiler, + const std::string & testconfig, const std::string & boostpath) +{ + out << "<tr>\n" + << "<td>Program</td>\n"; + for(ForwardIterator it = firstcompiler; it != lastcompiler; ++it) { + out << "<td>" << it->html << "</td>\n"; + } + out << "</tr>\n"; + + std::ifstream f(testconfig.c_str()); + while(f.good()) { + std::string l; + std::getline(f, l); + typedef std::string::size_type sz_type; + sz_type p = l.find(' '); + if(p == std::string::npos) { + std::cerr << "Test " << l << " is wrong\n"; + continue; + } + std::string type(l, 0, p); + std::string file(l, p+1); + + std::cout << file << "\n"; + + out << "<tr>\n" + << "<td><a href=\"" << file << "\">" << file << "</a></td>\n"; + + for(ForwardIterator it = firstcompiler; it != lastcompiler; ++it) { + std::cout << "\t" << it->name << std::endl; + std::pair<test_result, test_result> result = + run_test(type, it->command, boostpath, file); + if(result.first == unknown_type) { + std::cerr << "Unknown test type " << type << ", skipped\n"; + continue; + } + out << "<td>"; + if(result.first == result.second) + out << "yes"; + else + out << "no"; + out << "<sup>" << int(result.second) << "</sup></td>" << std::endl; + std::cout << (result.first == result.second ? "ok" : "failed") << "\n"; + } + out << "</tr>\n"; + } +} + + +int main(int argc, char * argv[]) +{ + std::vector<std::string> args(argv+1, argv+argc); + if(args.size() < 3) { + std::cerr << argv[0] << " usage: compiler-config test-config boost-path [compiler] [file]\n"; + std::exit(1); + } + std::string compiler = (args.size() >= 4 ? args[3] : "*"); + + std::list<entry> l; + read_compiler_configuration(args[0], std::back_inserter(l)); + std::string host = get_host(); + for(std::list<entry>::iterator it = l.begin(); it != l.end(); ) { + if(it->os == host && (compiler == "*" || it->identifier == compiler)) { + replace_environment(it->command); + ++it; + } else { + it = l.erase(it); + } + } + + std::string boostpath = args[2]; + + if(args.size() >= 5) { + std::string cmd = l.front().command; + replace(cmd, "%include", boostpath); + compile(cmd, boostpath, args[4]); + return 0; + } + + std::ofstream out( ("cs-" + host + ".html").c_str() ); + + out << "<html>\n<head>\n<title>\nCompiler Status: " + host + "\n</title>\n</head>\n" + << "<body bgcolor=\"#ffffff\" text=\"#000000\">\n" + << "<h1><img border border=\"0\" src=\"../c++boost.gif\" width=\"277\" height=\"86\"></h1>\n" + << "<h1>Compiler Status: " + host + "</h1>\n" + << "</p>\n" + << "<p>\n" + << "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\n"; + + do_tests(out, l.begin(), l.end(), args[1], boostpath); + + out << "</table>\n"; + out << "<p>\n" + << "2: compile failed<br>\n" + << "3: compile succeeded<br>\n" + << "4: link failed<br>\n" + << "5: link succeeded<br>\n" + << "6: run failed<br>\n" + << "7: run succeeded<br>\n"; + return 0; +} |