From e64560c0042c2e7e4e0169830719d390463c9aed Mon Sep 17 00:00:00 2001 From: Brian Bechtel Date: Wed, 16 Jul 2025 12:48:27 -0700 Subject: [PATCH 1/2] implement AddAll --- arraydeque/arraydeque.go | 11 ++++--- arraydeque/arraydeque_test.go | 59 +++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 5 deletions(-) diff --git a/arraydeque/arraydeque.go b/arraydeque/arraydeque.go index 39d8023..b7f92bb 100644 --- a/arraydeque/arraydeque.go +++ b/arraydeque/arraydeque.go @@ -30,11 +30,6 @@ type ArrayDeque[T any] struct { size int } -func (d *ArrayDeque[T]) AddAll(c collections.Collection[T]) { - //TODO implement me - panic("implement me") -} - // Config holds the values for configuring a ArrayDeque. type Config struct { Capacity int @@ -161,6 +156,12 @@ func (d *ArrayDeque[T]) RemoveBack() T { return t } +func (d *ArrayDeque[T]) AddAll(c collections.Collection[T]) { + for t := range c.All() { + d.Add(t) + } +} + // Size returns the number of elements in this deque. func (d *ArrayDeque[T]) Size() int { return d.size diff --git a/arraydeque/arraydeque_test.go b/arraydeque/arraydeque_test.go index 4a46b10..081f744 100644 --- a/arraydeque/arraydeque_test.go +++ b/arraydeque/arraydeque_test.go @@ -2,6 +2,7 @@ package arraydeque import ( "github.com/lock14/collections" + "iter" "slices" "testing" @@ -250,4 +251,62 @@ func TestType(t *testing.T) { testType[int](l) } +func TestArrayDeque_AddAll(t *testing.T) { + t.Parallel() + cases := []struct { + name string + items []int + want []int + }{ + { + name: "add_none", + items: []int{}, + want: nil, + }, + { + name: "add_one", + items: []int{1}, + want: []int{1}, + }, + { + name: "add_up_to_default_capacity", + items: []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, + want: []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, + }, + { + name: "add_double_capacity", + items: []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}, + want: []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}, + }, + } + for _, tc := range cases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + d := New[int]() + d.AddAll(&sliceCollection[int]{tc.items}) + got := slices.Collect(d.All()) + if diff := cmp.Diff(got, tc.want); diff != "" { + t.Errorf("wrong string value, -got,+want: %s", diff) + } + }) + } +} + func testType[T any](deque collections.Deque[T]) {} + +type sliceCollection[T any] struct { + s []T +} + +func (sc *sliceCollection[T]) All() iter.Seq[T] { + return slices.Values(sc.s) +} + +func (sc *sliceCollection[T]) Size() int { + return len(sc.s) +} + +func (sc *sliceCollection[T]) Empty() bool { + return sc.Size() == 0 +} From 13b1eab56c7fce2a3ef374bf076c112d66bc42a6 Mon Sep 17 00:00:00 2001 From: Brian Bechtel Date: Wed, 16 Jul 2025 12:49:43 -0700 Subject: [PATCH 2/2] run go fmt --- arraydeque/arraydeque.go | 6 +++--- arraydeque/arraydeque_test.go | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/arraydeque/arraydeque.go b/arraydeque/arraydeque.go index b7f92bb..48ed3ea 100644 --- a/arraydeque/arraydeque.go +++ b/arraydeque/arraydeque.go @@ -157,9 +157,9 @@ func (d *ArrayDeque[T]) RemoveBack() T { } func (d *ArrayDeque[T]) AddAll(c collections.Collection[T]) { - for t := range c.All() { - d.Add(t) - } + for t := range c.All() { + d.Add(t) + } } // Size returns the number of elements in this deque. diff --git a/arraydeque/arraydeque_test.go b/arraydeque/arraydeque_test.go index 081f744..0a86d77 100644 --- a/arraydeque/arraydeque_test.go +++ b/arraydeque/arraydeque_test.go @@ -2,7 +2,7 @@ package arraydeque import ( "github.com/lock14/collections" - "iter" + "iter" "slices" "testing" @@ -284,7 +284,7 @@ func TestArrayDeque_AddAll(t *testing.T) { t.Run(tc.name, func(t *testing.T) { t.Parallel() d := New[int]() - d.AddAll(&sliceCollection[int]{tc.items}) + d.AddAll(&sliceCollection[int]{tc.items}) got := slices.Collect(d.All()) if diff := cmp.Diff(got, tc.want); diff != "" { t.Errorf("wrong string value, -got,+want: %s", diff) @@ -296,17 +296,17 @@ func TestArrayDeque_AddAll(t *testing.T) { func testType[T any](deque collections.Deque[T]) {} type sliceCollection[T any] struct { - s []T + s []T } func (sc *sliceCollection[T]) All() iter.Seq[T] { - return slices.Values(sc.s) + return slices.Values(sc.s) } func (sc *sliceCollection[T]) Size() int { - return len(sc.s) + return len(sc.s) } func (sc *sliceCollection[T]) Empty() bool { - return sc.Size() == 0 + return sc.Size() == 0 }