diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/crepe/util/Proxy.h | 2 | ||||
| -rw-r--r-- | src/crepe/util/Proxy.hpp | 6 | ||||
| -rw-r--r-- | src/example/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/example/log.cpp | 28 | ||||
| -rw-r--r-- | src/example/proxy.cpp | 45 | ||||
| -rw-r--r-- | src/example/script.cpp | 49 | ||||
| -rw-r--r-- | src/test/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/test/ValueBrokerTest.cpp | 64 | 
8 files changed, 73 insertions, 125 deletions
| diff --git a/src/crepe/util/Proxy.h b/src/crepe/util/Proxy.h index b34f7c6..789144a 100644 --- a/src/crepe/util/Proxy.h +++ b/src/crepe/util/Proxy.h @@ -16,6 +16,8 @@ template <typename T>  class Proxy {  public:  	//! Set operator +	Proxy & operator=(Proxy &); +	//! Set operator  	Proxy & operator=(const T &);  	//! Get operator  	operator const T &(); diff --git a/src/crepe/util/Proxy.hpp b/src/crepe/util/Proxy.hpp index b9923db..ef2b69f 100644 --- a/src/crepe/util/Proxy.hpp +++ b/src/crepe/util/Proxy.hpp @@ -14,6 +14,12 @@ Proxy<T> & Proxy<T>::operator=(const T & val) {  }  template <typename T> +Proxy<T> & Proxy<T>::operator=(Proxy & proxy) { +	this->broker.set(T(proxy)); +	return *this; +} + +template <typename T>  Proxy<T>::operator const T &() {  	return this->broker.get();  } diff --git a/src/example/CMakeLists.txt b/src/example/CMakeLists.txt index 30432e5..f21bd24 100644 --- a/src/example/CMakeLists.txt +++ b/src/example/CMakeLists.txt @@ -17,13 +17,10 @@ function(add_example target_name)  endfunction()  add_example(audio_internal) -add_example(script) -add_example(log)  add_example(rendering)  add_example(asset_manager)  add_example(physics)  add_example(savemgr) -add_example(proxy)  add_example(db)  add_example(particles)  add_example(gameloop) diff --git a/src/example/log.cpp b/src/example/log.cpp deleted file mode 100644 index 5baa021..0000000 --- a/src/example/log.cpp +++ /dev/null @@ -1,28 +0,0 @@ -/** \file - *  - * Standalone example for usage of the logging functions - */ - -#include <crepe/api/Config.h> -#include <crepe/util/Log.h> - -using namespace crepe; - -// unrelated setup code -int _ = []() { -	// make sure all log messages get printed -	auto & cfg = Config::get_instance(); -	cfg.log.level = Log::Level::TRACE; - -	return 0; // satisfy compiler -}(); - -int main() { -	dbg_trace(); -	dbg_log("debug message"); -	Log::logf("info message with variable: {}", 3); -	Log::logf(Log::Level::WARNING, "warning"); -	Log::logf(Log::Level::ERROR, "error"); - -	return 0; -} diff --git a/src/example/proxy.cpp b/src/example/proxy.cpp deleted file mode 100644 index 69451f8..0000000 --- a/src/example/proxy.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/** \file - *  - * Standalone example for usage of the proxy type - */ - -#include <crepe/ValueBroker.h> -#include <crepe/api/Config.h> -#include <crepe/util/Log.h> -#include <crepe/util/Proxy.h> - -using namespace std; -using namespace crepe; - -void test_ro_ref(const int & val) {} -void test_rw_ref(int & val) {} -void test_ro_val(int val) {} - -int main() { -	auto & cfg = Config::get_instance(); -	cfg.log.level = Log::Level::DEBUG; - -	int real_value = 0; - -	ValueBroker<int> broker{ -		[&real_value](const int & target) { -			dbg_logf("set {} to {}", real_value, target); -			real_value = target; -		}, -		[&real_value]() -> const int & { -			dbg_logf("get {}", real_value); -			return real_value; -		}, -	}; - -	Proxy<int> proxy{broker}; - -	broker.set(54); -	proxy = 84; - -	test_ro_ref(proxy); // this is allowed -	// test_rw_ref(proxy); // this should throw a compile error -	test_ro_val(proxy); - -	return 0; -} diff --git a/src/example/script.cpp b/src/example/script.cpp deleted file mode 100644 index a23295b..0000000 --- a/src/example/script.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/** \file - *  - * Standalone example for usage of the script component and system - */ - -#include <crepe/ComponentManager.h> -#include <crepe/system/ScriptSystem.h> -#include <crepe/util/Log.h> - -#include <crepe/api/BehaviorScript.h> -#include <crepe/api/Config.h> -#include <crepe/api/GameObject.h> -#include <crepe/api/Script.h> -#include <crepe/api/Transform.h> - -using namespace crepe; -using namespace std; - -// Unrelated stuff that is not part of this POC -int _ = []() { -	// Show dbg_trace() output -	auto & cfg = Config::get_instance(); -	cfg.log.level = Log::Level::TRACE; - -	return 0; // satisfy compiler -}(); - -// User-defined script: -class MyScript : public Script { -	void update() { -		// Retrieve component from the same GameObject this script is on -		Transform & test = get_component<Transform>(); -		dbg_logf("Transform({:.2f}, {:.2f})", test.position.x, test.position.y); -	} -}; - -int main() { -	ComponentManager component_manager{}; -	ScriptSystem system{component_manager}; - -	// Create game object with Transform and BehaviorScript components -	GameObject obj = component_manager.new_object("name"); -	obj.add_component<BehaviorScript>().set_script<MyScript>(); - -	// Update all scripts. This should result in MyScript::update being called -	system.update(); - -	return EXIT_SUCCESS; -} diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index d56d80f..c1f935d 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -5,5 +5,6 @@ target_sources(test_main PUBLIC  	ParticleTest.cpp  	ECSTest.cpp  	SceneManagerTest.cpp +	ValueBrokerTest.cpp  ) diff --git a/src/test/ValueBrokerTest.cpp b/src/test/ValueBrokerTest.cpp new file mode 100644 index 0000000..10a4654 --- /dev/null +++ b/src/test/ValueBrokerTest.cpp @@ -0,0 +1,64 @@ +#include <gtest/gtest.h> + +#include <crepe/ValueBroker.h> +#include <crepe/util/Proxy.h> + +using namespace std; +using namespace crepe; +using namespace testing; + +class ValueBrokerTest : public Test { +public: +	int read_count = 0; +	int write_count = 0; +	int value = 0; + +	ValueBroker<int> broker { +		[this](const int & target) -> void { +			this->write_count++; +			this->value = target; +		}, +		[this]() -> const int & { +			this->read_count++; +			return this->value; +		}, +	}; +	Proxy<int> proxy{broker}; + +	void SetUp() override { +		ASSERT_EQ(read_count, 0); +		ASSERT_EQ(write_count, 0); +	} +}; + +TEST_F(ValueBrokerTest, BrokerWrite) { +	broker.set(0); +	EXPECT_EQ(read_count, 0); +	EXPECT_EQ(write_count, 1); +} + +TEST_F(ValueBrokerTest, BrokerRead) { +	broker.get(); +	EXPECT_EQ(read_count, 1); +	EXPECT_EQ(write_count, 0); +} + +TEST_F(ValueBrokerTest, ProxyWrite) { +	proxy = 0; +	EXPECT_EQ(read_count, 0); +	EXPECT_EQ(write_count, 1); +} + +void dummy(int) { } +TEST_F(ValueBrokerTest, ProxyRead) { +	dummy(proxy); +	EXPECT_EQ(read_count, 1); +	EXPECT_EQ(write_count, 0); +} + +TEST_F(ValueBrokerTest, ProxyReadWrite) { +	proxy = proxy; +	ASSERT_EQ(read_count, 1); +	ASSERT_EQ(write_count, 1); +} + |