aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--deque.go15
-rw-r--r--deque_test.go12
2 files changed, 27 insertions, 0 deletions
diff --git a/deque.go b/deque.go
index e267eba..4eec0e6 100644
--- a/deque.go
+++ b/deque.go
@@ -11,6 +11,7 @@ import (
"fmt"
"iter"
"slices"
+ "strings"
)
// Deque is a double-ended queue. The zero value is ready for use.
@@ -190,3 +191,17 @@ func (q *Deque[T]) PopAll() iter.Seq[T] {
}
}
}
+
+// String displays the deque as a string, using fmt.Sprint to show each element.
+func (q *Deque[T]) String() string {
+ buf := new(strings.Builder)
+ buf.WriteString("[")
+ for i := range len(q.buf) {
+ if i > 0 {
+ buf.WriteString(" ")
+ }
+ fmt.Fprint(buf, q.buf[:cap(q.buf)][q.toPhysicalIdx(i)])
+ }
+ buf.WriteString("]")
+ return buf.String()
+}
diff --git a/deque_test.go b/deque_test.go
index d3ea63c..27ae232 100644
--- a/deque_test.go
+++ b/deque_test.go
@@ -285,3 +285,15 @@ func TestPopAll(t *testing.T) {
})
}
}
+
+func TestString(t *testing.T) {
+ t.Parallel()
+
+ in := []int{1, 2, 3, 4, 5}
+ q := From(in)
+ const want = "[1 2 3 4 5]"
+ got := q.String()
+ if got != want {
+ t.Errorf("%d: String() = %q, want %q", in, got, want)
+ }
+}