From 53eefb5643c87888ddda629fd4f848ad7681662e Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 22 Sep 2018 15:08:06 +0200 Subject: load space-age --- go/space-age/.solution.json | 1 + go/space-age/README.md | 54 +++++++++++++++++++++++++++++++++++++ go/space-age/cases_test.go | 61 ++++++++++++++++++++++++++++++++++++++++++ go/space-age/space_age_test.go | 25 +++++++++++++++++ 4 files changed, 141 insertions(+) create mode 100644 go/space-age/.solution.json create mode 100644 go/space-age/README.md create mode 100644 go/space-age/cases_test.go create mode 100644 go/space-age/space_age_test.go diff --git a/go/space-age/.solution.json b/go/space-age/.solution.json new file mode 100644 index 0000000..b2e867e --- /dev/null +++ b/go/space-age/.solution.json @@ -0,0 +1 @@ +{"track":"go","exercise":"space-age","id":"09ca736f01334c08a5e949243ad2d844","url":"https://exercism.io/my/solutions/09ca736f01334c08a5e949243ad2d844","handle":"dim13","is_requester":true,"auto_approve":false} \ No newline at end of file diff --git a/go/space-age/README.md b/go/space-age/README.md new file mode 100644 index 0000000..03eb834 --- /dev/null +++ b/go/space-age/README.md @@ -0,0 +1,54 @@ +# Space Age + +Given an age in seconds, calculate how old someone would be on: + + - Earth: orbital period 365.25 Earth days, or 31557600 seconds + - Mercury: orbital period 0.2408467 Earth years + - Venus: orbital period 0.61519726 Earth years + - Mars: orbital period 1.8808158 Earth years + - Jupiter: orbital period 11.862615 Earth years + - Saturn: orbital period 29.447498 Earth years + - Uranus: orbital period 84.016846 Earth years + - Neptune: orbital period 164.79132 Earth years + +So if you were told someone were 1,000,000,000 seconds old, you should +be able to say that they're 31.69 Earth-years old. + +If you're wondering why Pluto didn't make the cut, go watch [this +youtube video](http://www.youtube.com/watch?v=Z_2gbGXzFbs). + +## No Stub + +This may be the first Go track exercise you encounter without a stub: a +pre-existing `space_age.go` file for your solution. You may not see stubs in +the future and should begin to get comfortable with creating your own Go files +for your solutions. + +One way to figure out what the function signature(s) you would need is to look +at the corresponding \*\_test.go file. It will show you what the package level +functions(s) should be that the test will use to verify the solution. + + +## 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 + +Partially inspired by Chapter 1 in Chris Pine's online Learn to Program tutorial. [http://pine.fm/LearnToProgram/?Chapter=01](http://pine.fm/LearnToProgram/?Chapter=01) + +## 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/space-age/cases_test.go b/go/space-age/cases_test.go new file mode 100644 index 0000000..bf8bed8 --- /dev/null +++ b/go/space-age/cases_test.go @@ -0,0 +1,61 @@ +package space + +// Source: exercism/problem-specifications +// Commit: 8d4df79 space-age: Apply new "input" policy +// Problem Specifications Version: 1.1.0 + +var testCases = []struct { + description string + planet Planet + seconds float64 + expected float64 +}{ + { + description: "age on Earth", + planet: "Earth", + seconds: 1000000000, + expected: 31.69, + }, + { + description: "age on Mercury", + planet: "Mercury", + seconds: 2134835688, + expected: 280.88, + }, + { + description: "age on Venus", + planet: "Venus", + seconds: 189839836, + expected: 9.78, + }, + { + description: "age on Mars", + planet: "Mars", + seconds: 2329871239, + expected: 39.25, + }, + { + description: "age on Jupiter", + planet: "Jupiter", + seconds: 901876382, + expected: 2.41, + }, + { + description: "age on Saturn", + planet: "Saturn", + seconds: 3000000000, + expected: 3.23, + }, + { + description: "age on Uranus", + planet: "Uranus", + seconds: 3210123456, + expected: 1.21, + }, + { + description: "age on Neptune", + planet: "Neptune", + seconds: 8210123456, + expected: 1.58, + }, +} diff --git a/go/space-age/space_age_test.go b/go/space-age/space_age_test.go new file mode 100644 index 0000000..71f7359 --- /dev/null +++ b/go/space-age/space_age_test.go @@ -0,0 +1,25 @@ +package space + +import ( + "math" + "testing" +) + +func TestAge(t *testing.T) { + const precision = 0.01 + for _, tc := range testCases { + actual := Age(tc.seconds, tc.planet) + if math.IsNaN(actual) || math.Abs(actual-tc.expected) > precision { + t.Fatalf("FAIL: %s\nExpected: %#v\nActual: %#v", tc.description, tc.expected, actual) + } + t.Logf("PASS: %s", tc.description) + } +} + +func BenchmarkAge(b *testing.B) { + for i := 0; i < b.N; i++ { + for _, tc := range testCases { + Age(tc.seconds, tc.planet) + } + } +} -- cgit v1.2.3