///|
fn main raise {
  let files = Map([
    (
      "Kconfig", "FIRST = 11\nSECOND := 22\nconfig LEFT\n bool \"Left\"\nconfig RIGHT\n bool \"Right\"\nsource \"a/Kconfig\"\nsource \"b/Kconfig\"\n",
    ),
    (
      "a/Kconfig", "if LEFT\nconfig SHARED\n int \"First declaration\"\n default $(FIRST)\nendif\n",
    ),
    (
      "b/Kconfig", "if RIGHT\nconfig SHARED\n int \"Second declaration\"\n default $(SECOND)\nendif\n",
    ),
  ])
  let schema = @config.parse_sources("Kconfig", files)
  let right = schema.resolve(schema.parse_config("CONFIG_RIGHT=y\n"))
  assert_eq(right.value("SHARED"), @config.Number(22L))
  let both = schema.resolve(
    schema.parse_config("CONFIG_LEFT=y\nCONFIG_RIGHT=y\n"),
  )
  assert_eq(both.value("SHARED"), @config.Number(11L))
  let requested = schema.resolve(
    schema.parse_config("CONFIG_RIGHT=y\nCONFIG_SHARED=37\n"),
  )
  assert_eq(requested.value("SHARED"), @config.Number(37L))
  assert_eq(schema.source_locations("SHARED"), ["a/Kconfig:2", "b/Kconfig:2"])
  println(schema.export_config(right))
}