diff --git a/src/fun.sh b/src/fun.sh index c8c4420..48b0894 100755 --- a/src/fun.sh +++ b/src/fun.sh @@ -286,6 +286,36 @@ tupr() { tupx 1- "$@" | last } +ntup() { + if [[ $# -eq 0 ]]; then + local arg + read arg + ntup $arg + else + list "$@" | map lambda x . 'echo "$x" | base64 --wrap=0 ; echo' | join , '(' ')' + fi +} + +ntupx() { + if [[ $# -eq 1 ]]; then + local arg + read arg + ntupx "$1" "$arg" + else + local n=$1 + shift + echo "$@" | stripl '(' | stripr ')' | cut -d',' -f${n} | tr , '\n' | map lambda x . 'echo "$x" | base64 -d' + fi +} + +ntupl() { + ntupx 1 "$@" +} + +ntupr() { + ntupx 1- "$@" | last +} + zip() { local list=$* cat - | while read x; do diff --git a/test/tup_test.sh b/test/tup_test.sh index 78cdeb8..25cd8bf 100755 --- a/test/tup_test.sh +++ b/test/tup_test.sh @@ -69,4 +69,16 @@ testTupr() { assertEquals '5' "$(tup 5 | tupr)" } +testNTup() { + assertEquals '(KFlRbz0sWWdvPSkK,Ywo=)' "$(ntup $(ntup a b) c)" + assertEquals '(YQo=,Ygo=)' "$(ntupl '(KFlRbz0sWWdvPSkK,Ywo=)')" + assertEquals 'a' "$(ntupl '(YQo=,Ygo=)')" + assertEquals 'b' "$(ntupr '(YQo=,Ygo=)')" + assertEquals 'c' "$(ntupr '(KFlRbz0sWWdvPSkK,Ywo=)')" + assertEquals 'a' "$(ntup $(ntup a b) c | ntupx 1 | ntupx 1)" + assertEquals 'b' "$(ntup $(ntup a b) c | ntupx 1 | ntupx 2)" + assertEquals 'c' "$(ntup $(ntup a b) c | ntupx 2)" + assertEquals 'a b' "$(ntup $(ntup a b) c | ntupx 1 | ntupx 1,2 | unlist)" +} + . ./shunit2-init.sh