///|
fn fragment(number : Int, ids : Array[String]) -> @nmea.GsvRecord {
  let fields = ["2", number.to_string(), "5"]
  for id in ids {
    fields.push(id)
    fields.push("20")
    fields.push("100")
    fields.push("35")
  }
  fields.push("1")
  @nmea.parse_gsv(@nmea.NmeaFrame::new(36, "GP", "GSV", fields)).unwrap()
}

///|
fn main {
  let assembler = @nmea.GsvAssembler::new()
  guard assembler.push(fragment(1, ["01", "02", "03", "04"]), record_index=0) ==
    Ok(None) else {
    abort("first fragment should remain pending")
  }
  let assembly = assembler
    .push(fragment(2, ["05"]), record_index=1)
    .unwrap()
    .unwrap()
  guard @nmea.validate_gsv_integrity(assembly).length() == 0 else {
    abort("assembled GSV evidence is inconsistent")
  }
  println(
    "satellites=" +
    assembly.total_satellites().to_string() +
    " fragments=" +
    assembly.total_messages().to_string(),
  )
}