aboutsummaryrefslogtreecommitdiff
path: root/src/test/util_tests.cpp
diff options
context:
space:
mode:
authorGavin Andresen <[email protected]>2013-04-03 18:25:00 -0700
committerGavin Andresen <[email protected]>2013-04-03 18:25:00 -0700
commita0a437c86ae404152de883ac6a1463e6641eda1c (patch)
treee99240bd446613584b20c7b9762af5711bf3f7ff /src/test/util_tests.cpp
parentMerge pull request #2453 from sipa/txstats (diff)
parentHave Qt poll for shutdown requested, the QT way. (diff)
downloaddiscoin-a0a437c86ae404152de883ac6a1463e6641eda1c.tar.xz
discoin-a0a437c86ae404152de883ac6a1463e6641eda1c.zip
Merge pull request #2357 from gavinandresen/shutdowncleanup
Thread / shutdown cleanup
Diffstat (limited to 'src/test/util_tests.cpp')
-rw-r--r--src/test/util_tests.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp
index 1b0ccad51..2d05794cc 100644
--- a/src/test/util_tests.cpp
+++ b/src/test/util_tests.cpp
@@ -323,4 +323,62 @@ BOOST_AUTO_TEST_CASE(util_seed_insecure_rand)
}
}
+static int nCounter = 0;
+
+static void Count()
+{
+ ++nCounter;
+ MilliSleep(10);
+}
+
+static void CountWithArg(int arg)
+{
+ nCounter += arg;
+ MilliSleep(10);
+}
+
+BOOST_AUTO_TEST_CASE(util_loop_forever1)
+{
+ boost::thread_group threadGroup;
+
+ threadGroup.create_thread(boost::bind(&LoopForever<void (*)()>, "count", &Count, 1));
+ MilliSleep(1);
+ threadGroup.interrupt_all();
+ BOOST_CHECK_EQUAL(nCounter, 1);
+ nCounter = 0;
+}
+
+BOOST_AUTO_TEST_CASE(util_loop_forever2)
+{
+ boost::thread_group threadGroup;
+
+ boost::function<void()> f = boost::bind(&CountWithArg, 11);
+ threadGroup.create_thread(boost::bind(&LoopForever<boost::function<void()> >, "count11", f, 11));
+ MilliSleep(1);
+ threadGroup.interrupt_all();
+ BOOST_CHECK_EQUAL(nCounter, 11);
+ nCounter = 0;
+}
+
+BOOST_AUTO_TEST_CASE(util_threadtrace1)
+{
+ boost::thread_group threadGroup;
+
+ threadGroup.create_thread(boost::bind(&TraceThread<void (*)()>, "count11", &Count));
+ threadGroup.join_all();
+ BOOST_CHECK_EQUAL(nCounter, 1);
+ nCounter = 0;
+}
+
+BOOST_AUTO_TEST_CASE(util_threadtrace2)
+{
+ boost::thread_group threadGroup;
+
+ boost::function<void()> f = boost::bind(&CountWithArg, 11);
+ threadGroup.create_thread(boost::bind(&TraceThread<boost::function<void()> >, "count11", f));
+ threadGroup.join_all();
+ BOOST_CHECK_EQUAL(nCounter, 11);
+ nCounter = 0;
+}
+
BOOST_AUTO_TEST_SUITE_END()