diff --git a/lib/Terminal/Graphing/BarChart/Horizontal.rakumod b/lib/Terminal/Graphing/BarChart/Horizontal.rakumod
index a4e2822..b7f2b77 100644
--- a/lib/Terminal/Graphing/BarChart/Horizontal.rakumod
+++ b/lib/Terminal/Graphing/BarChart/Horizontal.rakumod
@@ -9,6 +9,7 @@ class Terminal::Graphing::BarChart::Horizontal is Terminal::Graphing::BarChart::
# has $.x_axis_labels = [];
has $.bar_drawing_character = '▄';
+ has $.x_axis_divider_character = '─';
method generate() returns Str {
self.validate-or-die();
@@ -16,12 +17,18 @@ class Terminal::Graphing::BarChart::Horizontal is Terminal::Graphing::BarChart::
my $rows = self.generate-core-graph($.data, $.bar_length, $.bar_drawing_character);
# 0x0 is top left
- my $max_y_label = $.y_axis_labels.map({.chars}).max;
+ my $max_y_label = $.y_axis_labels.is-empty ?? 0 !! $.y_axis_labels.map({.chars}).max;
my $max_x_label = $.x_axis_labels.is-empty ?? 0 !! 1;
- #$.x_axis_labels.map({.Str.chars}).max;
+ #$.x_axis_labels.map({.Str.chars}).max;
my $per_x_label_chars = $max_x_label > 0
?? ($.bar_length / $.x_axis_labels.elems).Int
!! 0; # guaranteed evenly divisible
+ my $divider_row = $max_x_label > 0
+ ?? ((' ' x ($max_y_label) + 3)
+ ~ ($.x_axis_divider_character x $.bar_length))
+ .split('', skip-empty=>True)
+ !! [];
+
my $padded_x_labels = $max_x_label > 0
?? $.x_axis_labels.map({self.pad-with-space($_, $per_x_label_chars)}).Array
!! [];
@@ -46,8 +53,9 @@ class Terminal::Graphing::BarChart::Horizontal is Terminal::Graphing::BarChart::
}
}
if $max_x_label > 0 {
+ $rows.push( $divider_row );
$rows.push(self.pad-with-x-array(
- " │ ",
+ " ",
$max_y_label + 3,
' ',
False
@@ -55,6 +63,7 @@ class Terminal::Graphing::BarChart::Horizontal is Terminal::Graphing::BarChart::
.append($padded_x_labels.Array));
}
} elsif $max_x_label > 0 {
+ $rows.push( $divider_row );
$rows.push($padded_x_labels.Array);
}
diff --git a/t/02-horizontal.rakutest b/t/02-horizontal.rakutest
index c12351f..c669547 100644
--- a/t/02-horizontal.rakutest
+++ b/t/02-horizontal.rakutest
@@ -16,43 +16,44 @@ is $bare_graph.generate(), $expected_graph, 'bad bare graph';
-# my $x_axis_graph = Terminal::Graphing::BarChart::Horizontal.new(
-# data => $data,
-# bar_length => 10,
-# x_axis_labels => .Array
-# );
-# throws-like { $x_axis_graph.generate }, Exception, message => /"bar_length must be evenly divisble"/;
+my $x_axis_graph = Terminal::Graphing::BarChart::Horizontal.new(
+ data => $data,
+ bar_length => 10,
+ x_axis_labels => .Array
+);
+throws-like { $x_axis_graph.generate }, Exception, message => /"bar_length must be evenly divisble"/;
-# $x_axis_graph = Terminal::Graphing::BarChart::Horizontal.new(
-# data => $data,
-# bar_length => 10,
-# x_axis_labels => .Array
-# );
+$x_axis_graph = Terminal::Graphing::BarChart::Horizontal.new(
+ data => $data,
+ bar_length => 10,
+ x_axis_labels => .Array
+);
-# $expected_graph =
-# " \n▄ \n▄▄ \n▄▄▄ \n▄▄▄▄ \n▄▄▄▄▄ \n▄▄▄▄▄▄ \n▄▄▄▄▄▄▄ \n▄▄▄▄▄▄▄▄ \n▄▄▄▄▄▄▄▄▄ \n▄▄▄▄▄▄▄▄▄▄\nabcdefghij";
-# is $x_axis_graph.generate, $expected_graph, 'bad x axis only graph';
+$expected_graph =
+" \n▄ \n▄▄ \n▄▄▄ \n▄▄▄▄ \n▄▄▄▄▄ \n▄▄▄▄▄▄ \n▄▄▄▄▄▄▄ \n▄▄▄▄▄▄▄▄ \n▄▄▄▄▄▄▄▄▄ \n▄▄▄▄▄▄▄▄▄▄\n ──────────\nabcdefghij";
-# my $y_axis_graph = Terminal::Graphing::BarChart::Horizontal.new(
-# data => $data,
-# bar_length => 10,
-# y_axis_labels => .Array
-# );
+is $x_axis_graph.generate, $expected_graph, 'bad x axis only graph';
-# $expected_graph = "a │ \nb │ ▄ \nc │ ▄▄ \nd │ ▄▄▄ \ne │ ▄▄▄▄ \nf │ ▄▄▄▄▄ \ng │ ▄▄▄▄▄▄ \nh │ ▄▄▄▄▄▄▄ \ni │ ▄▄▄▄▄▄▄▄ \nj │ ▄▄▄▄▄▄▄▄▄ \n │ ▄▄▄▄▄▄▄▄▄▄";
+my $y_axis_graph = Terminal::Graphing::BarChart::Horizontal.new(
+ data => $data,
+ bar_length => 10,
+ y_axis_labels => .Array
+);
-# is $y_axis_graph.generate, $expected_graph, 'bad y axis only graph';
+$expected_graph = "a │ \nb │ ▄ \nc │ ▄▄ \nd │ ▄▄▄ \ne │ ▄▄▄▄ \nf │ ▄▄▄▄▄ \ng │ ▄▄▄▄▄▄ \nh │ ▄▄▄▄▄▄▄ \ni │ ▄▄▄▄▄▄▄▄ \nj │ ▄▄▄▄▄▄▄▄▄ \n │ ▄▄▄▄▄▄▄▄▄▄";
-# my $x_and_y_axis_graph = Terminal::Graphing::BarChart::Horizontal.new(
-# data => $data,
-# bar_length => 10,
-# x_axis_labels => .Array,
-# y_axis_labels => <0 1 2 3 4 5 6 7 8 9>.Array
-# );
+is $y_axis_graph.generate, $expected_graph, 'bad y axis only graph';
+
+my $x_and_y_axis_graph = Terminal::Graphing::BarChart::Horizontal.new(
+ data => $data,
+ bar_length => 10,
+ x_axis_labels => .Array,
+ y_axis_labels => <0 1 2 3 4 5 6 7 8 9>.Array
+);
-# $expected_graph ="0 │ \n1 │ ▄ \n2 │ ▄▄ \n3 │ ▄▄▄ \n4 │ ▄▄▄▄ \n5 │ ▄▄▄▄▄ \n6 │ ▄▄▄▄▄▄ \n7 │ ▄▄▄▄▄▄▄ \n8 │ ▄▄▄▄▄▄▄▄ \n9 │ ▄▄▄▄▄▄▄▄▄ \n │ ▄▄▄▄▄▄▄▄▄▄\n │ abcdefghij";
+$expected_graph ="0 │ \n1 │ ▄ \n2 │ ▄▄ \n3 │ ▄▄▄ \n4 │ ▄▄▄▄ \n5 │ ▄▄▄▄▄ \n6 │ ▄▄▄▄▄▄ \n7 │ ▄▄▄▄▄▄▄ \n8 │ ▄▄▄▄▄▄▄▄ \n9 │ ▄▄▄▄▄▄▄▄▄ \n │ ▄▄▄▄▄▄▄▄▄▄\n ──────────\n abcdefghij";
-# is $x_and_y_axis_graph.generate, $expected_graph, 'bad x + y axis graph';
+is $x_and_y_axis_graph.generate, $expected_graph, 'bad x + y axis graph';
done-testing;