summary refs log tree commit diff stats
path: root/go/two-fer
diff options
context:
space:
mode:
Diffstat (limited to 'go/two-fer')
-rw-r--r--go/two-fer/README.md55
-rw-r--r--go/two-fer/example_two_fer_test.go20
-rw-r--r--go/two-fer/go.mod3
-rw-r--r--go/two-fer/two_fer.go13
-rw-r--r--go/two-fer/two_fer_test.go31
5 files changed, 122 insertions, 0 deletions
diff --git a/go/two-fer/README.md b/go/two-fer/README.md
new file mode 100644
index 0000000..4fd3018
--- /dev/null
+++ b/go/two-fer/README.md
@@ -0,0 +1,55 @@
+# Two Fer
+
+`Two-fer` or `2-fer` is short for two for one. One for you and one for me.
+
+Given a name, return a string with the message:
+
+```text
+One for X, one for me.
+```
+
+Where X is the given name.
+
+However, if the name is missing, return the string:
+
+```text
+One for you, one for me.
+```
+
+Here are some examples:
+
+|Name    |String to return 
+|:-------|:------------------
+|Alice   |One for Alice, one for me. 
+|Bob     |One for Bob, one for me.
+|        |One for you, one for me.
+|Zaphod  |One for Zaphod, one for me.
+
+## Coding the solution
+
+Look for a stub file having the name two_fer.go
+and place your solution code in that file.
+
+## 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
+
+[https://github.com/exercism/problem-specifications/issues/757](https://github.com/exercism/problem-specifications/issues/757)
+
+## 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/two-fer/example_two_fer_test.go b/go/two-fer/example_two_fer_test.go
new file mode 100644
index 0000000..fe0f023
--- /dev/null
+++ b/go/two-fer/example_two_fer_test.go
@@ -0,0 +1,20 @@
+package twofer
+
+import "fmt"
+
+// ExampleShareWith() is an Example function. Examples are testable snippets of
+// Go code that are used for documenting and verifying the package API.
+// They may be present in some exercises to demonstrate the expected use of the
+// exercise API and can be run as part of a package's test suite.
+//
+// When an Example test is run the data that is written to standard output is
+// compared to the data that comes after the "Output: " comment.
+//
+// Below the result of ShareWith() is passed to standard output
+// using fmt.Println, and this is compared against the expected output.
+// If they are equal, the test passes.
+func ExampleShareWith() {
+	h := ShareWith("")
+	fmt.Println(h)
+	// Output: One for you, one for me.
+}
diff --git a/go/two-fer/go.mod b/go/two-fer/go.mod
new file mode 100644
index 0000000..3eebc29
--- /dev/null
+++ b/go/two-fer/go.mod
@@ -0,0 +1,3 @@
+module twofer
+
+go 1.13
diff --git a/go/two-fer/two_fer.go b/go/two-fer/two_fer.go
new file mode 100644
index 0000000..3497a4c
--- /dev/null
+++ b/go/two-fer/two_fer.go
@@ -0,0 +1,13 @@
+// twofer implements ShareWith.
+package twofer
+
+import "fmt"
+
+// ShareWith returns "One for `name', one for me.". Default name is
+// "you".
+func ShareWith(name string) string {
+	if len(name) == 0 {
+		name = "you"
+	}
+	return fmt.Sprintf("One for %s, one for me.", name)
+}
diff --git a/go/two-fer/two_fer_test.go b/go/two-fer/two_fer_test.go
new file mode 100644
index 0000000..f4ce158
--- /dev/null
+++ b/go/two-fer/two_fer_test.go
@@ -0,0 +1,31 @@
+package twofer
+
+import "testing"
+
+// Define a function ShareWith(string) string.
+
+var tests = []struct {
+	name, expected string
+}{
+	{"", "One for you, one for me."},
+	{"Alice", "One for Alice, one for me."},
+	{"Bob", "One for Bob, one for me."},
+}
+
+func TestShareWith(t *testing.T) {
+	for _, test := range tests {
+		if observed := ShareWith(test.name); observed != test.expected {
+			t.Fatalf("ShareWith(%s) = \"%v\", want \"%v\"", test.name, observed, test.expected)
+		}
+	}
+}
+
+func BenchmarkShareWith(b *testing.B) {
+	for i := 0; i < b.N; i++ {
+
+		for _, test := range tests {
+			ShareWith(test.name)
+		}
+
+	}
+}