From 1e9e17a8b5967b1c64275012bd7b787d9e55f324 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Mon, 14 Sep 2015 02:59:00 +0200 Subject: [PATCH] add new random test --- src/data/CCWBTree.ml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/data/CCWBTree.ml b/src/data/CCWBTree.ml index fea5c377..d0c24f57 100644 --- a/src/data/CCWBTree.ml +++ b/src/data/CCWBTree.ml @@ -11,6 +11,34 @@ (*$inject module M = Make(CCInt) + type op = + | Add of int * int + | Remove of int + | Remove_min + + let gen_op () = CCRandom.(run ?st:None @@ choose_exn + [ return Remove_min + ; map (fun x->Remove x) small_int + ; pure (fun x y->Add (x,y)) <*> small_int <*> small_int]) + and pp_op =let open Printf in + function Add (x,y) -> sprintf "Add %d %d" x y + | Remove x -> sprintf "Remove %d" x | Remove_min -> "Remove_min" + + let apply_ops l m = List.fold_left + (fun m -> function + | Add (i,b) -> M.add i b m + | Remove i -> M.remove i m + | Remove_min -> + try let _, _, m' = M.extract_min m in m' with Not_found -> m + ) m l + + let op = gen_op, pp_op + +*) + +(*$Q & ~small:List.length ~count:200 + Q.(list op) (fun l -> \ + let m = apply_ops l M.empty in M.balanced m) *) type 'a sequence = ('a -> unit) -> unit