Skip to content

Instantly share code, notes, and snippets.

@Vinai
Created December 13, 2016 18:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Vinai/0fecfe3139dd919e5549e7bb9cbd8dec to your computer and use it in GitHub Desktop.
Save Vinai/0fecfe3139dd919e5549e7bb9cbd8dec to your computer and use it in GitHub Desktop.
Language or testing frameworks or the lack thereof are no reason not to write tests. All that is needed is a function that calls the function to be checked.
#!/usr/bin/env bash
function assert_array_same {
if [ "${expected[*]}" != "${actual[*]}" ]; then
echo -e "\nFailed $1\nExpected: ${expected[*]}\nActual: ${actual[*]}" && exit 1
else
echo -en "."
fi
}
function generate {
local primes=( )
local n=$1
local candidate=2
while [ $n -gt 1 ]; do
while [ $((n % candidate)) -eq 0 ]; do
primes+=($candidate)
n=$((n / candidate))
done
candidate=$((candidate+1))
done
echo "${primes[*]}"
}
expected=( )
actual="$(generate 1)"
assert_array_same "one"
expected=( 2 )
actual="$(generate 2)"
assert_array_same "two"
expected=( 3 )
actual="$(generate 3)"
assert_array_same "three"
expected=( 2 2 )
actual="$(generate 4)"
assert_array_same "four"
expected=( 5 )
actual="$(generate 5)"
assert_array_same "five"
expected=( 2 3 )
actual="$(generate 6)"
assert_array_same "six"
expected=( 7 )
actual="$(generate 7)"
assert_array_same "seven"
expected=( 2 2 2 )
actual="$(generate 8)"
assert_array_same "eight"
expected=( 3 3 )
actual="$(generate 9)"
assert_array_same "nine"
expected=( 2 3 3 5 7 7 11 13 )
actual=$(generate $((2 * 3 * 3 * 5 * 7 * 7 * 11 * 13)))
assert_array_same "nine"
echo -e "\nall passed"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment