Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
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"
