mirror of
https://github.com/RGBCube/nu_scripts
synced 2025-07-30 21:57:44 +00:00
Update bar
function (#589)
* fix indexing issue * [bar] make default output without ansi codes * [bar] use actual testing framework
This commit is contained in:
parent
4cbd678d78
commit
5ed3a961af
1 changed files with 20 additions and 34 deletions
|
@ -1,30 +1,32 @@
|
|||
# construct bars based of a given percentage from a given width (5 is default)
|
||||
# > bar 0.2
|
||||
# █
|
||||
# > bar 0.71 --width 10
|
||||
# ███████
|
||||
# > bar 0.71
|
||||
# ███▌
|
||||
def 'bar' [
|
||||
percentage: float
|
||||
--background (-b): string = 'default'
|
||||
--foreground (-f): string = 'default'
|
||||
--progress (-p) # output the result using 'print -n' with '\r' at the end
|
||||
--progress (-p) # output the result using 'print -n'
|
||||
--width (-w): int = 5
|
||||
] {
|
||||
let blocks = [null "▏" "▎" "▍" "▌" "▋" "▊" "▉" "█"]
|
||||
let $whole_part = (($blocks | last) * ($percentage * $width // 1))
|
||||
let $fraction = (
|
||||
$blocks
|
||||
$blocks
|
||||
| get (
|
||||
($percentage * $width) mod 1
|
||||
| $in * ($blocks | length)
|
||||
| math floor
|
||||
($percentage * $width) mod 1
|
||||
| $in * ($blocks | length | $in - 1)
|
||||
| math round
|
||||
)
|
||||
)
|
||||
|
||||
let $result = (
|
||||
$"($whole_part)($fraction)"
|
||||
| fill -c $' ' -w $width
|
||||
| $"(ansi -e {fg: ($foreground), bg: ($background)})($in)(ansi reset)"
|
||||
let result = (
|
||||
$"($whole_part)($fraction)"
|
||||
| fill -c $' ' -w $width
|
||||
| if ($foreground == 'default') and ($background == 'default') {} else {
|
||||
$"(ansi -e {fg: ($foreground), bg: ($background)})($in)(ansi reset)"
|
||||
}
|
||||
)
|
||||
|
||||
if $progress {
|
||||
|
@ -34,28 +36,12 @@ def 'bar' [
|
|||
}
|
||||
}
|
||||
|
||||
def assert_eq [num: int, expected: string, input_1: float, input_2?] {
|
||||
let actual = (
|
||||
if ($input_2 == null) {bar $input_1} else {
|
||||
bar $input_1 --width $input_2
|
||||
}
|
||||
)
|
||||
let span = (metadata $expected).span;
|
||||
if $actual != $expected {
|
||||
error make {
|
||||
msg: "Actual != Expected",
|
||||
label: {
|
||||
text: $"expected ($expected) but got ($actual)", start: $span.start, end: $span.end
|
||||
}
|
||||
}
|
||||
} else {
|
||||
print $"Test ($num) (ansi green)passed(ansi reset) ✓"
|
||||
}
|
||||
}
|
||||
use std assert equal
|
||||
|
||||
#[test]
|
||||
def bar_tests [] {
|
||||
assert_eq 1 "[49;39m▏ [0m" 0.03
|
||||
assert_eq 2 "[49;39m▎ [0m" 0.03 10
|
||||
assert_eq 3 "[49;39m▊[0m" 0.71 1
|
||||
assert_eq 4 "[49;39m███████ [0m" 0.71 10
|
||||
}
|
||||
equal "█▌ " (bar 0.3)
|
||||
equal "███ " (bar 0.3 --width 10)
|
||||
equal "▊" (bar 0.71 --width 1)
|
||||
equal "███████▏ " (bar 0.71 --width 10)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue