added tests

master
cobrapitz 3 years ago
parent 54fb923675
commit 4ec2eb4646

@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.24)
####################################################################################################################### #######################################################################################################################
project(cblib VERSION 1.0.0 DESCRIPTION "CB library") project(cblib VERSION 1.0.0 DESCRIPTION "CB library")
set(CMAKE_CXX_STANDARD 17) include(cmake/CMakeSettings.cmake)
####################################################################################################################### #######################################################################################################################
@ -25,15 +25,32 @@ add_library(${PROJECT_NAME} STATIC
# Buildling library # Buildling library
####################################################################################################################### #######################################################################################################################
target_include_directories(${PROJECT_NAME} PUBLIC include) target_include_directories(${PROJECT_NAME}
PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
)
####################################################################################################################### #######################################################################################################################
# Target properties # Target properties
####################################################################################################################### #######################################################################################################################
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION}) #set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})
set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR}) #set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR})
set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER source/cb.h) #set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER source/cb.h)
#######################################################################################################################
# Tests
#######################################################################################################################
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
include(CTest)
endif()
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING)
add_subdirectory(tests)
endif()

@ -0,0 +1,4 @@
set(CMAKE_CXX_STANDARD 20)
# Export compile command -> better tool integration.
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

@ -1,7 +1,12 @@
/**
* define INCLUDE_CB_DEFINES in order to include keyword mappings
*/
#ifndef GODOT_HUB_MAP_CB_H #ifndef GODOT_HUB_MAP_CB_H
#define GODOT_HUB_MAP_CB_H #define GODOT_HUB_MAP_CB_H
#define assertm(exp, msg) = assert(((void)msg, exp))
#include "cb/test/test.h" #include "cb/test/test.h"
#include "cb/time/time.h" #include "cb/time/time.h"
#include "cb/types/types.h" #include "cb/types/types.h"

@ -2,17 +2,9 @@
#ifndef GODOT_HUB_MAP_TEST_H #ifndef GODOT_HUB_MAP_TEST_H
#define GODOT_HUB_MAP_TEST_H #define GODOT_HUB_MAP_TEST_H
#include <cstdint>
#include <cassert>
#include <string_view>
#include <string>
#include <map>
#include <iostream>
#include <chrono>
namespace test {
#define assertm(exp, msg) = assert(((void)msg, exp))
namespace test {
} }

@ -1,21 +1,30 @@
#ifndef GODOT_HUB_MAP_TIME_H #ifndef GODOT_HUB_MAP_TIME_H
#define GODOT_HUB_MAP_TIME_H #define GODOT_HUB_MAP_TIME_H
#include <string> #include <string_view>
#include <map> #include <map>
#include <chrono> #include <chrono>
namespace cb::time { namespace cb::time {
using internal_clock = std::chrono::high_resolution_clock; using internal_clock = std::chrono::high_resolution_clock;
using time_point = std::chrono::time_point<internal_clock>; using time_point = std::chrono::time_point<internal_clock>;
using time_point_map = std::map<const std::string_view, time_point>;
static std::map<const std::string_view, time_point> _name_to_measurement; inline static time_point_map _name_to_measurement;
inline static constexpr long long NO_MEASUREMENT = -1;
time_point chrono_now(); time_point chrono_now();
void start_measure(const std::string_view& id); void start_measure(const std::string_view& id);
long long get_duration(const std::string_view &id);
void measure(const std::string_view& id); void measure(const std::string_view& id);
bool has_measurement(const std::string_view &id);
const time_point_map& get_measurements();
} }
#endif //GODOT_HUB_MAP_TIME_H #endif //GODOT_HUB_MAP_TIME_H

@ -2,13 +2,6 @@
#define GODOT_HUB_MAP_TYPES_H #define GODOT_HUB_MAP_TYPES_H
#include <cstdint> #include <cstdint>
#include <cassert>
#include <string_view>
#include <string>
#include <map>
#include <iostream>
#include <chrono>
using i64 = int64_t; using i64 = int64_t;
using u64 = uint64_t; using u64 = uint64_t;

@ -11,11 +11,24 @@ namespace cb::time {
} }
void start_measure(const std::string_view &id) { void start_measure(const std::string_view &id) {
_name_to_measurement[id] = chrono_now(); _name_to_measurement.insert({id, chrono_now()});
}
long long get_duration(const std::string_view &id) {
if (!has_measurement(id)) {
return -1;
}
return (chrono_now() - _name_to_measurement.at(id)).count();
}
bool has_measurement(const std::string_view &id) {
return _name_to_measurement.contains(id);
} }
void measure(const std::string_view &id) { void measure(const std::string_view &id) {
const std::chrono::duration<double> duration = chrono_now() - _name_to_measurement[id]; std::cout << "measurement: " << id << " took: " << get_duration(id) << "\n";
std::cout << "measurement: " << id << " took: " << duration.count() << "\n"; }
const time_point_map &get_measurements() {
return _name_to_measurement;
} }
} }

@ -0,0 +1,29 @@
set(TEST_PROJECT_NAME ${CMAKE_PROJECT_NAME}_test)
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v1.13.0
)
FetchContent_MakeAvailable(googletest)
add_executable(${TEST_PROJECT_NAME}
test_tests.cpp
)
include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
target_include_directories(${TEST_PROJECT_NAME}
SYSTEM PRIVATE "${PROJECT_SOURCE_DIR}/tests"
PRIVATE "${PROJECT_SOURCE_DIR}/include"
)
target_link_libraries(${TEST_PROJECT_NAME} gtest_main cblib)
add_test(NAME Test.tests COMMAND ${TEST_PROJECT_NAME})

@ -0,0 +1,37 @@
#include <cb.h>
#include "gtest/gtest.h"
TEST (Time, TestStart) {
using namespace cb;
const auto mehligs = "mehligs";
const auto mehl = "mehl";
time::start_measure(mehl);
EXPECT_TRUE(time::has_measurement(mehl));
EXPECT_FALSE(time::has_measurement(mehligs));
const auto measured_time_mehl = time::get_duration(mehl);
const auto measured_time_mehligs = time::get_duration(mehligs);
EXPECT_TRUE(time::has_measurement(mehl));
EXPECT_FALSE(time::has_measurement(mehligs));
EXPECT_GT(measured_time_mehl, 0);
EXPECT_EQ(measured_time_mehligs, time::NO_MEASUREMENT);
}
TEST (Time, NoTimer) {
using namespace cb;
const auto mehligs = "mehligs";
const auto measured_time_mehligs = time::get_duration(mehligs);
EXPECT_FALSE(time::has_measurement(mehligs));
EXPECT_EQ(measured_time_mehligs, time::NO_MEASUREMENT);
}
Loading…
Cancel
Save