# HG changeset patch # User Franz Glasner # Date 1726615525 -7200 # Node ID 33427145b453cebc90a6c595cc4fed93a881db68 # Parent 7bf729bec285affa76ff7d1ab082d3e73be97775 farray.sh: Implement an equality test in "farray_are_equal()" diff -r 7bf729bec285 -r 33427145b453 share/local-bsdtools/farray.sh --- a/share/local-bsdtools/farray.sh Wed Sep 18 01:23:57 2024 +0200 +++ b/share/local-bsdtools/farray.sh Wed Sep 18 01:25:25 2024 +0200 @@ -981,6 +981,55 @@ #: +#: Test whether two arrays are equal. +#: +#: Two arrays are equal if they have both the same length and if +#: all elements are equal (using ``test value1 = value2``). +#: +#: Args: +#: $1 (str): The name of the first array +#: $2 (str): The name of the second array +#: +#: Returns: +#: int: 0 if both input arrays are equal, 1 otherwise +#: +farray_are_equal() { + local __farr_l_name __farr_r_name + + local __farr_l_token __farr_l_gvrname __farr_l_len + local __farr_r_token __farr_r_gvrname __farr_r_len + + local __farr_name __farr_token __farr_gvrname __farr_len + local __farr_idx __farr_vl __farr_vr + + [ $# -ne 2 ] && _farr_fatal "missing array" + + _farr_array_get_meta "$1" + __farr_l_name="${__farr_name}" + __farr_l_token="${__farr_token}" + __farr_l_gvrname="${__farr_gvrname}" + __farr_l_len="${__farr_len}" + + _farr_array_get_meta "$2" + __farr_r_name="${__farr_name}" + __farr_r_token="${__farr_token}" + __farr_r_gvrname="${__farr_gvrname}" + __farr_r_len="${__farr_len}" + + [ ${__farr_l_len} -ne ${__farr_r_len} ] && return 1 + + __farr_idx=1 + while [ ${__farr_idx} -le ${__farr_l_len} ]; do + eval __farr_vl=\"\$\{${__farr_l_gvrname}_${__farr_idx}\}\" + eval __farr_vr=\"\$\{${__farr_r_gvrname}_${__farr_idx}\}\" + [ "${__farr_vl}" != "${__farr_vr}" ] && return 1 + __farr_idx=$((__farr_idx + 1)) + done + return 0 +} + + +#: #: Call a function for every element in an array starting at the first index. #: #: The function to be called must accept three arguments: diff -r 7bf729bec285 -r 33427145b453 tests/farray-array.t --- a/tests/farray-array.t Wed Sep 18 01:23:57 2024 +0200 +++ b/tests/farray-array.t Wed Sep 18 01:25:25 2024 +0200 @@ -74,3 +74,44 @@ ERROR: farray `TEST' does not exist: token empty [1] $ check_no_array_artifacts + +Equality +======== + +Equality (empty) + + $ farray_create TEST1 + $ farray_create TEST2 + $ farray_are_equal TEST1 TEST2 + $ farray_destroy TEST1 + $ farray_destroy TEST2 + $ check_no_array_artifacts + +Equality (non-empty) + + $ farray_create TEST1 0 1 2 '3 4 5' $'" 678" \\\'90 ' + $ farray_create TEST2 0 1 2 '3 4 5' $'" 678" \\\'90 ' + $ farray_are_equal TEST1 TEST2 + $ farray_destroy TEST1 + $ farray_destroy TEST2 + $ check_no_array_artifacts + +In-Equality (non-empty, same length) + + $ farray_create TEST1 0 1 2 '3 4 5' $'" 678" \\\'90 ' + $ farray_create TEST2 0 1 2 '3 4 5' $'" 678" \\\'90' + $ farray_are_equal TEST1 TEST2 + [1] + $ farray_destroy TEST1 + $ farray_destroy TEST2 + $ check_no_array_artifacts + +In-Equality (non-empty, different length) + + $ farray_create TEST1 0 1 2 '3 4 5' $'" 678" \\\'90 ' + $ farray_create TEST2 1 2 '3 4 5' $'" 678" \\\'90 ' + $ farray_are_equal TEST1 TEST2 + [1] + $ farray_destroy TEST1 + $ farray_destroy TEST2 + $ check_no_array_artifacts