diff options
| -rw-r--r-- | .gitignore | 2 | ||||
| -rwxr-xr-x | generate_test_data.sh | 22 | ||||
| -rwxr-xr-x | test.sh | 41 | ||||
| -rwxr-xr-x | test/test.sh | 25 |
4 files changed, 65 insertions, 25 deletions
@@ -1,3 +1,5 @@ *.o sorter *.tar.gz +*.diff +data/* diff --git a/generate_test_data.sh b/generate_test_data.sh new file mode 100755 index 0000000..1cc6c9f --- /dev/null +++ b/generate_test_data.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# Note generating test data +# may take a while + +mkdir -p data +sizes=(10000 50000 100000 500000 1000000 5000000) + +for size in "${sizes[@]}"; do + for run in {1..3}; do + outfile="data/random_${size}_run${run}.tsv" # '.tsv' stands for + echo "Generating $outfile ..." # tab seperaed values + { + for ((i=1; i<=size; i++)); do + # using 'printf' instead of 'echo' + # due to performance issues + printf "%d\t%d\n" $((1 + RANDOM % 32767)) $((1 + RANDOM % 10000)) + done + } > "$outfile" + done +done + +echo "All random data files gernated in ./data/" @@ -0,0 +1,41 @@ +#!/bin/sh + +TEST_DIR="test" +DATA_DIR="$TEST_DIR/data" + +SRC_DIR="src" +SORTER="$SRC_DIR/sorter" +REF="sort -s -n -k 2" # '-s' for using a stable algo + +total=0 +passed=0 +failed=0 + +for TEST_FILE in "$DATA_DIR"/*; do + ((total++)) + FILE_NAME=$(basename "$TEST_FILE") + DIFF_FILE="$TEST_DIR/$FILE_NAME.diff" + + diff -u <($REF "$TEST_FILE") <($SORTER "$TEST_FILE") > "$DIFF_FILE" + + if [ ! -s "$DIFF_FILE" ]; then + echo "Passed: $TEST_FILE" + ((passed++)) + rm -f "$DIFF_FILE" + else + echo "Failed: $TEST_FILE" + ((failed++)) + fi +done + +# Summary overview +echo "==============================" +echo "Test Summary:" +echo "Total tests: $total" +echo "Passed: $passed" +echo "Failed: $failed" +echo "==============================" + +if [ $failed -ne 0 ]; then + echo "Diff files for failed tests are saved in $TEST_DIR/" +fi diff --git a/test/test.sh b/test/test.sh deleted file mode 100755 index 855d6cf..0000000 --- a/test/test.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -TEST_INPUT="numbers.txt" - -SORTER="./sorter" -REF="sort -s -n -k 2" - -SORTER_OUT="sorter_out.txt" -REF_OUT="ref_output.txt" -DIFF_FILE="diff.txt" - -$SORTER "$TEST_INPUT" > "$SORTER_OUT" -$REF "$TEST_INPUT" > "$REF_OUT" - -# Compare outputs -if diff -q "$SORTER_OUT" "$REF_OUT" > /dev/null; then - echo "Passed: $TEST_INPUT" -else - echo "Failed: $TEST_INPUT" - echo "Differences:" - diff -u "$SORTER_OUT" "$REF_OUT" > "$DIFF_FILE" - diff -u "$SORTER_OUT" "$REF_OUT" | head -n 20 - echo -fi - |