Сравнить коммиты

...

5 Коммитов

Автор SHA1 Сообщение Дата
KovalenkoDM 82b976e495 work with CURL
11 месяцев назад
KovalenkoDM a8222fbdff showing net errors
12 месяцев назад
KovalenkoDM 173e795e1f test promt arguments
12 месяцев назад
KovalenkoDM fa4c10b31c refactoring input_data
12 месяцев назад
KovalenkoDM c866736f5d personal test
12 месяцев назад

@ -3,6 +3,8 @@
#include "histogram.h" #include "histogram.h"
#include "text.h" #include "text.h"
#include "svg.h" #include "svg.h"
#include <sstream>
#include <curl/curl.h>
using namespace std; using namespace std;
@ -12,20 +14,55 @@ struct Input {
size_t bin_count{}; size_t bin_count{};
}; };
Input input_data() { Input input_data(istream& stream) {
Input in; Input in;
size_t number_count; size_t number_count;
cin >> number_count; stream >> number_count;
in.numbers.resize(number_count); in.numbers.resize(number_count);
for (size_t i = 0; i < number_count; i++) { for (size_t i = 0; i < number_count; i++) {
cin >> in.numbers[i]; stream >> in.numbers[i];
} }
cin >> in.bin_count; stream >> in.bin_count;
return in; return in;
} }
int main() { size_t write_data(void* items, size_t item_size, size_t item_count, void* ctx) {
Input in = input_data(); size_t data_size = item_size * item_count;
stringstream* buffer = reinterpret_cast<stringstream*>(ctx);
buffer->write(reinterpret_cast<const char*>(items), data_size);
return data_size;
}
Input download(const string& address) {
stringstream buffer;
CURL* curl = curl_easy_init();
if (curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, address.c_str());
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
cout << curl_easy_strerror(res);
exit(1);
}
auto data = curl_version_info(CURLVERSION_NOW)->protocols;
for (auto protocol = data; *protocol; ++protocol) {
cerr << *protocol << endl;
} curl_easy_cleanup(curl);
}
return input_data(buffer);
}
int main(int argc, char* argv[]) {
Input in;
if (argc > 1) {
in = download(argv[1]);
} else {
in = input_data(cin);
}
auto bins = make_histogram(in.numbers, in.bin_count); auto bins = make_histogram(in.numbers, in.bin_count);
show_histogram_svg(bins); show_histogram_svg(bins);
return 0; return 0;

@ -22,9 +22,9 @@ void svg_begin(double width, double height) {
} }
void svg_end(double top) { void svg_end(double top, ostream& stream) {
cout << "<line x1='10' y1='" << top << "' x2='" << IMAGE_WIDTH <<"' y2='" << top << "' stroke-dasharray = '10 10' stroke='black'/>\n"; stream << "<line x1='10' y1='" << top << "' x2='" << IMAGE_WIDTH <<"' y2='" << top << "' stroke-dasharray = '10 10' stroke='black'/>\n";
cout << "</svg>\n"; stream << "</svg>\n";
} }
void svg_text(double left, double baseline, string text) { void svg_text(double left, double baseline, string text) {
@ -57,5 +57,5 @@ void show_histogram_svg(const vector<size_t>& bins) {
svg_rect(TEXT_WIDTH, top, bin_width / scale, BIN_HEIGHT); svg_rect(TEXT_WIDTH, top, bin_width / scale, BIN_HEIGHT);
top += BIN_HEIGHT; top += BIN_HEIGHT;
} }
svg_end(top); svg_end(top, cout);
} }

@ -0,0 +1,4 @@
#pragma once
#include <iostream>
void svg_end(double top, std::ostream& stream);

@ -2,6 +2,9 @@
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest.h" #include "doctest.h"
#include "histogram_internal.h" #include "histogram_internal.h"
#include "svg_iternal.h"
#include <iostream>
TEST_CASE("distinct positive numbers") { TEST_CASE("distinct positive numbers") {
double min = 0; double min = 0;
@ -11,14 +14,6 @@ TEST_CASE("distinct positive numbers") {
CHECK(max == 2); CHECK(max == 2);
} }
TEST_CASE("empty vector") {
double min = 0;
double max = 0;
find_minmax({ }, min, max);
CHECK(min != 0);
CHECK(max != 0);
}
TEST_CASE("one element") { TEST_CASE("one element") {
double min = 0; double min = 0;
double max = 0; double max = 0;
@ -34,3 +29,9 @@ TEST_CASE("negative elements") {
CHECK(min == -81); CHECK(min == -81);
CHECK(max == 2); CHECK(max == 2);
} }
TEST_CASE("svg_check") {
std::stringstream stream;
svg_end(100, stream);
CHECK(stream.str() == "<line x1='10' y1='100' x2='400' y2='100' stroke-dasharray = '10 10' stroke='black'/>\n</svg>\n");
}

Загрузка…
Отмена
Сохранить