From cd509e9acdda499ef3f998d7b4b93a7cb9dea481 Mon Sep 17 00:00:00 2001 From: Michael Thomson Date: Sat, 25 May 2024 01:29:58 -0400 Subject: [PATCH] arrays-slices --- arrays/sum.go | 32 +++++++++++++++++++++++++++++++ arrays/sum_test.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 arrays/sum.go create mode 100644 arrays/sum_test.go diff --git a/arrays/sum.go b/arrays/sum.go new file mode 100644 index 0000000..9a5e702 --- /dev/null +++ b/arrays/sum.go @@ -0,0 +1,32 @@ +package main + +func Sum(numbers []int) int { + sum := 0 + for _, number := range numbers { + sum += number + } + return sum +} + +func SumAll(numbersToSum ...[]int) []int { + var sums []int + + for _, numbers := range numbersToSum { + sums = append(sums, Sum(numbers)) + } + + return sums +} + +func SumAllTails(numbersToSum ...[]int) []int { + var sums []int + for _, numbers := range numbersToSum { + if len(numbers) == 0 { + sums = append(sums, 0) + } else { + tail := numbers[1:] + sums = append(sums, Sum(tail)) + } + } + return sums +} diff --git a/arrays/sum_test.go b/arrays/sum_test.go new file mode 100644 index 0000000..c5f8d04 --- /dev/null +++ b/arrays/sum_test.go @@ -0,0 +1,48 @@ +package main + +import ( + "slices" + "testing" +) + +func TestSum(t *testing.T) { + t.Run("collection of 5 numbers", func(t *testing.T) { + numbers := []int{1, 2, 3, 4, 5} + + got := Sum(numbers) + want := 15 + + if got != want { + t.Errorf("got %d want %d given, %v", got, want, numbers) + } + }) +} + +func TestSumAll(t *testing.T) { + got := SumAll([]int{1, 2}, []int{0, 9}) + want := []int{3, 9} + + if !slices.Equal(got, want) { + t.Errorf("got %v want %v", got, want) + } +} + +func TestSumAllTails(t *testing.T) { + checkSums := func(t testing.TB, got, want []int) { + t.Helper() + if !slices.Equal(got, want) { + t.Errorf("got %v want %v", got, want) + } + } + + t.Run("make the sums of some slices", func(t *testing.T) { + got := SumAllTails([]int{1, 2}, []int{0, 9}) + want := []int{2, 9} + checkSums(t, got, want) + }) + t.Run("safely sum empty slices", func(t *testing.T) { + got := SumAllTails([]int{}, []int{3, 4, 5}) + want := []int{0, 9} + checkSums(t, got, want) + }) +}