///|
test {
let _set1 = @hashset.HashSet([1, 2, 3, 4, 5])
let _set2 : @hashset.HashSet[String] = HashSet([])
}///|
test {
let set : @hashset.HashSet[String] = HashSet([])
set.add("a")
@test.assert_eq(set.contains("a"), true)
}///|
test {
let set = @hashset.from_array(["a", "b", "c"])
set.remove("a")
@test.assert_eq(set.contains("a"), false)
}///|
test {
let set = @hashset.from_array(["a", "b", "c"])
@test.assert_eq(set.length(), 3)
@test.assert_eq(set.capacity(), 8)
}///|
test {
let set : @hashset.HashSet[Int] = HashSet([])
@test.assert_eq(set.is_empty(), true)
}///|
test {
let set = @hashset.from_array(["a", "b", "c"])
set.clear()
@test.assert_eq(set.is_empty(), true)
}///|
test {
let set = @hashset.from_array(["a", "b", "c"])
let arr = []
set.each(k => arr.push(k))
let arr2 = []
set.eachi((i, k) => arr2.push((i, k)))
}///|
test {
let set = @hashset.from_array([1, 2, 3])
@test.assert_eq(set.add_and_check(4), true) // new element
@test.assert_eq(set.add_and_check(4), false) // already exists
@test.assert_eq(set.remove_and_check(4), true) // removed
@test.assert_eq(set.remove_and_check(4), false) // not present
}///|
test {
let set = @hashset.from_array([1, 2, 3, 4, 5])
set.retain(fn(x) { x % 2 == 0 })
@test.assert_eq(set.contains(1), false)
@test.assert_eq(set.contains(2), true)
}///|
test {
let set = @hashset.from_array([1, 2, 3])
let cloned = set.copy()
cloned.add(4)
@test.assert_eq(set.contains(4), false) // original unchanged
@test.assert_eq(cloned.contains(4), true)
}///|
test {
let set = @hashset.from_array([1, 2, 3])
let arr = set.to_array()
arr.sort()
@test.assert_eq(arr, [1, 2, 3])
// from_iter
let set2 = @hashset.from_iter([4, 5, 6].iter())
@test.assert_eq(set2.length(), 3)
}///|
test {
let m1 = @hashset.from_array(["a", "b", "c"])
let m2 = @hashset.from_array(["b", "c", "d"])
fn to_sorted_array(set : @hashset.HashSet[String]) {
let arr = set.to_array()
arr.sort()
arr
}
@test.assert_eq(m1.union(m2) |> to_sorted_array, ["a", "b", "c", "d"])
@test.assert_eq(m1.intersection(m2) |> to_sorted_array, ["b", "c"])
@test.assert_eq(m1.difference(m2) |> to_sorted_array, ["a"])
@test.assert_eq(m1.symmetric_difference(m2) |> to_sorted_array, ["a", "d"])
// operator aliases
@test.assert_eq((m1 | m2) |> to_sorted_array, ["a", "b", "c", "d"])
@test.assert_eq((m1 & m2) |> to_sorted_array, ["b", "c"])
@test.assert_eq((m1 - m2) |> to_sorted_array, ["a"])
@test.assert_eq((m1 ^ m2) |> to_sorted_array, ["a", "d"])
}///|
test {
let small = @hashset.from_array([1, 2])
let big = @hashset.from_array([1, 2, 3, 4])
let other = @hashset.from_array([5, 6])
@test.assert_eq(small.is_subset(big), true)
@test.assert_eq(big.is_superset(small), true)
@test.assert_eq(small.is_disjoint(other), true)
@test.assert_eq(small.is_disjoint(big), false)
}type HashSet[K]test {
let set = @hashset.HashSet([(3, "three"), (8, "eight"), (1, "one")])
set.add((4, "four"))
@test.assert_eq(set.contains((4, "four")), true)
}test {
let set : @hashset.HashSet[String] = HashSet([])
set.add("key")
inspect(set.contains("key"), content="true")
set.add("key") // no effect since it already exists
inspect(set.length(), content="1")
}test {
let set : @hashset.HashSet[String] = HashSet([])
inspect(set.add_and_check("key"), content="true") // First insertion
inspect(set.add_and_check("key"), content="false") // Already exists
inspect(set.length(), content="1")
}test {
let set = @hashset.from_array(["a", "b"])
set.remove("a")
inspect(set.contains("a"), content="false")
inspect(set.length(), content="1")
}test {
let set = @hashset.from_array(["a", "b"])
inspect(set.remove_and_check("a"), content="true") // Successfully removed
inspect(set.remove_and_check("a"), content="false") // Already removed
inspect(set.length(), content="1")
}Install
Installed by default