Родитель
d8a083e554
Сommit
a62fdfe1b9
@ -1,47 +0,0 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include "histogram.h"
|
||||
using namespace std;
|
||||
|
||||
void
|
||||
find_minmax(const vector<double>& numbers, double& min, double& max) {
|
||||
min = numbers[0];
|
||||
for (size_t i = 1; i < numbers.size(); i++) {
|
||||
if (numbers[i] < min) {
|
||||
min = numbers[i];
|
||||
}
|
||||
else if (numbers[i] > max) {
|
||||
max = numbers[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vector<size_t>
|
||||
make_histogram(const vector <double>& numbers, size_t bin_count) {
|
||||
double minc, maxc;
|
||||
find_minmax(numbers, minc, maxc);
|
||||
vector<size_t> bins(bin_count);
|
||||
double bin_size = (maxc - minc) / bin_count;
|
||||
size_t bin_max_size = 0;
|
||||
for (size_t i = 0; i < numbers.size(); i++) {
|
||||
bool found = false;
|
||||
for (size_t j = 0; (j < bin_count - 1) && !found; j++) {
|
||||
auto lo = minc + j * bin_size;
|
||||
auto hi = minc + (j + 1) * bin_size;
|
||||
if ((lo <= numbers[i]) && (numbers[i] < hi)) {
|
||||
bins[j]++;
|
||||
found = true;
|
||||
if (bins[j] > bin_max_size) {
|
||||
bin_max_size = bins[j];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
bins[bin_count - 1]++;
|
||||
if (bins[bin_count - 1] > bin_max_size) {
|
||||
bin_max_size = bins[bin_count - 1];
|
||||
}
|
||||
}
|
||||
}
|
||||
return bins;
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
|
||||
std::vector<size_t>
|
||||
make_histogram(const std::vector<double>& numbers, size_t bin_count);
|
||||
|
@ -1,6 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
|
||||
void
|
||||
find_minmax(const std::vector<double>& numbers, double& min, double& max);
|
@ -1,35 +0,0 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include "text.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
const size_t SCREEN_WIDTH = 80;
|
||||
const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1;
|
||||
|
||||
void
|
||||
show_histogram_text(vector<size_t> bins) {
|
||||
size_t bin_max_size = 0;
|
||||
for (auto bin : bins) {
|
||||
if (bin_max_size < bin) {
|
||||
bin_max_size = bin;
|
||||
}
|
||||
}
|
||||
double k = double(MAX_ASTERISK) / bin_max_size;
|
||||
if (k > 1) {
|
||||
k = 1;
|
||||
}
|
||||
for (size_t bin = 0; bin < bins.size(); bin++) {
|
||||
if (bins[bin] < 100) {
|
||||
cout << " ";
|
||||
}
|
||||
if (bins[bin] < 10) {
|
||||
cout << " ";
|
||||
}
|
||||
cout << bins[bin] << "|";
|
||||
for (size_t i = 0; i < bins[bin] * k; i++) {
|
||||
cout << "*";
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
|
||||
void show_histogram_text(std::vector<size_t> bins);
|
@ -1,34 +1,50 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include "histogram.h"
|
||||
#include "text.h"
|
||||
#include "pch.h"
|
||||
#define DOCTEST_CINFIG_NO_MULTITHREADING
|
||||
#define DOCTEST_CINFIG_IMOLEMENT_WITH_MAIN
|
||||
#include "doctest.h"
|
||||
#include "histogram_internal.h"
|
||||
#include "svg.h"
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct Input {
|
||||
vector<double> numbers;
|
||||
size_t bin_count{};
|
||||
};
|
||||
TEST_CASE("distinct positive numbers") {
|
||||
double min = 0;
|
||||
double max = 0;
|
||||
find_minmax({ 1, 2 }, min, max);
|
||||
CHECK(min == 1);
|
||||
CHECK(max == 2);
|
||||
}
|
||||
|
||||
Input
|
||||
input_data() {
|
||||
Input in;
|
||||
size_t number_count;
|
||||
cin >> number_count;
|
||||
in.numbers.resize(number_count);
|
||||
for (size_t i = 0; i < number_count; i++) {
|
||||
cin >> in.numbers[i];
|
||||
TEST_CASE("check if vector is only one in length") {
|
||||
double min = 3;
|
||||
double max = 3;
|
||||
find_minmax({ 3 }, min, max);
|
||||
CHECK(min == 3);
|
||||
CHECK(max == 3);
|
||||
}
|
||||
size_t bin_count;
|
||||
cin >> in.bin_count;
|
||||
return in;
|
||||
TEST_CASE("all numbers are the same") {
|
||||
double min = 1;
|
||||
double max = 1;
|
||||
find_minmax({ 1, 1, 1, 1, 1, 1, 1, }, min, max);
|
||||
CHECK(min == 1);
|
||||
CHECK(max == 1);
|
||||
}
|
||||
TEST_CASE("all numbers are the same") {
|
||||
double min = 0;
|
||||
double max = 0;
|
||||
CHECK(!find_minmax({}, min, max));
|
||||
}
|
||||
|
||||
|
||||
int main() {
|
||||
Input in = input_data();
|
||||
auto bins = make_histogram(in.numbers, in.bin_count);
|
||||
show_histogram_text(bins);
|
||||
return 0;
|
||||
TEST_CASE("histogram for 10 variant is correct") {
|
||||
std::fstream in, compare;
|
||||
std::string line, compline;
|
||||
bool flag = 0;
|
||||
in.open("result.txt");
|
||||
compare.open("compare.txt");
|
||||
while (std::getline(in, line) && std::getline(compare, compline) && !flag) {
|
||||
if (line != compline) {
|
||||
flag = 1;
|
||||
}
|
||||
}
|
||||
CHECK(flag == 0);
|
||||
}
|
Двоичный файл не отображается.
Двоичный файл не отображается.
Двоичный файл не отображается.
Двоичный файл не отображается.
Двоичный файл не отображается.
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project>
|
||||
<ProjectOutputs>
|
||||
<ProjectOutput>
|
||||
<FullPath>C:\Users\Home\Desktop\lab34\unittest\x64\Debug\unittest.exe</FullPath>
|
||||
</ProjectOutput>
|
||||
</ProjectOutputs>
|
||||
<ContentFiles />
|
||||
<SatelliteDlls />
|
||||
<NonRecipeFileRefs />
|
||||
</Project>
|
Двоичный файл не отображается.
@ -1,8 +1,42 @@
|
||||
histogram.cpp
|
||||
pch.cpp
|
||||
unittest.cpp
|
||||
C:\Users\Home\Desktop\lab34\unittest\unittest.cpp(23,12): warning C4101: bin_count: неиспользованная локальная переменная
|
||||
text.cpp
|
||||
Создание кода...
|
||||
unittest.vcxproj -> C:\Users\Home\Desktop\lab34\unittest\x64\Debug\unittest.exe
|
||||
"pwsh.exe" не является внутренней или внешней
|
||||
командой, исполняемой программой или пакетным файлом.
|
||||
C:\Users\Home\Desktop\lab34\unittest\doctest.h(1527,9): warning C4805: ==: небезопасное смешение типа "bool" и типа "T" в операции
|
||||
C:\Users\Home\Desktop\lab34\unittest\doctest.h(1527,9): warning C4805: with
|
||||
C:\Users\Home\Desktop\lab34\unittest\doctest.h(1527,9): warning C4805: [
|
||||
C:\Users\Home\Desktop\lab34\unittest\doctest.h(1527,9): warning C4805: T=int
|
||||
C:\Users\Home\Desktop\lab34\unittest\doctest.h(1527,9): warning C4805: ]
|
||||
(компиляция исходного файла "/unittest.cpp")
|
||||
C:\Users\Home\Desktop\lab34\unittest\doctest.h(1527,9):
|
||||
контекст создания экземпляра шаблона (сначала самый старый)
|
||||
C:\Users\Home\Desktop\lab34\unittest\unittest.cpp(49,5):
|
||||
выполняется компиляция ссылки на экземпляр шаблон функции "doctest::detail::Result doctest::detail::Expression_lhs<bool &>::operator ==<int>(R &&)"
|
||||
with
|
||||
[
|
||||
R=int
|
||||
]
|
||||
C:\Users\Home\Desktop\lab34\unittest\unittest.cpp(49,5):
|
||||
см. первую ссылку на "doctest::detail::Expression_lhs<bool &>::operator ==" в "DOCTEST_ANON_FUNC_10"
|
||||
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl doctest::String::String(void)" (??0String@doctest@@QEAA@XZ) в функции "public: struct doctest::detail::Result __cdecl doctest::detail::Expression_lhs<double &>::operator==<int>(int &&)" (??$?8H@?$Expression_lhs@AEAN@detail@doctest@@QEAA?AUResult@12@$$QEAH@Z).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl doctest::String::~String(void)" (??1String@doctest@@QEAA@XZ) в функции "public: struct doctest::detail::Result __cdecl doctest::detail::Expression_lhs<double &>::operator==<int>(int &&)" (??$?8H@?$Expression_lhs@AEAN@detail@doctest@@QEAA?AUResult@12@$$QEAH@Z).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl doctest::String::String(char const *)" (??0String@doctest@@QEAA@PEBD@Z) в функции "class doctest::String __cdecl doctest::detail::stringifyBinaryExpr<double,int>(double const &,char const *,int const &)" (??$stringifyBinaryExpr@NH@detail@doctest@@YA?AVString@1@AEBNPEBDAEBH@Z).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "class doctest::String __cdecl doctest::operator+(class doctest::String const &,class doctest::String const &)" (??Hdoctest@@YA?AVString@0@AEBV10@0@Z) в функции "class doctest::String __cdecl doctest::detail::stringifyBinaryExpr<double,int>(double const &,char const *,int const &)" (??$stringifyBinaryExpr@NH@detail@doctest@@YA?AVString@1@AEBNPEBDAEBH@Z).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "class doctest::String __cdecl doctest::toString(bool)" (?toString@doctest@@YA?AVString@1@_N@Z) в функции "class doctest::String __cdecl doctest::detail::stringifyBinaryExpr<bool,int>(bool const &,char const *,int const &)" (??$stringifyBinaryExpr@_NH@detail@doctest@@YA?AVString@1@AEB_NPEBDAEBH@Z).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "class doctest::String __cdecl doctest::toString(double)" (?toString@doctest@@YA?AVString@1@N@Z) в функции "class doctest::String __cdecl doctest::detail::stringifyBinaryExpr<double,int>(double const &,char const *,int const &)" (??$stringifyBinaryExpr@NH@detail@doctest@@YA?AVString@1@AEBNPEBDAEBH@Z).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "class doctest::String __cdecl doctest::toString(int)" (?toString@doctest@@YA?AVString@1@H@Z) в функции "class doctest::String __cdecl doctest::detail::stringifyBinaryExpr<double,int>(double const &,char const *,int const &)" (??$stringifyBinaryExpr@NH@detail@doctest@@YA?AVString@1@AEBNPEBDAEBH@Z).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "struct doctest::ContextOptions const * __cdecl doctest::getContextOptions(void)" (?getContextOptions@doctest@@YAPEBUContextOptions@1@XZ) в функции "public: struct doctest::detail::Result __cdecl doctest::detail::Expression_lhs<double &>::operator==<int>(int &&)" (??$?8H@?$Expression_lhs@AEAN@detail@doctest@@QEAA?AUResult@12@$$QEAH@Z).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl doctest::detail::Result::Result(bool,class doctest::String const &)" (??0Result@detail@doctest@@QEAA@_NAEBVString@2@@Z) в функции "public: struct doctest::detail::Result __cdecl doctest::detail::Expression_lhs<double &>::operator==<int>(int &&)" (??$?8H@?$Expression_lhs@AEAN@detail@doctest@@QEAA?AUResult@12@$$QEAH@Z).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl doctest::detail::ExpressionDecomposer::ExpressionDecomposer(enum doctest::assertType::Enum)" (??0ExpressionDecomposer@detail@doctest@@QEAA@W4Enum@assertType@2@@Z) в функции "void __cdecl DOCTEST_ANON_FUNC_10(void)" (?DOCTEST_ANON_FUNC_10@@YAXXZ).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: struct doctest::detail::TestSuite & __cdecl doctest::detail::TestSuite::operator*(char const *)" (??DTestSuite@detail@doctest@@QEAAAEAU012@PEBD@Z) в функции "void __cdecl `dynamic initializer for 'DOCTEST_ANON_VAR_0''(void)" (??__EDOCTEST_ANON_VAR_0@@YAXXZ).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl doctest::detail::TestCase::TestCase(void (__cdecl*)(void),char const *,unsigned int,struct doctest::detail::TestSuite const &,class doctest::String const &,int)" (??0TestCase@detail@doctest@@QEAA@P6AXXZPEBDIAEBUTestSuite@12@AEBVString@2@H@Z) в функции "void __cdecl `dynamic initializer for 'DOCTEST_ANON_VAR_11''(void)" (??__EDOCTEST_ANON_VAR_11@@YAXXZ).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: struct doctest::detail::TestCase & __cdecl doctest::detail::TestCase::operator*(char const *)" (??DTestCase@detail@doctest@@QEAAAEAU012@PEBD@Z) в функции "void __cdecl `dynamic initializer for 'DOCTEST_ANON_VAR_11''(void)" (??__EDOCTEST_ANON_VAR_11@@YAXXZ).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "int __cdecl doctest::detail::regTest(struct doctest::detail::TestCase const &)" (?regTest@detail@doctest@@YAHAEBUTestCase@12@@Z) в функции "void __cdecl `dynamic initializer for 'DOCTEST_ANON_VAR_11''(void)" (??__EDOCTEST_ANON_VAR_11@@YAXXZ).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "int __cdecl doctest::detail::setTestSuite(struct doctest::detail::TestSuite const &)" (?setTestSuite@detail@doctest@@YAHAEBUTestSuite@12@@Z) в функции "void __cdecl `dynamic initializer for 'DOCTEST_ANON_VAR_0''(void)" (??__EDOCTEST_ANON_VAR_0@@YAXXZ).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl doctest::detail::ResultBuilder::ResultBuilder(enum doctest::assertType::Enum,char const *,int,char const *,char const *,class doctest::String const &)" (??0ResultBuilder@detail@doctest@@QEAA@W4Enum@assertType@2@PEBDH11AEBVString@2@@Z) в функции "void __cdecl DOCTEST_ANON_FUNC_10(void)" (?DOCTEST_ANON_FUNC_10@@YAXXZ).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __cdecl doctest::detail::ResultBuilder::setResult(struct doctest::detail::Result const &)" (?setResult@ResultBuilder@detail@doctest@@QEAAXAEBUResult@23@@Z) в функции "void __cdecl DOCTEST_ANON_FUNC_10(void)" (?DOCTEST_ANON_FUNC_10@@YAXXZ).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __cdecl doctest::detail::ResultBuilder::translateException(void)" (?translateException@ResultBuilder@detail@doctest@@QEAAXXZ) в функции __catch$?DOCTEST_ANON_FUNC_10@@YAXXZ$0.
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: bool __cdecl doctest::detail::ResultBuilder::log(void)" (?log@ResultBuilder@detail@doctest@@QEAA_NXZ) в функции "void __cdecl DOCTEST_ANON_FUNC_10(void)" (?DOCTEST_ANON_FUNC_10@@YAXXZ).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __cdecl doctest::detail::ResultBuilder::react(void)const " (?react@ResultBuilder@detail@doctest@@QEBAXXZ) в функции "void __cdecl DOCTEST_ANON_FUNC_10(void)" (?DOCTEST_ANON_FUNC_10@@YAXXZ).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "struct doctest::detail::TestSuite & __cdecl doctest_detail_test_suite_ns::getCurrentTestSuite(void)" (?getCurrentTestSuite@doctest_detail_test_suite_ns@@YAAEAUTestSuite@detail@doctest@@XZ) в функции "void __cdecl `dynamic initializer for 'DOCTEST_ANON_VAR_11''(void)" (??__EDOCTEST_ANON_VAR_11@@YAXXZ).
|
||||
unittest.obj : error LNK2019: ссылка на неразрешенный внешний символ "bool __cdecl find_minmax(class std::vector<double,class std::allocator<double> > const &,double &,double &)" (?find_minmax@@YA_NAEBV?$vector@NV?$allocator@N@std@@@std@@AEAN1@Z) в функции "void __cdecl DOCTEST_ANON_FUNC_2(void)" (?DOCTEST_ANON_FUNC_2@@YAXXZ).
|
||||
C:\Users\Home\Desktop\lab34\x64\Debug\unittest.dll : fatal error LNK1120: неразрешенных внешних элементов: 22
|
||||
|
Двоичный файл не отображается.
Двоичный файл не отображается.
Двоичный файл не отображается.
Двоичный файл не отображается.
Двоичный файл не отображается.
Двоичный файл не отображается.
@ -1,3 +0,0 @@
|
||||
C:\Users\Home\Desktop\lab34\unittest\histogram.cpp;C:\Users\Home\Desktop\lab34\unittest\x64\Debug\histogram.obj
|
||||
C:\Users\Home\Desktop\lab34\unittest\unittest.cpp;C:\Users\Home\Desktop\lab34\unittest\x64\Debug\unittest.obj
|
||||
C:\Users\Home\Desktop\lab34\unittest\text.cpp;C:\Users\Home\Desktop\lab34\unittest\x64\Debug\text.obj
|
Двоичный файл не отображается.
Двоичный файл не отображается.
Двоичный файл не отображается.
@ -1,2 +1,2 @@
|
||||
PlatformToolSet=v143:VCToolArchitecture=Native64Bit:VCToolsVersion=14.38.33130:TargetPlatformVersion=10.0.22621.0:VcpkgTriplet=x64-windows:
|
||||
Debug|x64|C:\Users\Home\Desktop\lab34\unittest\|
|
||||
Debug|x64|C:\Users\Home\Desktop\lab34\|
|
||||
|
@ -1 +0,0 @@
|
||||
C:\Users\Home\Desktop\lab34\unittest\x64\Debug\unittest.exe
|
Двоичный файл не отображается.
Двоичный файл не отображается.
Загрузка…
Ссылка в новой задаче