From acbc22c498a5e58b810f6a3838fa85e597b7f4d9 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 26 Aug 2016 14:44:10 +0200 Subject: Solve sum of multiples --- go/sum-of-multiples/sum_of_multiples_test.go | 73 ++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 go/sum-of-multiples/sum_of_multiples_test.go (limited to 'go/sum-of-multiples/sum_of_multiples_test.go') diff --git a/go/sum-of-multiples/sum_of_multiples_test.go b/go/sum-of-multiples/sum_of_multiples_test.go new file mode 100644 index 0000000..9ab0bb2 --- /dev/null +++ b/go/sum-of-multiples/sum_of_multiples_test.go @@ -0,0 +1,73 @@ +package summultiples + +import "testing" + +var test35 = []struct { + limit int + sum int +}{ + {1, 0}, + {4, 3}, + {10, 23}, + {100, 2318}, + {1000, 233168}, +} + +var varTests = []struct { + divisors []int + limit int + sum int +}{ + {[]int{7, 13, 17}, 20, 51}, + {[]int{43, 47}, 10000, 2203160}, + {[]int{5, 10, 12}, 10000, 13331672}, + {[]int{1, 1}, 10000, 49995000}, + // Note: The following test case deviates from the README. + // The README specifies some rather odd defaults, whereas + // this has the more logical approach of not implementing any + // defaults, which causes the resulting sum to be zero. + // See discussion in: + // https://github.com/exercism/xgo/issues/256 and + // https://github.com/exercism/x-common/issues/198 + {[]int{}, 10000, 0}, +} + +func Test35(t *testing.T) { + sum35 := MultipleSummer(3, 5) + for _, test := range test35 { + s := sum35(test.limit) + if s != test.sum { + t.Fatalf("Sum to %d returned %d, want %d.", test.limit, s, test.sum) + } + } +} + +func TestVar(t *testing.T) { + for _, test := range varTests { + sv := MultipleSummer(test.divisors...) + s := sv(test.limit) + if s != test.sum { + t.Fatalf("Sum of multiples of %v to %d returned %d, want %d.", + test.divisors, test.limit, s, test.sum) + } + } +} + +func Benchmark35(b *testing.B) { + sum35 := MultipleSummer(3, 5) + b.ResetTimer() // bench just the sum function + for i := 0; i < b.N; i++ { + for _, test := range test35 { + sum35(test.limit) + } + } +} + +func BenchmarkVar(b *testing.B) { + // bench combined time to bind sum function and call it. + for i := 0; i < b.N; i++ { + for _, test := range varTests { + MultipleSummer(test.divisors...)(test.limit) + } + } +} -- cgit v1.2.3