let%expect_test _ = let print_list print_ele xs = let rec iter pre post = function | [] -> print_string post | x :: xs -> print_string pre; print_ele x; iter ";" "]" xs in iter "[" "[]" xs in let print_ints_nl xs = print_list print_int xs; print_newline () in let wh = Wheel.make 4 in (* t=0 *) Wheel.add wh 1 |> ignore; Wheel.add wh 2 |> ignore; Wheel.add wh 3 |> ignore; (* t=1 *) print_ints_nl (Wheel.tick wh); [%expect {| [] |}]; Wheel.add wh 4 |> ignore; Wheel.add wh 5 |> ignore; (* t=2 *) print_ints_nl (Wheel.tick wh); [%expect {| [] |}]; Wheel.add wh 6 |> ignore; (* t=3 *) print_ints_nl (Wheel.tick wh); [%expect {| [] |}]; let every = ref [] in Wheel.iter (fun x -> every := x :: !every) wh; print_ints_nl (List.sort compare !every); [%expect {| [1;2;3;4;5;6] |}]; (* t=0 *) print_ints_nl (Wheel.tick wh); [%expect {| [1;2;3] |}]; (* t=1 *) print_ints_nl (Wheel.tick wh); [%expect {| [4;5] |}]; (* t=2 *) print_ints_nl (Wheel.tick wh); [%expect {| [6] |}]; (* t=3 *) print_ints_nl (Wheel.tick wh); [%expect {| [] |}]; (* t=0 *) print_ints_nl (Wheel.tick wh); [%expect {| [] |}];