summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2018-09-22 14:53:56 +0200
committerDimitri Sokolyuk <demon@dim13.org>2018-09-22 14:53:56 +0200
commitdf35378bf5e86d3eb56c48cd6768a761ce3caf7c (patch)
tree9bb684bf61814a242822229d6437281f64f536cd
parent9ee9178c22088df86da2b24cdefa826bf87983ed (diff)
load Accumulate
-rw-r--r--go/accumulate/.solution.json1
-rw-r--r--go/accumulate/README.md50
-rw-r--r--go/accumulate/accumulate_test.go46
3 files changed, 97 insertions, 0 deletions
diff --git a/go/accumulate/.solution.json b/go/accumulate/.solution.json
new file mode 100644
index 0000000..75ed407
--- /dev/null
+++ b/go/accumulate/.solution.json
@@ -0,0 +1 @@
+{"track":"go","exercise":"accumulate","id":"b3bbb18a4d9141c299793fd64a39fa2d","url":"https://exercism.io/my/solutions/b3bbb18a4d9141c299793fd64a39fa2d","handle":"dim13","is_requester":true,"auto_approve":false} \ No newline at end of file
diff --git a/go/accumulate/README.md b/go/accumulate/README.md
new file mode 100644
index 0000000..83387c3
--- /dev/null
+++ b/go/accumulate/README.md
@@ -0,0 +1,50 @@
+# Accumulate
+
+Implement the `accumulate` operation, which, given a collection and an
+operation to perform on each element of the collection, returns a new
+collection containing the result of applying that operation to each element of
+the input collection.
+
+Given the collection of numbers:
+
+- 1, 2, 3, 4, 5
+
+And the operation:
+
+- square a number (`x => x * x`)
+
+Your code should be able to produce the collection of squares:
+
+- 1, 4, 9, 16, 25
+
+Check out the test suite to see the expected function signature.
+
+## Restrictions
+
+Keep your hands off that collect/map/fmap/whatchamacallit functionality
+provided by your standard library!
+Solve this one yourself using other basic tools instead.
+
+## Running the tests
+
+To run the tests run the command `go test` from within the exercise directory.
+
+If the test suite contains benchmarks, you can run these with the `--bench` and `--benchmem`
+flags:
+
+ go test -v --bench . --benchmem
+
+Keep in mind that each reviewer will run benchmarks on a different machine, with
+different specs, so the results from these benchmark tests may vary.
+
+## Further information
+
+For more detailed information about the Go track, including how to get help if
+you're having trouble, please visit the exercism.io [Go language page](http://exercism.io/languages/go/about).
+
+## Source
+
+Conversation with James Edward Gray II [https://twitter.com/jeg2](https://twitter.com/jeg2)
+
+## Submitting Incomplete Solutions
+It's possible to submit an incomplete solution so you can see how others have completed the exercise.
diff --git a/go/accumulate/accumulate_test.go b/go/accumulate/accumulate_test.go
new file mode 100644
index 0000000..d147ad0
--- /dev/null
+++ b/go/accumulate/accumulate_test.go
@@ -0,0 +1,46 @@
+package accumulate
+
+import (
+ "fmt"
+ "strings"
+ "testing"
+)
+
+func echo(c string) string {
+ return c
+}
+
+func capitalize(word string) string {
+ return strings.Title(word)
+}
+
+var tests = []struct {
+ expected []string
+ given []string
+ converter func(string) string
+ description string
+}{
+ {[]string{}, []string{}, echo, "echo"},
+ {[]string{"echo", "echo", "echo", "echo"}, []string{"echo", "echo", "echo", "echo"}, echo, "echo"},
+ {[]string{"First", "Letter", "Only"}, []string{"first", "letter", "only"}, capitalize, "capitalize"},
+ {[]string{"HELLO", "WORLD"}, []string{"hello", "world"}, strings.ToUpper, "strings.ToUpper"},
+}
+
+func TestAccumulate(t *testing.T) {
+ for _, test := range tests {
+ actual := Accumulate(test.given, test.converter)
+ if fmt.Sprintf("%q", actual) != fmt.Sprintf("%q", test.expected) {
+ t.Fatalf("Accumulate(%q, %q): expected %q, actual %q", test.given, test.description, test.expected, actual)
+ }
+ }
+}
+
+func BenchmarkAccumulate(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+
+ for _, test := range tests {
+ Accumulate(test.given, test.converter)
+ }
+
+ }
+}