summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libadhocutil/semaphore.cpp6
-rw-r--r--libadhocutil/semaphore.h2
-rw-r--r--libadhocutil/unittests/testSemaphore.cpp7
3 files changed, 15 insertions, 0 deletions
diff --git a/libadhocutil/semaphore.cpp b/libadhocutil/semaphore.cpp
index 0500445..ac2900e 100644
--- a/libadhocutil/semaphore.cpp
+++ b/libadhocutil/semaphore.cpp
@@ -36,5 +36,11 @@ namespace AdHoc {
--count;
return true;
}
+
+ unsigned int
+ Semaphore::freeCount() const
+ {
+ return count;
+ }
}
diff --git a/libadhocutil/semaphore.h b/libadhocutil/semaphore.h
index 3e7e476..3411543 100644
--- a/libadhocutil/semaphore.h
+++ b/libadhocutil/semaphore.h
@@ -22,6 +22,8 @@ namespace AdHoc {
/// Wait for a single count with timeout.
/// @param ms Timeout in milliseconds.
bool wait(unsigned int ms);
+ /// Free
+ unsigned int freeCount() const;
private:
boost::mutex mutex;
diff --git a/libadhocutil/unittests/testSemaphore.cpp b/libadhocutil/unittests/testSemaphore.cpp
index bde73a1..38f9b8f 100644
--- a/libadhocutil/unittests/testSemaphore.cpp
+++ b/libadhocutil/unittests/testSemaphore.cpp
@@ -22,12 +22,19 @@ BOOST_AUTO_TEST_CASE( initial )
BOOST_AUTO_TEST_CASE( addRemoveSome )
{
AdHoc::Semaphore s;
+ BOOST_REQUIRE_EQUAL(0, s.freeCount());
s.notify();
+ BOOST_REQUIRE_EQUAL(1, s.freeCount());
s.notify();
+ BOOST_REQUIRE_EQUAL(2, s.freeCount());
s.notify();
+ BOOST_REQUIRE_EQUAL(3, s.freeCount());
s.wait();
+ BOOST_REQUIRE_EQUAL(2, s.freeCount());
s.wait();
+ BOOST_REQUIRE_EQUAL(1, s.freeCount());
s.wait();
+ BOOST_REQUIRE_EQUAL(0, s.freeCount());
}
BOOST_AUTO_TEST_CASE( addRemoveTimeOut )