From c3fbc6cec7c687850712df231c78edc9d48066dc Mon Sep 17 00:00:00 2001 From: Antonio Sanchez Date: Wed, 17 Mar 2021 14:18:50 -0700 Subject: Use singleton pattern for static registered tests. The original fails with nvcc+msvc - there's a static order of initialization issue leading to registered tests being cleared. The test then fails on ``` VERIFY(EigenTest::all().size()>0); ``` since `EigenTest` no longer contains any tests. The singleton pattern fixes this. --- test/main.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'test') diff --git a/test/main.h b/test/main.h index 3e80c9f7d..07f3794ac 100644 --- a/test/main.h +++ b/test/main.h @@ -177,20 +177,22 @@ namespace Eigen EigenTest(const char* a_name, void (*func)(void)) : m_name(a_name), m_func(func) { - ms_registered_tests.push_back(this); + get_registered_tests().push_back(this); } const std::string& name() const { return m_name; } void operator()() const { m_func(); } - static const std::vector& all() { return ms_registered_tests; } + static const std::vector& all() { return get_registered_tests(); } protected: + static std::vector& get_registered_tests() + { + static std::vector* ms_registered_tests = new std::vector(); + return *ms_registered_tests; + } std::string m_name; void (*m_func)(void); - static std::vector ms_registered_tests; }; - std::vector EigenTest::ms_registered_tests; - // Declare and register a test, e.g.: // EIGEN_DECLARE_TEST(mytest) { ... } // will create a function: -- cgit v1.2.3