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

...

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 "text.h"
#include "svg.h"
#include <sstream>
#include <curl/curl.h>
using namespace std;
@ -12,20 +14,55 @@ struct Input {
size_t bin_count{};
};
Input input_data() {
Input input_data(istream& stream) {
Input in;
size_t number_count;
cin >> number_count;
stream >> number_count;
in.numbers.resize(number_count);
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;
}
int main() {
Input in = input_data();
size_t write_data(void* items, size_t item_size, size_t item_count, void* ctx) {
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);
show_histogram_svg(bins);
return 0;

@ -22,9 +22,9 @@ void svg_begin(double width, double height) {
}
void svg_end(double top) {
cout << "<line x1='10' y1='" << top << "' x2='" << IMAGE_WIDTH <<"' y2='" << top << "' stroke-dasharray = '10 10' stroke='black'/>\n";
cout << "</svg>\n";
void svg_end(double top, ostream& stream) {
stream << "<line x1='10' y1='" << top << "' x2='" << IMAGE_WIDTH <<"' y2='" << top << "' stroke-dasharray = '10 10' stroke='black'/>\n";
stream << "</svg>\n";
}
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);
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
#include "doctest.h"
#include "histogram_internal.h"
#include "svg_iternal.h"
#include <iostream>
TEST_CASE("distinct positive numbers") {
double min = 0;
@ -11,14 +14,6 @@ TEST_CASE("distinct positive numbers") {
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") {
double min = 0;
double max = 0;
@ -34,3 +29,9 @@ TEST_CASE("negative elements") {
CHECK(min == -81);
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");
}

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