From d0d4b51651dd5a10f05844bbcf41f87c62567673 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sat, 14 Oct 2017 13:54:00 +0200 Subject: Remove atomic POD tests for datatypes bigger than machine size (Thanks to James Cowgill for pointing this out). --- src/settings.h | 6 +- test/atomictest.cc | 189 ++++++++++++++++++++++++++++------------------------- 2 files changed, 102 insertions(+), 93 deletions(-) diff --git a/src/settings.h b/src/settings.h index 89f898c..0b73cf2 100644 --- a/src/settings.h +++ b/src/settings.h @@ -77,7 +77,7 @@ struct Settings Atomic enable_velocity_randomiser{false}; Atomic velocity_randomiser_weight{0.1f}; - Atomic samplerate{44100.0}; + Atomic samplerate{44100.0}; Atomic buffer_size{1024}; // Only used to show in the UI. Atomic enable_resampling{true}; @@ -117,7 +117,7 @@ struct SettingsGetter SettingRef enable_velocity_randomiser; SettingRef velocity_randomiser_weight; - SettingRef samplerate; + SettingRef samplerate; SettingRef buffer_size; SettingRef enable_resampling; @@ -189,7 +189,7 @@ public: Notifier enable_velocity_randomiser; Notifier velocity_randomiser_weight; - Notifier samplerate; + Notifier samplerate; Notifier buffer_size; Notifier enable_resampling; diff --git a/test/atomictest.cc b/test/atomictest.cc index 89c0295..9d2220c 100644 --- a/test/atomictest.cc +++ b/test/atomictest.cc @@ -29,8 +29,8 @@ #include class AtomicTest - : public CppUnit::TestFixture { - + : public CppUnit::TestFixture +{ CPPUNIT_TEST_SUITE(AtomicTest); CPPUNIT_TEST(podAtomicsUseStandardImpl); CPPUNIT_TEST(nonPodAtomicsUseOwnImpl); @@ -42,95 +42,104 @@ class AtomicTest CPPUNIT_TEST(nonPodAtomicCanBeValueAssigned); CPPUNIT_TEST(podAtomicsAreLockFree); CPPUNIT_TEST_SUITE_END(); - - public: - void setUp() {} - void tearDown() {} - - void podAtomicsUseStandardImpl() { - CPPUNIT_ASSERT(isUsingStandardImpl()); - CPPUNIT_ASSERT(isUsingStandardImpl()); - CPPUNIT_ASSERT(isUsingStandardImpl()); - CPPUNIT_ASSERT(isUsingStandardImpl()); - CPPUNIT_ASSERT(isUsingStandardImpl()); - CPPUNIT_ASSERT(isUsingStandardImpl()); - CPPUNIT_ASSERT(isUsingStandardImpl()); - CPPUNIT_ASSERT(isUsingStandardImpl()); - CPPUNIT_ASSERT(isUsingStandardImpl()); - CPPUNIT_ASSERT(isUsingStandardImpl()); - CPPUNIT_ASSERT(isUsingStandardImpl()); - CPPUNIT_ASSERT(isUsingStandardImpl()); - } - - void nonPodAtomicsUseOwnImpl() { - CPPUNIT_ASSERT(!isUsingStandardImpl()); - } - - void podAtomicCanBeDefaultInitialized() { - Atomic i; - // note: i is initialized with garbage - (void)i; // prevent compiler 'unused' warning - } - - void nonPodAtomicCanBeDefaultInitialized() { - Atomic s; - CPPUNIT_ASSERT_EQUAL(s.load(), std::string{}); - } - - void podAtomicCanBeValueInitialized() { - Atomic i{5}; - CPPUNIT_ASSERT_EQUAL(i.load(), 5); - } - - void nonPodAtomicCanBeValueInitialized() { - Atomic s{"hello world"}; - CPPUNIT_ASSERT_EQUAL(s.load(), std::string{"hello world"}); - } - - void podAtomicCanBeValueAssigned() { - Atomic i; - i = 5; - CPPUNIT_ASSERT_EQUAL(i.load(), 5); - } - - void nonPodAtomicCanBeValueAssigned() { - Atomic s; - s = "hello world"; - CPPUNIT_ASSERT_EQUAL(s.load(), std::string{"hello world"}); - } - - void podAtomicsAreLockFree() { - CPPUNIT_ASSERT(isLockFree()); - CPPUNIT_ASSERT(isLockFree()); - CPPUNIT_ASSERT(isLockFree()); - CPPUNIT_ASSERT(isLockFree()); - CPPUNIT_ASSERT(isLockFree()); - CPPUNIT_ASSERT(isLockFree()); - CPPUNIT_ASSERT(isLockFree()); - CPPUNIT_ASSERT(isLockFree()); - CPPUNIT_ASSERT(isLockFree()); - CPPUNIT_ASSERT(isLockFree()); - CPPUNIT_ASSERT(isLockFree()); - - // compile error: undefined reference to `__atomic_is_lock_free' - //CPPUNIT_ASSERT(isLockFree()); - } - - // todo: further testing - - private: - template - bool isUsingStandardImpl() { - return std::is_base_of, Atomic>::value; - } - - template - bool isLockFree() { - Atomic a; - return a.is_lock_free(); - } + +public: + void setUp() {} + void tearDown() {} + + void podAtomicsUseStandardImpl() + { + CPPUNIT_ASSERT(isUsingStandardImpl()); + CPPUNIT_ASSERT(isUsingStandardImpl()); + CPPUNIT_ASSERT(isUsingStandardImpl()); + CPPUNIT_ASSERT(isUsingStandardImpl()); + CPPUNIT_ASSERT(isUsingStandardImpl()); + CPPUNIT_ASSERT(isUsingStandardImpl()); + CPPUNIT_ASSERT(isUsingStandardImpl()); + CPPUNIT_ASSERT(isUsingStandardImpl()); + CPPUNIT_ASSERT(isUsingStandardImpl()); + CPPUNIT_ASSERT(isUsingStandardImpl()); + CPPUNIT_ASSERT(isUsingStandardImpl()); + CPPUNIT_ASSERT(isUsingStandardImpl()); + } + + void nonPodAtomicsUseOwnImpl() + { + CPPUNIT_ASSERT(!isUsingStandardImpl()); + } + + void podAtomicCanBeDefaultInitialized() + { + Atomic i; + // note: i is initialized with garbage + (void)i; // prevent compiler 'unused' warning + } + + void nonPodAtomicCanBeDefaultInitialized() + { + Atomic s; + CPPUNIT_ASSERT_EQUAL(s.load(), std::string{}); + } + + void podAtomicCanBeValueInitialized() + { + Atomic i{5}; + CPPUNIT_ASSERT_EQUAL(i.load(), 5); + } + + void nonPodAtomicCanBeValueInitialized() + { + Atomic s{"hello world"}; + CPPUNIT_ASSERT_EQUAL(s.load(), std::string{"hello world"}); + } + + void podAtomicCanBeValueAssigned() + { + Atomic i; + i = 5; + CPPUNIT_ASSERT_EQUAL(i.load(), 5); + } + + void nonPodAtomicCanBeValueAssigned() + { + Atomic s; + s = "hello world"; + CPPUNIT_ASSERT_EQUAL(s.load(), std::string{"hello world"}); + } + + void podAtomicsAreLockFree() + { + CPPUNIT_ASSERT(isLockFree()); + CPPUNIT_ASSERT(isLockFree()); + CPPUNIT_ASSERT(isLockFree()); + CPPUNIT_ASSERT(isLockFree()); + CPPUNIT_ASSERT(isLockFree()); + CPPUNIT_ASSERT(isLockFree()); + CPPUNIT_ASSERT(isLockFree()); + CPPUNIT_ASSERT(isLockFree()); + CPPUNIT_ASSERT(isLockFree()); + + // NOTE: Not lock free on small systems + //CPPUNIT_ASSERT(isLockFree()); + //CPPUNIT_ASSERT(isLockFree()); + //CPPUNIT_ASSERT(isLockFree()); + //CPPUNIT_ASSERT(isLockFree()); + } + +private: + template + bool isUsingStandardImpl() + { + return std::is_base_of, Atomic>::value; + } + + template + bool isLockFree() + { + Atomic a; + return a.is_lock_free(); + } }; // Registers the fixture into the 'registry' CPPUNIT_TEST_SUITE_REGISTRATION(AtomicTest); - -- cgit v1.2.3