tests: add tests for time module & refactor: time module
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is failing
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	continuous-integration/drone/push Build is failing
				
			This commit is contained in:
		
							parent
							
								
									bddef4238d
								
							
						
					
					
						commit
						ee4483bfbb
					
				
					 5 changed files with 70 additions and 16 deletions
				
			
		| 
						 | 
				
			
			@ -103,7 +103,8 @@ void Application::update_layers()
 | 
			
		|||
{
 | 
			
		||||
	for (auto &it : *m_layer_stack)
 | 
			
		||||
	{
 | 
			
		||||
		it->on_update(m_timer.get_elapsed_time());
 | 
			
		||||
		// narrowing double -> float
 | 
			
		||||
		it->on_update(static_cast<float>(m_timer.elapsed_time().count()));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO(Light): each layer should have their own "delta time"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1 +1,6 @@
 | 
			
		|||
add_library_module(time timer.cpp)
 | 
			
		||||
 | 
			
		||||
add_executable(timer_tests ${CMAKE_CURRENT_SOURCE_DIR}/src/timer.tests.cpp)
 | 
			
		||||
target_include_directories(timer_tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
 | 
			
		||||
target_link_libraries(timer_tests PRIVATE time test)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,28 +4,22 @@
 | 
			
		|||
 | 
			
		||||
namespace lt {
 | 
			
		||||
 | 
			
		||||
/** Simple timer class to keep track of the elapsed time */
 | 
			
		||||
class Timer
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	Timer();
 | 
			
		||||
	using Timepoint = std::chrono::time_point<std::chrono::steady_clock>;
 | 
			
		||||
	using Duration = std::chrono::duration<double>;
 | 
			
		||||
	using Clock = std::chrono::steady_clock;
 | 
			
		||||
 | 
			
		||||
	[[nodiscard]] auto get_elapsed_time() const -> float
 | 
			
		||||
	{
 | 
			
		||||
		using std::chrono::duration_cast;
 | 
			
		||||
		using std::chrono::milliseconds;
 | 
			
		||||
		using std::chrono::steady_clock;
 | 
			
		||||
	Timer(Timepoint start = Clock::now());
 | 
			
		||||
 | 
			
		||||
		auto rep = duration_cast<milliseconds>(steady_clock::now() - m_start).count();
 | 
			
		||||
		return static_cast<float>(rep) / 1000.f;
 | 
			
		||||
	}
 | 
			
		||||
	void reset(Timepoint start = Clock::now());
 | 
			
		||||
 | 
			
		||||
	void reset()
 | 
			
		||||
	{
 | 
			
		||||
		m_start = std::chrono::steady_clock::now();
 | 
			
		||||
	}
 | 
			
		||||
	[[nodiscard]] auto elapsed_time() const -> Duration;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	std::chrono::time_point<std::chrono::steady_clock> m_start;
 | 
			
		||||
	Timepoint m_start;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace lt
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,8 +2,18 @@
 | 
			
		|||
 | 
			
		||||
namespace lt {
 | 
			
		||||
 | 
			
		||||
Timer::Timer(): m_start(std::chrono::steady_clock::now())
 | 
			
		||||
Timer::Timer(Timepoint start): m_start(start)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Timer::reset(Timepoint start)
 | 
			
		||||
{
 | 
			
		||||
	m_start = start;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[[nodiscard]] auto Timer::elapsed_time() const -> Duration
 | 
			
		||||
{
 | 
			
		||||
	return { std::chrono::steady_clock::now() - m_start };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace lt
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										44
									
								
								modules/time/src/timer.tests.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								modules/time/src/timer.tests.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
#include <ranges>
 | 
			
		||||
#include <test/test.hpp>
 | 
			
		||||
#include <time/timer.hpp>
 | 
			
		||||
 | 
			
		||||
namespace lt {
 | 
			
		||||
 | 
			
		||||
using lt::test::expect_le;
 | 
			
		||||
 | 
			
		||||
lt::test::Suite raii = [] {
 | 
			
		||||
	lt::test::Case { "default" } = [] {
 | 
			
		||||
		auto timer = Timer {};
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	lt::test::Case { "plenty" } = [] {
 | 
			
		||||
		for (auto i : std::views::iota(0, 101))
 | 
			
		||||
		{
 | 
			
		||||
			auto timer = Timer {};
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	lt::test::Case { "unhappy" } = [] {
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	lt::test::Case { "has sane elapsed time" } = [] {
 | 
			
		||||
		auto elapsed_time = Timer {}.elapsed_time();
 | 
			
		||||
		expect_le(elapsed_time, std::chrono::seconds { 1 });
 | 
			
		||||
	};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
lt::test::Suite reset = [] {
 | 
			
		||||
	lt::test::Case { "non-throwing" } = [] {
 | 
			
		||||
		auto timer = Timer {};
 | 
			
		||||
		timer.reset();
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	lt::test::Case { "resets elapsed time" } = [] {
 | 
			
		||||
		auto timer = Timer {};
 | 
			
		||||
		auto elapsed_time = timer.elapsed_time();
 | 
			
		||||
 | 
			
		||||
		timer.reset();
 | 
			
		||||
	};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace lt
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue