Skip to content

Commit 15583d4

Browse files
illusory0x0lynzrand
authored andcommitted
add @deque.to_array
1 parent d1d9cd6 commit 15583d4

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

deque/deque.mbt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,3 +1244,16 @@ pub fn from_iter[A](iter : Iter[A]) -> T[A] {
12441244
iter.each(fn(e) { dq.push_back(e) })
12451245
dq
12461246
}
1247+
1248+
///|
1249+
pub fn to_array[A](self : T[A]) -> Array[A] {
1250+
if self.length() == 0 {
1251+
[]
1252+
} else {
1253+
let xs = Array::make(self.length(), self[0])
1254+
for i in 0..<self.length() {
1255+
xs[i] = self[i]
1256+
}
1257+
xs
1258+
}
1259+
}

deque/deque.mbti

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ impl T {
5050
rev_iter2[A](Self[A]) -> Iter2[Int, A]
5151
search[A : Eq](Self[A], A) -> Int?
5252
shrink_to_fit[A](Self[A]) -> Unit
53+
to_array[A](Self[A]) -> Array[A]
5354
truncate[A](Self[A], Int) -> Unit
5455
unsafe_pop_back[A](Self[A]) -> Unit
5556
unsafe_pop_front[A](Self[A]) -> Unit

deque/deque_test.mbt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -877,3 +877,27 @@ test "deque retain_map" {
877877
content="([4, 5, 6], [7, 8])",
878878
)
879879
}
880+
881+
test "@deque.to_array/empty" {
882+
let dq : T[Int] = @deque.new()
883+
let arr = dq.to_array()
884+
inspect!(arr, content="[]")
885+
}
886+
887+
test "@deque.to_array/basic" {
888+
let dq = @deque.of([1, 2, 3, 4, 5])
889+
let arr = dq.to_array()
890+
inspect!(arr, content="[1, 2, 3, 4, 5]")
891+
}
892+
893+
test "@deque.to_array/wrapped_around" {
894+
// Create a deque that will wrap around its internal buffer
895+
let dq = @deque.new(capacity=3)
896+
dq.push_back(1)
897+
dq.push_back(2)
898+
dq.push_back(3)
899+
dq.pop_front() |> ignore
900+
dq.push_back(4)
901+
let arr = dq.to_array()
902+
inspect!(arr, content="[2, 3, 4]")
903+
}

0 commit comments

Comments
 (0)