///|
test {
let v1 : @vector.Vector[Int] = @vector.new()
@test.assert_eq(v1.length(), 0)
let v2 = @vector.from_array([1, 2, 3, 4, 5])
@test.assert_eq(v2.length(), 5)
let v3 = @vector.from_iter((1).until(5))
@debug.assert_eq(v3.to_array(), [1, 2, 3, 4])
}///|
test {
let v1 = @vector.make(5, 0)
@debug.assert_eq(v1.to_array(), [0, 0, 0, 0, 0])
let v2 = @vector.makei(5, fn(i) { i * i })
@debug.assert_eq(v2.to_array(), [0, 1, 4, 9, 16])
}///|
test {
let v = @vector.from_array([10, 20, 30, 40, 50])
@test.assert_eq(v[2], 30)
assert_true(v.get(2) == Some(30))
assert_true(v.get(99) == None)
assert_true(v.peek() == Some(50)) // last element
}///|
test {
let v1 = @vector.from_array([1, 2, 3])
let v2 = v1.set(1, 20)
@debug.assert_eq(v1.to_array(), [1, 2, 3]) // original unchanged
@debug.assert_eq(v2.to_array(), [1, 20, 3])
}///|
test {
let v1 = @vector.from_array([1, 2, 3])
let v2 = v1.push(4)
@debug.assert_eq(v2.to_array(), [1, 2, 3, 4])
let v3 = v2.pop().unwrap()
@debug.assert_eq(v3.to_array(), [1, 2, 3])
// pop on empty vector returns None
let empty : @vector.Vector[Int] = @vector.new()
assert_true(empty.pop() == None)
}///|
test {
let a = @vector.from_array([1, 2, 3])
let b = @vector.from_array([4, 5, 6])
@debug.assert_eq(a.concat(b).to_array(), [1, 2, 3, 4, 5, 6])
@debug.assert_eq((a + b).to_array(), [1, 2, 3, 4, 5, 6])
}///|
test {
let v = @vector.from_iter((0).until(10))
// split at index: [0, index) and [index, len)
let (left, right) = v.split(4)
@debug.assert_eq(left.to_array(), [0, 1, 2, 3])
@debug.assert_eq(right.to_array(), [4, 5, 6, 7, 8, 9])
// take first n elements
@debug.assert_eq(v.take(3).to_array(), [0, 1, 2])
// drop first n elements
@debug.assert_eq(v.drop(7).to_array(), [7, 8, 9])
// slice [start, end)
@debug.assert_eq(v.slice(2, 6).to_array(), [2, 3, 4, 5])
}///|
test {
let v = @vector.from_array([1, 2, 3, 4, 5])
// iterator
debug_inspect(v.iter().to_array(), content="[1, 2, 3, 4, 5]")
// each
let buf = []
v.each(fn(x) { buf.push(x) })
@debug.assert_eq(buf, [1, 2, 3, 4, 5])
// eachi (with index)
let pairs = []
v.eachi(fn(i, x) { pairs.push((i, x)) })
@debug.assert_eq(pairs, [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)])
}///|
test {
let v = @vector.from_array([1, 2, 3, 4, 5])
// sum via fold
@test.assert_eq(v.fold(fn(acc, x) { acc + x }, init=0), 15)
// reverse fold
let result = v.rev_fold(fn(acc, x) { acc + x.to_string() }, init="")
@test.assert_eq(result, "54321")
// map
@debug.assert_eq(v.map(fn(x) { x * 2 }).to_array(), [2, 4, 6, 8, 10])
}///|
test {
let v = @vector.from_array([1, 2, 3])
@test.assert_eq(v.length(), 3)
@test.assert_eq(v.is_empty(), false)
let empty : @vector.Vector[Int] = @vector.new()
@test.assert_eq(empty.is_empty(), true)
}///|
test {
let a = @vector.from_array([1, 2, 3])
let b = @vector.from_array([1, 2, 3])
let c = @vector.from_array([1, 2, 4])
@test.assert_eq(a == b, true)
@test.assert_eq(a == c, false)
@test.assert_eq(a.compare(c) < 0, true)
}type Vector[A]test {
let arr1 = @vector.from_array([1, 2, 3])
let arr2 = @vector.from_array([1, 2, 4])
let arr3 = @vector.from_array([1, 2])
inspect(arr1.compare(arr2), content="-1") // arr1 < arr2
inspect(arr1.compare(arr3), content="1") // arr1 > arr3 (longer)
inspect(arr3.compare(arr1), content="-1") // arr3 < arr1 (shorter)
inspect(arr1.compare(arr1), content="0") // arr1 = arr1
}test {
let v = @vector.Vector([1, 2, 3])
@debug.assert_eq(v, @vector.from_array([1, 2, 3]))
}test {
let v = @vector.from_array([1, 2, 3, 4, 5])
inspect(v[0], content="1")
}test {
let v = @vector.from_array([1, 2, 3, 4, 5])
inspect(v.contains(3), content="true")
inspect(v.contains(6), content="false")
}test {
let arr = []
let v = @vector.from_array([1, 2, 3, 4, 5])
v.each(e => arr.push(e))
@debug.assert_eq(arr, [1, 2, 3, 4, 5])
}test {
let arr = []
let v = @vector.from_array([1, 2, 3, 4, 5])
v.eachi((i, e) => arr.push(i * e))
@debug.assert_eq(arr, [0, 2, 6, 12, 20])
}test {
let v = @vector.from_array([1, 2, 3, 4, 5])
@debug.assert_eq(v.filter(x => x % 2 == 0), @vector.from_array([2, 4]))
}test {
let v = @vector.from_array([1, 2, 3, 4, 5])
@test.assert_eq(v.fold((a, b) => a + b, init=0), 15)
}test {
let v = @vector.from_array([1, 2, 3])
debug_inspect(v.get(1), content="Some(2)")
debug_inspect(v.get(-1), content="None")
debug_inspect(v.get(3), content="None")
}test {
let v = @vector.from_array([1, 2, 3, 4, 5])
@debug.assert_eq(v.map(e => e * 2), @vector.from_array([2, 4, 6, 8, 10]))
}test {
let v = @vector.from_array([1, 2, 3])
@debug.assert_eq(v.push(4), @vector.from_array([1, 2, 3, 4]))
}test {
let v = @vector.from_array([1, 2, 3, 4, 5])
@debug.assert_eq(v.rev(), @vector.from_array([5, 4, 3, 2, 1]))
}test {
let v = @vector.from_array([1, 2, 3, 4, 5])
@test.assert_eq(v.rev_fold((a, b) => a + b, init=0), 15)
}test {
let v = @vector.from_array([1, 2, 3, 4, 5])
@debug.assert_eq(v.set(1, 10), @vector.from_array([1, 10, 3, 4, 5]))
}test {
let v = @vector.singleton(42)
@debug.assert_eq(v, @vector.from_array([42]))
@test.assert_eq(v.length(), 1)
}Install
Installed by default