From d0c5bba80ecc1a2e52f0e629f0cb948abfacda71 Mon Sep 17 00:00:00 2001 From: "lab34 (VasinaEY)" Date: Mon, 26 May 2025 01:55:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- histogram.cpp | 6 ++-- histogram.h | 3 +- histogram_internal.h | 2 +- text.cpp | 2 +- text.h | 2 +- unittest.cpp | 55 +++++++++++++++++++++++++++++ unittest/bin/Debug/unittest.exe | Bin 0 -> 4663586 bytes unittest/obj/Debug/histogram.o | Bin 107625 -> 163061 bytes unittest/obj/Debug/unittest.o | Bin 553 -> 2934067 bytes unittest/unittest.depend | 59 ++++++++++++++++++++++++++++++++ 10 files changed, 122 insertions(+), 7 deletions(-) create mode 100644 unittest/bin/Debug/unittest.exe create mode 100644 unittest/unittest.depend diff --git a/histogram.cpp b/histogram.cpp index cf4a912..ce7a325 100644 --- a/histogram.cpp +++ b/histogram.cpp @@ -1,6 +1,6 @@ #include "histogram.h" -void find_minmax(std::vector& vec, double& min, double& max) { +void find_minmax(std::vector vec, double& min, double& max) { min = vec[0]; @@ -11,8 +11,8 @@ void find_minmax(std::vector& vec, double& min, double& max) { } } -std::vector make_histogram(size_t number, std::vector& vec) { - std::vector bins(number); +vector make_histogram(size_t number, vector vec) { + vector bins(number); if (vec.empty()) return bins; double mn, mx; diff --git a/histogram.h b/histogram.h index 8d2cfd4..fc94053 100644 --- a/histogram.h +++ b/histogram.h @@ -4,6 +4,7 @@ #include #include -std::vector make_histogram(size_t number, std::vector& vec); +using namespace std; +vector make_histogram(size_t number, vector vec); #endif // HISTOGRAM_H_INCLUDED diff --git a/histogram_internal.h b/histogram_internal.h index 5bbe4ff..4567891 100644 --- a/histogram_internal.h +++ b/histogram_internal.h @@ -1,6 +1,6 @@ #ifndef HISTOGRAM_INTERNAL_H_INCLUDED #define HISTOGRAM_INTERNAL_H_INCLUDED -void find_minmax(std::vector& vec, double& min, double& max); +void find_minmax(std::vector vec, double& min, double& max); #endif // HISTOGRAM_INTERNAL_H_INCLUDED diff --git a/text.cpp b/text.cpp index 3ca4555..add972a 100644 --- a/text.cpp +++ b/text.cpp @@ -1,7 +1,7 @@ #include "text.h" #include -void show_histogram(const std::vector& bins) { +void show_histogram(const vector& bins) { bool gigant = false; diff --git a/text.h b/text.h index f1c59f4..df05754 100644 --- a/text.h +++ b/text.h @@ -3,6 +3,6 @@ #include -void show_histogram(const std::vector& bins); +void show_histogram(const vector& bins); #endif // TEXT_H_INCLUDED diff --git a/unittest.cpp b/unittest.cpp index e69de29..37074ec 100644 --- a/unittest.cpp +++ b/unittest.cpp @@ -0,0 +1,55 @@ +#define DOCTEST_CONFIG_NO_MULTITHREADING +#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN +#include "doctest.h" +#include "histogram_internal.h" + +TEST_CASE("distinct positive numbers") { + double min = 0; + double max = 0; + find_minmax({1, 2}, min, max); + CHECK(min == 1); + CHECK(max == 2); +} +TEST_CASE("distinct negative numbers"){ + double min = 0; + double max = 0; + find_minmax({-1, -2}, min, max); + CHECK(min == -2); + CHECK(max == -1); +} +TEST_CASE("vector of the same elements"){ + double min = 0; + double max = 0; + find_minmax({3,3,3}, min, max); + CHECK(min == 3); + CHECK(max == 3); +} +TEST_CASE("vector of one elements"){ + double min = 0; + double max = 0; + find_minmax({3}, min, max); + CHECK(min == max); +} +TEST_CASE("mixed positive and negative numbers") { + double min = 0; + double max = 0; + find_minmax({-1, 2, 0, -3, 5}, min, max); + CHECK(min == -3); + CHECK(max == 5); +} + +TEST_CASE("vector with all negative numbers") { + double min = 0; + double max = 0; + find_minmax({-5, -10, -2}, min, max); + CHECK(min == -10); + CHECK(max == -2); +} + +TEST_CASE("vector with zero") { + double min = 0; + double max = 0; + find_minmax({0, -1, 1}, min, max); + CHECK(min == -1); + CHECK(max == 1); +} diff --git a/unittest/bin/Debug/unittest.exe b/unittest/bin/Debug/unittest.exe new file mode 100644 index 0000000000000000000000000000000000000000..d8544628e9f58317d1f112f1c8c98ae782094e83 GIT binary patch literal 4663586 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