changeset 604:45c47bc1f7d2

farray.sh: Moved all currently existing tests for alists into cram tests. Removed existing tests from farray.sh -- and put them into farray-alist.t.
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 18 Sep 2024 23:08:06 +0200
parents d4e8474ecc8b
children 96366e2075fe
files share/local-bsdtools/farray.sh tests/farray-alist.t tests/testsetup.sh
diffstat 3 files changed, 205 insertions(+), 109 deletions(-) [+]
line wrap: on
line diff
--- a/share/local-bsdtools/farray.sh	Wed Sep 18 22:06:45 2024 +0200
+++ b/share/local-bsdtools/farray.sh	Wed Sep 18 23:08:06 2024 +0200
@@ -925,7 +925,7 @@
     [ -z "${__farr_end}" ] && __farr_end="${__farr_len}"
     _farr_make_index __farr_end "${__farr_end}" "${__farr_len}"
     [ ${__farr_end} -lt 1 ] && _farr_fatal "end index must be >= 1"
-    [ ${__farr_end} -gt "${__farr_len}" ] && _farr_fatal "end index exceeds array length"    
+    [ ${__farr_end} -gt "${__farr_len}" ] && _farr_fatal "end index exceeds array length"
 
     __farr_cur_idx=${__farr_start}
     while [ ${__farr_cur_idx} -le ${__farr_end} ]; do
@@ -1935,111 +1935,3 @@
     done
     return 0
 }
