Bash script for playground updated

This commit is contained in:
Hizenberg469
2024-12-01 23:04:18 +05:30
parent b46c486580
commit 4ff34765fc
2 changed files with 104 additions and 26 deletions

View File

@@ -1,5 +1,18 @@
#!/bin/bash #!/bin/bash
debug=false
if [ $# -eq 1 ]; then
if [[ $1 != "-d" ]]; then
echo "Invalid argument"
echo "$0 -d for debug mode"
exit 4
fi
debug=true
fi
#Creating .txt files #Creating .txt files
TESTCASE_FILE=IOFiles/testcase.txt TESTCASE_FILE=IOFiles/testcase.txt
OUTPUT_FILE=IOFiles/output.txt OUTPUT_FILE=IOFiles/output.txt
@@ -33,8 +46,31 @@ pass_count=0
fail_count=0 fail_count=0
# Separate test cases and expected outputs by empty lines # Separate test cases and expected outputs by empty lines
mapfile -t test_cases < <(awk -v RS= '1' "$TESTCASE_FILE")
mapfile -t expected_outputs < <(awk -v RS= '1' "$CORRECT_ANSWER_FILE") test_cases=()
exepected_outputs=()
test_case_block=""
while IFS= read -r line || [ -n "$line" ]; do
if [ -z "$line" ];then
test_cases+=("$test_case_block")
test_case_block=""
else
test_case_block="${test_case_block}${line}"$'\n'
fi
done < "$TESTCASE_FILE"
test_cases+=("$test_case_block")
output_block=""
while IFS= read -r line || [ -n "$line" ]; do
if [ -z "$line" ]; then
expected_outputs+=("$output_block")
output_block=""
else
output_block="${output_block}${line}"$'\n'
fi
done < "$CORRECT_ANSWER_FILE"
expected_outputs+=("$output_block")
# Ensure number of testcase is same as number of output. # Ensure number of testcase is same as number of output.
if [ ${#test_cases[@]} -ne ${#expected_outputs[@]} ]; then if [ ${#test_cases[@]} -ne ${#expected_outputs[@]} ]; then
@@ -42,12 +78,13 @@ if [ ${#test_cases[@]} -ne ${#expected_outputs[@]} ]; then
exit 2 exit 2
fi fi
for (( test_num = 0 ; test_num < ${#test_cases[@]} ; test_num++)) for (( test_num = 0 ; test_num < ${#test_cases[@]} ; test_num++))
do do
test_case=${test_cases[test_num]} test_case="${test_cases[test_num]}"
expected_output=${expected_outputs[test_num]} expected_output="${expected_outputs[test_num]}"
if ! echo "$test_case" | ./$SOLUTION > "$OUTPUT_FILE"; then if ! echo -e "$test_case" | ./$SOLUTION > "$OUTPUT_FILE"; then
echo -e "\033[0;31mTest #$(($test_num+1)): Execution failed\033[0m" echo -e "\033[0;31mTest #$(($test_num+1)): Execution failed\033[0m"
echo "solution executable didn't executed successfully" echo "solution executable didn't executed successfully"
let fail_count++ let fail_count++
@@ -56,17 +93,27 @@ do
test_output=$(<"$OUTPUT_FILE") test_output=$(<"$OUTPUT_FILE")
if diff -q -Z <(echo "$test_output") <(echo "$expected_output") > /dev/null; then if diff -q -Z <(echo $test_output) <(echo $expected_output) > /dev/null; then
echo -e "\033[0;32mTest #$(($test_num+1)): PASS\033[0m" echo -e "\033[0;32mTest #$(($test_num+1)): PASS\033[0m"
#Debug mode - in case to see the output.
if $debug; then
echo "Test case:"
echo -n "$test_case"
echo "Your output:"
echo -n "$test_output"
echo ""
fi
let pass_count++ let pass_count++
else else
echo -e "\033[0;31mTest #$(($test_num+1)): FAIL\033[0m" echo -e "\033[0;31mTest #$(($test_num+1)): FAIL\033[0m"
echo "Test case:" echo "Test case:"
echo $test_case echo -n "$test_case"
echo "Your output:" echo "Your output:"
echo $test_output echo "$test_output"
echo "Correct output:" echo "Correct output:"
echo $expected_output echo -n "$expected_output"
let fail_count++ let fail_count++
fi fi
done done

View File

@@ -1,11 +1,32 @@
#!/bin/bash #!/bin/bash
if [ $# -ne 1 ]; then # if [ $# -ne 1 ]; then
echo "Provide the limit of stress testing" # echo "Provide the limit of stress testing"
echo "$0 'test case limit'" # echo "$0 'test case limit'"
echo "$0 -1 (for unlimited)" # echo "$0 -1 (for unlimited)"
exit 1 # echo "OPTIONAL: $0 -n (for running with bruteforce)"
fi # exit 1
# fi
limit=0
flag=true
while getopts l:nh param; do
case $param in
l)
limit=$OPTARG
;;
n)
flag=false
;;
h)
echo "Provide the limit of stress testing"
echo "$0 'test case limit'"
echo "$0 -1 (for unlimited)"
echo "OPTIONAL: $0 -n (for running with bruteforce)"
exit 0
;;
esac
done
#Required tools #Required tools
SOLUTION=build/solution SOLUTION=build/solution
@@ -24,24 +45,34 @@ pass_count=0
while (( 1 )) while (( 1 ))
do do
./generator > $TESTCASE_FILE ./$GENERATOR $(($pass_count+1)) > $TESTCASE_FILE
./SOLUTION < $TESTCASE_FILE > $OUTPUT_FILE ./$SOLUTION < $TESTCASE_FILE > $OUTPUT_FILE
./BRUTEFORCE < $TESTCASE_FILE > $CORRECT_ANSWER_FILE
if diff -q -Z $OUTPUT_FILE $CORRECT_ANSWER_FILE >> /dev/null; then if $flag ; then
echo -e "\033[0;31mTest #$(($pass_count+1)): FAIL\033[0m" ./$BRUTEFORCE < $TESTCASE_FILE > $CORRECT_ANSWER_FILE
if diff -q -Z $OUTPUT_FILE $CORRECT_ANSWER_FILE >> /dev/null; then
echo -e "\033[0;31mTest #$(($pass_count+1)): FAIL\033[0m"
echo "Test case:"
cat $TESTCASE_FILE
echo "Your output:"
cat $OUTPUT_FILE
echo "Correct output:"
cat $CORRECT_ANSWER_FILE
break
fi
echo -e "\033[0;32mPassed test: #$(($pass_count+1))\033[0m"
else
echo -e "Test #$(($pass_count+1)):"
echo "Test case:" echo "Test case:"
cat $TESTCASE_FILE cat $TESTCASE_FILE
echo "Your output:" echo "Your output:"
cat $OUTPUT_FILE cat $OUTPUT_FILE
echo "Correct output:"
cat $CORRECT_ANSWER_FILE
break
fi fi
echo -e "\033[0;32mPassed test: #$(($pass_count+1))\033[0m" let pass_count++
if [ $limit -ne -1 ] && [ $pass_count -ge $limit ]; then
if [ $1 -ne -1 ] || [ $pass_count -lt $1 ]; then
break break
fi fi
done done