threadTest.cpp
Engine/source/platform/threads/test/threadTest.cpp
Detailed Description
1 2//----------------------------------------------------------------------------- 3// Copyright (c) 2014 GarageGames, LLC 4// 5// Permission is hereby granted, free of charge, to any person obtaining a copy 6// of this software and associated documentation files (the "Software"), to 7// deal in the Software without restriction, including without limitation the 8// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 9// sell copies of the Software, and to permit persons to whom the Software is 10// furnished to do so, subject to the following conditions: 11// 12// The above copyright notice and this permission notice shall be included in 13// all copies or substantial portions of the Software. 14// 15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21// IN THE SOFTWARE. 22//----------------------------------------------------------------------------- 23 24#ifdef TORQUE_TESTS_ENABLED 25#include "testing/unitTesting.h" 26#include "platform/threads/thread.h" 27 28TEST(Thread, CallbackAPI) 29{ 30#define VALUE_TO_SET 10 31 32 // This struct exists just so we can define run as a local function. 33 struct thread 34 { 35 // Do some work we can observe. 36 static void body(void* arg) 37 { 38 U32* value = reinterpret_cast<U32*>(arg); 39 *value = VALUE_TO_SET; 40 } 41 }; 42 43 // Test most basic Thread API functions. 44 U32 value = ~VALUE_TO_SET; 45 Thread thread(&thread::body, reinterpret_cast<void*>(&value)); 46 thread.start(); 47 EXPECT_TRUE(thread.isAlive()); 48 thread.join(); 49 EXPECT_FALSE(thread.isAlive()); 50 51 EXPECT_EQ(value, VALUE_TO_SET) 52 << "Thread did not set expected value!"; 53 54#undef VALUE_TO_SET 55} 56 57TEST(Thread, InheritanceAPI) 58{ 59#define VALUE_TO_SET 10 60 61 // This struct exists just so we can define run as a local function. 62 struct thread : public Thread 63 { 64 U32* mPtr; 65 thread(U32* ptr): mPtr(ptr) {} 66 67 // Do some work we can observe. 68 virtual void run(void*) 69 { 70 *mPtr = VALUE_TO_SET; 71 } 72 }; 73 74 // Test most basic Thread API functions. 75 U32 value = ~VALUE_TO_SET; 76 thread thread(&value); 77 thread.start(); 78 EXPECT_TRUE(thread.isAlive()); 79 thread.join(); 80 EXPECT_FALSE(thread.isAlive()); 81 82 EXPECT_EQ(value, VALUE_TO_SET) 83 << "Thread did not set expected value!"; 84 85#undef VALUE_TO_SET 86} 87 88#endif 89