///|
#warnings("-deprecated")
fn main {
  println("--- Moon Collections Examples ---")

  // Example 1: BitSet
  println("\n[BitSet Example]")
  let bs1 = @bitset.BitSet::new()
  bs1.set(10)
  bs1.set(100)
  println("BitSet 1 contains 10? " + bs1.contains(10).to_string())
  println("BitSet 1 contains 99? " + bs1.contains(99).to_string())
  println("BitSet 1 count of set bits: " + bs1.count().to_string())

  let bs2 = @bitset.BitSet::new()
  bs2.set(100)
  bs2.set(200)

  bs1.union(bs2)
  println("After union with bs2, set bits index: \{bs1.iter().to_array()}")
  println("JSON representation of bs1: " + bs1.to_json().stringify())

  // Example 2: IndexMap
  println("\n[IndexMap Example]")
  let map : @indexmap.IndexMap[String, Int] = @indexmap.IndexMap::new()
  let _ = map.set("first", 1)
  let _ = map.set("second", 2)
  let _ = map.set("third", 3)
  println("IndexMap size: " + map.size().to_string())
  println("Iteration order (keys): \{map.keys().to_array()}")

  // swap_remove
  let _ = map.swap_remove("first")
  println("After swap_remove('first'), keys: \{map.keys().to_array()}")
  println("JSON representation of map: " + map.to_json().stringify())

  // Example 3: Deque
  println("\n[Deque Example]")
  let deque : @deque.Deque[String] = @deque.Deque::new(2)
  deque.push_back("middle")
  deque.push_front("first")
  deque.push_back("last")
  println("Deque order: \{deque.to_array()}")

  // Example 4: Graph dependency order
  println("\n[Graph Example]")
  let graph : @graph.Graph[String] = @graph.Graph::new(true)
  let _ = graph.add_edge("parse", "typecheck")
  let _ = graph.add_edge("typecheck", "codegen")
  println("Build order: \{graph.topological_sort()}")
  println("Shortest path: \{graph.shortest_path("parse", "codegen")}")

  // Example 5: Disjoint-set connectivity
  println("\n[DisjointSet Example]")
  let connectivity = @disjoint_set.DisjointSet::new(5)
  let _ = connectivity.union(0, 1)
  let _ = connectivity.union(1, 2)
  println("0 connected to 2? " + connectivity.connected(0, 2).to_string())
  println("Components: \{connectivity.components()}")
}