ThreadTests.cpp 998 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "tests/ThreadTests.h"
  2. #include "test/Test.h"
  3. #include "thread/Thread.hpp"
  4. static int runDone = 0;
  5. struct IntHolder {
  6. int value;
  7. };
  8. static int run(void*) {
  9. runDone = 1;
  10. return 7;
  11. }
  12. static void testStart() {
  13. runDone = 0;
  14. Core::Thread t;
  15. CORE_TEST_ERROR(t.start(run, nullptr));
  16. int returnValue = 0;
  17. CORE_TEST_ERROR(t.join(&returnValue));
  18. CORE_TEST_EQUAL(1, runDone);
  19. CORE_TEST_EQUAL(7, returnValue);
  20. }
  21. static void testLambda() {
  22. IntHolder i(0);
  23. Core::Thread t;
  24. CORE_TEST_ERROR(t.start(
  25. [](void* p) {
  26. IntHolder* ip = static_cast<IntHolder*>(p);
  27. ip->value = 2;
  28. return 0;
  29. },
  30. &i));
  31. CORE_TEST_ERROR(t.join(nullptr));
  32. CORE_TEST_EQUAL(2, i.value);
  33. }
  34. static void testJoinWithoutStart() {
  35. Core::Thread t;
  36. CORE_TEST_EQUAL(Core::Error::THREAD_ERROR, t.join(nullptr));
  37. }
  38. void Core::ThreadTests::test() {
  39. testStart();
  40. testLambda();
  41. testJoinWithoutStart();
  42. }