From 9502f7a8a2c616992cc7fc212809029597606441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awomir=20=C5=9Aled=C5=BA?= Date: Sat, 10 Mar 2018 14:12:05 +0100 Subject: [PATCH] New implementation of tup/tupx/tupr --- src/fun.sh | 18 ++++++++++--- test/tup_test.sh | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 4 deletions(-) create mode 100755 test/tup_test.sh diff --git a/src/fun.sh b/src/fun.sh index 07da0a7..975a7f6 100755 --- a/src/fun.sh +++ b/src/fun.sh @@ -188,9 +188,19 @@ filter() { done } +stripl() { + local arg=$1 + cat - | map lambda l . 'ret ${l##'$arg'}' +} + +stripr() { + local arg=$1 + cat - | map lambda l . 'ret ${l%%'$arg'}' +} + strip() { local arg=$1 - cat - | map lambda l . 'ret ${l##'$arg'}' | map lambda l . 'ret ${l%%'$arg'}' + cat - | stripl "$arg" | stripr "$arg" } buff() { @@ -210,7 +220,7 @@ buff() { } tup() { - list "$@" | join , '(' ')' + list "$@" | map lambda x . 'echo ${x/,/u002c}' | join , '(' ')' } tupx() { @@ -221,7 +231,7 @@ tupx() { else local n=$1 shift - list "$@" | strip '\(' | strip '\)' | unlist | cut -d',' -f${n} + echo "$@" | stripl '(' | stripr ')' | cut -d',' -f${n} | tr ',' '\n' | map lambda x . 'echo ${x/u002c/,}' fi } @@ -230,7 +240,7 @@ tupl() { } tupr() { - tupx 2 "$@" + tupx 1- "$@" | last } zip() { diff --git a/test/tup_test.sh b/test/tup_test.sh new file mode 100755 index 0000000..586a409 --- /dev/null +++ b/test/tup_test.sh @@ -0,0 +1,68 @@ +#! /bin/bash + +testTupIfEmpty() { + assertEquals '()' $(tup) +} + +testTupIfOneElement() { + assertEquals '(1)' $(tup 1) + assertEquals '(")' $(tup '"') + assertEquals "(')" $(tup "'") + assertEquals "(u002c)" $(tup ",") + assertEquals "(()" $(tup "(") + assertEquals "())" $(tup ")") +} + +testTupHappyPath() { + assertEquals '(1,2,3,4,5)' $(tup 1 2 3 4 5) + assertEquals '(a-1,b-2,c-3)' $(tup 'a-1' 'b-2' 'c-3') + assertEquals '(a b,c d e,f)' "$(tup 'a b' 'c d e' 'f')" +} + +testTupxHappyPath() { + assertEquals '4' $(tup 4 5 1 4 | tupx 1) + assertEquals '5' $(tup 4 5 1 4 | tupx 2) + assertEquals '1' $(tup 4 5 1 4 | tupx 3) + assertEquals '4' $(tup 4 5 1 4 | tupx 4) + +} + +testTupxIfEmpty() { + assertEquals '' "$(tup | tupx 1)" + assertEquals '' "$(tup | tupx 5)" +} + +testTupxIfZeroIndex() { + assertEquals '' "$(tup 1 3 | tupx 0 2>/dev/null)" +} + +testTupxIfSpecialChars() { + assertEquals ',' "$(tup ',' | tupx 1)" + assertEquals '(' "$(tup '(' | tupx 1)" + assertEquals ')' "$(tup ')' | tupx 1)" + assertEquals '()' "$(tup '()' | tupx 1)" + assertEquals '(' "$(tup '(' ')' | tupx 1)" + assertEquals '(' "$(tup '(' '(' | tupx 1)" + assertEquals ')' "$(tup ')' ')' | tupx 1)" + assertEquals ',' "$(tup 'u002c' | tupx 1)" +} + +testTupxRange() { + assertEquals '4 5' "$(tup 4 5 1 4 | tupx 1-2 | unlist)" + assertEquals '4 4' "$(tup 4 5 1 4 | tupx 1,4 | unlist)" + assertEquals '4 5 4' "$(tup 4 5 1 4 | tupx 1,2,4 | unlist)" +} + +testTupl() { + assertEquals '4' "$(tup 4 5 | tupl)" + assertEquals '4' "$(tup 4 5 6 | tupl)" + assertEquals '6' "$(tup 6 | tupl)" +} + +testTupr() { + assertEquals '5' "$(tup 4 5 | tupr)" + assertEquals '5' "$(tup 1 4 5 | tupr)" + assertEquals '5' "$(tup 5 | tupr)" +} + +. ./shunit2-init.sh \ No newline at end of file