changeset 593:f29f53749a1c

farray.sh: farray_get() and farray_tryget() now uses the _farr_make_index() function. So general indexes are supported now.
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 18 Sep 2024 15:57:31 +0200
parents 88191982522d
children 4babcf9abc1a
files share/local-bsdtools/farray.sh tests/farray-array.t
diffstat 2 files changed, 62 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/share/local-bsdtools/farray.sh	Wed Sep 18 15:56:47 2024 +0200
+++ b/share/local-bsdtools/farray.sh	Wed Sep 18 15:57:31 2024 +0200
@@ -557,11 +557,7 @@
     [ -z "${__farr_varname}" ] && _farr_fatal "missing variable name"
     shift
     _farr_array_get_meta "$@"
-    __farr_index="${2-}"
-    [ -z "${__farr_index}" ] && _farr_fatal "no valid index given"
-    # make it to a number
-    __farr_index=$((__farr_index + 0))
-
+    _farr_make_index __farr_index "${2-}" "${__farr_len}"
     # check index range
     if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt ${__farr_len} \) ]; then
 	_farr_fatal "array index out of bounds"
@@ -597,11 +593,7 @@
     shift
 
     _farr_array_get_meta "$@"
-    __farr_index="${2-}"
-    [ -z "${__farr_index}" ] && _farr_fatal "no valid index given"
-    # make it to a number
-    __farr_index=$((__farr_index + 0))
-
+    _farr_make_index __farr_index "${2-}" "${__farr_len}"
     # check index range
     if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt ${__farr_len} \) ]; then
 	return 1
--- a/tests/farray-array.t	Wed Sep 18 15:56:47 2024 +0200
+++ b/tests/farray-array.t	Wed Sep 18 15:57:31 2024 +0200
@@ -2,6 +2,7 @@
 
 Shell is /bin/sh.
 
+
 Setup
 =====
 
@@ -76,6 +77,7 @@
   [1]
   $ check_no_array_artifacts
 
+
 Equality
 ========
 
@@ -117,6 +119,64 @@
   $ farray_destroy TEST2
   $ check_no_array_artifacts
 
+
+Get
+===
+
+  $ farray_create TEST 0 1 2 '3  4   5' $'" 678" \\\'910 ' 11
+
+  $ farray_get _var TEST 1
+  $ echo $_var
+  0
+  $ farray_tryget _var TEST 1
+  $ echo $_var
+  0
+  $ farray_get _var TEST -5
+  $ echo $_var
+  0
+  $ farray_tryget _var TEST -5
+  $ echo $_var
+  0
+  $ farray_get _var TEST 6
+  $ echo $_var
+  11
+  $ farray_tryget _var TEST 6
+  $ echo $_var
+  11
+  $ farray_get _var TEST 0
+  $ echo $_var
+  11
+  $ farray_tryget _var TEST 0
+  $ echo $_var
+  11
+  $ farray_get _var TEST 5
+  $ echo $_var
+  " 678" \'910
+  $ farray_tryget _var TEST 5
+  $ echo $_var
+  " 678" \'910
+  $ farray_get _var TEST -1
+  $ echo $_var
+  " 678" \'910
+  $ farray_tryget _var TEST -1
+  $ echo $_var
+  " 678" \'910
+
+  $ farray_tryget _var TEST -6
+  [1]
+  $ ( farray_get _var TEST -6 )
+  ERROR: array index out of bounds
+  [70]
+  $ farray_tryget _var TEST 7
+  [1]
+  $ ( farray_get _var TEST 7 )
+  ERROR: array index out of bounds
+  [70]
+
+  $ farray_destroy TEST
+  $ check_no_array_artifacts
+
+
 Splicing
 ========