Skip to content
Snippets Groups Projects
Commit 5e01b76c authored by Forgenet's avatar Forgenet
Browse files

Initial commit

parents
No related branches found
No related tags found
No related merge requests found
# Ignore build directories
/build/
/cmake-build-*/
# Ignore CMake generated files
CMakeFiles/
CMakeCache.txt
cmake_install.cmake
Makefile
# Ignore Ninja generated files
build.ninja
rules.ninja
.ninja_deps
.ninja_log
# Ignore Visual Studio Code workspace files
.vscode/
# Ignore JetBrains CLion project files
.idea/
# Ignore Google Test download directory
/googletest-download/
# Ignore compiled object files
*.o
*.obj
*.lo
*.la
*.al
*.libs
*.dll
*.so
*.so.*
*.dylib
*.lib
*.a
*.exp
*.pdb
# Ignore executable files
*.exe
*.out
*.app
# Ignore other temporary files
*.log
*.tmp
*.swp
*.bak
*.old
*.orig
*.rej
*.swo
*.swn
*.DS_Store
\ No newline at end of file
cmake_minimum_required(VERSION 3.29)
project(foostrlen)
set(CMAKE_CXX_STANDARD 20)
add_subdirectory(src)
add_subdirectory(tests)
\ No newline at end of file
## Описание
Этот проект представляет собой программу на C++, которая вычисляет длину строки, введенной пользователем. Программа работает в бесконечном цикле, запрашивает ввод строки у пользователя и выводит её длину. Программа завершает работу, если пользователь вводит пустую строку.
## Структура проекта
- `src/` - исходные файлы программы
- `main.cpp` - основной файл программы
- `functions.cpp` - реализация функции `fooStrLen`
- `functions.h` - заголовочный файл с объявлением функции `fooStrLen`
- `tests/` - файлы тестов
- `main_test.cpp` - тесты для функции `fooStrLen`
- `CMakeLists.txt` - файл конфигурации CMake для сборки проекта
- `.gitignore` - файл для исключения временных и ненужных файлов из репозитория
## Требования
- CMake 3.29 или выше
- Компилятор C++ с поддержкой стандарта C++20
## Сборка и запуск
1. Откройте проект в CLion.
2. Перейдите в меню `File` -> `Reload CMake Project`, чтобы перезагрузить конфигурацию CMake.
3. Нажмите на кнопку `Build` (или используйте сочетание клавиш `Ctrl+F9`), чтобы собрать проект.
4. Для запуска программы нажмите на кнопку `Run` (или используйте сочетание клавиш `Shift+F10`).
## Тестирование
1. Откройте проект в CLion.
2. Перейдите в меню `File` -> `Reload CMake Project`, чтобы перезагрузить конфигурацию CMake.
3. Нажмите на кнопку `Build` (или используйте сочетание клавиш `Ctrl+F9`), чтобы собрать тесты.
4. Перейдите в меню `Run` -> `Edit Configurations...`.
5. Нажмите на `+` и выберите `Google Test`.
6. В поле `Target` выберите `runTests`.
7. Нажмите `OK`.
8. Для запуска тестов нажмите на кнопку `Run` (или используйте сочетание клавиш `Shift+F10`).
## Пример работы программы
```shell
This program calculates the length of a string.
Press <enter> to exit.
Enter a string:
Hello, world!
Length: 13
Enter a string:
</enter>
Exiting program...
```
## Примечание
Шаги сборки и тестирования описаны только для CLion, так как этот IDE предоставляет удобные инструменты для работы с CMake и Google Test, что упрощает процесс настройки и запуска проекта. Если вы используете другую среду разработки или хотите собрать и протестировать проект вручную, вам потребуется адаптировать команды и шаги под вашу конфигурацию.
\ No newline at end of file
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in ${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download)
if(result)
message(FATAL_ERROR "CMake step for googletest failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download)
if(result)
message(FATAL_ERROR "Build step for googletest failed: ${result}")
endif()
add_subdirectory(${CMAKE_BINARY_DIR}/googletest-src
${CMAKE_BINARY_DIR}/googletest-build
EXCLUDE_FROM_ALL)
add_executable(runTests test.cpp)
target_link_libraries(runTests gtest_main)
add_test(NAME runTests COMMAND runTests)
\ No newline at end of file
cmake_minimum_required(VERSION 3.29)
project(googletest-download NONE)
include(ExternalProject)
ExternalProject_Add(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.11.0
SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
\ No newline at end of file
set(SOURCE_FILES main.cpp functions.cpp functions.h)
add_library(functions functions.cpp)
add_executable(foostrlen ${SOURCE_FILES})
\ No newline at end of file
#include "functions.h"
int fooStrLen(const char* targetString) {
if (targetString == nullptr) {
return 0;
}
int length = 0;
for (int i = 0; targetString[i] != '\0'; i++) {
length++;
}
return length;
}
\ No newline at end of file
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
int fooStrLen(const char* targetString);
#endif //FUNCTIONS_H
#include <iostream>
#include <string>
#include "functions.h"
int main() {
std::string input;
std::cout << "This program calculates the length of a string." << std::endl
<< "Press <Enter> to exit." << std::endl
<< "Enter a string: " << std::endl;
while (true) {
std::getline(std::cin, input);
if (input.empty()) {
break;
}
const char* inputContent = input.c_str();
std::cout << "Length: " << fooStrLen(inputContent) << std::endl;
}
std::cout << "Exiting program..." << std::endl;
return 0;
}
\ No newline at end of file
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../libs/CMakeLists.txt.in ${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download)
if(result)
message(FATAL_ERROR "CMake step for googletest failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download)
if(result)
message(FATAL_ERROR "Build step for googletest failed: ${result}")
endif()
add_subdirectory(${CMAKE_BINARY_DIR}/googletest-src
${CMAKE_BINARY_DIR}/googletest-build
EXCLUDE_FROM_ALL)
add_executable(runTests main_test.cpp)
include_directories(${CMAKE_SOURCE_DIR}/src)
target_link_libraries(runTests gtest_main functions)
add_test(NAME runTests COMMAND runTests)
\ No newline at end of file
#include <gtest/gtest.h>
#include "functions.h"
TEST(FooStrLenTest, NullPointer) {
EXPECT_EQ(fooStrLen(nullptr), 0);
}
TEST(FooStrLenTest, EmptyString) {
EXPECT_EQ(fooStrLen(""), 0);
}
TEST(FooStrLenTest, SingleCharacter) {
EXPECT_EQ(fooStrLen("a"), 1);
}
TEST(FooStrLenTest, RegularString) {
EXPECT_EQ(fooStrLen("Hello, world!"), 13);
}
TEST(FooStrLenTest, StringWithSpaces) {
EXPECT_EQ(fooStrLen("Hello, world! How are you?"), 26);
}
TEST(FooStrLenTest, StringWithSpecialCharacters) {
EXPECT_EQ(fooStrLen("!@#$%^&*()_+"), 12);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment