diff --git a/vlib/datatypes/doubly_linked_list.v b/vlib/datatypes/doubly_linked_list.v index dc0b533ae540bd..44b8ff770a6aed 100644 --- a/vlib/datatypes/doubly_linked_list.v +++ b/vlib/datatypes/doubly_linked_list.v @@ -1,6 +1,6 @@ module datatypes -enum Direction { +pub enum Direction { front back } @@ -88,7 +88,8 @@ pub fn (mut list DoublyLinkedList[T]) push_front(item T) { pub fn (mut list DoublyLinkedList[T]) push_many(elements []T, direction Direction) { match direction { .front { - for v in elements { + for i := elements.len - 1; i >= 0; i-- { + v := elements[i] list.push_front(v) } } diff --git a/vlib/datatypes/doubly_linked_list_test.v b/vlib/datatypes/doubly_linked_list_test.v index 405605e0bb0249..c5582d6ac140f1 100644 --- a/vlib/datatypes/doubly_linked_list_test.v +++ b/vlib/datatypes/doubly_linked_list_test.v @@ -230,3 +230,18 @@ fn test_back_iterator() { } assert res == [3, 2, 1] } + +fn test_push_many() { + mut list := DoublyLinkedList[int]{} + list.push_back(1) + list.push_back(2) + list.push_back(3) + list.push_many([4, 5, 6], .front) + list.push_many([7, 8, 9], .back) + + mut res := []int{} + for x in list { + res << x + } + assert res == [4, 5, 6, 1, 2, 3, 7, 8, 9] +}