///|
fn main {
  println(
    "=== moon_collections: Deterministic Data Processing for MoonBit/WASM ===",
  )
  println("")

  println("--- PROOF: Same input => same fingerprint ---")
  let m1 = @indexmap.IndexMap::new()
  ignore(m1.insert("a", 1))
  ignore(m1.insert("b", 2))
  ignore(m1.insert("c", 3))
  let m2 = @indexmap.IndexMap::new()
  ignore(m2.insert("a", 1))
  ignore(m2.insert("b", 2))
  ignore(m2.insert("c", 3))
  println(
    "m1.fingerprint() == m2.fingerprint(): " +
    repr(m1.fingerprint() == m2.fingerprint()),
  )

  println("")
  println("--- PROOF: Different order => different fingerprint ---")
  let m3 = @indexmap.IndexMap::new()
  ignore(m3.insert("c", 3))
  ignore(m3.insert("a", 1))
  ignore(m3.insert("b", 2))
  println(
    "m1.fingerprint() != m3.fingerprint(): " +
    repr(m1.fingerprint() != m3.fingerprint()),
  )

  println("")
  println("--- PROOF: Remove preserves order (shift_remove) ---")
  let m4 = @indexmap.IndexMap::new()
  ignore(m4.insert("a", 1))
  ignore(m4.insert("b", 2))
  ignore(m4.insert("c", 3))
  ignore(m4.remove("b"))
  println("After remove('b'): " + repr(m4.keys_array()))

  println("")
  println("--- Counter: Deterministic frequency counting ---")
  let c = @counter.Counter::from_array(["a", "b", "a", "c", "a", "b"])
  println("Counter: " + repr(c.most_common(3)))

  println("")
  println("--- RingBuffer: WASM streaming ---")
  let rb = @ringbuffer.RingBuffer::new(3)
  ignore(rb.push_back(1))
  ignore(rb.push_back(2))
  ignore(rb.push_back(3))
  let evicted = rb.push_back(4)
  println(
    "RingBuffer[3] push 4: " +
    repr(rb.to_array()) +
    ", evicted=" +
    repr(evicted),
  )

  println("")
  println("--- SparseSet: ECS O(1) operations ---")
  let ss = @sparseset.SparseSet::new(100)
  ignore(ss.insert(42, "player1"))
  ignore(ss.insert(99, "player2"))
  println(
    "SparseSet contains 42: " +
    repr(ss.contains(42)) +
    ", get 99: " +
    repr(ss.get(99)),
  )

  println("")
  println("All 11 data structures implement Collection + Deterministic traits.")
  println("Fingerprint lazy caching: O(n) first call, O(1) cached.")
  println("Same input => same output => same fingerprint. Always.")
}