
contract MapOfMaps =

  type board = map(int, map(int, string))
  type map2('a, 'b, 'c) = map('a, map('b, 'c))

  record state = { big1   : map2(string, string, string),
                   big2   : map2(string, string, string),
                   small1 : map(string, string),
                   small2 : map(string, string)  }

  private function empty_state() =
    { big1   = {}, big2   = {},
      small1 = {}, small2 = {} }

  function init() = empty_state()

  function setup_state() =
    let small = {["key"] = "val"}
    put({ big1 = {["one"] = small},
          big2 = {["two"] = small},
          small1 = small,
          small2 = small })

  // -- Garbage collection of inner map when outer map is garbage collected
  function test1_setup() =
    let inner = {["key"] = "val"}
    put(empty_state() { big1 = {["one"] = inner} })

  function test1_execute() =
    put(state{ big1 = {} })

  function test1_check() =
    state.big1


