diff options
author | EuAndreh <eu@euandre.org> | 2021-01-24 03:11:52 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2021-01-24 03:11:52 -0300 |
commit | ee6bc4f2ce6da48f25a29931a178159e5801b5d9 (patch) | |
tree | e5b13643b29bd51f06d382fde00ed3ce01199423 /tests/ranking.sh | |
parent | TODOs.md: Add task-b2c26218-5f21-4efd-afbd-ff6af57a358a (diff) | |
download | remembering-ee6bc4f2ce6da48f25a29931a178159e5801b5d9.tar.gz remembering-ee6bc4f2ce6da48f25a29931a178159e5801b5d9.tar.xz |
Add tests/ranking.sh
Diffstat (limited to 'tests/ranking.sh')
-rwxr-xr-x | tests/ranking.sh | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/tests/ranking.sh b/tests/ranking.sh new file mode 100755 index 0000000..7b69106 --- /dev/null +++ b/tests/ranking.sh @@ -0,0 +1,133 @@ +#!/bin/sh +set -eu + +. tests/lib.sh + +test_picking_first_makes_it_be_always_first() { + OUT="$(mktemp)" + ERR="$(mktemp)" + PROFILE="always-picks-first-$(uuidgen)" + for _ in $(seq 10); do + printf 'always-picked\nnever-picked\n' | \ + sh remembering \ + -p "$PROFILE" \ + -c 'head -n1' \ + 1>"$OUT" 2>"$ERR" + STATUS=$? + assert_status 0 + assert_empty_stderr + assert_stdout 'always-picked' + done +} + +INPUT='a' +for letter in {b..z}; do + INPUT="$INPUT +$letter" +done + +pick_x() { + OUT="$(mktemp)" + ERR="$(mktemp)" + PICK="$1" + + echo "$INPUT" | \ + sh remembering \ + -p "$PROFILE" \ + -c "tee -a /dev/stderr | grep $PICK" \ + 1>"$OUT" 2>"$ERR" + STATUS=$? + assert_status 0 + assert_stdout "$PICK" +} + +assert_first() { + FIRST="$(head -n1 "$ERR")" + if [ "$FIRST" != "$1" ]; then + echo 'Previous choice did not appear at the beginning of the list' + printf '\nexpected: %s\ngot: %s\n' "$1" "$FIRST" + exit 1 + fi +} + +test_promoting_values() { + PROFILE="promoting-$(uuidgen)" + + pick_x h + pick_x z # just to get the new STDIN + assert_first h + + pick_x h + pick_x z + assert_first h +} + +test_higher_values_loose_tie() { + PROFILE="higher-loose-tie-$(uuidgen)" + + pick_x f + pick_x f + pick_x g + pick_x g + pick_x z + assert_first f +} + +test_smaller_values_win_tie() { + PROFILE="smaller-win-tie-$(uuidgen)" + + pick_x d + pick_x d + pick_x c + pick_x c + pick_x z + assert_first c +} + +test_many_sequential_picks() { + PROFILE="many-sequential-picks-$(uuidgen)" + + pick_x b + pick_x r + pick_x l + pick_x r + pick_x s + pick_x a + pick_x d + pick_x m + pick_x g + pick_x g + pick_x l + pick_x l + pick_x f + pick_x f + pick_x f + pick_x l + pick_x a + + pick_x z + assert_first l + + EXPECTED='l +f +a +g +r +b +d +m +s' + ACTUAL="$(head -n9 "$ERR")" + if [ "$ACTUAL" != "$EXPECTED" ]; then + printf 'Bad order!\n\nexpected: %s\ngot: %s\n' \ + "$(echo "$EXPECTED" | tr '\n' ' ')" \ + "$(echo "$ACTUAL" | tr '\n' ' ')" + exit 1 + fi +} + +test_picking_first_makes_it_be_always_first +test_promoting_values +test_higher_values_loose_tie +test_smaller_values_win_tie +test_many_sequential_picks |