t6002: fix use of `expr` with `set -e`

In `test_bisection_diff ()` we use `expr` to perform some math. This
command has some gotchas though in that it will only return success when
the result is neither null nor zero. In some of our cases though it
actually _is_ zero, and that will cause the expressions to fail once we
enable `set -e`.

Prepare for this change by instead using `$(( ))`, which doesn't have
the same issue. While at it, modernize the function a tiny bit.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
main
Patrick Steinhardt 2026-04-21 09:34:23 +02:00 committed by Junio C Hamano
parent 4f917bbf71
commit 090af9957c
1 changed files with 9 additions and 6 deletions

View File

@ -27,13 +27,16 @@ test_bisection_diff()
# Test if bisection size is close to half of list size within # Test if bisection size is close to half of list size within
# tolerance. # tolerance.
# #
_bisect_err=$(expr $_list_size - $_bisection_size \* 2) _bisect_err=$(($_list_size - $_bisection_size * 2))
test "$_bisect_err" -lt 0 && _bisect_err=$(expr 0 - $_bisect_err) if test "$_bisect_err" -lt 0
_bisect_err=$(expr $_bisect_err / 2) ; # floor then
_bisect_err=$((0 - $_bisect_err))
fi
_bisect_err=$(($_bisect_err / 2)) ; # floor


test_expect_success \ test_expect_success "bisection diff $_bisect_option $_head $* <= $_max_diff" '
"bisection diff $_bisect_option $_head $* <= $_max_diff" \ test $_bisect_err -le $_max_diff
'test $_bisect_err -le $_max_diff' '
} }


date >path0 date >path0