Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: zmathfunc: min, max, sum throw error if result equals 0



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