aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.gitignore2
-rwxr-xr-xgenerate_test_data.sh22
-rwxr-xr-xtest.sh41
-rwxr-xr-xtest/test.sh25
4 files changed, 65 insertions, 25 deletions
diff --git a/.gitignore b/.gitignore
index c5c3e26..d9c799e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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/"
diff --git a/test.sh b/test.sh
new file mode 100755
index 0000000..0a1f6b8
--- /dev/null
+++ b/test.sh
@@ -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
-