// Expect retcode = 0 // 时间/参考量接口(原生 vm_timestamp,case 探测风格,不假设一定可用)。 // available() -> 1 = 时间可用;0 = 不可用(其余 time 相关返回值恒为 0) // sec() -> 当前秒 // ns() -> 当前纳秒部分 // steps() -> VM 已执行指令数(参考量) // now_ns() -> 完整纳秒时间戳(单次调用;纪元纳秒 < 2^64,无需 i128) #extern(vm) fn vm_timestamp(kind: usize): usize; fn available(): usize { ret vm_timestamp(0); } fn sec(): usize { ret vm_timestamp(1); } fn ns(): usize { ret vm_timestamp(2); } fn steps(): usize { ret vm_timestamp(3); } fn calls(): usize { ret vm_timestamp(5); } fn now_ns(): usize { ret vm_timestamp(4); } fn main(): void { var has = available(); if has != 0 { var a = now_ns(); var b = now_ns(); @assert(b >= a, "now monotonic"); } var s0 = steps(); var i: usize = 0; while i < 1000 { i = i + 1; } var s1 = steps(); @assert(s1 >= s0, "steps monotonic"); }