///|
fn point(longitude : Double, second : String, source : Int) -> @nmea.TrackPoint {
  let date = @nmea.UtcDate::new(2026, 8, 7, @nmea.SourceRef::sentence(source)).unwrap()
  let time = @nmea.UtcTime::parse(second, @nmea.SourceRef::sentence(source)).unwrap()
  @nmea.TrackPoint::new(
    0.0,
    longitude,
    datetime=Some(@nmea.UtcDateTime::new(date, time)),
    quality=Some(@nmea.GpsFix),
    satellites=Some(8),
    source_record_indexes=[source],
  ).unwrap()
}

///|
fn main {
  let track = @nmea.Track::from_points([
    point(0.0, "000000", 0),
    point(0.01, "000001", 1),
  ]).unwrap()
  let thresholds = @nmea.QualityThresholds::new(
    max_segment_distance_meters=500.0,
    max_speed_mps=100.0,
  ).unwrap()
  let report = @nmea.analyze_track_quality(track, thresholds)
  guard report.findings().length() == 2 else {
    abort("expected jump and excessive-speed findings")
  }
  println(@nmea.render_track_quality_json(report))
}