Added Selene's modification
This commit is contained in:
parent
ab1ba60b36
commit
0ed5e6b81f
3 changed files with 9 additions and 6 deletions
|
@ -19,6 +19,7 @@ let doit filename = begin
|
||||||
Cfg_printer.output_dot !Options.cfg_out cfg;
|
Cfg_printer.output_dot !Options.cfg_out cfg;
|
||||||
let f = match !Options.domain with
|
let f = match !Options.domain with
|
||||||
| "signs" -> SignIterator.iterate cfg
|
| "signs" -> SignIterator.iterate cfg
|
||||||
|
| "interval" -> IntervalIterator.iterate cfg
|
||||||
| "constants" -> ConstIterator.iterate cfg
|
| "constants" -> ConstIterator.iterate cfg
|
||||||
| _ -> ConstIterator.iterate cfg in
|
| _ -> ConstIterator.iterate cfg in
|
||||||
Format.printf "@[<v 0>Failed asserts :@ %a@]" pp_asserts f end
|
Format.printf "@[<v 0>Failed asserts :@ %a@]" pp_asserts f end
|
||||||
|
|
|
@ -23,12 +23,12 @@ module Interval : NAKED_VALUE_DOMAIN = struct
|
||||||
|
|
||||||
let join z1 z2 = rand4 z1.lower z2.lower z1.upper z2.upper
|
let join z1 z2 = rand4 z1.lower z2.lower z1.upper z2.upper
|
||||||
let meet z1 z2 =
|
let meet z1 z2 =
|
||||||
if Z.leq z1.upper z2.lower || Z.leq z2.upper z1.lower then raise Absurd
|
if Z.lt z1.upper z2.lower || Z.lt z2.upper z1.lower then raise Absurd
|
||||||
else rand (Z.max z1.lower z2.lower) (Z.min z1.upper z2.upper)
|
else rand (Z.max z1.lower z2.lower) (Z.min z1.upper z2.upper)
|
||||||
let widen z1 z2 =
|
let widen z1 z2 =
|
||||||
rand
|
rand
|
||||||
(if Z.leq z1.lower z2.lower then z1.lower else min_infty)
|
(if Z.lt z1.lower z2.lower then z1.lower else min_infty)
|
||||||
(if Z.geq z1.upper z2.upper then z1.upper else infty)
|
(if Z.gt z1.upper z2.upper then z1.upper else infty)
|
||||||
let narrow = meet
|
let narrow = meet
|
||||||
let subset z1 z2 = Z.geq z1.lower z2.lower && Z.leq z1.upper z2.upper
|
let subset z1 z2 = Z.geq z1.lower z2.lower && Z.leq z1.upper z2.upper
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ module Interval : NAKED_VALUE_DOMAIN = struct
|
||||||
|
|
||||||
let rec compare z1 z2 = function
|
let rec compare z1 z2 = function
|
||||||
| AST_EQUAL ->
|
| AST_EQUAL ->
|
||||||
let z = join z1 z2 in
|
let z = meet z1 z2 in
|
||||||
(z, z)
|
(z, z)
|
||||||
| AST_NOT_EQUAL ->
|
| AST_NOT_EQUAL ->
|
||||||
if
|
if
|
||||||
|
@ -97,8 +97,8 @@ module Interval : NAKED_VALUE_DOMAIN = struct
|
||||||
let r1 = rand z1.lower (Z.min z1.upper z2.upper) in
|
let r1 = rand z1.lower (Z.min z1.upper z2.upper) in
|
||||||
let r2 = rand (Z.max z1.lower z2.lower) z2.upper in
|
let r2 = rand (Z.max z1.lower z2.lower) z2.upper in
|
||||||
(r1, r2)
|
(r1, r2)
|
||||||
| AST_GREATER -> compare z2 z1 AST_LESS
|
| AST_GREATER -> let r1, r2 = compare z2 z1 AST_LESS in r2, r1
|
||||||
| AST_GREATER_EQUAL -> compare z2 z1 AST_GREATER_EQUAL
|
| AST_GREATER_EQUAL -> let r1, r2 = compare z2 z1 AST_GREATER_EQUAL in r2, r1
|
||||||
|
|
||||||
let bwd_binary z1 z2 op r =
|
let bwd_binary z1 z2 op r =
|
||||||
match op with
|
match op with
|
||||||
|
|
|
@ -81,12 +81,14 @@ module Iterator (D : DOMAIN) = struct
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
open Interval
|
||||||
open Sign
|
open Sign
|
||||||
open Constant
|
open Constant
|
||||||
open Naked
|
open Naked
|
||||||
open Value_domain
|
open Value_domain
|
||||||
module ConstIterator = Iterator(NonRelational(AddTopBot(Constants)))
|
module ConstIterator = Iterator(NonRelational(AddTopBot(Constants)))
|
||||||
module SignIterator = Iterator(NonRelational(AddTopBot(Signs)))
|
module SignIterator = Iterator(NonRelational(AddTopBot(Signs)))
|
||||||
|
module IntervalIterator = Iterator(NonRelational(AddTopBot(Interval)))
|
||||||
(*
|
(*
|
||||||
let iterate cfg =
|
let iterate cfg =
|
||||||
let () = Random.self_init () in
|
let () = Random.self_init () in
|
||||||
|
|
Loading…
Reference in a new issue