From d2f424e605ab02df9505890da2b3c0d8de20b8e1 Mon Sep 17 00:00:00 2001 From: Emily Grace Seville Date: Sun, 14 May 2023 23:01:22 +1000 Subject: [PATCH] feat(module): add random-list (#488) * feat(module): add random-list * feat(module): use options more often * feat(module): prettify errors --- modules/random-list/random-list.nu | 110 +++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 modules/random-list/random-list.nu diff --git a/modules/random-list/random-list.nu b/modules/random-list/random-list.nu new file mode 100644 index 0000000..3b6a58a --- /dev/null +++ b/modules/random-list/random-list.nu @@ -0,0 +1,110 @@ +def throw-error [ + error: string + msg: string + span: record +] { + error make { + msg: $"(ansi red_bold)($error)(ansi reset)" + label: { + text: $msg + start: $span.start + end: $span.end + } + } +} + +# Generate a random boolean list. +export def "random-list bool" [ + list_length: int, # A length of the list + --bias (-b): float = 0.5 # A probability of "true" +] { + if $bias < 0 or $bias > 1 { + throw-error "value_error" "must be between 0 and 1" (metadata $bias | get span) + } + if $list_length < 0 { + throw-error "value_error" "must be greater than 0" (metadata $list_length | get span) + } + + 1..$list_length | each {|it| + random bool --bias $bias + } +} + +# Generate a random char list. +export def "random-list chars" [ + list_length: int, # A length of the list + --length (-l): int = 5 # A length of the string +] { + if $list_length < 0 { + throw-error "value_error" "must be greater than 0" (metadata $list_length | get span) + } + if $length < 0 { + throw-error "value_error" "must be greater than 0" (metadata $length | get span) + } + + 1..$list_length | each {|it| + random chars --length $length + } +} + +# Generate a random decimal list. +export def "random-list decimal" [ + list_length: int, # A length of the list + --range (-r): range # A range of the value +] { + if $list_length < 0 { + throw-error "value_error" "must be greater than 0" (metadata $list_length | get span) + } + + 1..$list_length | each {|it| + random decimal $range + } +} + +# Generate a random dice list. +export def "random-list dice" [ + list_length: int, # A length of the list + --roll-count (-r): int = 6, # A roll count + --side-count (-s): int = 6 # A side count +] { + if $list_length < 0 { + throw-error "value_error" "must be greater than 0" (metadata $list_length | get span) + } + if $roll_count < 0 { + throw-error "value_error" "must be greater than 0" (metadata $roll_count | get span) + } + if $side_count < 0 { + throw-error "value_error" "must be greater than 0" (metadata $side_count | get span) + } + + 1..$list_length | each {|it| + random dice --dice $roll_count --sides $side_count + } +} + +# Generate a random integer list. +export def "random-list integer" [ + list_length: int # A length of the list + --range (-r): range # A range of the value +] { + if $list_length < 0 { + throw-error "value_error" "must be greater than 0" (metadata $list_length | get span) + } + + 1..$list_length | each {|it| + random integer $range + } +} + +# Generate a random uuid list. +export def "random-list uuid" [ + list_length: int # A length of the list +] { + if $list_length < 0 { + throw-error "value_error" "must be greater than 0" (metadata $list_length | get span) + } + + 1..$list_length | each {|it| + random uuid + } +}