///|
fn main {
  try {
    let schema = @config.parse_kconfig(
      "config PRO\n bool \"Pro model\"\nconfig LOGGING\n bool \"Logging\"\n default y if PRO\nconfig BRAND\n string \"Brand\"\n default \"Basic\"",
    )
    let common = schema.parse_config(
      "# CONFIG_PRO is not set\nCONFIG_BRAND=\"Basic\"",
    )
    let premium = schema.parse_config("CONFIG_PRO=y\nCONFIG_BRAND=\"Premium\"")
    let baseline = schema.resolve(common)
    let selected = schema.resolve(@config.merge_fragments([common, premium]))
    assert_eq(@config.overlay_conflicts([common, premium]).length(), 2)
    let changes = schema.changes(baseline, selected)
    assert_eq(changes.length(), 3)
    for change in changes {
      println(
        change.name + ": " + change.before.text() + " -> " + change.after.text(),
      )
    }
    let fragment = schema.minimal_fragment(selected)
    println(schema.export_fragment(fragment))
    assert_eq(
      schema.resolve(fragment).value("LOGGING"),
      @config.Logic(@config.Y),
    )
  } catch {
    _ => abort("variant workflow failed")
  }
}