#!/bin/bash set -euo pipefail if [[ $# -ne 1 ]]; then echo "$0 {repeated_substrings}" exit 1 fi TOOL=$1 TEST_DIR=$(mktemp -d) # Delete temporary directory and exit with nonzero status. function die { echo "$1" rm -rf "$TEST_DIR" exit 1 } # Run tool and compare against expected output. function run_test { "$TOOL" "$TEST_DIR/input.txt" > "$TEST_DIR/actual.txt" || die "$1" diff "$TEST_DIR/expected.txt" "$TEST_DIR/actual.txt" || die "$1" } cp /dev/null "$TEST_DIR/input.txt" cp /dev/null "$TEST_DIR/expected.txt" run_test "$LINENO: empty" echo "all unique" > "$TEST_DIR/input.txt" run_test "$LINENO: all unique" echo "dup1dup2dup3dup4" > "$TEST_DIR/input.txt" run_test "$LINENO: duplicate too short" echo "duplicate unique duplicate." > "$TEST_DIR/input.txt" cat < "$TEST_DIR/expected.txt" "duplicate" 9 2 EOT run_test "$LINENO: simple duplicate" echo -n "duplicateduplicate" > "$TEST_DIR/input.txt" run_test "$LINENO: duplicate at end of file" cat < "$TEST_DIR/input.txt" duplicate repeat repeat,repeat duplicate unique EOT cat < "$TEST_DIR/expected.txt" "duplicate" 9 2 "repeat" 6 3 EOT run_test "$LINENO: multiple duplicates" cat < "$TEST_DIR/input.txt" duplicate_with_suffix suffix duplicate_with_suffix EOT cat < "$TEST_DIR/expected.txt" "duplicate_with_suffix\n" 22 2 "suffix\n" 7 3 EOT run_test "$LINENO: duplicate with suffix" echo -n "xxxxxxxxxxxx" > "$TEST_DIR/input.txt" cat < "$TEST_DIR/expected.txt" "xxxxxxxxxxx" 11 2 "xxxxxxxxxx" 10 3 "xxxxxxxxx" 9 4 "xxxxxxxx" 8 5 "xxxxxxx" 7 6 "xxxxxx" 6 7 "xxxxx" 5 8 "xxxx" 4 9 EOT run_test "$LINENO: overlap 1" echo -n "banananana" > "$TEST_DIR/input.txt" cat < "$TEST_DIR/expected.txt" "ananana" 7 2 "anana" 5 3 EOT run_test "$LINENO: overlap 2" rm -rf "$TEST_DIR" exit 0