// workspace/fec_bench/main.mbt — FEC 开销读数(K8 刀5;留证不作门)
//
// 场景:RS(k=10,m=3) 贴视频路径——数据片 1200B;
// 读数 = 编码 MB/s(数据字节)、最坏恢复 MB/s(恰 m 抹除)、
// 帧层直通 MB/s(FecTx+头戳 + FecRx 剥头,无损路径)。
// 取时 = @async.now() 墙钟(bench_driver 同式);KB/ms 数值即 MB/s。

///|
let shard_len : Int32 = 1200

///|
let group_k : Int32 = 10

///|
let group_m : Int32 = 3

///|
let rounds : Int32 = 2000

///|
/// 数据字节总数(Int64)。
fn total_bytes() -> Int64 {
  (group_k * shard_len * rounds).to_int64()
}

///|
/// KB/ms 数值即 MB/s(bytes/ms 是 KB/s,先除 1000 归 KB)。
fn mbps(elapsed_ms : Int64) -> String {
  if elapsed_ms <= 0L {
    return "n/a(<1ms)"
  }
  "\{total_bytes() / 1000L / elapsed_ms} MB/s"
}

///|
fn make_data() -> Array[FixedArray[Byte]] {
  let shards : Array[FixedArray[Byte]] = []
  for i in 0.. Unit {
    data[round % group_k][round % shard_len] = (acc & 0xFFL).to_int().to_byte()
  }
  let t0 = @async.now()
  let mut sink : Int64 = 0L // 汇聚出口:防 DCE 削环(结果折叠+尾打印)
  for round in 0.. sink += fullset[0][1].to_int().to_int64()
      None => sink += 1L
    }
  }
  let t2 = @async.now()
  for round in 0..