///|
/// BAM record alignment-geometry demo.
///
/// Parses a small BAM (records with M/I/D/N/S/=/X CIGAR operations) and shows
/// each record's reference span and covered reference positions.

///|
let demo_bam_base64 = "QkFNAS0AAABASEQJVk46MS42CVNPOmNvb3JkaW5hdGUKQFNRCVNOOmNocjEJTE46MTAwMAoBAAAABQAAAGNocjEA6AMAAC0AAAAAAAAACgAAAAM8SRIBAAAABAAAAP//////////AAAAAHIxAEAAAAASSP////87AAAAAAAAAAoAAAADPEkSAwAAAAgAAAD//////////wAAAAByMgBAAAAAIQAAACAAAAASSBJI//////////83AAAAAAAAAAoAAAADPEkSAwAAAAUAAAD//////////wAAAAByMwAwAAAAEgAAACAAAAASSED//////zwAAAAAAAAACgAAAAM8SRIEAAAABgAAAP//////////AAAAAHI0ACAAAAARAAAAEAAAACQAAAASSBL///////8+AAAAAAAAAAoAAAADPEkSBAAAAAcAAAD//////////wAAAAByNQAkAAAAMAAAABMAAAAgAAAAEkgSgP////////9AAAAAAAAAAAoAAAADPEkSBQAAAAYAAAD//////////wAAAAByNgAUAAAAIAAAABIAAAAQAAAAJAAAABJIEv///////zsAAAAAAAAACgAAAAM8SRIDAAAACAAAAP//////////AAAAAHI3AFcAAAAYAAAAIAAAABJIEkj//////////w=="

///|
fn main raise {
  let bam = @src.parse_bam_base64(demo_bam_base64)
  for r in bam.records {
    println(
      "span \{r.reference_start()}-\{r.reference_end()}  " +
      "ref_pos=\{Repr(r.get_reference_positions(false))}  " +
      "overlap(8,20)=\{r.get_overlap(8, 20)}",
    )
  }
}