From 97d6c3e73fe810f9e730ed9c2dac8dd3e94ba44d Mon Sep 17 00:00:00 2001 From: kojix2 <2xijok@gmail.com> Date: Fri, 28 May 2021 09:36:08 +0900 Subject: [PATCH] Revert "Use value_counts instead of tally" --- lib/youplot/backends/processing.rb | 24 ++++++++++++++++++++ lib/youplot/backends/unicode_plot_backend.rb | 3 ++- test/fixtures/simple-count.txt | 12 ---------- test/youplot/backends/processing_test.rb | 17 ++++++++++++++ test/youplot/simple_test.rb | 18 ++++++++------- 5 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 lib/youplot/backends/processing.rb delete mode 100644 test/fixtures/simple-count.txt create mode 100644 test/youplot/backends/processing_test.rb diff --git a/lib/youplot/backends/processing.rb b/lib/youplot/backends/processing.rb new file mode 100644 index 0000000..5ce6a8f --- /dev/null +++ b/lib/youplot/backends/processing.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module YouPlot + # plotting functions. + module Backends + module Processing + module_function + + def count_values(arr, tally: true) + # tally was added in Ruby 2.7 + if tally && Enumerable.method_defined?(:tally) + arr.tally + else + # https://github.com/marcandre/backports + arr.each_with_object(Hash.new(0)) { |item, res| res[item] += 1 } + .tap { |h| h.default = nil } + end + .sort { |a, b| a[1] <=> b[1] } + .reverse + .transpose + end + end + end +end diff --git a/lib/youplot/backends/unicode_plot_backend.rb b/lib/youplot/backends/unicode_plot_backend.rb index 53bc9b2..95a34e9 100644 --- a/lib/youplot/backends/unicode_plot_backend.rb +++ b/lib/youplot/backends/unicode_plot_backend.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +require_relative 'processing' require 'unicode_plot' module YouPlot @@ -15,7 +16,7 @@ module YouPlot series = data.series # `uplot count` if count - series = series[0].value_counts.yield_self { |h| [h.keys, h.values] } + series = Processing.count_values(series[0]) params.title = headers[0] if headers end if series.size == 1 diff --git a/test/fixtures/simple-count.txt b/test/fixtures/simple-count.txt deleted file mode 100644 index 222f49c..0000000 --- a/test/fixtures/simple-count.txt +++ /dev/null @@ -1,12 +0,0 @@ - ┌ ┐ - -10 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1.0 - 10 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1.0 - -20 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1.0 - 20 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1.0 - -30 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1.0 - 30 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1.0 - -40 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1.0 - 40 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1.0 - -50 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1.0 - 50 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1.0 - └ ┘ diff --git a/test/youplot/backends/processing_test.rb b/test/youplot/backends/processing_test.rb new file mode 100644 index 0000000..88954b5 --- /dev/null +++ b/test/youplot/backends/processing_test.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +require_relative '../../test_helper' + +class YouPlotCommandTest < Test::Unit::TestCase + test :count_values do + @m = YouPlot::Backends::Processing + assert_equal([%i[a b c], [3, 2, 1]], @m.count_values(%i[a a a b b c])) + assert_equal([%i[c b a], [3, 2, 1]], @m.count_values(%i[a b b c c c])) + end + + test :count_values_non_tally do + @m = YouPlot::Backends::Processing + assert_equal([%i[a b c], [3, 2, 1]], @m.count_values(%i[a a a b b c], tally: false)) + assert_equal([%i[c b a], [3, 2, 1]], @m.count_values(%i[a b b c c c], tally: false)) + end +end diff --git a/test/youplot/simple_test.rb b/test/youplot/simple_test.rb index eaf1ca2..44fc3b1 100644 --- a/test/youplot/simple_test.rb +++ b/test/youplot/simple_test.rb @@ -112,15 +112,17 @@ class YouPlotSimpleTest < Test::Unit::TestCase assert_equal fixture('simple-boxplot.txt'), @stderr_file.read end - test :c do - YouPlot::Command.new(['count']).run - assert_equal fixture('simple-count.txt'), @stderr_file.read - end + # test :c do + # omit + # YouPlot::Command.new(['count', '-H', '-d,']).run + # assert_equal fixture('iris-count.txt'), @stderr_file.read + # end - test :count do - YouPlot::Command.new(['c']).run - assert_equal fixture('simple-count.txt'), @stderr_file.read - end + # test :count do + # omit + # YouPlot::Command.new(['c', '-H', '-d,']).run + # assert_equal fixture('iris-count.txt'), @stderr_file.read + # end test :plot_output_stdout do YouPlot::Command.new(['line', '-o']).run