diff tests/farray-array.t @ 723:a97ec3f07bdb

farray.sh: REFACTOR: More flexible metadata retrieval. Using an array or alist variable name or token value (with prefix) is now supported in every function. This is possible because the value prefixes contain questin marks (?) which are not allowed in shell variable names. This again is a major precondition for recursive data structures (arrays/alists in arrays/alists).
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 05 Oct 2024 21:55:55 +0200
parents b2757e72b517
children 3adb26525b19
line wrap: on
line diff
--- a/tests/farray-array.t	Sat Oct 05 14:49:34 2024 +0200
+++ b/tests/farray-array.t	Sat Oct 05 21:55:55 2024 +0200
@@ -45,6 +45,14 @@
   DEBUG:     3: `2'
   DEBUG:     4: `3  4   5'
   DEBUG:     5: `" 678" \'90 '
+#  $ farray_debug "$TEST"
+#  DEBUG: array with token `[a-f0-9]+' has length 5 (re)
+#  DEBUG:   its contents:
+#  DEBUG:     1: `0'
+#  DEBUG:     2: `1'
+#  DEBUG:     3: `2'
+#  DEBUG:     4: `3  4   5'
+#  DEBUG:     5: `" 678" \'90 '
   $ farray_destroy TEST
   $ check_no_array_artifacts
 
@@ -915,6 +923,85 @@
   $ check_no_array_artifacts
 
 
+Iterating
+=========
+
+  $ farray_create TEST 0 1 2 '3  4   5' $'" 667788" \\\'910 ' 11
+
+MANUAL (by name)
+
+  $ _v=''
+  > _i=1
+  > while farray_tryget _v TEST ${_i}; do
+  >     printf "  IDX: \`%d', VAL: \`%s'\\n" "${_i}" "${_v}"
+  >     _i=$((_i + 1))
+  > done
+    IDX: `1', VAL: `0'
+    IDX: `2', VAL: `1'
+    IDX: `3', VAL: `2'
+    IDX: `4', VAL: `3  4   5'
+    IDX: `5', VAL: `" 667788" \'910 '
+    IDX: `6', VAL: `11'
+
+MANUAL (by value, reversed, using negative indexes)
+
+  $ _v=''
+  > _i=0
+  > while farray_tryget _v "$TEST" ${_i}; do
+  >     printf "  IDX: \`%d', VAL: \`%s'\\n" "${_i}" "${_v}"
+  >     _i=$((_i - 1))
+  > done
+    IDX: `0', VAL: `11'
+    IDX: `-1', VAL: `" 667788" \'910 '
+    IDX: `-2', VAL: `3  4   5'
+    IDX: `-3', VAL: `2'
+    IDX: `-4', VAL: `1'
+    IDX: `-5', VAL: `0'
+
+ITERATE (for each, by name)
+
+  $ farray_for_each TEST $'printf "EACH: %s at idx %d: value is \\`%s\\\'\\n"'
+  EACH: TEST at idx 1: value is `0'
+  EACH: TEST at idx 2: value is `1'
+  EACH: TEST at idx 3: value is `2'
+  EACH: TEST at idx 4: value is `3  4   5'
+  EACH: TEST at idx 5: value is `" 667788" \'910 '
+  EACH: TEST at idx 6: value is `11'
+
+ITERATE (for each, by value)
+
+  $ farray_for_each "$TEST" $'printf "EACH: %s at idx %d: value is \\`%s\\\'\\n"'
+  EACH: _farr_A\?_[a-f0-9]+ at idx 1: value is `0' (re)
+  EACH: _farr_A\?_[a-f0-9]+ at idx 2: value is `1' (re)
+  EACH: _farr_A\?_[a-f0-9]+ at idx 3: value is `2' (re)
+  EACH: _farr_A\?_[a-f0-9]+ at idx 4: value is `3  4   5' (re)
+  EACH: _farr_A\?_[a-f0-9]+ at idx 5: value is `" 667788" \\'910 ' (re)
+  EACH: _farr_A\?_[a-f0-9]+ at idx 6: value is `11' (re)
+
+REVERSE ITERATE (for each, by name)
+
+  $ farray_reversed_for_each TEST $'printf "EACH: %s at idx %d: value is \\`%s\\\'\\n"'
+  EACH: TEST at idx 6: value is `11'
+  EACH: TEST at idx 5: value is `" 667788" \'910 '
+  EACH: TEST at idx 4: value is `3  4   5'
+  EACH: TEST at idx 3: value is `2'
+  EACH: TEST at idx 2: value is `1'
+  EACH: TEST at idx 1: value is `0'
+
+ITERATE (for each, by value)
+
+  $ farray_reversed_for_each "$TEST" $'printf "EACH: %s at idx %d: value is \\`%s\\\'\\n"'
+  EACH: _farr_A\?_[a-f0-9]+ at idx 6: value is `11' (re)
+  EACH: _farr_A\?_[a-f0-9]+ at idx 5: value is `" 667788" \\'910 ' (re)
+  EACH: _farr_A\?_[a-f0-9]+ at idx 4: value is `3  4   5' (re)
+  EACH: _farr_A\?_[a-f0-9]+ at idx 3: value is `2' (re)
+  EACH: _farr_A\?_[a-f0-9]+ at idx 2: value is `1' (re)
+  EACH: _farr_A\?_[a-f0-9]+ at idx 1: value is `0' (re)
+
+  $ farray_destroy TEST
+  $ check_no_array_artifacts
+
+
 Eval / Quoting
 ==============
 
@@ -990,7 +1077,7 @@
   [70]
 
   $ ( farray_append )
-  ERROR: missing farray name
+  ERROR: missing farray name or token value
   [70]
 
   $ TEST=''
@@ -1002,7 +1089,7 @@
 
   $ farray_create DUP
   $ (farray_create DUP)
-  ERROR: object `DUP' already created \(value `_farr_A\*_[a-f0-9]+'\) (re)
+  ERROR: object `DUP' already created \(value `_farr_A\?_[a-f0-9]+'\) (re)
   [70]
 
   $ check_no_array_artifacts
@@ -1059,7 +1146,7 @@
   $ _farr_destroy_object "$TEST"
   $ check_no_array_artifacts
   $ (_farr_destroy_object "$TEST")
-  ERROR: farray with token value `_farr_A\*_([a-f0-9]+)' not created properly: no storage for token `\1' (re)
+  ERROR: farray `_farr_A\?_([a-f0-9]+)' not created properly: no storage for token `\1' (re)
   [1]
   $ TEST=''
   $ _farr_destroy_object "$TEST"