From 8a34347199a4540282a77d235181ce423c329f68 Mon Sep 17 00:00:00 2001 From: MelnikovDM Date: Wed, 8 May 2024 17:00:14 +0300 Subject: [PATCH] build: uniq variant --- labor01.cpp | 8 +++++++- svg.cpp | 45 ++++++++++++++++++++++----------------------- svg.h | 2 +- unittest.cpp | 13 +++++++++++++ 4 files changed, 43 insertions(+), 25 deletions(-) diff --git a/labor01.cpp b/labor01.cpp index 744c60e..78b1477 100644 --- a/labor01.cpp +++ b/labor01.cpp @@ -9,6 +9,7 @@ using namespace std; struct Input { vector numbers; size_t bin_count{}; + vector colors; }; Input @@ -24,9 +25,14 @@ input_data() { } cerr << "Enter bin_count: "; cin >> in.bin_count; + in.colors.resize(in.bin_count); sort(begin(in.numbers), end(in.numbers)); in.numbers.erase(unique(begin(in.numbers), end(in.numbers)), end(in.numbers)); number_count = in.numbers.size(); + cerr << "Enter colors: "; + for (size_t i = 0; i < in.bin_count; i++) { + cin >> in.colors[i]; + } return in; } @@ -35,7 +41,7 @@ input_data() { int main() { auto in = input_data(); auto bins = make_histogram(in.numbers, in.bin_count); - show_histogram_svg(bins); + show_histogram_svg(bins, in.colors); } diff --git a/svg.cpp b/svg.cpp index 5b557cc..4d1c48d 100644 --- a/svg.cpp +++ b/svg.cpp @@ -1,24 +1,19 @@ #include #include #include -#include "svg.h" +#include "svg_iternal.h" using namespace std; -void -svg_text(double left, double baseline, string text) { +void svg_text(double left, double baseline, string text) { cout << "" << text << ""; } - -void svg_rect(double x, double y, double width, double height, string stroke = "black", string fill = "black") -{ - cout << "\n"; + +void svg_rect(double x, double y, double width, double height, string stroke = "black", string fill = "black") { + cout << "\n"; } -void -svg_begin(double width, double height) { +void svg_begin(double width, double height) { cout << "\n"; cout << "\n"; } -void -svg_end() { +void svg_end() { cout << "\n"; } -void -show_histogram_svg(const vector& bins) { +string check_color(const string& color) { + if (color.find(" ") == -1 || color.find('#') == 0) { + return color; + } + else { + return "black"; + } +} + +void show_histogram_svg(const vector& bins, const vector& colors) { const auto IMAGE_WIDTH = 400; const auto IMAGE_HEIGHT = 300; const auto TEXT_LEFT = 20; @@ -43,14 +45,11 @@ show_histogram_svg(const vector& bins) { const auto BLOCK_WIDTH = 10; svg_begin(400, 300); double top = 0; - for (size_t bin : bins) { - const double bin_width = BLOCK_WIDTH * bin; - svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bin)); - svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT); + for (size_t j = 0; j < bins.size(); j++) { + const double bin_width = BLOCK_WIDTH * bins[j]; + svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bins[j])); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, check_color(colors[j]), "black"); top += BIN_HEIGHT; } svg_end(); -} - - - +} \ No newline at end of file diff --git a/svg.h b/svg.h index 85ee392..3a7e6b5 100644 --- a/svg.h +++ b/svg.h @@ -4,6 +4,6 @@ #include void -show_histogram_svg(const std::vector& bins); +show_histogram_svg(const std::vector& bins, const std::vector& colors); #endif // SVG_H_INCLUDED \ No newline at end of file diff --git a/unittest.cpp b/unittest.cpp index 8955363..c0d3446 100644 --- a/unittest.cpp +++ b/unittest.cpp @@ -2,6 +2,8 @@ #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include "doctest.h" #include "histogram_internal.h" +#include +#include "svg_iternal.h" TEST_CASE("distinct positive numbers") { double min = 0; @@ -35,3 +37,14 @@ TEST_CASE("one number") { CHECK(max == 2); } + +TEST_CASE("Valid color without spaces") { + CHECK(check_color("red") == "red"); +} + +TEST_CASE("Invalid color with spaces") { + CHECK(check_color("light blue") == "black"); +} + +TEST_CASE("Valid color not starting with #") { + CHECK(check_color("FFFFFF") == "FFFFFF"); \ No newline at end of file