MCPcopy Create free account
hub / github.com/Tracktion/choc / testThreading

Function testThreading

tests/choc_tests.h:3251–3321  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3249}
3250
3251inline void testThreading (choc::test::TestProgress& progress)
3252{
3253 CHOC_CATEGORY (Threading);
3254
3255 {
3256 CHOC_TEST (TaskThread)
3257
3258 choc::threading::TaskThread tt1, tt2;
3259 std::atomic<int> numCallbacks1 { 0 }, numCallbacks2 { 0 };
3260
3261 tt1.start (std::chrono::milliseconds (100), [&] { ++numCallbacks1; });
3262 tt2.start (0, [&] { ++numCallbacks2; });
3263
3264 std::this_thread::sleep_for (std::chrono::milliseconds (50));
3265 CHOC_EXPECT_EQ (0, numCallbacks2.load());
3266 tt2.trigger();
3267
3268 for (int i = 0;; ++i)
3269 {
3270 std::this_thread::sleep_for (std::chrono::milliseconds (5));
3271
3272 if (numCallbacks1 == 3 && numCallbacks2 == 1)
3273 break;
3274
3275 if (i > 500)
3276 CHOC_FAIL ("Expected some callbacks");
3277 }
3278
3279 CHOC_EXPECT_EQ (1, numCallbacks2.load());
3280 }
3281
3282 {
3283 CHOC_TEST (ThreadSafeFunctor)
3284
3285 {
3286 choc::threading::ThreadSafeFunctor<std::function<void(int)>> tsf;
3287
3288 int result = 0;
3289 CHOC_EXPECT_FALSE (tsf);
3290 tsf = [&] (int x) { result = x; };
3291 CHOC_EXPECT_TRUE (tsf);
3292 CHOC_EXPECT_TRUE (tsf (2));
3293 tsf.reset();
3294 CHOC_EXPECT_FALSE (tsf (3));
3295 CHOC_EXPECT_EQ (result, 2);
3296 }
3297
3298 {
3299 choc::threading::ThreadSafeFunctor<std::function<void(size_t, size_t&)>> factorial;
3300
3301 factorial = [&] (size_t n, size_t& out)
3302 {
3303 if (n == 1)
3304 {
3305 out = 1;
3306 return;
3307 }
3308

Callers

nothing calls this directly

Calls 4

CHOC_TESTFunction · 0.85
loadMethod · 0.80
triggerMethod · 0.80
startMethod · 0.45

Tested by

no test coverage detected