diff --git a/.gitignore b/.gitignore
index 4b550b45..77faf521 100644
--- a/.gitignore
+++ b/.gitignore
@@ -258,3 +258,4 @@ build-test-Desktop_x86_windows_msvc2019_pe_32bit-Debug
test/vs2019/.vs
Corel Auto-Preserve
test/vs2019/Debug No Unit Tests
+test/kdevelopbuild
diff --git a/include/etl/variant_new.h b/include/etl/experimental/variant_new.h
similarity index 100%
rename from include/etl/variant_new.h
rename to include/etl/experimental/variant_new.h
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index caba0ea6..06121a05 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -173,7 +173,13 @@ add_executable(etl_tests
if(UNIX AND NOT APPLE)
# atomic is need on Linux with Clang
- target_link_libraries(etl_tests UnitTest++ atomic)
+ set(THREADS_PREFER_PTHREAD_FLAG ON)
+ find_package(Threads REQUIRED)
+ target_link_libraries(etl_tests UnitTest++ atomic Threads::Threads)
+elseif(NOT UNIX AND APPLE)
+ set(THREADS_PREFER_PTHREAD_FLAG ON)
+ find_package(Threads REQUIRED)
+ target_link_libraries(etl_tests UnitTest++)
else()
target_link_libraries(etl_tests UnitTest++)
endif()
diff --git a/test/codeblocks/ETL.cbp b/test/codeblocks/ETL.cbp
index 51483503..9d532038 100644
--- a/test/codeblocks/ETL.cbp
+++ b/test/codeblocks/ETL.cbp
@@ -63,6 +63,7 @@
+
@@ -97,6 +98,9 @@
+
+
+
diff --git a/test/test_atomic_gcc_sync.cpp b/test/test_atomic_gcc_sync.cpp
index ec6cee80..67ad4e93 100644
--- a/test/test_atomic_gcc_sync.cpp
+++ b/test/test_atomic_gcc_sync.cpp
@@ -32,6 +32,9 @@ SOFTWARE.
#include "etl/atomic/atomic_gcc_sync.h"
#include
+#include
+
+#define REALTIME_TEST 1
namespace
{
@@ -480,5 +483,44 @@ namespace
CHECK_EQUAL(compare_expected, test_expected);
CHECK_EQUAL(compare.load(), test.load());
}
+
+ //=========================================================================
+ #if REALTIME_TEST
+ etl::atomic_int32_t atomic_value = 0U;
+ etl::atomic atomic_flag = false;
+
+ void thread1()
+ {
+ while (!atomic_flag.load());
+
+ for (int i = 0; i < 10000000; ++i)
+ {
+ ++atomic_value;
+ }
+ }
+
+ void thread2()
+ {
+ while (!atomic_flag.load());
+
+ for (int i = 0; i < 10000000; ++i)
+ {
+ --atomic_value;
+ }
+ }
+
+ TEST(test_atomic_multi_thread)
+ {
+ std::thread t1(thread1);
+ std::thread t2(thread2);
+
+ atomic_flag.store(true);
+
+ t1.join();
+ t2.join();
+
+ CHECK_EQUAL(0, atomic_value.load());
+ }
+ #endif
};
}
diff --git a/test/test_atomic_std.cpp b/test/test_atomic_std.cpp
index d34d491d..ea98228b 100644
--- a/test/test_atomic_std.cpp
+++ b/test/test_atomic_std.cpp
@@ -32,6 +32,13 @@ SOFTWARE.
#include "etl/atomic/atomic_std.h"
#include
+#include
+
+#if defined(ETL_TARGET_OS_WINDOWS)
+ #include
+#endif
+
+#define REALTIME_TEST 1
namespace
{
@@ -480,5 +487,61 @@ namespace
CHECK_EQUAL(compare_expected, test_expected);
CHECK_EQUAL(compare.load(), test.load());
}
+
+ //=========================================================================
+#if REALTIME_TEST
+
+#if defined(ETL_TARGET_OS_WINDOWS) // Only Windows priority is currently supported
+ #define RAISE_THREAD_PRIORITY SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST)
+ #define FIX_PROCESSOR_AFFINITY1 SetThreadAffinityMask(GetCurrentThread(), 1)
+ #define FIX_PROCESSOR_AFFINITY2 SetThreadAffinityMask(GetCurrentThread(), 2)
+#else
+ #define RAISE_THREAD_PRIORITY
+ #define FIX_PROCESSOR_AFFINITY1
+ #define FIX_PROCESSOR_AFFINITY2
+#endif
+
+ etl::atomic_int32_t atomic_value = 0U;
+ etl::atomic start = false;
+
+ void thread1()
+ {
+ RAISE_THREAD_PRIORITY;
+ FIX_PROCESSOR_AFFINITY1;
+
+ while (!start.load());
+
+ for (int i = 0; i < 10000000; ++i)
+ {
+ ++atomic_value;
+ }
+ }
+
+ void thread2()
+ {
+ RAISE_THREAD_PRIORITY;
+ FIX_PROCESSOR_AFFINITY2;
+
+ while (!start.load());
+
+ for (int i = 0; i < 10000000; ++i)
+ {
+ --atomic_value;
+ }
+ }
+
+ TEST(test_atomic_multi_thread)
+ {
+ std::thread t1(thread1);
+ std::thread t2(thread2);
+
+ start.store(true);
+
+ t1.join();
+ t2.join();
+
+ CHECK_EQUAL(0, atomic_value.load());
+ }
+#endif
};
}
diff --git a/test/test_callback_timer.cpp b/test/test_callback_timer.cpp
index 7a047e6c..8aeb924b 100644
--- a/test/test_callback_timer.cpp
+++ b/test/test_callback_timer.cpp
@@ -55,6 +55,7 @@ namespace
public:
Test()
+ : p_controller(nullptr)
{
}
@@ -684,7 +685,8 @@ namespace
#define RAISE_THREAD_PRIORITY SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST)
#define FIX_PROCESSOR_AFFINITY SetThreadAffinityMask(GetCurrentThread(), 1);
#else
- #error No thread priority modifier defined
+ #define RAISE_THREAD_PRIORITY
+ #define FIX_PROCESSOR_AFFINITY
#endif
etl::callback_timer<3> controller;
diff --git a/test/test_message_timer.cpp b/test/test_message_timer.cpp
index a5eb6b1f..064ba063 100644
--- a/test/test_message_timer.cpp
+++ b/test/test_message_timer.cpp
@@ -601,7 +601,8 @@ namespace
#define RAISE_THREAD_PRIORITY SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST)
#define FIX_PROCESSOR_AFFINITY SetThreadAffinityMask(GetCurrentThread(), 1);
#else
- #error No thread priority modifier defined
+ #define RAISE_THREAD_PRIORITY
+ #define FIX_PROCESSOR_AFFINITY
#endif
etl::message_timer<3> controller;
diff --git a/test/test_queue_mpmc_mutex.cpp b/test/test_queue_mpmc_mutex.cpp
index 8b48555a..ed7fb3fe 100644
--- a/test/test_queue_mpmc_mutex.cpp
+++ b/test/test_queue_mpmc_mutex.cpp
@@ -41,7 +41,7 @@ SOFTWARE.
#if ETL_HAS_MUTEX
-#if defined(ETL_COMPILER_MICROSOFT)
+#if defined(ETL_TARGET_OS_WINDOWS)
#include
#endif
diff --git a/test/test_queue_mpmc_mutex_small.cpp b/test/test_queue_mpmc_mutex_small.cpp
index 2042841f..01a1d131 100644
--- a/test/test_queue_mpmc_mutex_small.cpp
+++ b/test/test_queue_mpmc_mutex_small.cpp
@@ -41,7 +41,7 @@ SOFTWARE.
#if ETL_HAS_MUTEX
-#if defined(ETL_COMPILER_MICROSOFT)
+#if defined(ETL_TARGET_OS_WINDOWS)
#include
#endif
diff --git a/test/test_queue_spsc_atomic.cpp b/test/test_queue_spsc_atomic.cpp
index 4534487a..f961aa80 100644
--- a/test/test_queue_spsc_atomic.cpp
+++ b/test/test_queue_spsc_atomic.cpp
@@ -38,7 +38,7 @@ SOFTWARE.
#if ETL_HAS_ATOMIC
-#if defined(ETL_COMPILER_MICROSOFT)
+#if defined(ETL_TARGET_OS_WINDOWS)
#include
#endif
diff --git a/test/test_queue_spsc_atomic_small.cpp b/test/test_queue_spsc_atomic_small.cpp
index 1f050c98..4a8ccc1d 100644
--- a/test/test_queue_spsc_atomic_small.cpp
+++ b/test/test_queue_spsc_atomic_small.cpp
@@ -38,7 +38,7 @@ SOFTWARE.
#if ETL_HAS_ATOMIC
-#if defined(ETL_COMPILER_MICROSOFT)
+#if defined(ETL_TARGET_OS_WINDOWS)
#include
#endif
diff --git a/test/test_queue_spsc_isr.cpp b/test/test_queue_spsc_isr.cpp
index 269cf5e0..a3433af4 100644
--- a/test/test_queue_spsc_isr.cpp
+++ b/test/test_queue_spsc_isr.cpp
@@ -571,12 +571,13 @@ namespace
}
//*************************************************************************
-#if REALTIME_TEST && defined(ETL_COMPILER_MICROSOFT)
+#if REALTIME_TEST
#if defined(ETL_TARGET_OS_WINDOWS) // Only Windows priority is currently supported
#define RAISE_THREAD_PRIORITY SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST)
#define FIX_PROCESSOR_AFFINITY SetThreadAffinityMask(GetCurrentThread(), 1);
#else
- #error No thread priority modifier defined
+ #define RAISE_THREAD_PRIORITY
+ #define FIX_PROCESSOR_AFFINITY
#endif
size_t ticks = 0;
diff --git a/test/test_queue_spsc_isr_small.cpp b/test/test_queue_spsc_isr_small.cpp
index 9a8efb5d..0dbc33f3 100644
--- a/test/test_queue_spsc_isr_small.cpp
+++ b/test/test_queue_spsc_isr_small.cpp
@@ -589,12 +589,13 @@ namespace
}
//*************************************************************************
-#if REALTIME_TEST && defined(ETL_COMPILER_MICROSOFT)
+#if REALTIME_TEST
#if defined(ETL_TARGET_OS_WINDOWS) // Only Windows priority is currently supported
#define RAISE_THREAD_PRIORITY SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST)
#define FIX_PROCESSOR_AFFINITY SetThreadAffinityMask(GetCurrentThread(), 1);
#else
- #error No thread priority modifier defined
+ #define RAISE_THREAD_PRIORITY
+ #define FIX_PROCESSOR_AFFINITY
#endif
size_t ticks = 0;
diff --git a/test/test_queue_spsc_locked.cpp b/test/test_queue_spsc_locked.cpp
index ff07d575..c0e14308 100644
--- a/test/test_queue_spsc_locked.cpp
+++ b/test/test_queue_spsc_locked.cpp
@@ -574,12 +574,13 @@ namespace
}
//*************************************************************************
-#if REALTIME_TEST && defined(ETL_COMPILER_MICROSOFT)
+#if REALTIME_TEST
#if defined(ETL_TARGET_OS_WINDOWS) // Only Windows priority is currently supported
#define RAISE_THREAD_PRIORITY SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST)
#define FIX_PROCESSOR_AFFINITY SetThreadAffinityMask(GetCurrentThread(), 1);
#else
- #error No thread priority modifier defined
+ #define RAISE_THREAD_PRIORITY
+ #define FIX_PROCESSOR_AFFINITY
#endif
size_t ticks = 0;
diff --git a/test/test_queue_spsc_locked_small.cpp b/test/test_queue_spsc_locked_small.cpp
index 6f58bd05..b8bdbb94 100644
--- a/test/test_queue_spsc_locked_small.cpp
+++ b/test/test_queue_spsc_locked_small.cpp
@@ -34,7 +34,7 @@ SOFTWARE.
#include
#include
-#if defined(ETL_COMPILER_MICROSOFT)
+#if defined(ETL_TARGET_OS_WINDOWS)
#include
#endif
@@ -591,12 +591,13 @@ namespace
}
//*************************************************************************
-#if REALTIME_TEST && defined(ETL_COMPILER_MICROSOFT)
- #if defined(ETL_TARGET_OS_WINDOWS) // Only Windows priority is currently supported
+#if REALTIME_TEST
+#if defined(ETL_TARGET_OS_WINDOWS) // Only Windows priority is currently supported
#define RAISE_THREAD_PRIORITY SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST)
#define FIX_PROCESSOR_AFFINITY SetThreadAffinityMask(GetCurrentThread(), 1);
#else
- #error No thread priority modifier defined
+ #define RAISE_THREAD_PRIORITY
+ #define FIX_PROCESSOR_AFFINITY
#endif
size_t ticks = 0;