Files
boost_unordered/test/helpers/exception_test.cpp
Daniel James 8214c43060 Unit tests for unordered containers.
[SVN r2731]
2005-11-05 17:24:20 +00:00

109 lines
2.5 KiB
C++

// Copyright Daniel James 2005. Use, modification, and distribution are
// subject to the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#include "./exception_test.hpp"
#include <boost/test/test_tools.hpp>
#include <cassert>
#include <cstdlib>
namespace test
{
// TODO: (Writing this here instead of the headers to avoid recompiling
// the world)
//
// There are some major design flaws with the exception testing code,
// apart from global variables that is.
namespace
{
int num_iterations = 0;
int current_iteration = 0;
int trigger_count = 0;
int max_trigger_count = 0;
bool failed = false;
bool exception_testing = false;
bool exceptions_active = false;
}
void exception_start(int n)
{
num_iterations = n;
current_iteration = 0;
max_trigger_count = 0;
trigger_count = 0;
failed = false;
exception_testing = true;
exceptions_active = true;
}
void exception_loop()
{
BOOST_CHECK(exceptions_active);
++current_iteration;
max_trigger_count = trigger_count;
exception_testing = failed;
exceptions_active = failed;
trigger_count = 0;
failed = false;
}
bool exception_loop_test()
{
if(exception_testing && current_iteration == num_iterations) {
BOOST_ERROR("Too many iterations");
return false;
}
else {
return exception_testing;
}
}
void exception_failure()
{
failed = true;
}
bool true_once()
{
++trigger_count;
return !exception_testing || trigger_count > max_trigger_count;
}
bool exception_trigger_test()
{
++trigger_count;
return exception_testing && exceptions_active
&& trigger_count > max_trigger_count;
}
void exception_trigger()
{
if(exception_trigger_test()) throw exception();
}
void exception_trigger(char const* message)
{
if(exception_trigger_test()) throw exception(message);
}
bool exceptions_activate(bool value)
{
bool old = exceptions_active;
exceptions_active = value;
return old;
}
exception_control::exception_control(bool value)
: old_value(exceptions_activate(value))
{
}
exception_control::~exception_control()
{
exceptions_activate(old_value);
}
}