///|
/// Reproducible local benchmark for the main zero-hardware primitives.
fn main {
let payload : Array[Byte] = Array::make(256, 0x55)
let clock = @clock_delay.HalClock::default_clock()
let start = clock.get_ticks_us()
let mut checksum = 0
for i = 0; i < 1000; i = i + 1 {
checksum = checksum ^ @codec.crc16_modbus(payload)
}
let crc_elapsed = clock.get_ticks_us() - start
let frame_start = clock.get_ticks_us()
let mut frame_bytes = 0
for i = 0; i < 1000; i = i + 1 {
frame_bytes = frame_bytes + @codec.cobs_encode(payload).length()
}
let frame_elapsed = clock.get_ticks_us() - frame_start
let queue : @collections.RingQueue[Int] = @collections.RingQueue::new(128)
let queue_start = clock.get_ticks_us()
for i = 0; i < 1000; i = i + 1 {
let _ = queue.push(i)
let _ = queue.pop()
}
let queue_elapsed = clock.get_ticks_us() - queue_start
println("moonbit-mcu-hal benchmark")
println("iterations=1000 payload_bytes=256")
println(
"crc16_elapsed_us=" +
crc_elapsed.to_string() +
" checksum=" +
checksum.to_string(),
)
println(
"cobs_elapsed_us=" +
frame_elapsed.to_string() +
" encoded_bytes=" +
frame_bytes.to_string(),
)
println(
"queue_elapsed_us=" +
queue_elapsed.to_string() +
" remaining=" +
queue.len().to_string(),
)
}