Jim Infield
3 years ago
commit
99a09f09c4
4 changed files with 132 additions and 0 deletions
@ -0,0 +1 @@ |
|||
{"track":"bash","exercise":"two-fer","id":"0bea95a330fe4689830308cd0e5b3182","url":"https://exercism.io/my/solutions/0bea95a330fe4689830308cd0e5b3182","handle":"jinfield","is_requester":true,"auto_approve":false} |
@ -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 name, one for me. |
|||
``` |
|||
|
|||
Where "name" 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. |
@ -0,0 +1,3 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
echo "One for ${1:-you}, one for me." |
@ -0,0 +1,56 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
# local version: 1.2.0.1 |
|||
|
|||
@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 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 == 0 )) |
|||
[[ $output == "One for you, one for me." ]] |
|||
} |
|||
|
|||
@test "a name given" { |
|||
[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
|||
run bash two_fer.sh Alice |
|||
(( status == 0 )) |
|||
[[ $output == "One for Alice, one for me." ]] |
|||
} |
|||
|
|||
@test "another name given" { |
|||
[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
|||
run bash two_fer.sh Bob |
|||
(( status == 0 )) |
|||
[[ $output == "One for Bob, one for me." ]] |
|||
} |
|||
|
|||
# bash-specific test: Focus the student's attention on the effects of |
|||
# word splitting and filename expansion: |
|||
# https://www.gnu.org/software/bash/manual/bash.html#Shell-Expansions |
|||
|
|||
@test "handle arg with spaces" { |
|||
[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
|||
run bash two_fer.sh "John Smith" "Mary Ann" |
|||
(( status == 0 )) |
|||
[[ $output == "One for John Smith, one for me." ]] |
|||
} |
|||
|
|||
@test "handle arg with glob char" { |
|||
[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
|||
run bash two_fer.sh "* " |
|||
(( status == 0 )) |
|||
[[ $output == "One for * , one for me." ]] |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue