1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_NO_MAIN
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <boost/test/unit_test.hpp>
#include "mtasker.hh"
BOOST_AUTO_TEST_SUITE(mtasker_cc)
static int g_result;
static void doSomething(void* p)
{
MTasker<>* mt = reinterpret_cast<MTasker<>*>(p);
int i = 12, o = 0;
if (mt->waitEvent(i, &o) == 1)
g_result = o;
}
BOOST_AUTO_TEST_CASE(test_Simple)
{
MTasker<> mt;
mt.makeThread(doSomething, &mt);
struct timeval now;
gettimeofday(&now, 0);
bool first = true;
int o = 24;
for (;;) {
while (mt.schedule(&now))
;
if (first) {
mt.sendEvent(12, &o);
first = false;
}
if (mt.noProcesses())
break;
}
BOOST_CHECK_EQUAL(g_result, o);
}
static void willThrow(void* p)
{
throw std::runtime_error("Help!");
}
BOOST_AUTO_TEST_CASE(test_MtaskerException)
{
BOOST_CHECK_THROW({
MTasker<> mt;
mt.makeThread(willThrow, 0);
struct timeval now;
now.tv_sec = now.tv_usec = 0;
for (;;) {
mt.schedule(&now);
}
},
std::exception);
}
BOOST_AUTO_TEST_SUITE_END()
|