Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: zmathfunc: min, max, sum throw error if result equals 0
- X-seq: zsh-workers 48151
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx>
- Cc: Nikolaus Thiel <klt@xxxxxxxx>, "zsh-workers@xxxxxxx" <zsh-workers@xxxxxxx>
- Subject: Re: zmathfunc: min, max, sum throw error if result equals 0
- Date: Sun, 7 Mar 2021 13:39:52 -0800
- Archived-at: <https://zsh.org/workers/48151>
- Archived-at: <http://www.zsh.org/sympa/arcsearch_id/zsh-workers/2021-03/CAH%2Bw%3D7bPz5u9-mQPbmPmbo%3D8Cz8em7JmbSn-sp8eZzuvFW3mnQ%40mail.gmail.com>
- In-reply-to: <20210307171712.GA9936@tarpaulin.shahaf.local2>
- List-id: <zsh-workers.zsh.org>
- References: <m2pn0aj4y2.fsf@zaclys.net> <20210307171712.GA9936@tarpaulin.shahaf.local2>
On Sun, Mar 7, 2021 at 9:17 AM Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx> wrote:
>
> Nikolaus Thiel wrote on Sun, Mar 07, 2021 at 17:37:09 +0100:
> >
> > When the result of min, max or sum equals 0, the functions throw an error.
I would not equate "return nozero" with "throw an error", FWIW.
> Ouch. Patch series attached.
I think your regression tests cover this, but use of "true" avoids
changing the result in "functions -M" context, correct?
Is it worth testing invalid cases? Such as uses outside math context
where the arguments are not syntax checked?
As long as we're on the subject:
zsh_math_func_min() {
local result=$1
shift
local arg
for arg ; do
(( $arg < result )) && result=$arg
done
(( result ))
true # Careful here: `return 0` evaluates an arithmetic expression
}
Because of the way math context works, if any of $@ is a string that
can be interpreted as a math expression, the above will evaluate it at
least twice (and up to $# times in the case of $1). This could have
side-effects.
zsh_math_func_min() {
local result=$(( $1 ))
shift
local arg n
for arg ; do
(( n = arg )) # evaluate arg exactly once
(( n < result && (result = n) ))
done
(( result ))
true # Careful here: `return 0` evaluates an arithmetic expression
}
Messages sorted by:
Reverse Date,
Date,
Thread,
Author