Add go/gigasecond
This commit is contained in:
@@ -0,0 +1,29 @@
|
|||||||
|
# Gigasecond
|
||||||
|
|
||||||
|
Calculate the moment when someone has lived for 10^9 seconds.
|
||||||
|
|
||||||
|
A gigasecond is 10^9 (1,000,000,000) seconds.
|
||||||
|
|
||||||
|
## 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/resources).
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Chapter 9 in Chris Pine's online Learn to Program tutorial. [http://pine.fm/LearnToProgram/?Chapter=09](http://pine.fm/LearnToProgram/?Chapter=09)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package gigasecond
|
||||||
|
|
||||||
|
// Source: exercism/problem-specifications
|
||||||
|
// Commit: 5506bac gigasecond: Apply new "input" policy
|
||||||
|
// Problem Specifications Version: 1.1.0
|
||||||
|
|
||||||
|
// Add one gigasecond to the input.
|
||||||
|
var addCases = []struct {
|
||||||
|
description string
|
||||||
|
in string
|
||||||
|
want string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"date only specification of time",
|
||||||
|
"2011-04-25",
|
||||||
|
"2043-01-01T01:46:40",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"second test for date only specification of time",
|
||||||
|
"1977-06-13",
|
||||||
|
"2009-02-19T01:46:40",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"third test for date only specification of time",
|
||||||
|
"1959-07-19",
|
||||||
|
"1991-03-27T01:46:40",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"full time specified",
|
||||||
|
"2015-01-24T22:00:00",
|
||||||
|
"2046-10-02T23:46:40",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"full time with day roll-over",
|
||||||
|
"2015-01-24T23:59:59",
|
||||||
|
"2046-10-03T01:46:39",
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// Package gigasecond provides functions that modify time by gigasecond values.
|
||||||
|
package gigasecond
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
// AddGigasecond returns a time that is one gigasecond into the future from the
|
||||||
|
// input time, t.
|
||||||
|
func AddGigasecond(t time.Time) time.Time {
|
||||||
|
return t.Add(1000000000 * time.Second)
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
package gigasecond
|
||||||
|
|
||||||
|
// Write a function AddGigasecond that works with time.Time.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// date formats used in test data
|
||||||
|
const (
|
||||||
|
fmtD = "2006-01-02"
|
||||||
|
fmtDT = "2006-01-02T15:04:05"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestAddGigasecond(t *testing.T) {
|
||||||
|
for _, tc := range addCases {
|
||||||
|
in := parse(tc.in, t)
|
||||||
|
want := parse(tc.want, t)
|
||||||
|
got := AddGigasecond(in)
|
||||||
|
if !got.Equal(want) {
|
||||||
|
t.Fatalf(`FAIL: %s
|
||||||
|
AddGigasecond(%s)
|
||||||
|
= %s
|
||||||
|
want %s`, tc.description, in, got, want)
|
||||||
|
}
|
||||||
|
t.Log("PASS:", tc.description)
|
||||||
|
}
|
||||||
|
t.Log("Tested", len(addCases), "cases.")
|
||||||
|
}
|
||||||
|
|
||||||
|
func parse(s string, t *testing.T) time.Time {
|
||||||
|
tt, err := time.Parse(fmtDT, s) // try full date time format first
|
||||||
|
if err != nil {
|
||||||
|
tt, err = time.Parse(fmtD, s) // also allow just date
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
// can't run tests if input won't parse. if this seems to be a
|
||||||
|
// development or ci environment, raise an error. if this condition
|
||||||
|
// makes it to the solver though, ask for a bug report.
|
||||||
|
_, statErr := os.Stat("example_gen.go")
|
||||||
|
if statErr == nil || os.Getenv("TRAVIS_GO_VERSION") > "" {
|
||||||
|
t.Fatal(err)
|
||||||
|
} else {
|
||||||
|
t.Log(err)
|
||||||
|
t.Skip("(This is not your fault, and is unexpected. " +
|
||||||
|
"Please file an issue at https://github.com/exercism/go.)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tt
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkAddGigasecond(b *testing.B) {
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
AddGigasecond(time.Time{})
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user