///|
/// Fixed, hand-authored fixtures shared by the two execution backends.
fn main {
  let cases = [
    [],
    ["中文/实验 1.txt", ".hidden", "emoji/🙂.txt"],
    ["CON.txt", "prn.tar.gz", "COM¹", "lpt².txt", "LPT³", "COM9"],
    ["COM10", "LPT0", ".CON", "x.NUL"],
    ["", "/a", "C:a", "\\\\server\\share", "a/../b", "a//b", "a/"],
    ["a\\b", "a {
      path: p,
      kind: @moonportcheck.File,
    })
    println(@moonportcheck.render_json(@moonportcheck.audit(entries)))
    println(@moonportcheck.render_json(@moonportcheck.audit(entries.rev())))
  }
  println(
    @moonportcheck.render_json(
      @moonportcheck.audit([
        { path: "目录", kind: @moonportcheck.Directory, },
        { path: "目录/a", kind: @moonportcheck.File, },
        { path: "文件", kind: @moonportcheck.File, },
        { path: "文件", kind: @moonportcheck.Directory, },
      ]),
    ),
  )
  println(@moonportcheck.render_rules_json(@moonportcheck.rules()))
  println(@moonportcheck.render_rules_json(@moonportcheck.rules().rev()))
  for paths in cases {
    let entries : Array[@moonportcheck.PathEntry] = paths.map(p => {
      path: p,
      kind: @moonportcheck.File,
    })
    println(
      @moonportcheck.render_detailed_json(
        @moonportcheck.audit_with_options(
          entries,
          @moonportcheck.default_audit_options(),
        ),
      ),
    )
    println(
      @moonportcheck.render_detailed_json(
        @moonportcheck.audit_with_options(
          entries.rev(),
          @moonportcheck.default_audit_options(),
        ),
      ),
    )
  }
  let detailed = @moonportcheck.audit_with_options(
    [
      { path: "artifact", kind: @moonportcheck.File, },
      { path: "artifact/report", kind: @moonportcheck.File, },
      { path: "artifact/report", kind: @moonportcheck.File, },
    ],
    @moonportcheck.default_audit_options(),
  )
  println(@moonportcheck.render_detailed_json(detailed))
  println(
    @moonportcheck.render_detailed_json(
      @moonportcheck.with_scan_issues(detailed, [
        {
          code: "SCAN_LINK_SKIPPED",
          path: "link",
          message: "Link was not followed.",
        },
      ]),
    ),
  )
  let glob_cases : Array[(String, String, @moonportcheck.EntryKind)] = [
    ("*.txt", "notes/a.txt", @moonportcheck.File),
    ("**/*.txt", "notes/a.txt", @moonportcheck.File),
    ("**/?.txt", "数据/🙂.txt", @moonportcheck.File),
    ("cache/", "cache", @moonportcheck.File),
    ("cache/", "cache", @moonportcheck.Directory),
    ("cache/", "cache/nested/file", @moonportcheck.File),
    ("build", "build/log", @moonportcheck.File),
    ("**", "a/../b", @moonportcheck.File),
    ("**/", "topfile", @moonportcheck.File),
    ("a/**/b", "a/b", @moonportcheck.File),
    ("a/*/b", "a/b", @moonportcheck.File),
    ("**/", "a/file", @moonportcheck.File),
  ]
  for (raw, path, kind) in glob_cases {
    let compiled = match @moonportcheck.parse_pattern(raw) {
      Ok(pattern) => pattern
      Err(_) => abort("Invalid parity pattern")
    }
    println(
      @moonportcheck.pattern_matches(compiled, { path, kind, })
      .to_json()
      .stringify(),
    )
  }
  let scope_fixtures : Array[(Array[String], Array[@moonportcheck.PathEntry])] = [
    (
      ["*.tmp", "cache/"],
      [
        { path: "results.tmp", kind: @moonportcheck.File, },
        { path: "notes/a.txt", kind: @moonportcheck.File, },
        { path: "cache", kind: @moonportcheck.Directory, },
        { path: "cache/x.tmp", kind: @moonportcheck.File, },
        { path: "nested/c.tmp", kind: @moonportcheck.File, },
      ],
    ),
    (
      ["**"],
      [
        { path: "/abs", kind: @moonportcheck.File, },
        { path: "CON.txt", kind: @moonportcheck.File, },
        { path: "ok/a.txt", kind: @moonportcheck.File, },
      ],
    ),
  ]
  for (patterns, entries) in scope_fixtures {
    let scope = match @moonportcheck.parse_scope(patterns) {
      Ok(scope) => scope
      Err(_) => abort("Invalid parity scope")
    }
    println(
      @moonportcheck.render_detailed_json(
        @moonportcheck.audit_with_exclusions(
          entries,
          @moonportcheck.default_audit_options(),
          scope,
        ),
      ),
    )
    println(
      @moonportcheck.render_detailed_json(
        @moonportcheck.audit_with_exclusions(
          entries.rev(),
          @moonportcheck.default_audit_options(),
          scope,
        ),
      ),
    )
  }
  let snapshot = match
    @moonportcheck.build_snapshot(
      [
        { path: "目录/a.txt", kind: @moonportcheck.File, },
        { path: "数据", kind: @moonportcheck.Directory, },
        { path: "results.tmp", kind: @moonportcheck.File, },
      ],
      [
        {
          code: "SCAN_LINK_SKIPPED",
          path: "link",
          message: "Link was not followed.",
        },
      ],
      ["cache/", "*.tmp"],
    ) {
    Ok(snapshot) => snapshot
    Err(_) => abort("Invalid parity snapshot")
  }
  println(@moonportcheck.render_snapshot_json(snapshot))
  println(
    @moonportcheck.render_snapshot_json(
      match
        @moonportcheck.parse_snapshot(
          @moonportcheck.render_snapshot_json(snapshot),
        ) {
        Ok(parsed) => parsed
        Err(_) => abort("Snapshot round trip failed")
      },
    ),
  )
  let audit_target = match
    @moonportcheck.build_snapshot(
      [
        { path: "CON.txt", kind: @moonportcheck.File, },
        { path: "cache", kind: @moonportcheck.Directory, },
        { path: "cache/x.bin", kind: @moonportcheck.File, },
        { path: "results.tmp", kind: @moonportcheck.File, },
      ],
      [],
      ["*.tmp", "cache/"],
    ) {
    Ok(snapshot) => snapshot
    Err(_) => abort("Invalid parity snapshot")
  }
  println(
    @moonportcheck.render_detailed_json(
      match @moonportcheck.audit_snapshot(audit_target, ["results.tmp"]) {
        Ok(report) => report
        Err(_) => abort("Snapshot audit failed")
      },
    ),
  )
  let diff_before = match
    @moonportcheck.build_snapshot(
      [
        { path: "a.txt", kind: @moonportcheck.File, },
        { path: "C.txt", kind: @moonportcheck.File, },
        { path: "dir", kind: @moonportcheck.Directory, },
      ],
      [],
      [],
    ) {
    Ok(snapshot) => snapshot
    Err(_) => abort("Invalid parity snapshot")
  }
  let diff_after = match
    @moonportcheck.build_snapshot(
      [
        { path: "A.txt", kind: @moonportcheck.File, },
        { path: "C.txt", kind: @moonportcheck.Directory, },
        { path: "dir", kind: @moonportcheck.Directory, },
        { path: "new.tmp", kind: @moonportcheck.File, },
      ],
      [],
      [],
    ) {
    Ok(snapshot) => snapshot
    Err(_) => abort("Invalid parity snapshot")
  }
  println(
    @moonportcheck.render_snapshot_diff_json(
      match @moonportcheck.diff_snapshots(diff_before, diff_after) {
        Ok(diff) => diff
        Err(_) => abort("Parity snapshot diff failed")
      },
    ),
  )
  let baseline_report = match
    @moonportcheck.audit_snapshot(audit_target, ["results.tmp"]) {
    Ok(report) => report
    Err(_) => abort("Snapshot audit failed")
  }
  let baseline = match @moonportcheck.build_baseline(baseline_report) {
    Ok(baseline) => baseline
    Err(_) => abort("Baseline build failed")
  }
  println(@moonportcheck.render_baseline_json(baseline))
  println(
    @moonportcheck.render_baseline_diff_json(
      @moonportcheck.diff_with_baseline(
        baseline,
        match
          @moonportcheck.audit_snapshot(audit_target, ["CON.txt", "results.tmp"]) {
          Ok(report) => report
          Err(_) => abort("Snapshot audit failed")
        },
      ),
    ),
  )
  // M12: baseline create is a parse-rebuild round trip. Feed the rendered
  // report document back through parse_detailed_report and build_baseline and
  // the resulting document must be byte-identical to the source baseline.
  println(
    @moonportcheck.render_baseline_json(
      match
        @moonportcheck.build_baseline(
          match
            @moonportcheck.parse_detailed_report(
              @moonportcheck.render_detailed_json(baseline_report),
            ) {
            Ok(report) => report
            Err(_) => abort("Detailed report parse failed")
          },
        ) {
        Ok(baseline) => baseline
        Err(_) => abort("Baseline rebuild failed")
      },
    ),
  )
  // M13: new core renderers. Markdown for the snapshot diff and a SARIF 2.1.0
  // document for the report share byte-identical output across both targets.
  println(
    @moonportcheck.render_snapshot_diff_markdown(
      match @moonportcheck.diff_snapshots(diff_before, diff_after) {
        Ok(diff) => diff
        Err(_) => abort("Parity snapshot diff failed")
      },
    ),
  )
  println(@moonportcheck.render_check_sarif(baseline_report))
  // M14: the Markdown report renderer, byte-identical across both targets.
  println(@moonportcheck.render_detailed_markdown(baseline_report))
}