mirror of
https://github.com/RGBCube/nu_scripts
synced 2025-08-02 15:17:47 +00:00
add progress bar examples + some benchmarks (#224)
This commit is contained in:
parent
c2b3d48279
commit
bc6903f3fa
5 changed files with 343 additions and 0 deletions
153
coloring/gradient_benchmark_no_check.nu
Normal file
153
coloring/gradient_benchmark_no_check.nu
Normal file
|
@ -0,0 +1,153 @@
|
||||||
|
# Kubouch wrote this on/around 01/26/2022
|
||||||
|
|
||||||
|
def iter_inc [incr mult iter] {
|
||||||
|
$incr + $mult * $iter
|
||||||
|
}
|
||||||
|
|
||||||
|
#let is_release = input "Did you compile in a release mode? y/n "
|
||||||
|
let is_release = "y"
|
||||||
|
|
||||||
|
if ($is_release | str downcase | str trim) == "y" {
|
||||||
|
|
||||||
|
$"running test 0 at (date now | date format '%Y-%m-%d %H:%M:%S.%3f')"
|
||||||
|
# 0. this has wrong output
|
||||||
|
let 0 = (seq 10 | benchmark {
|
||||||
|
let height = 40
|
||||||
|
let width = 160
|
||||||
|
let stamp = 'Nu'
|
||||||
|
seq 0 $height | each { |row|
|
||||||
|
let row_data = (seq 0 $width | each { |col|
|
||||||
|
let fgcolor = (iter_inc 2 2 $col)
|
||||||
|
if $fgcolor > 200 && $fgcolor < 210 {
|
||||||
|
$"(ansi -e '48;2;0;0;')($fgcolor)m($stamp)(ansi -e '0m')"
|
||||||
|
} else {
|
||||||
|
$"(ansi -e '48;2;0;0;')($fgcolor)m(char sp)(ansi -e '0m')"
|
||||||
|
}
|
||||||
|
} | str collect)
|
||||||
|
$"($row_data)(char newline)"
|
||||||
|
} | str collect
|
||||||
|
} | math avg)
|
||||||
|
|
||||||
|
|
||||||
|
$"running test 1 at (date now | date format '%Y-%m-%d %H:%M:%S.%3f')"
|
||||||
|
# 1. Fixed newline to fix the output (char cr)
|
||||||
|
let 1 = (seq 10 | benchmark {
|
||||||
|
let height = 40
|
||||||
|
let width = 160
|
||||||
|
let stamp = 'Nu'
|
||||||
|
seq 0 $height | each { |row|
|
||||||
|
let row_data = (seq 0 $width | each { |col|
|
||||||
|
let fgcolor = (iter_inc 2 2 $col)
|
||||||
|
if $fgcolor > 200 && $fgcolor < 210 {
|
||||||
|
$"(ansi -e '48;2;0;0;')($fgcolor)m($stamp)(ansi -e '0m')"
|
||||||
|
} else {
|
||||||
|
$"(ansi -e '48;2;0;0;')($fgcolor)m(char sp)(ansi -e '0m')"
|
||||||
|
}
|
||||||
|
} | str collect)
|
||||||
|
$"($row_data)(char cr)"
|
||||||
|
} | str collect
|
||||||
|
} | math avg)
|
||||||
|
|
||||||
|
$"running test 2 at (date now | date format '%Y-%m-%d %H:%M:%S.%3f')"
|
||||||
|
# 2. Replace (char sp) with just space
|
||||||
|
let 2 = (seq 10 | benchmark {
|
||||||
|
let height = 40
|
||||||
|
let width = 160
|
||||||
|
let stamp = 'Nu'
|
||||||
|
seq 0 $height | each { |row|
|
||||||
|
let row_data = (seq 0 $width | each { |col|
|
||||||
|
let fgcolor = (iter_inc 2 2 $col)
|
||||||
|
if $fgcolor > 200 && $fgcolor < 210 {
|
||||||
|
$"(ansi -e '48;2;0;0;')($fgcolor)m($stamp)(ansi -e '0m')"
|
||||||
|
} else {
|
||||||
|
$"(ansi -e '48;2;0;0;')($fgcolor)m (ansi -e '0m')"
|
||||||
|
}
|
||||||
|
} | str collect)
|
||||||
|
$"($row_data)(char cr)"
|
||||||
|
} | str collect
|
||||||
|
} | math avg)
|
||||||
|
|
||||||
|
$"running test 3 at (date now | date format '%Y-%m-%d %H:%M:%S.%3f')"
|
||||||
|
# 3. Precompute (ansi -e '48;2;0;0;') and (ansi -e '0m') -- seems to be slower
|
||||||
|
let 3 = (seq 10 | benchmark {
|
||||||
|
let height = 40
|
||||||
|
let width = 160
|
||||||
|
let stamp = 'Nu'
|
||||||
|
let ansi1 = ansi -e '48;2;0;0;'
|
||||||
|
let ansi2 = ansi -e '0m'
|
||||||
|
seq 0 $height | each { |row|
|
||||||
|
let row_data = (seq 0 $width | each { |col|
|
||||||
|
let fgcolor = (iter_inc 2 2 $col)
|
||||||
|
if $fgcolor > 200 && $fgcolor < 210 {
|
||||||
|
$"($ansi1)($fgcolor)m($stamp)($ansi2)"
|
||||||
|
} else {
|
||||||
|
$"($ansi1)($fgcolor)m(char sp)($ansi2)"
|
||||||
|
}
|
||||||
|
} | str collect)
|
||||||
|
$"($row_data)(char cr)"
|
||||||
|
} | str collect
|
||||||
|
} | math avg)
|
||||||
|
|
||||||
|
$"running test 4 at (date now | date format '%Y-%m-%d %H:%M:%S.%3f')"
|
||||||
|
# 4. Inline iter_inc call
|
||||||
|
let 4 = (seq 10 | benchmark {
|
||||||
|
let height = 40
|
||||||
|
let width = 160
|
||||||
|
let stamp = 'Nu'
|
||||||
|
seq 0 $height | each { |row|
|
||||||
|
let row_data = (seq 0 $width | each { |col|
|
||||||
|
let fgcolor = 2 + 2 * $col
|
||||||
|
if $fgcolor > 200 && $fgcolor < 210 {
|
||||||
|
$"(ansi -e '48;2;0;0;')($fgcolor)m($stamp)(ansi -e '0m')"
|
||||||
|
} else {
|
||||||
|
$"(ansi -e '48;2;0;0;')($fgcolor)m(char sp)(ansi -e '0m')"
|
||||||
|
}
|
||||||
|
} | str collect)
|
||||||
|
$"($row_data)(char cr)"
|
||||||
|
} | str collect
|
||||||
|
} | math avg)
|
||||||
|
|
||||||
|
$"running test 5 at (date now | date format '%Y-%m-%d %H:%M:%S.%3f')"
|
||||||
|
# 5. Combine (char sp) substitution and iter_inc inlining
|
||||||
|
let 5 = (seq 10 | benchmark {
|
||||||
|
let height = 40
|
||||||
|
let width = 160
|
||||||
|
let stamp = 'Nu'
|
||||||
|
seq 0 $height | each { |row|
|
||||||
|
let row_data = (seq 0 $width | each { |col|
|
||||||
|
let fgcolor = 2 + 2 * $col
|
||||||
|
if $fgcolor > 200 && $fgcolor < 210 {
|
||||||
|
$"(ansi -e '48;2;0;0;')($fgcolor)m($stamp)(ansi -e '0m')"
|
||||||
|
} else {
|
||||||
|
$"(ansi -e '48;2;0;0;')($fgcolor)m (ansi -e '0m')"
|
||||||
|
}
|
||||||
|
} | str collect)
|
||||||
|
$"($row_data)(char cr)"
|
||||||
|
} | str collect
|
||||||
|
} | math avg)
|
||||||
|
|
||||||
|
$"running test 6 at (date now | date format '%Y-%m-%d %H:%M:%S.%3f')"
|
||||||
|
# 6. The above with par-each outer loop (using par-each anywhere else breaks the output)
|
||||||
|
let 6 = (seq 10 | benchmark {
|
||||||
|
let height = 40
|
||||||
|
let width = 160
|
||||||
|
let stamp = 'Nu'
|
||||||
|
seq 0 $height | par-each { |row|
|
||||||
|
let row_data = (seq 0 $width | each { |col|
|
||||||
|
let fgcolor = 2 + 2 * $col
|
||||||
|
if $fgcolor > 200 && $fgcolor < 210 {
|
||||||
|
$"(ansi -e '48;2;0;0;')($fgcolor)m($stamp)(ansi -e '0m')"
|
||||||
|
} else {
|
||||||
|
$"(ansi -e '48;2;0;0;')($fgcolor)m (ansi -e '0m')"
|
||||||
|
}
|
||||||
|
} | str collect)
|
||||||
|
$"($row_data)(char cr)"
|
||||||
|
} | str collect
|
||||||
|
} | math avg)
|
||||||
|
|
||||||
|
echo 'collating tests'
|
||||||
|
[ $0 $1 $2 $3 $4 $5 $6 ]
|
||||||
|
|
||||||
|
} else {
|
||||||
|
echo "Compile in a release mode!"
|
||||||
|
}
|
102
coloring/sg.nu
Normal file
102
coloring/sg.nu
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
# This is just for benchmarking
|
||||||
|
# it uses the no check benchmark so it doesn't prompt you
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
||||||
|
source gradient_benchmark_no_check.nu
|
21
progress_bar/percent_meter.nu
Normal file
21
progress_bar/percent_meter.nu
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
def loading [] {
|
||||||
|
print -n $"Loading (char newline)"
|
||||||
|
0..100 | each { |tick|
|
||||||
|
sleep 50ms
|
||||||
|
# I believe '1000D' means move the cursor to the left 1000 columns
|
||||||
|
print -n $"(ansi -e '1000D')($tick)%"
|
||||||
|
}
|
||||||
|
#show_cursor
|
||||||
|
}
|
||||||
|
|
||||||
|
def show_cursor [] {
|
||||||
|
print $"(ansi -e '?25h')"
|
||||||
|
}
|
||||||
|
|
||||||
|
def hide_cursor [] {
|
||||||
|
print $"(ansi -e '?25l')"
|
||||||
|
}
|
||||||
|
|
||||||
|
hide_cursor
|
||||||
|
loading
|
||||||
|
show_cursor
|
52
progress_bar/progress_bar.nu
Normal file
52
progress_bar/progress_bar.nu
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# progress bar attempt
|
||||||
|
# https://askubuntu.com/questions/747143/create-a-progress-bar-in-bash
|
||||||
|
# https://www.shellscript.sh/tips/progressbar/
|
||||||
|
|
||||||
|
# There is a strange artifact drawing the first two full blocks
|
||||||
|
# You can see this artifact better in progress_bar_no_back.nu
|
||||||
|
# I'm not sure what's going on nor how to fix it.
|
||||||
|
|
||||||
|
let pb_len = 25
|
||||||
|
let bg_fill = "▒" # Fill up to $pb_len
|
||||||
|
let blocks = ["▏" "▎" "▍" "▌" "▋" "▊" "▉" "█"]
|
||||||
|
|
||||||
|
# "█" #8/8
|
||||||
|
# "▉" #7/8
|
||||||
|
# "▊" #3/4
|
||||||
|
# "▋" #5/8
|
||||||
|
# "▌" #1/2
|
||||||
|
# "▍" #3/8
|
||||||
|
# "▎" #1/4
|
||||||
|
# "▏" #1/8
|
||||||
|
|
||||||
|
# Turn off the cursor
|
||||||
|
ansi cursor_off
|
||||||
|
# Move cursor all the way to the left
|
||||||
|
print -n $"(ansi -e '1000D')"
|
||||||
|
# Draw the background for the progress bar
|
||||||
|
print -n ($bg_fill | str lpad -c $bg_fill -l $pb_len)
|
||||||
|
|
||||||
|
1..<$pb_len | each { |cur_progress|
|
||||||
|
# This is kind of a hack because it's not incrementally drawing a new box
|
||||||
|
# It's drawing the entire row every time with a different padding amount
|
||||||
|
# echo $blocks.7 | str lpad -c $blocks.7 -l $it
|
||||||
|
|
||||||
|
0..7 | each { |tick|
|
||||||
|
let cur_idx = ($tick mod 8)
|
||||||
|
let cur_block = (echo $blocks | get $cur_idx)
|
||||||
|
print -n $"(ansi -e '1000D')($cur_block | str lpad -c $blocks.7 -l $cur_progress)"
|
||||||
|
sleep 20ms
|
||||||
|
}
|
||||||
|
print -n $"(ansi -e '1000D')"
|
||||||
|
}
|
||||||
|
# Fill in the last background block
|
||||||
|
print $"($blocks.7 | str lpad -c $blocks.7 -l $pb_len)"
|
||||||
|
"Done"
|
||||||
|
ansi cursor_on
|
||||||
|
|
||||||
|
|
||||||
|
# Try to do this in the next version
|
||||||
|
# Make it a custom command so you can do
|
||||||
|
# set-progress 33 100
|
||||||
|
# and the display look like
|
||||||
|
# 33% (33/100) [███████████ ]
|
15
progress_bar/progress_bar_no_back.nu
Normal file
15
progress_bar/progress_bar_no_back.nu
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
let blocks = ["▏" "▎" "▍" "▌" "▋" "▊" "▉" "█"]
|
||||||
|
let pb_size = 25
|
||||||
|
ansi cursor_off
|
||||||
|
1..<$pb_size | each { |cur_size|
|
||||||
|
0..7 | each { |tick|
|
||||||
|
let idx = ($tick mod 8)
|
||||||
|
let cur_block = ($blocks | get $idx)
|
||||||
|
print -n $"(ansi -e '1000D')($cur_block | str lpad -c $blocks.7 -l $cur_size)"
|
||||||
|
# sleep 1ms
|
||||||
|
}
|
||||||
|
}
|
||||||
|
char newline
|
||||||
|
'Done'
|
||||||
|
ansi cursor_on
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue