Implementing the IndexSet Data Structure Using MoonBit
moon add kesmeey/IndexSetlet set1 = @IndexSet.of([3, 1, 2])
let set2 = @IndexSet.new()let s = @IndexSet.new()
s.add("a")
assert_true!(s.contains("a"))let s = @IndexSet.of(["a", "b", "c"])
s.remove("a")
assert_false!(s.contains("a"))let set = @IndexSet.of([("a"), ("b"), ("c")])
assert_eq!(set.size(), 3)
assert_eq!(set.capacity(), 8)let set : @hashset.T[Int] = @hashset.new()
assert_eq!(set.is_empty(), true)let set = @IndexSet.of(["a", "b", "c"])
set.clear()
assert_eq!(set.is_empty(), true)let set = @IndexSet.of([("a"), ("b"), ("c")])
let arr = []
set.each(fn(k) { arr.push(k) }) // arr: ["a", "b", "c"]
let arr2 = []
set.eachi(fn(i, k) { arr2.push((i, k)) }) // arr2: [(0, "a"), (1, "b"), (2, "c")]let m1 = @IndexSet.of(["a", "b", "c"])
let m2 = @IndexSet.of(["b", "c", "d"])
assert_eq!(m1.union(m2).to_array()..sort(), ["a", "b", "c", "d"])
assert_eq!(m1.intersection(m2).to_array()..sort(), ["b", "c"])
assert_eq!(m1.difference(m2).to_array()..sort(), ["a"])
assert_eq!(m1.symmetric_difference(m2).to_array()..sort(), ["a", "d"])let m = @IndexSet.new()
m.add("a")
m.add("b")
m.add("c")
assert_eq!(m.shift().unwrap(), "a")
assert_eq!(m.shift().unwrap(), "b")
m.add("d")
m.add("e")
assert_eq!(m.pop().unwrap(), "e")
assert_eq!(m.pop().unwrap(), "d")let m = @IndexSet.new()
m.add("a")
m.add("b")
m.add("c")
assert_eq!(m.peek_last().unwrap(), "c")
assert_eq!(m.peek_first().unwrap(), "a")let set = @IndexSet.of([5, 2, 4, 1, 3])
let sorted_set = set.sorted(fn(a, b) { a - b })
assert_eq!(set.to_array(), [5, 2, 4, 1, 3])
assert_eq!(sorted_set.to_array(), [1, 2, 3, 4, 5])let set = @IndexSet.of([5, 2, 4, 1, 3])
set.sort(fn(a, b) { a - b })
assert_eq!(set.to_array(), [1, 2, 3, 4, 5])let set = @IndexSet.of([100, 200, 300, 400, 500])
assert_eq!(set.get_at(0), Some(100))
assert_eq!(set.index_of(300), Some(2))type T[K]let set = @indexset.of([3, 8, 1])
set.add(4)
assert_eq!(set.contains(4), true)
assert_eq!(set.get_at(3), 4) // Access by indexInstall
Download zipImplementing the IndexSet Data Structure Using MoonBit