Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions deque/deque.mbt
Original file line number Diff line number Diff line change
Expand Up @@ -1593,7 +1593,7 @@ pub fn[A] Deque::rev_iterator(self : Deque[A]) -> Iterator[A] {
/// * `self` : The deque to iterate over.
///
/// Returns an iterator that yields tuples of `(index, value)` pairs, where the
/// index starts from 0 and increments by 1, while values are taken from the
/// index starts from `length - 1` and decrements by 1, while values are taken from the
/// deque in reverse order.
///
/// Example:
Expand All @@ -1602,28 +1602,28 @@ pub fn[A] Deque::rev_iterator(self : Deque[A]) -> Iterator[A] {
/// let dq = @deque.of([1, 2, 3])
/// let mut s = ""
/// dq.rev_iter2().each((i, x) => { s = s + "\{i}:\{x} " })
/// inspect(s, content="0:3 1:2 2:1 ")
/// inspect(s, content="2:3 1:2 0:1 ")
/// ```
pub fn[A] Deque::rev_iter2(self : Deque[A]) -> Iter2[Int, A] {
Iter2::new(yield_ => {
guard !self.is_empty() else { IterContinue }
let { head, buf, len, .. } = self
let cap = buf.length()
let head_len = cap - head
let mut j = 0
let mut j = len - 1
if head_len >= len {
for i = head + len - 1; i >= head; i = i - 1 {
guard yield_(j, buf[i]) is IterContinue else { return IterEnd }
j += 1
j -= 1
}
} else {
for i = len - head_len - 1; i >= 0; i = i - 1 {
guard yield_(j, buf[i]) is IterContinue else { return IterEnd }
j += 1
j -= 1
}
for i = cap - 1; i >= head; i = i - 1 {
guard yield_(j, buf[i]) is IterContinue else { return IterEnd }
j += 1
j -= 1
}
}
IterContinue
Expand Down
8 changes: 4 additions & 4 deletions deque/deque_test.mbt
Original file line number Diff line number Diff line change
Expand Up @@ -183,14 +183,14 @@ test "rev_each" {
///|
test "rev_eachi" {
let mut i = 6
let mut j = 0
let mut j = 6
let mut failed = false
@deque.of([1, 2, 3, 4, 5]).rev_eachi((index, elem) => {
if index != j || elem != i - 1 {
if index != j - 2 || elem != i - 1 {
failed = true
}
i = i - 1
j = j + 1
j = j - 1
})
assert_false(failed)
}
Expand Down Expand Up @@ -1096,7 +1096,7 @@ test "rev_iter2 when wrapped around" {
dq.push_front(6)
inspect(
dq.rev_iter2(),
content="[(0, 5), (1, 4), (2, 3), (3, 2), (4, 1), (5, 6)]",
content="[(5, 5), (4, 4), (3, 3), (2, 2), (1, 1), (0, 6)]",
)
}

Expand Down