diff options
| -rw-r--r-- | src/syncedsettings.h | 12 | ||||
| -rw-r--r-- | test/syncedsettings.cc | 109 | 
2 files changed, 76 insertions, 45 deletions
| diff --git a/src/syncedsettings.h b/src/syncedsettings.h index b72229e..aa43cc0 100644 --- a/src/syncedsettings.h +++ b/src/syncedsettings.h @@ -60,18 +60,6 @@ public:  	{  	} -	Group(T const& data) -		: mutex{} -		, data{data} -	{ -	} - -	Group(T&& data) -		: mutex{} -		, data{std::move(data)} -	{ -	} -  	Group(Group<T> const& other)  		: mutex{}  		, data{} diff --git a/test/syncedsettings.cc b/test/syncedsettings.cc index a04c870..7de7c42 100644 --- a/test/syncedsettings.cc +++ b/test/syncedsettings.cc @@ -34,8 +34,6 @@ class SyncedSettingsTest  	CPPUNIT_TEST_SUITE(SyncedSettingsTest);  	CPPUNIT_TEST(groupCanBeDefaultInitialized);  	CPPUNIT_TEST(groupDataCanBeCopied); -	CPPUNIT_TEST(groupCanBeCreatedByReference); -	CPPUNIT_TEST(groupCanBeCreatedByRvalueReference);  	CPPUNIT_TEST(accessorCanGetFields);  	CPPUNIT_TEST(accessorCanSetFields); @@ -44,6 +42,8 @@ class SyncedSettingsTest  	CPPUNIT_TEST(groupHasMoveCtor);  	CPPUNIT_TEST(groupHasCopyAssignOp);  	CPPUNIT_TEST(groupHasMoveAssignOp); +	 +	CPPUNIT_TEST(mimicRealUse);  	CPPUNIT_TEST_SUITE_END();  	private: @@ -66,18 +66,14 @@ class SyncedSettingsTest  			(TestData)data; // copies  		} -		void groupCanBeCreatedByReference() { -			TestData tmp{3.f, false, "hello"}; -			Group<TestData> data{tmp}; -			TestData copy = data; -			CPPUNIT_ASSERT_EQUAL(copy.foo, 3.f); -			CPPUNIT_ASSERT_EQUAL(copy.bar, false); -			CPPUNIT_ASSERT_EQUAL(copy.msg, std::string{"hello"}); -		} -		 -		void groupCanBeCreatedByRvalueReference() { -			TestData tmp{3.f, false, "hello"}; -			Group<TestData> data{std::move(tmp)}; +		void accessorCanSetFields() { +			Group<TestData> data; +			{ +				Accessor<TestData> a{data}; +				a.data.foo = 3.f; +				a.data.bar = false; +				a.data.msg = "hello"; +			}  			TestData copy = data;  			CPPUNIT_ASSERT_EQUAL(copy.foo, 3.f);  			CPPUNIT_ASSERT_EQUAL(copy.bar, false); @@ -85,26 +81,22 @@ class SyncedSettingsTest  		}  		void accessorCanGetFields() { -			TestData tmp{3.f, false, "hello"}; -			Group<TestData> data{tmp}; -			Accessor<TestData> a{data}; -			CPPUNIT_ASSERT_EQUAL(a.data.foo, 3.f); -			CPPUNIT_ASSERT_EQUAL(a.data.bar, false); -			CPPUNIT_ASSERT_EQUAL(a.data.msg, std::string{"hello"}); -		} -		 -		void accessorCanSetFields() {  			Group<TestData> data; -			Accessor<TestData> a{data}; -			a.data.foo = 3.f; -			a.data.bar = false; -			a.data.msg = "hello"; -			TestData copy = data; -			CPPUNIT_ASSERT_EQUAL(copy.foo, 3.f); -			CPPUNIT_ASSERT_EQUAL(copy.bar, false); -			CPPUNIT_ASSERT_EQUAL(copy.msg, std::string{"hello"}); +			{ +				Accessor<TestData> a{data}; +				a.data.foo = 3.f; +				a.data.bar = false; +				a.data.msg = "hello"; +			} +			// now read +			{ +				Accessor<TestData> a{data}; +				CPPUNIT_ASSERT_EQUAL(a.data.foo, 3.f); +				CPPUNIT_ASSERT_EQUAL(a.data.bar, false); +				CPPUNIT_ASSERT_EQUAL(a.data.msg, std::string{"hello"}); +			}  		} -	 +		  		void groupHasCopyCtor() {  			Group<TestData> tmp;  			{ @@ -165,7 +157,58 @@ class SyncedSettingsTest  			CPPUNIT_ASSERT_EQUAL(copy.msg, std::string{"hello"});  		} -		// todo: further testing +		void mimicRealUse() { +			struct Settings { +				struct Foo { +					int a, b; +					bool enabled; +				}; +				struct Bar { +					float a, b; +					bool enabled; +				}; +				struct Idk { +					std::string label; +					float bla; +				}; +				 +				Group<Foo> foo; +				Group<Bar> bar; +				Group<Idk> idk; +			}; +			 +			Settings s; +			 +			// set some settings +			{ +				Accessor<Settings::Foo> tmp{s.foo}; +				tmp.data.enabled = true; +				tmp.data.a = 3; +			} +			{ +				Accessor<Settings::Bar> tmp{s.bar}; +				tmp.data.enabled = false; +				tmp.data.a = 0.f; +				tmp.data.b = 0.f; +			} +			{ +				Accessor<Settings::Idk> tmp{s.idk}; +				tmp.data.label = "hello world"; +				tmp.data.bla = 3.14f; +			} +			 +			// read some settings +			{ +				Accessor<Settings::Foo> tmp{s.foo}; +				if (tmp.data.enabled) { +					// do some while locked +				} +			} +			Settings::Bar copy = s.bar; +			if (copy.enabled) { +				// do some stuff without locking +			} +		}  };  // Registers the fixture into the 'registry' | 
