12345678910111213141516171819202122232425262728293031323334353637383940414243444546(** Mocking for tests *)moduleInner=structletmock=reffalseletget_now_ns_ref=refTime_util.get_time_nsletget_tid_ref=refThread_util.get_tidletget_pid_ref=refUnix_util.get_pid(** used to mock timing *)letmake_time_mock():unit->int64=lettime_=ref0inletget_now_ns():int64=letx=!time_inincrtime_;Int64.(mul(of_intx)1000L)inget_now_nsend(** Now, in nanoseconds. Uses {!get_now_ns_ref} *)let[@inline]now_ns():int64=if!Inner.mockthen!Inner.get_now_ns_ref()elseTime_util.get_time_ns()(** Current thread's ID. Uses {!get_tid_ref} *)let[@inline]get_tid():int=if!Inner.mockthen!Inner.get_tid_ref()elseThread_util.get_tid()let[@inline]get_pid():int=if!Inner.mockthen!Inner.get_pid_ref()elseUnix_util.get_pid()letmock_all():unit=Inner.mock:=true;(Inner.get_pid_ref:=fun()->2);(Inner.get_tid_ref:=fun()->3);Inner.get_now_ns_ref:=Inner.make_time_mock();()