123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #ifndef TEST_FRMWK_HPP___
- #define TEST_FRMWK_HPP___
- /* Copyright (c) 2002,2003 CrystalClear Software, Inc.
- * Use, modification and distribution is subject to the
- * Boost Software License, Version 1.0. (See accompanying
- * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
- * $Date$
- */
- #include <iostream>
- #include <string>
- #include <boost/config.hpp>
- //! Really simple test framework for counting and printing
- class TestStats
- {
- public:
- static TestStats& instance() {static TestStats ts; return ts;}
- void addPassingTest() {testcount_++; passcount_++;}
- void addFailingTest() {testcount_++;}
- unsigned int testcount() const {return testcount_;}
- unsigned int passcount() const {return passcount_;}
- void print(std::ostream& out = std::cout) const
- {
- out << testcount_ << " Tests Executed: " ;
- if (passcount() != testcount()) {
- out << (testcount() - passcount()) << " FAILURES";
- }
- else {
- out << "All Succeeded" << std::endl;
- }
- out << std::endl;
- }
- private:
- TestStats() : testcount_(0), passcount_(0) {}
- unsigned int testcount_;
- unsigned int passcount_;
- };
- inline bool check(const std::string& testname, bool testcond)
- {
- TestStats& stat = TestStats::instance();
- if (testcond) {
- std::cout << "Pass :: " << testname << " " << std::endl;
- stat.addPassingTest();
- return true;
- }
- else {
- stat.addFailingTest();
- std::cout << "FAIL :: " << testname << " " << std::endl;
- return false;
- }
- }
- // In the comparisons below, it is possible that T and U are signed and unsigned integer types, which generates warnings in some compilers.
- #if defined(BOOST_MSVC)
- # pragma warning(push)
- # pragma warning(disable: 4389)
- #elif defined(BOOST_CLANG) && defined(__has_warning)
- # if __has_warning("-Wsign-compare")
- # pragma clang diagnostic push
- # pragma clang diagnostic ignored "-Wsign-compare"
- # endif
- #elif defined(BOOST_GCC) && (BOOST_GCC+0) >= 40600
- # pragma GCC diagnostic push
- # pragma GCC diagnostic ignored "-Wsign-compare"
- #endif
- template< typename T, typename U >
- inline bool check_equal(const std::string& testname, T const& left, U const& right)
- {
- bool res = check(testname, left == right);
- if (!res)
- {
- std::cout << " left = " << left << ", right = " << right << std::endl;
- }
- return res;
- }
- #if defined(BOOST_MSVC)
- # pragma warning(pop)
- #elif defined(BOOST_CLANG) && defined(__has_warning)
- # if __has_warning("-Wsign-compare")
- # pragma clang diagnostic pop
- # endif
- #elif defined(BOOST_GCC) && (BOOST_GCC+0) >= 40600
- # pragma GCC diagnostic pop
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- inline bool check_equal(const std::string& testname, std::wstring const& left, std::wstring const& right)
- {
- bool res = check(testname, left == right);
- if (!res)
- {
- std::wcout << L" left = " << left << L", right = " << right << std::endl;
- }
- return res;
- }
- #endif
- inline int printTestStats()
- {
- TestStats& stat = TestStats::instance();
- stat.print();
- return stat.testcount() - stat.passcount();
- }
- #endif
|