From bfef8f9e22eb8bae62bd10ead78264543b9763a9 Mon Sep 17 00:00:00 2001 From: jimi Date: Wed, 9 Mar 2016 20:45:08 -0600 Subject: [PATCH] Initial commit --- README.md | 30 +++++++++++++++++++ difference_of_squares_test.go | 54 +++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 README.md create mode 100644 difference_of_squares_test.go diff --git a/README.md b/README.md new file mode 100644 index 0000000..4cbf5e5 --- /dev/null +++ b/README.md @@ -0,0 +1,30 @@ +# Difference Of Squares + +Find the difference between the sum of the squares and the square of the sums of the first N natural numbers. + +The square of the sum of the first ten natural numbers is, + + (1 + 2 + ... + 10)**2 = 55**2 = 3025 + +The sum of the squares of the first ten natural numbers is, + + 1**2 + 2**2 + ... + 10**2 = 385 + +Hence the difference between the square of the sum of the first +ten natural numbers and the sum of the squares is 2640: + + 3025 - 385 = 2640 + +To run the tests simply run the command `go test` in the exercise directory. + +If the test suite contains benchmarks, you can run these with the `-bench` +flag: + + go test -bench . + +For more detailed info about the Go track see the [help +page](http://exercism.io/languages/go). + +## Source + +Problem 6 at Project Euler [view source](http://projecteuler.net/problem=6) diff --git a/difference_of_squares_test.go b/difference_of_squares_test.go new file mode 100644 index 0000000..d3fe30f --- /dev/null +++ b/difference_of_squares_test.go @@ -0,0 +1,54 @@ +package diffsquares + +import "testing" + +var tests = []struct{ n, sqOfSums, sumOfSq int }{ + {5, 225, 55}, + {10, 3025, 385}, + {100, 25502500, 338350}, +} + +func TestSquareOfSums(t *testing.T) { + for _, test := range tests { + if s := SquareOfSums(test.n); s != test.sqOfSums { + t.Fatalf("SquareOfSums(%d) = %d, want %d", test.n, s, test.sqOfSums) + } + } +} + +func TestSumOfSquares(t *testing.T) { + for _, test := range tests { + if s := SumOfSquares(test.n); s != test.sumOfSq { + t.Fatalf("SumOfSquares(%d) = %d, want %d", test.n, s, test.sumOfSq) + } + } +} + +func TestDifference(t *testing.T) { + for _, test := range tests { + want := test.sqOfSums - test.sumOfSq + if s := Difference(test.n); s != want { + t.Fatalf("Difference(%d) = %d, want %d", test.n, s, want) + } + } +} + +// Benchmark functions on just a single number (100, from the original PE problem) +// to avoid overhead of iterating over tests. +func BenchmarkSquareOfSums(b *testing.B) { + for i := 0; i < b.N; i++ { + SquareOfSums(100) + } +} + +func BenchmarkSumOfSquares(b *testing.B) { + for i := 0; i < b.N; i++ { + SumOfSquares(100) + } +} + +func BenchmarkDifference(b *testing.B) { + for i := 0; i < b.N; i++ { + Difference(100) + } +}