From df35378bf5e86d3eb56c48cd6768a761ce3caf7c Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 22 Sep 2018 14:53:56 +0200 Subject: load Accumulate --- go/accumulate/.solution.json | 1 + go/accumulate/README.md | 50 ++++++++++++++++++++++++++++++++++++++++ go/accumulate/accumulate_test.go | 46 ++++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 go/accumulate/.solution.json create mode 100644 go/accumulate/README.md create mode 100644 go/accumulate/accumulate_test.go 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) + } + + } +} -- cgit v1.2.3