diff --git a/vlib/datatypes/doubly_linked_list.v b/vlib/datatypes/doubly_linked_list.v index 7ff7c5dc51..c6af7aa7bc 100644 --- a/vlib/datatypes/doubly_linked_list.v +++ b/vlib/datatypes/doubly_linked_list.v @@ -249,13 +249,18 @@ pub fn (mut list DoublyLinkedList) delete(idx int) { // str returns a string representation of the linked list pub fn (list DoublyLinkedList) str() string { + return list.array().str() +} + +// array returns a array representation of the linked list +pub fn (list DoublyLinkedList) array() []T { mut result_array := []T{} mut node := list.head for unsafe { node != 0 } { result_array << node.data node = node.next } - return result_array.str() + return result_array } // next implements the iter interface to use DoublyLinkedList with diff --git a/vlib/datatypes/doubly_linked_list_test.v b/vlib/datatypes/doubly_linked_list_test.v index 3bb7dda5a6..74031d4350 100644 --- a/vlib/datatypes/doubly_linked_list_test.v +++ b/vlib/datatypes/doubly_linked_list_test.v @@ -158,3 +158,11 @@ fn test_str() ? { list.push_back(3) assert list.str() == '[1, 2, 3]' } + +fn test_array() ? { + mut list := DoublyLinkedList{} + list.push_back(1) + list.push_back(2) + list.push_back(3) + assert list.array() == [1, 2, 3] +} diff --git a/vlib/datatypes/linked_list.v b/vlib/datatypes/linked_list.v index 8684406e1d..901f21abf9 100644 --- a/vlib/datatypes/linked_list.v +++ b/vlib/datatypes/linked_list.v @@ -147,11 +147,16 @@ pub fn (mut list LinkedList) prepend(item T) { // str returns a string representation of the linked list pub fn (list LinkedList) str() string { + return list.array().str() +} + +// array returns a array representation of the linked list +pub fn (list LinkedList) array() []T { mut result_array := []T{} mut node := list.head for unsafe { node != 0 } { result_array << node.data node = node.next } - return result_array.str() + return result_array } diff --git a/vlib/datatypes/linked_list_test.v b/vlib/datatypes/linked_list_test.v index 23be1dc12e..a37278a7b8 100644 --- a/vlib/datatypes/linked_list_test.v +++ b/vlib/datatypes/linked_list_test.v @@ -112,3 +112,11 @@ fn test_str() ? { list.push(3) assert list.str() == '[1, 2, 3]' } + +fn test_array() ? { + mut list := LinkedList{} + list.push(1) + list.push(2) + list.push(3) + assert list.array() == [1, 2, 3] +} diff --git a/vlib/datatypes/queue.v b/vlib/datatypes/queue.v index 757b0af573..95b912f386 100644 --- a/vlib/datatypes/queue.v +++ b/vlib/datatypes/queue.v @@ -44,3 +44,8 @@ pub fn (mut queue Queue) pop() ?T { pub fn (queue Queue) str() string { return queue.elements.str() } + +// array returns a array representation of the queue +pub fn (queue Queue) array() []T { + return queue.elements.array() +} diff --git a/vlib/datatypes/queue_test.v b/vlib/datatypes/queue_test.v index fbbd5b56dd..e3544b4053 100644 --- a/vlib/datatypes/queue_test.v +++ b/vlib/datatypes/queue_test.v @@ -69,3 +69,10 @@ fn test_pop() ? { queue.pop() or { return } assert false } + +fn test_array() ? { + mut queue := Queue{} + queue.push(1) + queue.push(2) + assert queue.array() == [1, 2] +} diff --git a/vlib/datatypes/stack.v b/vlib/datatypes/stack.v index ac6b5600c0..528a8261f8 100644 --- a/vlib/datatypes/stack.v +++ b/vlib/datatypes/stack.v @@ -34,3 +34,8 @@ pub fn (mut stack Stack) pop() ?T { pub fn (stack Stack) str() string { return stack.elements.str() } + +// array returns a array representation of the stack +pub fn (stack Stack) array() []T { + return stack.elements +} diff --git a/vlib/datatypes/stack_test.v b/vlib/datatypes/stack_test.v index e3687059b7..db6df5d874 100644 --- a/vlib/datatypes/stack_test.v +++ b/vlib/datatypes/stack_test.v @@ -50,3 +50,10 @@ fn test_pop() ? { stack.pop() or { return } assert false } + +fn test_array() ? { + mut stack := dt.Stack{} + stack.push(1) + stack.push(2) + assert stack.array() == [1, 2] +}