[m-rev.] for review: implement checked division for uints

Peter Wang novalazy at gmail.com
Thu May 11 12:41:40 AEST 2017


On Wed, 10 May 2017 13:10:07 +1000 (AEST), Julien Fischer <jfischer at opturion.com> wrote:
> 
> For review by anyone.
> 
> The int module also provides div/2 and mod/2 which round differently for
> negative results than / and rem.  The result cannot (obviously) be
> negative for uints; do we want to provide div/2 and mod/2 as synonyms for
> / and rem in the uint module?  (mod in particular is the obvious name
> for the operation.)

I think so, especially mod.

> Note: I will update the expected output for 32-bit system before I
> commit.
> 
> -----------------------------
> 
> Implement checked division for uints.
> 
> library/uint.m:
>       Add (//)/2, (/)/2 and rem/2 for uints.
> 
> tests/hard_coded/uint_arith.m
>       Enable the division tests.
> 
> tests/hard_coded/uint_bitwise.exp:
>       Update the expected output.
> 
> Julien.
> 
> diff --git a/library/uint.m b/library/uint.m
> index f757cd78e..a0088ab36 100644
> --- a/library/uint.m
> +++ b/library/uint.m
> @@ -77,8 +77,31 @@
>       %
>   :- func min(uint, uint) = uint.
> 
> +    % Integer division.
> +    %
> +    % Throws a `math.domain_error' exception if the right operand is zero.
> +    %
> +:- func (uint::in) // (uint::in) = (uint::uo) is det.

int.m specifies "Truncating" integer division

The rest looks fine.

Peter


More information about the reviews mailing list