// 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..