增加googletest组织结构

This commit is contained in:
Yaha 2023-05-18 00:11:22 +08:00
parent 4a8dbeffa5
commit 049a65af8a
9 changed files with 123 additions and 80 deletions

3
.gitignore vendored
View File

@ -33,4 +33,5 @@
*.app
.idea/
cmake-build-debug/
cmake-build-debug/
build/

View File

@ -2,36 +2,12 @@ cmake_minimum_required(VERSION 3.25)
project(leetcode)
set(CMAKE_CXX_STANDARD 17)
set(APP_LIB_NAME leetcode)
include(FetchContent)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
)
# For Windows: Prevent overriding the parent project's compiler/linker settings
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
include(GoogleTest)
include_directories(include)
set(SOURCES)
file(GLOB_RECURSE SOURCES "src/*/*.cpp")
add_library(${APP_LIB_NAME} ${SOURCES})
enable_testing()
# Iterate over each source file
message(STATUS "========= enable_testing ========")
foreach(SOURCE ${SOURCES})
# Get the file name without extension
get_filename_component(APP_NAME ${SOURCE} NAME_WE)
message(STATUS "==== app_name: ${APP_NAME} path: ${SOURCE}")
# Add an executable target for each file
add_executable(${APP_NAME} ${SOURCE})
target_link_libraries(
${APP_NAME}
GTest::gtest_main
)
gtest_discover_tests(${APP_NAME})
endforeach()
message(STATUS "========= end testing ========")
include(cmake/googletest.cmake)
include(tests/tests.cmake)

9
cmake/googletest.cmake Normal file
View File

@ -0,0 +1,9 @@
include(FetchContent)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
)
# For Windows: Prevent overriding the parent project's compiler/linker settings
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
include(GoogleTest)

6
include/map_vec.h Normal file
View File

@ -0,0 +1,6 @@
#pragma once
#include <map>
namespace yaha {
std::vector<int> two_sum(std::vector<int> &nums, int target);
}

View File

@ -1,6 +0,0 @@
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}

View File

@ -1,55 +1,22 @@
//
// Created by Yaha on 2023/5/17.
//
#include <iostream>
#include <map>
#include <gtest/gtest.h>
/*
1
nums = [2,7,11,15], target = 9
[0,1]
nums[0] + nums[1] == 9 [0, 1]
2
nums = [3,2,4], target = 6
[1,2]
3
nums = [3,3], target = 6
[0,1]
 
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
LeetCode
https://leetcode.cn/problems/two-sum
*/
#include <map_vec.h>
/**
* @param nums
* @param target
* @return
*/
std::vector<int> twoSum(std::vector<int>& nums, int target) {
std::map<int, int> m;
namespace yaha {
std::vector<int> two_sum(std::vector<int> &nums, int target) {
std::map<int, int> result_map;
std::vector<int> result;
for (int i = 0; i < nums.size(); ++i) {
if (target - nums[i] == 0) {
auto it = result_map.find(target - nums[i]);
if (it != result_map.end()) {
return {it->second, i};
}
result_map[nums[i]] = i;
}
return {};
}
TEST(TwoSumTest, BasicAssertions) {
auto a = twoSum(std::vector<int>{2,7,11,15}, 9);
}
}

6
tests/test_main.cpp Normal file
View File

@ -0,0 +1,6 @@
#include <gtest/gtest.h>
int main(int argc, char* argv[]) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

22
tests/tests.cmake Normal file
View File

@ -0,0 +1,22 @@
set(APP_TEST_NAME leetcode_test)
message(STATUS =========== start testing APP_TEST_NAME: ${APP_TEST_NAME} ==========)
set(TEST_SOURCES)
file(GLOB_RECURSE TEST_SOURCES "tests/*.cpp")
message(STATUS =========== test_file: ${TEST_SOURCES} ==========)
enable_testing()
add_executable(
${APP_TEST_NAME}
tests/test_main.cpp
${TEST_SOURCES}
)
target_link_libraries(
${APP_TEST_NAME}
GTest::gtest_main
${APP_LIB_NAME}
)
include(GoogleTest)
gtest_discover_tests(${APP_TEST_NAME})
message(STATUS "========= end testing ========")

62
tests/two_sum_test.cpp Normal file
View File

@ -0,0 +1,62 @@
#include <gtest/gtest.h>
#include "map_vec.h"
/**
* 2 <= nums.length <= 104
* -109 <= nums[i] <= 109
* -109 <= target <= 109
*
*
* LeetCode
* https://leetcode.cn/problems/two-sum
*
*/
TEST(TwoSumTest, BasicAssertions) {
std::vector<int> output, input;
int target;
/**
* 1
* nums = [2,7,11,15], target = 9
* [0,1]
* nums[0] + nums[1] == 9 [0, 1]
*/
input.resize(4);
input = {2, 7, 11, 15};
target = 9;
output = yaha::two_sum(input, target);
ASSERT_EQ(output.size(), 2);
ASSERT_EQ(output[0], 0);
ASSERT_EQ(output[1], 1);
/**
* 2
* nums = [3,2,4], target = 6
* [1,2]
*/
input.resize(3);
input = {3, 2, 4};
target = 6;
output = yaha::two_sum(input, target);
ASSERT_EQ(output.size(), 2);
ASSERT_EQ(output[0], 1);
ASSERT_EQ(output[1], 2);
/**
* 3
* nums = [3,3], target = 6
* [0,1]
*/
input.resize(2);
input = {3, 3};
target = 6;
output = yaha::two_sum(input, target);
ASSERT_EQ(output.size(), 2);
ASSERT_EQ(output[0], 0);
ASSERT_EQ(output[1], 1);
}