Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
changeset 599:46ff12cfeed0
farray.sh: farray_find(): Fixes in "start" and "end" param evaluation.
Now also works with somewhat generalized indices.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Wed, 18 Sep 2024 21:20:13 +0200 |
| parents | a7054c8ed13a |
| children | 77abb0adccaf |
| files | share/local-bsdtools/farray.sh tests/farray-array.t |
| diffstat | 2 files changed, 65 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/share/local-bsdtools/farray.sh Wed Sep 18 17:10:43 2024 +0200 +++ b/share/local-bsdtools/farray.sh Wed Sep 18 21:20:13 2024 +0200 @@ -889,8 +889,11 @@ #: $1 (str): The name of a variable where to put the found index into #: $2 (str): The name of an existing array #: $3: The value to search for -#: $4 (int, optional): The start index to search for (inclusive) -#: $5 (int, optional): The index to stop (inclusive) +#: $4 (int, nuĺl, optional): The start index to search for (inclusive). +#: If not given or `null` then `1` is used. +#: $5 (int, null, optional): The index to stop (inclusive). +#: If not given or `null` then the length of +#: `$2` is used. #: #: Returns: #: - 0 (truish) if the argument value is found within the given array @@ -914,10 +917,15 @@ [ -z "${__farr_searched_value}" ] && _farr_fatal "no search value given" __farr_searched_value="$2" - __farr_start=$((${4-1} + 0)) + __farr_start="${3-}" + [ -z "${__farr_start}" ] && __farr_start=1 + _farr_make_index __farr_start "${__farr_start}" "${__farr_len}" [ ${__farr_start} -lt 1 ] && _farr_fatal "start index must be >= 1" - __farr_end=$((${5-${__farr_len}} + 0)) + __farr_end="${4-}" + [ -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_cur_idx=${__farr_start} while [ ${__farr_cur_idx} -le ${__farr_end} ]; do
--- a/tests/farray-array.t Wed Sep 18 17:10:43 2024 +0200 +++ b/tests/farray-array.t Wed Sep 18 21:20:13 2024 +0200 @@ -851,3 +851,56 @@ $ farray_destroy INSERTED $ farray_destroy TEST $ check_no_array_artifacts + + +Searching +========= + + $ farray_create TEST 0 1 2 '3 4 5' $'" 678" \\\'910 ' 11 + + $ farray_find _var TEST 0 + $ echo $_var + 1 + $ farray_find _var TEST $'" 678" \\\'910 ' + $ echo $_var + 5 + $ farray_find _var TEST '11' + $ echo $_var + 6 + $ farray_find _var TEST $'" 678" \\\'910 ' "" "" + $ echo $_var + 5 + $ farray_find _var TEST '11' 1 5 + [1] + + $ farray_find _var TEST '11' 7 + [1] + + $ farray_find _var TEST '11' 7 6 + [1] + + $ farray_find _var TEST '11' 1 "" + $ echo $_var + 6 + + $ ( farray_find _var TEST '11' 1 7 ) + ERROR: end index exceeds array length + [70] + + $ ( farray_find _var TEST '11' -6 ) + ERROR: start index must be >= 1 + [70] + + $ ( farray_find _var TEST '11' 1 -6 ) + ERROR: end index must be >= 1 + [70] + + $ farray_contains TEST '0' + $ farray_contains TEST $'" 678" \\\'910 ' + $ farray_contains TEST '11' + + $ farray_contains TEST '0 ' + [1] + + $ farray_destroy TEST + $ check_no_array_artifacts
