(* TEST
 include runtime_events;
*)
open Runtime_events

let counters_tbl = Hashtbl.create 50

let runtime_counter _domain_id ts name value =
    Hashtbl.add counters_tbl name value

let () =
    start ();
    let cursor = create_cursor None in
    let callbacks = Callbacks.create ~runtime_counter () in
    Gc.set { (Gc.get()) with Gc.minor_heap_size = 65536 };
    Gc.full_major ();
    ignore(read_poll cursor callbacks None);
    let received ev = Hashtbl.find_opt counters_tbl ev |> Option.is_some in
    (* Test the minor heap size change we did earlier is there *)
    assert(received EV_C_FORCE_MINOR_SET_MINOR_HEAP_SIZE);
    (* Now all the major heap sizings *)
    assert(received EV_C_MAJOR_HEAP_POOL_WORDS);
    assert(received EV_C_MAJOR_HEAP_POOL_LIVE_WORDS);
    assert(received EV_C_MAJOR_HEAP_POOL_FRAG_WORDS);
    assert(received EV_C_MAJOR_HEAP_POOL_LIVE_BLOCKS);
    assert(received EV_C_MAJOR_HEAP_LARGE_WORDS);
    assert(received EV_C_MAJOR_HEAP_LARGE_BLOCKS);
    (* Finally the minor heap counters *)
    assert(received EV_C_MINOR_ALLOCATED);
    assert(received EV_C_MINOR_ALLOCATED_WORDS);
    assert(received EV_C_MINOR_PROMOTED);
    assert(received EV_C_MINOR_PROMOTED_WORDS)
