From 723b3d74eeddcb9cc161cb21e0bfedfd2069a02a Mon Sep 17 00:00:00 2001 From: shove Date: Thu, 25 Aug 2022 19:12:39 +0800 Subject: [PATCH] datatypes: add array() method for LinkedList, DoublyLinkedList, Queue, and Stack (#15524) (#15525) --- vlib/datatypes/doubly_linked_list.v | 7 ++++++- vlib/datatypes/doubly_linked_list_test.v | 8 ++++++++ vlib/datatypes/linked_list.v | 7 ++++++- vlib/datatypes/linked_list_test.v | 8 ++++++++ vlib/datatypes/queue.v | 5 +++++ vlib/datatypes/queue_test.v | 7 +++++++ vlib/datatypes/stack.v | 5 +++++ vlib/datatypes/stack_test.v | 7 +++++++ 8 files changed, 52 insertions(+), 2 deletions(-) diff --git a/vlib/datatypes/doubly_linked_list.v b/vlib/datatypes/doubly_linked_list.v index 7ff7c5dc5..c6af7aa7b 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 3bb7dda5a..74031d435 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 8684406e1..901f21abf 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 23be1dc12..a37278a7b 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 757b0af57..95b912f38 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 fbbd5b56d..e3544b405 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 ac6b5600c..528a8261f 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 e3687059b..db6df5d87 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] +} -- 2.30.2