-
-
-#:
-#: Some basic tests.
-#:
-_farray_test() {
-    local CMD
-    local _i _var _k _v
-
-    set -
-    set -eu
-
-    falist_create LIST
-    falist_length _i LIST
-    [ "$_i" -eq 0 ] || echo "alist length != 0 (ERROR)"
-    falist_print_length LIST && echo
-    falist_debug LIST
-    falist_destroy LIST
-
-    falist_create LIST
-    falist_set LIST K1 V1
-    falist_set LIST K2 V2
-    falist_debug LIST
-    falist_set LIST K2 "V2 2"
-    falist_set LIST K3 $'" 111222333" \\\'444555 '    # '
-    falist_debug LIST
-    if ! falist_contains LIST K1; then
-        echo "NOT CONTAINS (ERROR)"
-    fi
-    if falist_contains LIST K; then
-        echo "CONTAINS (ERROR)"
-    fi
-    falist_debug LIST
-    falist_get _var LIST K2
-    [ "$_var" = "V2 2" ] || echo "alist element not found (ERROR)"
-    if ! falist_tryget _var LIST K1; then
-        echo "NOT FOUND (ERROR)"
-    fi
-    if falist_tryget _i LIST K; then
-        echo "FOUND (ERROR)"
-    fi
-    falist_length _i LIST
-    echo "LENGTH: $_i"
-    printf "%s" "PRINT LENGTH: "
-    falist_print_length LIST
-    echo
-    _var="$(falist_print_length NON_EXISTING_LIST)"
-    if [ "${_var}" != "-1" ]; then
-        echo "VALID LENGTH (ERROR)"
-    fi
-
-    # Iteration by indexing key and values separately
-    echo "ITERATE (manual indexing):"
-    _i=1
-    while falist_tryget_key_at_index _k LIST ${_i}; do
-        # cannot fail under "normal" circumstances
-        falist_tryget_value_at_index _v LIST ${_i}
-        printf "  KEY: \`%s', VAL: \`%s'\\n" "${_k}" "${_v}"
-        _i=$((${_i} + 1))
-    done
-
-    # Iteration by indexing key and values separately
-    echo "ITERATE (manual indexing over items):"
-    _i=1
-    while falist_tryget_item_at_index _k _v LIST ${_i}; do
-        printf "  KEY: \`%s', VAL: \`%s'\\n" "${_k}" "${_v}"
-        _i=$((${_i} + 1))
-    done
-
-    # Iteration with for each
-    echo "ITERATE (for each):"
-    falist_for_each LIST $'printf "EACH: %s key \\`%s\\\', value \\`%s\\\' at idx %d\\n"'   # `
-
-    falist_clear LIST
-    if ! falist_destroy LIST ; then
-        echo "DESTROY FAILED (ERROR)"
-    fi
-    if falist_destroy LIST ; then
-        echo "DESTROY SUCCEEDED (ERROR)"
-    else
-        echo "(this is ok)"
-    fi
-
-    # Deletion of keys
-    falist_create LIST
-    falist_set LIST 'key 1' 'value 1'
-    falist_set LIST 'key 2' 'value 2'
-    falist_set LIST 'key 3' 'value 3'
-    falist_set LIST 'key 4' 'value 4'
-    falist_set LIST 'key 5' 'value 5'
-    falist_trydel LIST 'key 1' || echo "cannot del key 1"
-    falist_trydel LIST 'key 5'  || echo "cannot del key 5"
-    falist_trydel LIST 'key 3' || echo "cannot del key 3"
-    [ "$(falist_print_length LIST)" -eq 2 ] || echo "length mismatch"
-    falist_get _var LIST 'key 2'
-    [ "$_var" = 'value 2' ] || echo "value mismatch"
-    falist_get _var LIST 'key 4'
-    [ "$_var" = 'value 4' ] || echo "value mismatch"
-    falist_destroy LIST
-
-    # set
-    echo "============================================================"
-    echo "OK."
-    echo "============================================================"
-}
-
-
-# _farray_test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/farray-alist.t	Wed Sep 18 23:08:06 2024 +0200
@@ -0,0 +1,188 @@
+Basic tests of farray.sh's falist_XXX functions
+
+Shell is /bin/sh.
+
+
+Setup
+=====
+
+  $ set -u
+  $ . "${TESTDIR}/testsetup.sh"
+  $ _p_datadir="${TESTDIR}/../share/local-bsdtools"
+  $ . "${_p_datadir}/farray.sh"
+
+
+Basic Creation and Destruction
+==============================
+
+Create an empty alist
+
+  $ falist_create LIST
+  $ falist_length _i LIST
+  $ echo "$_i"
+  0
+  $ test "${_i}" -eq 0
+  $ falist_print_length LIST
+  0 (no-eol)
+
+  $ falist_debug LIST
+  DEBUG: alist `LIST' has length 0
+
+  $ falist_destroy LIST
+  $ ( falist_destroy LIST )
+  ERROR: falist `LIST' not created properly: token empty
+  [1]
+
+  $ check_no_alist_artifacts
+
+
+Clear
+=====
+
+  $ falist_create LIST
+  $ falist_set LIST K1 V1
+  $ falist_set LIST K2 V2
+  $ falist_debug LIST
+  DEBUG: alist `LIST' has length 2
+  DEBUG:     `K1' -> `V1'
+  DEBUG:     `K2' -> `V2'
+  $ falist_length _i LIST
+  $ echo "$_i"
+  2
+  $ falist_print_length LIST
+  2 (no-eol)
+
+  $ falist_clear LIST
+  $ falist_length _i LIST
+  $ echo "$_i"
+  0
+  $ falist_print_length LIST
+  0 (no-eol)
+
+  $ falist_destroy LIST
+  $ check_no_alist_artifacts
+
+
+Get / Set / Contains
+====================
+
+  $ falist_create LIST
+  $ falist_set LIST K1 V1
+  $ falist_set LIST K2 V2
+  $ falist_debug LIST
+  DEBUG: alist `LIST' has length 2
+  DEBUG:     `K1' -> `V1'
+  DEBUG:     `K2' -> `V2'
+  $ falist_length _i LIST
+  $ echo "$_i"
+  2
+  $ falist_print_length LIST
+  2 (no-eol)
+
+  $ falist_set LIST K2 "V2 2"
+  $ falist_set LIST K3 $'" 111222333" \\\'444555 '    # '
+  $ falist_debug LIST
+  DEBUG: alist `LIST' has length 3
+  DEBUG:     `K1' -> `V1'
+  DEBUG:     `K2' -> `V2 2'
+  DEBUG:     `K3' -> `" 111222333" \'444555 '
+  $ falist_length _i LIST
+  $ echo "$_i"
+  3
+  $ falist_print_length LIST
+  3 (no-eol)
+
+  $ falist_contains LIST K1
+  $ falist_contains LIST K
+  [1]
+  $ falist_get _var LIST K2
+  $ echo "$_var"
+  V2 2
+  $ falist_tryget _var LIST K1
+  $ echo "$_var"
+  V1
+  $ falist_tryget _i LIST K
+  [1]
+  $ _var="$(falist_print_length NON_EXISTING_LIST)"
+  ERROR: falist `NON_EXISTING_LIST' not created properly: token empty
+  $ echo "${_var}"
+  -1
+
+  $ falist_destroy LIST
+  $ check_no_alist_artifacts
+
+
+Iteration
+=========
+
+ITERATE (manual indexing)
+
+  $ falist_create LIST
+  $ falist_set LIST K1 V1
+  $ falist_set LIST K2 "V2 2"
+  $ falist_set LIST K3 $'" 111222333" \\\'444555 '    # '
+
+Iteration by indexing key and values separately
+
+  $ _i=1
+  > while falist_tryget_key_at_index _k LIST ${_i}; do
+  >     # cannot fail under "normal" circumstances
+  >     falist_tryget_value_at_index _v LIST ${_i}
+  >     printf "  KEY: \`%s', VAL: \`%s'\\n" "${_k}" "${_v}"
+  >     _i=$((_i + 1))
+  > done
+    KEY: `K1', VAL: `V1'
+    KEY: `K2', VAL: `V2 2'
+    KEY: `K3', VAL: `" 111222333" \'444555 '
+
+ITERATE (manual indexing over items)
+
+  $ _i=1
+  > while falist_tryget_item_at_index _k _v LIST ${_i}; do
+  >     printf "  KEY: \`%s', VAL: \`%s'\\n" "${_k}" "${_v}"
+  >     _i=$((_i + 1))
+  > done
+    KEY: `K1', VAL: `V1'
+    KEY: `K2', VAL: `V2 2'
+    KEY: `K3', VAL: `" 111222333" \'444555 '
+
+ITERATE (for each)
+
+  $ falist_for_each LIST $'printf "EACH: %s key \\`%s\\\', value \\`%s\\\' at idx %d\\n"'   # `
+  EACH: LIST key `K1', value `V1' at idx 1
+  EACH: LIST key `K2', value `V2 2' at idx 2
+  EACH: LIST key `K3', value `" 111222333" \'444555 ' at idx 3
+
+  $ falist_clear LIST
+  $ falist_destroy LIST
+  $ falist_destroy LIST
+  ERROR: falist `LIST' not created properly: token empty
+  [1]
+
+
+Deletion of keys
+================
+
+  $ falist_create LIST
+  $ falist_set LIST 'key 1' 'value 1'
+  $ falist_set LIST 'key 2' 'value 2'
+  $ falist_set LIST 'key 3' 'value 3'
+  $ falist_set LIST 'key 4' 'value 4'
+  $ falist_set LIST 'key 5' 'value 5'
+  $ falist_trydel LIST 'key 1'
+  $ falist_trydel LIST 'key 5'
+  $ falist_trydel LIST 'key 3'
+  $ falist_trydel LIST "non-existing key"
+  [1]
+  $ falist_print_length LIST
+  2 (no-eol)
+  $ falist_get _var LIST 'key 2'
+  $ printf '%s' "$_var"
+  value 2 (no-eol)
+  $ falist_get _var LIST 'key 4'
+  $ printf '%s' "$_var"
+  value 4 (no-eol)
+
+  $ falist_destroy LIST
+
+  $ check_no_alist_artifacts
--- a/tests/testsetup.sh	Wed Sep 18 22:06:45 2024 +0200
+++ b/tests/testsetup.sh	Wed Sep 18 23:08:06 2024 +0200
@@ -17,3 +17,19 @@
 	return 0
     fi
 }
+
+
+#:
+#: Check that no global variables that hold any alist storage are left.
+#:
+#: Returns:
+#:   int: 0 if no unexpected storage is left, 1 otherwise
+#:
+check_no_alist_artifacts() {
+    # This are all _farr_alist_XXX_prefix variables
+    if set | grep -E -e '^_farr_KV_.*=' -e '^_farr_K_.*=' -e '^_farr_V_.*='; then
+	return 1
+    else
+	return 0
+    fi
+}