diff --git a/trunk/ii02704/task_02/doc/README.md b/trunk/ii02704/task_02/doc/README.md new file mode 100644 index 000000000..f214b4e21 --- /dev/null +++ b/trunk/ii02704/task_02/doc/README.md @@ -0,0 +1,40 @@ +

Министерство образования Республики Беларусь

+

Учреждение образования

+

“Брестский Государственный технический университет”

+

Кафедра ИИТ

+






+

Лабораторная работа №2

+

По дисциплине “Общая теория интеллектуальных систем”

+

Тема: “Написание модульных тестов для программы моделирования температуры”

+




+

Выполнил:

+

Студент 2 курса

+

Группы ИИ-27

+

Гридчин А.В.

+

Проверил:

+

Дворанинович Д.А.

+




+

Брест 2025

+ +# Общее задание # +1. Использовать следующий фреймворк для модульного тестирования - [Google Test](https://google.github.io/googletest/). +2. Написать модульные тесты для основных функций программы. Разместить тесты в каталоге: **trunk\ii0xxyy\task_02\test**. +3. Исходный код модифицированной программы разместить в каталоге: **trunk\ii0xxyy\task_02\src**. +4. В файле `readme.md` отразить количество написанных тестов и процент покрытия кода тестами (использовать любой инструмент для анализа покрытия, например, [gcovr](https://gcovr.com/en/stable/)). + +## Задание 2.## +В ходе выполнения было написано три теста. Было написано три теста для функции linear. Покрытие программы составляет 67%. Замер производился с помощью программы OpenCppCoverage(https://github.com/OpenCppCoverage/OpenCppCoverage/releases). +[==========] Running 3 tests from 1 test suite. +[----------] Global test environment set-up. +[----------] 3 tests from Test +[ RUN ] Test.linearr +[ OK ] Test.linearr (0 ms) +[ RUN ] Test.linearr2 +[ OK ] Test.linearr2 (0 ms) +[ RUN ] Test.linearr3 +[ OK ] Test.linearr3 (0 ms) +[----------] 3 tests from Test (2 ms total) + +[----------] Global test environment tear-down +[==========] 3 tests from 1 test suite ran. (4 ms total) +[ PASSED ] 3 tests. \ No newline at end of file diff --git a/trunk/ii02704/task_02/src/CMakeLists.txt b/trunk/ii02704/task_02/src/CMakeLists.txt new file mode 100644 index 000000000..b50d6d032 --- /dev/null +++ b/trunk/ii02704/task_02/src/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required (VERSION 3.5) +project (task_02_ii02704) + +add_library(linear_ii02704 + linear1.cpp) + +add_executable (ii02704_task2 + otis2.cpp) + +target_link_libraries(ii02704_task2 PRIVATE linear_ii02704) diff --git a/trunk/ii02704/task_02/src/Linear.h b/trunk/ii02704/task_02/src/Linear.h new file mode 100644 index 000000000..3f0643210 --- /dev/null +++ b/trunk/ii02704/task_02/src/Linear.h @@ -0,0 +1,18 @@ +#ifndef LINE_H +#define LINE_H +#include +#include + +struct Params +{ + int k; + std::vector y; + std::vector u; + double a; + double b; +}; + +void input(Params &s); +void linear(Params &s, const int& place); + +#endif diff --git a/trunk/ii02704/task_02/src/linear1.cpp b/trunk/ii02704/task_02/src/linear1.cpp new file mode 100644 index 000000000..3a47f8943 --- /dev/null +++ b/trunk/ii02704/task_02/src/linear1.cpp @@ -0,0 +1,31 @@ +#include "Linear.h" +#include + +using namespace std; + +void input(Params &s) { + cout << "Enter amount of iterations: "; + cin >> s.k; + s.u.resize(s.k + 1, 0); + s.y.resize(s.k + 1, 0); + cout << "\nEnter temperature: "; + cin >> s.y.at(0); + for (auto& warm : s.u) { + cout << "\nEnter warm: "; + cin >> warm; + } + + cout << "Enter const a: "; + + cin >> s.a; + + cout << "Enter const b: "; + + cin >> s.b; + +} +void linear(Params &s, const int& place) { + if(s.k >= 0){ + s.y.at(place + 1) = s.a * s.y.at(place) + s.b * s.u.at(place); + } +} diff --git a/trunk/ii02704/task_02/src/otis2.cpp b/trunk/ii02704/task_02/src/otis2.cpp new file mode 100644 index 000000000..aaa07ae6a --- /dev/null +++ b/trunk/ii02704/task_02/src/otis2.cpp @@ -0,0 +1,19 @@ +#include +#include +#include "Linear.h" + +using namespace std; + + +int main() +{ + Params p; + input(p); + for (int i = 0; i < p.k; i++) { + linear(p,i); + } + for (auto n : p.y) { + cout << n << endl; + } + return 0; +} diff --git a/trunk/ii02704/task_02/test/CMakeLists.txt b/trunk/ii02704/task_02/test/CMakeLists.txt new file mode 100644 index 000000000..50287834f --- /dev/null +++ b/trunk/ii02704/task_02/test/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required(VERSION 3.5) +project(task_02_ii02704_test) + + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage") + + +include(FetchContent) +FetchContent_Declare( + googletest + URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip + DOWNLOAD_EXTRACT_TIMESTAMP TRUE +) +# For Windows: Prevent overriding the parent project's compiler/linker settings +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) +FetchContent_MakeAvailable(googletest) + +enable_testing() + + +add_executable( + ${CMAKE_PROJECT_NAME} + test.cpp + + ../src/linear1.cpp + ../src/Linear.h +) +target_link_libraries( + ${CMAKE_PROJECT_NAME} + PRIVATE + gtest + gtest_main + gmock +) + + +target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE --coverage -g -O0) +target_link_options(${CMAKE_PROJECT_NAME} PRIVATE --coverage) + + +include(GoogleTest) +gtest_discover_tests(${CMAKE_PROJECT_NAME}) diff --git a/trunk/ii02704/task_02/test/test.cpp b/trunk/ii02704/task_02/test/test.cpp new file mode 100644 index 000000000..f08aefc05 --- /dev/null +++ b/trunk/ii02704/task_02/test/test.cpp @@ -0,0 +1,45 @@ +#include "gtest/gtest.h" +#include "../src/Linear.h" +TEST(Test, linearr) { + double res; + Params p; + p.y.resize(2, 0); + p.u.resize(2, 0); + p.k = 2; + p.y[0] = 13; + p.u[0] = 1.3; + p.a = 2.3; + p.b = 5.6; + linear(p,0); + res = p.y[1]; + EXPECT_NEAR(res, 37.18, 0.01); +} +TEST(Test, linearr2) { + double res; + Params p; + p.y.resize(2, 0); + p.u.resize(2, 0); + p.k = 2; + p.y[0] = 2.6; + p.u[0] = 3.5; + p.a = 14.7; + p.b = 5.6; + linear(p,0); + res = p.y[1]; + EXPECT_NEAR(res, 57.82, 0.01); +} + +TEST(Test, linearr3) { + double res; + Params p; + p.y.resize(2, 0); + p.u.resize(2, 0); + p.k = 2; + p.y[0] = 0.8; + p.u[0] = 9.6; + p.a = 12.3; + p.b = 7.3; + linear(p,0); + res = p.y[1]; + EXPECT_NEAR(res, 79.92, 0.01); +}