From: Mehdi Amini Date: Tue, 15 Dec 2015 09:10:25 +0000 (+0000) Subject: ThreadPool unittest: add a rough mechanism to mark UNSUPPORTED on a given platform X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=41f711c3a3f887b558c7816531fea228a60d207d;hp=56a8a2731eae03b594ba10c0a52bc5dbb15f820f ThreadPool unittest: add a rough mechanism to mark UNSUPPORTED on a given platform From: Mehdi Amini git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255632 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/unittests/Support/ThreadPool.cpp b/unittests/Support/ThreadPool.cpp index 5457cdc1c68..118884134ea 100644 --- a/unittests/Support/ThreadPool.cpp +++ b/unittests/Support/ThreadPool.cpp @@ -10,6 +10,10 @@ #include "llvm/Support/ThreadPool.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/Triple.h" +#include "llvm/Support/Host.h" +#include "llvm/Support/TargetSelect.h" #include "gtest/gtest.h" @@ -27,7 +31,47 @@ static void yield() { #endif } -TEST(ThreadPoolTest, AsyncBarrier) { +// Fixture for the unittests, allowing to *temporarily* disable the unittests +// on a particular platform +class ThreadPoolTest : public testing::Test { + Triple Host; + SmallVector UnsupportedArchs; + SmallVector UnsupportedOSs; + SmallVector UnsupportedEnvironments; +protected: + // This is intended for platform as a temporary "XFAIL" + bool isUnsupportedOSOrEnvironment() { + Triple Host(Triple::normalize(sys::getProcessTriple())); + + if (std::find(UnsupportedEnvironments.begin(), UnsupportedEnvironments.end(), + Host.getEnvironment()) != UnsupportedEnvironments.end()) + return true; + + if (std::find(UnsupportedOSs.begin(), UnsupportedOSs.end(), Host.getOS()) + != UnsupportedOSs.end()) + return true; + + if (std::find(UnsupportedArchs.begin(), UnsupportedArchs.end(), Host.getArch()) + != UnsupportedArchs.end()) + return true; + + return false; + } + + ThreadPoolTest() { + // Add unsupported configuration here, example: + // UnsupportedArchs.push_back(Triple::x86_64); + } +}; + +#define CHECK_UNSUPPORTED() \ + do { \ + if (isUnsupportedOSOrEnvironment()) \ + return; \ + } while (0); \ + +TEST_F(ThreadPoolTest, AsyncBarrier) { + CHECK_UNSUPPORTED(); // test that async & barrier work together properly. std::atomic_int checked_in{0}; @@ -46,7 +90,8 @@ TEST(ThreadPoolTest, AsyncBarrier) { static void TestFunc(std::atomic_int &checked_in, int i) { checked_in += i; } -TEST(ThreadPoolTest, AsyncBarrierArgs) { +TEST_F(ThreadPoolTest, AsyncBarrierArgs) { + CHECK_UNSUPPORTED(); // Test that async works with a function requiring multiple parameters. std::atomic_int checked_in{0}; @@ -58,7 +103,8 @@ TEST(ThreadPoolTest, AsyncBarrierArgs) { ASSERT_EQ(10, checked_in); } -TEST(ThreadPoolTest, Async) { +TEST_F(ThreadPoolTest, Async) { + CHECK_UNSUPPORTED(); ThreadPool Pool; std::atomic_int i{0}; // sleep here just to ensure that the not-equal is correct. @@ -72,7 +118,8 @@ TEST(ThreadPoolTest, Async) { ASSERT_EQ(2, i.load()); } -TEST(ThreadPoolTest, GetFuture) { +TEST_F(ThreadPoolTest, GetFuture) { + CHECK_UNSUPPORTED(); ThreadPool Pool; std::atomic_int i{0}; // sleep here just to ensure that the not-equal is correct. @@ -87,7 +134,8 @@ TEST(ThreadPoolTest, GetFuture) { ASSERT_EQ(2, i.load()); } -TEST(ThreadPoolTest, PoolDestruction) { +TEST_F(ThreadPoolTest, PoolDestruction) { + CHECK_UNSUPPORTED(); // Test that we are waiting on destruction std::atomic_int checked_in{0};