commit c747fb0b7a0eea742d156f54555cd8b0cf0557d1
parent 9495e66bcf4910aec2cc899ad8280e8acf0d5eeb
Author: dwrz <dwrz@dwrz.net>
Date: Wed, 26 Jun 2019 06:57:27 +0000
Add bash/two-fer
Diffstat:
3 files changed, 121 insertions(+), 0 deletions(-)
diff --git a/bash/two-fer/README.md b/bash/two-fer/README.md
@@ -0,0 +1,72 @@
+# 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.
+
+
+Run the tests with:
+
+```bash
+bats two_fer_test.sh
+```
+
+After the first test(s) pass, continue by commenting out or removing the
+`[[ $BATS_RUN_SKIPPED == true ]] || skip`
+annotations prepending other tests.
+
+To run all tests, including the ones with `skip` annotations, run:
+
+```bash
+BATS_RUN_SKIPPED=true bats two_fer_test.sh
+```
+
+## Source
+
+[https://github.com/exercism/problem-specifications/issues/757](https://github.com/exercism/problem-specifications/issues/757)
+
+
+## External utilities
+`Bash` is a language to write "scripts" -- programs that can call
+external tools, such as
+[`sed`](https://www.gnu.org/software/sed/),
+[`awk`](https://www.gnu.org/software/gawk/),
+[`date`](https://www.gnu.org/software/coreutils/manual/html_node/date-invocation.html)
+and even programs written in other programming languages,
+like [`Python`](https://www.python.org/).
+This track does not restrict the usage of these utilities, and as long
+as your solution is portable between systems and does not require
+installation of third party applications, feel free to use them to solve
+the exercise.
+
+For an extra challenge, if you would like to have a better understanding
+of the language, try to re-implement the solution in pure `Bash`,
+without using any external tools. Note that there are some types of
+problems that bash cannot solve, such as performing floating point
+arithmetic and manipulating dates: for those, you must call out to an
+external tool.
+
+## Submitting Incomplete Solutions
+It's possible to submit an incomplete solution so you can see how others
+have completed the exercise.
diff --git a/bash/two-fer/two_fer.sh b/bash/two-fer/two_fer.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+name="you"
+
+if [ "$#" -ge 1 ]; then
+ name=$1
+fi
+
+echo "One for $name, one for me."
diff --git a/bash/two-fer/two_fer_test.sh b/bash/two-fer/two_fer_test.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+
+@test "no name given" {
+ #[[ $BATS_RUN_SKIPPED == true ]] || skip
+
+ # The above line controls whether to skip the test.
+ # Normally, we skip every test except for the first one
+ # (the first one is always commented out). This allows for
+ # a person to focus on solving a test at a time: you can
+ # comment out or delete the
+ # `[[ $BATS_RUN_SKIPPED == true ]] || skip`
+ # line to run the test when you are ready.
+ #
+ # You can also run the all the tests by setting the
+ # `$BATS_RUN_SKIPPED` environment variable, like this:
+ #
+ # $ BATS_RUN_SKIPPED=true bats two_fer_test.sh
+
+ run bash two_fer.sh
+ [ "$status" -eq 0 ]
+ [ "$output" == "One for you, one for me." ]
+}
+
+@test "a name given" {
+ run bash two_fer.sh Alice
+ [ "$status" -eq 0 ]
+ [ "$output" == "One for Alice, one for me." ]
+}
+
+@test "another name given" {
+ run bash two_fer.sh Bob
+ [ "$status" -eq 0 ]
+ [ "$output" == "One for Bob, one for me." ]
+}
+
+@test "handle arg1 properly" {
+ run bash two_fer.sh "John Smith" "Mary Ann"
+ [ "$status" -eq 0 ]
+ [ "$output" == "One for John Smith, one for me." ]
+}