Reviewed By: mbouaziz Differential Revision: D9028914 fbshipit-source-id: 5212c8a87master
parent
4ad509269d
commit
66e737a3b4
@ -0,0 +1,90 @@
|
|||||||
|
(*
|
||||||
|
* Copyright (c) 2017-present, Facebook, Inc.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*)
|
||||||
|
|
||||||
|
open! IStd
|
||||||
|
open! AbstractDomain.Types
|
||||||
|
module F = Format
|
||||||
|
|
||||||
|
module NonZeroInt = struct
|
||||||
|
type t = int [@@deriving compare]
|
||||||
|
|
||||||
|
exception DivisionNotExact
|
||||||
|
|
||||||
|
let one = 1
|
||||||
|
|
||||||
|
let minus_one = -1
|
||||||
|
|
||||||
|
let of_int = function 0 -> None | i -> Some i
|
||||||
|
|
||||||
|
let opt_to_int = function None -> 0 | Some i -> i
|
||||||
|
|
||||||
|
let is_one = Int.equal 1
|
||||||
|
|
||||||
|
let is_minus_one = Int.equal (-1)
|
||||||
|
|
||||||
|
let is_multiple mul div = Int.equal (mul mod div) 0
|
||||||
|
|
||||||
|
let is_negative x = x < 0
|
||||||
|
|
||||||
|
let is_positive x = x > 0
|
||||||
|
|
||||||
|
let ( ~- ) = Int.( ~- )
|
||||||
|
|
||||||
|
let ( * ) = Int.( * )
|
||||||
|
|
||||||
|
let plus x y = of_int (x + y)
|
||||||
|
|
||||||
|
let exact_div_exn num den =
|
||||||
|
if not (is_multiple num den) then raise DivisionNotExact ;
|
||||||
|
num / den
|
||||||
|
|
||||||
|
|
||||||
|
let max = Int.max
|
||||||
|
|
||||||
|
let min = Int.min
|
||||||
|
end
|
||||||
|
|
||||||
|
module NonNegativeInt = struct
|
||||||
|
type t = int [@@deriving compare]
|
||||||
|
|
||||||
|
let zero = 0
|
||||||
|
|
||||||
|
let one = 1
|
||||||
|
|
||||||
|
let is_zero = function 0 -> true | _ -> false
|
||||||
|
|
||||||
|
let is_one = function 1 -> true | _ -> false
|
||||||
|
|
||||||
|
let of_int i = if i < 0 then None else Some i
|
||||||
|
|
||||||
|
let of_int_exn i =
|
||||||
|
assert (i >= 0) ;
|
||||||
|
i
|
||||||
|
|
||||||
|
|
||||||
|
let ( <= ) ~lhs ~rhs = Int.(lhs <= rhs)
|
||||||
|
|
||||||
|
let ( + ) = Int.( + )
|
||||||
|
|
||||||
|
let ( * ) = Int.( * )
|
||||||
|
|
||||||
|
let max = Int.max
|
||||||
|
|
||||||
|
let pp = F.pp_print_int
|
||||||
|
end
|
||||||
|
|
||||||
|
module PositiveInt = struct
|
||||||
|
type t = NonNegativeInt.t [@@deriving compare]
|
||||||
|
|
||||||
|
let one = 1
|
||||||
|
|
||||||
|
let of_int i = if i <= 0 then None else Some i
|
||||||
|
|
||||||
|
let succ = Int.succ
|
||||||
|
|
||||||
|
let pp = F.pp_print_int
|
||||||
|
end
|
@ -0,0 +1,84 @@
|
|||||||
|
(*
|
||||||
|
* Copyright (c) 2017-present, Facebook, Inc.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*)
|
||||||
|
|
||||||
|
open! IStd
|
||||||
|
|
||||||
|
module F = Format
|
||||||
|
|
||||||
|
module NonZeroInt : sig
|
||||||
|
type t = private int [@@deriving compare]
|
||||||
|
|
||||||
|
exception DivisionNotExact
|
||||||
|
|
||||||
|
val one : t
|
||||||
|
|
||||||
|
val minus_one : t
|
||||||
|
|
||||||
|
val of_int : int -> t option
|
||||||
|
|
||||||
|
val opt_to_int : t option -> int
|
||||||
|
|
||||||
|
val is_one : t -> bool
|
||||||
|
|
||||||
|
val is_minus_one : t -> bool
|
||||||
|
|
||||||
|
val is_multiple : int -> t -> bool
|
||||||
|
|
||||||
|
val is_negative : t -> bool
|
||||||
|
|
||||||
|
val is_positive : t -> bool
|
||||||
|
|
||||||
|
val ( ~- ) : t -> t
|
||||||
|
|
||||||
|
val ( * ) : t -> t -> t
|
||||||
|
|
||||||
|
val plus : t -> t -> t option
|
||||||
|
|
||||||
|
val exact_div_exn : t -> t -> t
|
||||||
|
|
||||||
|
val max : t -> t -> t
|
||||||
|
|
||||||
|
val min : t -> t -> t
|
||||||
|
end
|
||||||
|
|
||||||
|
module NonNegativeInt : sig
|
||||||
|
type t = private int [@@deriving compare]
|
||||||
|
|
||||||
|
val zero : t
|
||||||
|
|
||||||
|
val one : t
|
||||||
|
|
||||||
|
val of_int : int -> t option
|
||||||
|
|
||||||
|
val of_int_exn : int -> t
|
||||||
|
|
||||||
|
val is_zero : t -> bool
|
||||||
|
|
||||||
|
val is_one : t -> bool
|
||||||
|
|
||||||
|
val ( <= ) : lhs:t -> rhs:t -> bool
|
||||||
|
|
||||||
|
val ( + ) : t -> t -> t
|
||||||
|
|
||||||
|
val ( * ) : t -> t -> t
|
||||||
|
|
||||||
|
val max : t -> t -> t
|
||||||
|
|
||||||
|
val pp : F.formatter -> t -> unit
|
||||||
|
end
|
||||||
|
|
||||||
|
module PositiveInt : sig
|
||||||
|
type t = private NonNegativeInt.t [@@deriving compare]
|
||||||
|
|
||||||
|
val one : t
|
||||||
|
|
||||||
|
val of_int : int -> t option
|
||||||
|
|
||||||
|
val succ : t -> t
|
||||||
|
|
||||||
|
val pp : F.formatter -> t -> unit
|
||||||
|
end
|
Loading…
Reference in new issue