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

..

5 Коммитов

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

@ -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");
}

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