-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmain.ml
More file actions
102 lines (94 loc) · 2.7 KB
/
main.ml
File metadata and controls
102 lines (94 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
(*
This file is mostly tests of correctness.
RAZ code is all in 'raz_simp.ml'
Fingertree impl is in 'fingertree.ml'
'bat*.ml' files support the fingertree code.
Fingertree and supporting files are from 'https://github.com/ocaml-batteries-team/batteries-included'
*)
module F = Fingertree
module Raz = Raz_simp
let print_raz = Raz.print_raz (fun e -> e)
let rec print_ft ft =
match F.head ft with
| None -> print_endline ""
| Some(h) ->
print_string h;
print_string "; ";
print_ft (F.tail_exn ft)
let time thunk =
let start = Unix.gettimeofday () in
let res = thunk() in
let stop = Unix.gettimeofday () in
let t = (stop -. start) in
(t,res)
let test () =
Random.self_init();
let _ = print_int (Raz.rnd_level()); print_endline "" in
let r = Raz.singleton "r" in
let r = Raz.insert Raz.L "e" r in
let r = Raz.insert Raz.L "f" r in
let r = Raz.insert Raz.L "g" r in
let r = Raz.insert Raz.L "h" r in
let r = Raz.insert Raz.L "i" r in
let r = Raz.insert Raz.L "j" r in
let r = Raz.insert Raz.L "k" r in
let r = Raz.insert Raz.L "l" r in
let r = Raz.insert Raz.L "m" r in
let r = Raz.insert Raz.L "n" r in
let r = Raz.insert Raz.L "o" r in
let r = Raz.insert Raz.L "p" r in
let r = Raz.insert Raz.L "q" r in
let r = Raz.focus (Raz.unfocus r) 4 in
let r = Raz.move Raz.L r in
let e = Raz.view_c r in
let _ = print_endline e in
let r = Raz.focus (Raz.unfocus r) 7 in
let e = Raz.view_c r in
let _ = print_endline e in
let r = Raz.alter_c "L" r in
let r = Raz.focus (Raz.unfocus r) 7 in
let _ = print_raz r in
let e = Raz.view_c r in
let _ = print_endline e in
(*--------*)
let rec lots_of_refocus r =
print_string ".";
let r = Raz.focus (Raz.unfocus r) (Random.int 14) in
if (Random.int 100) < 1 then (print_endline ""; r) else
lots_of_refocus r
in
let r = lots_of_refocus r in
(*--------*)
let push_l r = Raz.insert Raz.L r in
let push_r r = Raz.insert Raz.R r in
let pop_l r = (Raz.view Raz.L r,Raz.remove Raz.L r) in
let pop_r r = (Raz.view Raz.R r,Raz.remove Raz.R r) in
let r = Raz.empty "" in
let r = push_l "1" r in
let r = push_l "2" r in
let r = push_l "3" r in
let r = push_l "4" r in
let r = push_l "5" r in
let r = Raz.focus (Raz.unfocus r) 0 in
(* let _ = print_raz r in *)
let (a,r) = pop_r r in
let _ = print_endline (a) in
let (b,r) = pop_r r in
let _ = print_endline (b) in
let (c,r) = pop_r r in
let _ = print_endline (c) in
(* let _ = print_endline (a^b^c) in *)
(*--------*)
let f = F.singleton "a" in
let f = F.snoc f "b" in
let f = F.snoc f "c" in
let f = F.snoc f "d" in
let f = F.snoc f "e" in
let f = F.snoc f "f" in
let f = F.snoc f "g" in
let f = F.snoc f "h" in
let f = F.snoc f "i" in
let f = F.set f 3 "D" in
print_ft f;
None
let _ = test()