Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/test/thread_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/test/thread_test.cpp')
-rw-r--r--source/test/thread_test.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/source/test/thread_test.cpp b/source/test/thread_test.cpp
new file mode 100644
index 0000000..a3797d6
--- /dev/null
+++ b/source/test/thread_test.cpp
@@ -0,0 +1,36 @@
+#include "StarThread.hpp"
+
+#include "gtest/gtest.h"
+
+using namespace Star;
+
+TEST(Thread, InvokeErrors) {
+ struct TestException {};
+
+ auto function = Thread::invoke("test", []() {
+ throw TestException();
+ });
+
+ EXPECT_THROW(function.finish(), TestException);
+}
+
+TEST(Thread, InvokeReturn) {
+ auto functionRet = Thread::invoke("test", []() {
+ return String("TestValue");
+ });
+
+ EXPECT_EQ(functionRet.finish(), String("TestValue"));
+ EXPECT_THROW(functionRet.finish(), InvalidMaybeAccessException);
+}
+
+TEST(Thread, ReadersWriterMutex) {
+ ReadersWriterMutex mutex;
+ ReadLocker rl1(mutex);
+ ReadLocker rl2(mutex);
+ WriteLocker wl(mutex, false);
+ EXPECT_FALSE(wl.tryLock());
+ rl1.unlock();
+ EXPECT_FALSE(wl.tryLock());
+ rl2.unlock();
+ EXPECT_TRUE(wl.tryLock());
+}