open Hshift;; let check found expected = if found = expected then Printf.printf "%d as expected\n" found else Printf.printf "*** Found %d where %d was expected\n" found expected ;; let r = eval (fun c -> 10 + reset c 1 (fun () -> 100 + shift c 1 (fun k -> k (k 1))) ) in check r 211 ;; let r = eval (fun c -> 10 + reset c 1 (fun () -> 100 + shift c 1 (fun k -> k (k 1))) ) in check r 211 ;; let r = eval (fun c -> 10 + reset c 1 (fun () -> 100 + shift c 0 (fun k -> k (k 1))) ) in check r 221 ;; let r = eval (fun c -> 10 + reset c 1 (fun () -> 100 + shift c 1 (fun k -> (* k is fun z -> 100 + z, context is 10 + [] *) k (reset c 4 (fun () -> k (shift c 0 (fun l -> (* l is fun z -> 10 + 100 + 100 + z, contex is empty *) l (l (l 5)))))) )) ) in check r 635 ;; let r = eval (fun c -> 10 + reset c 1 (fun () -> 100 + shift c 0 (fun k -> (* k is fun z -> 10 + reset1 [100 + z], Context is empty *) k (reset c 3 (fun () -> k (shift c 1 (fun l -> (* l is fun z -> 10 + reset1 [100 + 10 + reset1[ 100 + z], context is empty *) l (l (l 5)))))) )) ) in check r 665 ;; let r = eval (fun c -> 10 + reset c 1 (fun () -> 100 + shift c 0 (fun k -> (* k is fun z -> 10 + reset1 [100 + z], Context is empty *) k (fun () -> shift c 1 (fun l -> (* l is fun z -> 100 + z, since k captured reset1. Context is empty *) l (l (5)))) )()) ) in check r 215 ;; print_string "End of tests";; print_newline();;