From dfd3e65ba486450de388f9fa2da97e1f0a442fa2 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Thu, 13 Jul 2023 17:16:50 -0500 Subject: [PATCH] gtest tweaks refactor concurency test conu=sumer thread runner to generate timeouts at excessive attempts (32ms*runlength) threadsafefreelist reporting augs scripttest object name conflict resolutions skip testing platform window creation if no monitor was found --- Engine/source/console/test/ScriptTest.cpp | 12 +++---- .../threads/test/threadSafeDequeTest.cpp | 33 +++++++++++-------- .../test/threadSafePriorityQueueTest.cpp | 4 +-- .../platform/threads/threadSafeFreeList.h | 2 +- .../windowManager/test/windowManagerTest.cpp | 5 ++- 5 files changed, 32 insertions(+), 24 deletions(-) diff --git a/Engine/source/console/test/ScriptTest.cpp b/Engine/source/console/test/ScriptTest.cpp index f86368cea..1ef168b91 100644 --- a/Engine/source/console/test/ScriptTest.cpp +++ b/Engine/source/console/test/ScriptTest.cpp @@ -443,7 +443,7 @@ TEST(Script, ForEachLoop) %count = 0; foreach (%obj in %this) { - if (%obj.getName() $= "A") + if (%obj.getName() $= "A_FEC") continue; %count++; @@ -454,7 +454,7 @@ TEST(Script, ForEachLoop) function a() { %set = new SimSet(); - %set.add(new SimObject(A)); + %set.add(new SimObject(A_FEC)); %set.add(new SimObject()); %set.add(new SimObject()); @@ -471,7 +471,7 @@ TEST(Script, ForEachLoop) { foreach (%obj in %this) { - if (%obj.getName() $= "A") + if (%obj.getName() $= "A_FER") return 76; } return 0; @@ -480,7 +480,7 @@ TEST(Script, ForEachLoop) function a() { %set = new SimSet(); - %set.add(new SimObject(A)); + %set.add(new SimObject(A_FER)); %set.add(new SimObject()); %set.add(new SimObject()); @@ -499,7 +499,7 @@ TEST(Script, ForEachLoop) { foreach (%innerObj in %this) { - if (%innerObj.getName() $= "A") + if (%innerObj.getName() $= "A_FENR") return 42; } } @@ -509,7 +509,7 @@ TEST(Script, ForEachLoop) function a() { %set = new SimSet(); - %set.add(new SimObject(A)); + %set.add(new SimObject(A_FENR)); %set.add(new SimObject()); %set.add(new SimObject()); diff --git a/Engine/source/platform/threads/test/threadSafeDequeTest.cpp b/Engine/source/platform/threads/test/threadSafeDequeTest.cpp index 3559ebd13..d434bf4d9 100644 --- a/Engine/source/platform/threads/test/threadSafeDequeTest.cpp +++ b/Engine/source/platform/threads/test/threadSafeDequeTest.cpp @@ -91,18 +91,6 @@ public: ValueRef val = new Value(i, tick); mDeque.pushBack(val); } - - // WORKAROUND: due to a bug in the Deque, we lose an item, and thus the test will loop forever. We currently - // don't have a timeout solution, so instead push som extra elements just to make sure Consumer - // doesn't get stuck. - for(U32 i = mValues.size(); i < mValues.size() + 5; i++) - { - U32 tick = Platform::getRealMilliseconds(); - - ValueRef val = new Value(i, tick); - - mDeque.pushBack(val); - } } }; @@ -115,10 +103,27 @@ public: virtual void run(void*) { - for(U32 i = 0; i < mValues.size(); i++) + S32 timeOut = mValues.size() * 32; + U32 endTime = Platform::getRealMilliseconds() + timeOut; + + for (U32 i = 0; i < mValues.size(); i++) { ValueRef value; - while(!mDeque.tryPopFront(value)); + bool timedOut = false; + while (!mDeque.tryPopFront(value)) + { + if (timeOut && Platform::getRealMilliseconds() >= endTime) + { + timedOut = true; + break; + } + }; + + ASSERT_FALSE(timedOut) + << "consumer thread timed out!"; + + if (timedOut) return; + EXPECT_EQ(i, value->mIndex); EXPECT_EQ(value->mTick, mValues[i]); } diff --git a/Engine/source/platform/threads/test/threadSafePriorityQueueTest.cpp b/Engine/source/platform/threads/test/threadSafePriorityQueueTest.cpp index 668117633..3a241a3b9 100644 --- a/Engine/source/platform/threads/test/threadSafePriorityQueueTest.cpp +++ b/Engine/source/platform/threads/test/threadSafePriorityQueueTest.cpp @@ -35,7 +35,7 @@ TEST(ThreadSafePriorityQueue, Serial) const U32 len = 11; U32 indices[len] = { 2, 7, 4, 6, 1, 5, 3, 8, 6, 9, 0}; - F32 priorities[len] = {0.2, 0.7, 0.4, 0.6, 0.1, 0.5, 0.3, 0.8, 0.6, 0.9, 0}; + F32 priorities[len] = {0.2f, 0.7f, 0.4f, 0.6f, 0.1f, 0.5f, 0.3f, 0.8f, 0.6f, 0.9f, 0.0f}; ThreadSafePriorityQueue minQueue; ThreadSafePriorityQueue maxQueue; @@ -92,7 +92,7 @@ TEST(ThreadSafePriorityQueue, Concurrent) virtual void run(void*) { U32 indices[LEN] = { 2, 7, 4, 6, 1, 5, 3, 8, 6, 9, 0}; - F32 priorities[LEN] = {0.2, 0.7, 0.4, 0.6, 0.1, 0.5, 0.3, 0.8, 0.6, 0.9, 0}; + F32 priorities[LEN] = {0.2f, 0.7f, 0.4f, 0.6f, 0.1f, 0.5f, 0.3f, 0.8f, 0.6f, 0.9f, 0.0f}; for(U32 i = 0; i < LEN; i++) { diff --git a/Engine/source/platform/threads/threadSafeFreeList.h b/Engine/source/platform/threads/threadSafeFreeList.h index bb34e6bbe..c657b9847 100644 --- a/Engine/source/platform/threads/threadSafeFreeList.h +++ b/Engine/source/platform/threads/threadSafeFreeList.h @@ -85,7 +85,7 @@ class ThreadSafeFreeList { #ifdef TORQUE_DEBUG AssertWarn( mNumNodesTotal == mNumNodesFree, - "ThreadSafeFreeList::~ThreadSafeFreeList() - still got live instances" ); + avar("ThreadSafeFreeList::~ThreadSafeFreeList() - still got live instances:[%i/%i]", mNumNodesTotal,mNumNodesFree) ); #endif // Destroy remaining nodes. Not synchronized. We assume all diff --git a/Engine/source/windowManager/test/windowManagerTest.cpp b/Engine/source/windowManager/test/windowManagerTest.cpp index d6179c96b..e0fe5712b 100644 --- a/Engine/source/windowManager/test/windowManagerTest.cpp +++ b/Engine/source/windowManager/test/windowManagerTest.cpp @@ -29,6 +29,9 @@ TEST(WinMgr, BasicAPI) { PlatformWindowManager *pwm = CreatePlatformWindowManager(); + ASSERT_TRUE(pwm) + << "no monitor to test against!"; + // Check out the primary desktop area... RectI primary = pwm->getPrimaryDesktopArea(); @@ -55,4 +58,4 @@ TEST(WinMgr, BasicAPI) // No way to destroy the window manager. }; -#endif \ No newline at end of file +#endif