+34
Go/arrays/arrays.go
+34
Go/arrays/arrays.go
···
1
+
package main
2
+
3
+
func Sum(numbers []int) (sum int) {
4
+
for _, number := range numbers {
5
+
sum += number
6
+
}
7
+
8
+
return
9
+
}
10
+
11
+
func SumAll(numbersToSum ...[]int) []int {
12
+
var sums []int
13
+
14
+
for _, numbers := range numbersToSum {
15
+
sums = append(sums, Sum(numbers))
16
+
}
17
+
18
+
return sums
19
+
}
20
+
21
+
func SumAllTails(numbersToSum ...[]int) []int {
22
+
var sums []int
23
+
24
+
for _, numbers := range numbersToSum {
25
+
if len(numbers) == 0 {
26
+
sums = append(sums, 0)
27
+
} else {
28
+
tail := numbers[1:]
29
+
sums = append(sums, Sum(tail))
30
+
}
31
+
}
32
+
33
+
return sums
34
+
}
+48
Go/arrays/arrays_test.go
+48
Go/arrays/arrays_test.go
···
1
+
package main
2
+
3
+
import (
4
+
"testing"
5
+
"reflect"
6
+
)
7
+
8
+
func TestSum(t *testing.T) {
9
+
t.Run("collection of 5 numbers", func(t *testing.T) {
10
+
numbers := []int{1, 2, 3, 4, 5}
11
+
12
+
got := Sum(numbers)
13
+
want := 15
14
+
15
+
if got != want {
16
+
t.Errorf("got %d want %d given, %v", got, want, numbers)
17
+
}
18
+
})
19
+
}
20
+
21
+
func TestSumAll(t *testing.T) {
22
+
got := SumAll([]int{1, 2}, []int{0, 9})
23
+
want := []int{3, 9}
24
+
25
+
if !reflect.DeepEqual(got, want) {
26
+
t.Errorf("got %v want %v", got, want)
27
+
}
28
+
}
29
+
30
+
func TestSumAllTails(t *testing.T) {
31
+
t.Run("make the sum of some slices", func(t *testing.T) {
32
+
got := SumAllTails([]int{1, 2}, []int{0, 9})
33
+
want := []int{2, 9}
34
+
35
+
if !reflect.DeepEqual(got, want) {
36
+
t.Errorf("got %v want %v", got, want)
37
+
}
38
+
})
39
+
40
+
t.Run("safely sum empty slices", func(t *testing.T) {
41
+
got := SumAllTails([]int{}, []int{3, 4, 5})
42
+
want := []int{0, 9}
43
+
44
+
if !reflect.DeepEqual(got, want) {
45
+
t.Errorf("got %v want %v", got, want)
46
+
}
47
+
})
48
+
}