.
├── src
│ ├── binary_search.cpp
└── test
├── CMakeLists.txt
├── build
└── test_binary_search.cpp
< /code>
binary_search.cpp:
#include
template T binary_search(T A[], uint8_t len, T nu) {
uint8_t low = 0;
uint8_t high = len - 1;
while (low A[mid])
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
< /code>
test_binary_search.cpp:
#include
#include
#define BOOST_TEST_MODULE test_algorithms
BOOST_AUTO_TEST_SUITE(test_search)
int32_t input_arrs[4][8] = {{26, 31, 41, 41, 58, 59, 101, 104},
{26, 31, 41, 41, 58, 59, 101, 104},
{1, 4, 5, 7, 19, 28, 45, 92},
{1, 4, 5, 7, 19, 28, 45, 92}};
int32_t input_vals[] = {31, 32, 92, 101};
int32_t expected_vals[] = {1, -1, 7, -1};
auto test_cases = boost::unit_test::data::make(input_arrs) ^
boost::unit_test::data::make(input_vals) ^
boost::unit_test::data::make(expected_vals);
BOOST_DATA_TEST_CASE(test_binary_search, test_cases, input_arr, nu, exp) {
auto obs = binary_search(input_arr, 8, nu);
BOOST_ASSERT(obs == exp);
}
< /code>
cmakelists.txt:
cmake_minimum_required(VERSION 3.16)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++20")
project(test_algorithms)
set(SOURCES
../src/binary_search.cpp
test_binary_search.cpp
)
find_package(Boost 1.87.0 REQUIRED COMPONENTS unit_test_framework)
if (Boost_FOUND)
enable_testing()
include_directories(${Boost_INCLUDE_DIRS})
add_executable(test_binary_search ${SOURCES})
target_include_directories(test_binary_search PRIVATE ${Boost_INCLUDE_DIRS})
add_test(NAME test_binary_search COMMAND test_binary_search)
endif()
< /code>
Я пытаюсь скомпилировать это на MacBook Pro M3 Pro, работающем MacOS Sequoia 15.3.1, используя следующие команды: < /p>
cmake -S . -B build
cmake --build build
< /code>
после чего я получаю очень длинное сообщение об ошибке. Я подозреваю, что проблема может быть < /p>
/Users/graham/dev/cpp_experiments/test/test_binary_search.cpp:20:14: error: use of undeclared identifier 'binary_search'
20 | auto obs = binary_search(input_arr, 8, nu);
< /code>
, который, в свою очередь, может быть вызван < /p>
/opt/homebrew/include/boost/test/data/test_case.hpp:89:16: error: reference to type 'const const int[8]' could not bind to an lvalue of type 'const int'
89 | return *value;
Я не уверен, где/как я набираю для ввода const int в этом коде; Макросы Boost выполняют это преобразование? Я изо всех сил пытаюсь понять рекомендуемый способ использования Boost :: Unit_test :: Data :: Make , чтобы застегнуть параметризованные данные тестирования. Любая помощь в том, как лучше структурировать этот код для создания параметризованного набора тестов, будет очень оценена!
В качестве минимального примера (это часть более крупного проекта), у меня есть следующие три файла в проекте со следующей структурой: < /p> [code]. ├── src │ ├── binary_search.cpp └── test ├── CMakeLists.txt ├── build └── test_binary_search.cpp < /code> binary_search.cpp: #include
template T binary_search(T A[], uint8_t len, T nu) { uint8_t low = 0; uint8_t high = len - 1;
while (low A[mid]) low = mid + 1; else high = mid - 1; }
find_package(Boost 1.87.0 REQUIRED COMPONENTS unit_test_framework) if (Boost_FOUND) enable_testing() include_directories(${Boost_INCLUDE_DIRS})
add_executable(test_binary_search ${SOURCES}) target_include_directories(test_binary_search PRIVATE ${Boost_INCLUDE_DIRS}) add_test(NAME test_binary_search COMMAND test_binary_search) endif() < /code> Я пытаюсь скомпилировать это на MacBook Pro M3 Pro, работающем MacOS Sequoia 15.3.1, используя следующие команды: < /p> cmake -S . -B build cmake --build build < /code> после чего я получаю очень длинное сообщение об ошибке. Я подозреваю, что проблема может быть < /p> /Users/graham/dev/cpp_experiments/test/test_binary_search.cpp:20:14: error: use of undeclared identifier 'binary_search' 20 | auto obs = binary_search(input_arr, 8, nu); < /code> , который, в свою очередь, может быть вызван < /p> /opt/homebrew/include/boost/test/data/test_case.hpp:89:16: error: reference to type 'const const int[8]' could not bind to an lvalue of type 'const int' 89 | return *value; [/code] Я не уверен, где/как я набираю для ввода const int в этом коде; Макросы Boost выполняют это преобразование? Я изо всех сил пытаюсь понять рекомендуемый способ использования Boost :: Unit_test :: Data :: Make , чтобы застегнуть параметризованные данные тестирования. Любая помощь в том, как лучше структурировать этот код для создания параметризованного набора тестов, будет очень оценена!
В качестве минимального примера (это часть более крупного проекта), у меня есть следующие три файла в проекте со следующей структурой:
.
├── src
│ ├── binary_search.cpp
└── test
├── CMakeLists.txt
├── build
└── test_binary_search.cpp...
В качестве минимального примера (это часть более крупного проекта), у меня есть следующие три файла в проекте со следующей структурой:
.
├── src
│ ├── binary_search.cpp
└── test
├── CMakeLists.txt
├── build
└── test_binary_search.cpp...
В качестве минимального примера (это часть более крупного проекта), у меня есть следующие три файла в проекте со следующей структурой:
.
├── src
│ ├── binary_search.cpp
└── test
├── CMakeLists.txt
├── build
└── test_binary_search.cpp...
Я пытаюсь заставить CMake обнаруживать тесты при фактическом вызове, а не во время сборки, используя генератор Ninja Multi-Config. Сначала я думал, что установка DISCOVERY_MODE на PRE_TEST в gtest_discover_tests должна решить эту проблему, но,...