MCPcopy Create free account
hub / github.com/DISTORTEC/distortos / phase5

Function phase5

test/Thread/ThreadOperationsTestCase.cpp:334–421  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

332 */
333
334bool phase5()
335{
336 const auto allocatedMemory = mallinfo().uordblks;
337
338 const auto lambda =
339 [](ThreadIdentifier& innerIdentifier, bool& sharedResult)
340 {
341 innerIdentifier = ThisThread::getIdentifier();
342 sharedResult = innerIdentifier.getThread() == &ThisThread::get();
343 ThisThread::setPriority(1);
344 };
345
346 // test identifiers for static thread
347 {
348 ThreadIdentifier innerIdentifier;
349 ThreadIdentifier outerIdentifier;
350 {
351 bool sharedResult;
352 auto staticThread = makeAndStartStaticThread<testThreadStackSize>(UINT8_MAX, lambda,
353 std::ref(innerIdentifier), std::ref(sharedResult));
354 outerIdentifier = staticThread.getIdentifier();
355 const auto result = innerIdentifier != ThreadIdentifier{} && outerIdentifier != ThreadIdentifier{} &&
356 innerIdentifier == outerIdentifier;
357 if (staticThread.join() != 0 || result == false || sharedResult == false)
358 return false;
359 }
360 if (innerIdentifier != ThreadIdentifier{} || outerIdentifier != ThreadIdentifier{} ||
361 innerIdentifier != outerIdentifier) // both identifiers must no longer be valid, they must be equal
362 return false;
363 }
364
365 // test identifiers for dynamic thread
366 {
367 ThreadIdentifier innerIdentifier;
368 ThreadIdentifier outerIdentifier;
369 {
370 bool sharedResult;
371 auto dynamicThread = makeAndStartDynamicThread({testThreadStackSize, UINT8_MAX}, lambda,
372 std::ref(innerIdentifier), std::ref(sharedResult));
373 outerIdentifier = dynamicThread.getIdentifier();
374 const auto result = innerIdentifier != ThreadIdentifier{} && outerIdentifier != ThreadIdentifier{} &&
375 innerIdentifier == outerIdentifier;
376 if (dynamicThread.join() != 0 || result == false || sharedResult == false)
377 return false;
378 }
379 if (innerIdentifier != ThreadIdentifier{} || outerIdentifier != ThreadIdentifier{} ||
380 innerIdentifier != outerIdentifier) // both identifiers must no longer be valid, they must be equal
381 return false;
382 }
383
384 if (mallinfo().uordblks != allocatedMemory) // dynamic memory must be deallocated after each test phase
385 return false;
386
387 // test whether identifiers for different thread instances are not equal
388 {
389 using TestThread = decltype(makeStaticThread<testThreadStackSize>(1, emptyFunction));
390 constexpr size_t totalTestThreads {2};
391 TestThread testThreads[totalTestThreads]

Callers

nothing calls this directly

Calls 6

getIdentifierFunction · 0.85
setPriorityFunction · 0.85
getThreadMethod · 0.80
getIdentifierMethod · 0.45
joinMethod · 0.45

Tested by

no test coverage detected