From 86f63fde37448e5ec3a22322b2bc2fd4f0a7d6c2 Mon Sep 17 00:00:00 2001 From: Tamio Vesa Nakajima Date: Tue, 5 Jun 2018 01:22:42 +0100 Subject: [PATCH] Overhauled documentation & examples --- examples/aplusb/buildtests | 115 +++++++++++++-------- examples/aplusb/compare | 72 +++++++------ examples/aplusb/eval/eval.bin | Bin 45496 -> 0 bytes examples/aplusb/incf/fixed | 2 +- examples/aplusb/incf/fixed2 | 1 - examples/aplusb/{src => incf}/makefile | 0 examples/aplusb/ingen/ingen.bin | Bin 42128 -> 0 bytes examples/aplusb/ingen/ingen.cpp | 5 +- examples/aplusb/lib | 129 ----------------------- examples/aplusb/lib/build_ok_number | 39 +++++++ examples/aplusb/lib/build_test_number | 40 +++++++ examples/aplusb/lib/evaluate_src_test | 60 +++++++++++ examples/aplusb/lib/run_src_test | 64 ++++++++++++ examples/aplusb/okgen/okgen.bin | Bin 36144 -> 0 bytes examples/aplusb/oldtests/.zip | Bin 6853 -> 0 bytes examples/aplusb/oldtests/asdfjkl;.zip | Bin 6405 -> 0 bytes examples/aplusb/oldtests/big.zip | Bin 7855 -> 0 bytes examples/aplusb/oldtests/first.zip | Bin 6291 -> 0 bytes examples/aplusb/oldtests/frths.zip | Bin 6327 -> 0 bytes examples/aplusb/oldtests/lll.zip | Bin 6405 -> 0 bytes examples/aplusb/oldtests/ls.zip | Bin 1338 -> 0 bytes examples/aplusb/oldtests/newtests.zip | Bin 7194 -> 0 bytes examples/aplusb/oldtests/newtests2.zip | Bin 7194 -> 0 bytes examples/aplusb/oldtests/second.zip | Bin 1338 -> 0 bytes examples/aplusb/oldtests/snd.zip | Bin 6291 -> 0 bytes examples/aplusb/oldtests/thrd.zip | Bin 6291 -> 0 bytes examples/aplusb/problemconfig | 2 +- examples/aplusb/run | 138 +++++++++++++++++-------- examples/aplusb/src/almost_ok.cpp | 2 +- examples/aplusb/src/wa.cpp | 3 +- examples/aplusb/stage/aplusb.bin | Bin 25948 -> 0 bytes examples/aplusb/stage/aplusb.in | 1 - examples/aplusb/stage/aplusb.out | 1 - examples/aplusb/testmanifest | 1 - examples/aplusb/tests/aplusb-0.in | 1 - examples/aplusb/tests/aplusb-0.ok | 2 - examples/aplusb/tests/aplusb-1.in | 1 - examples/aplusb/tests/aplusb-1.ok | 2 - examples/aplusb/tests/aplusb-10.in | 1 - examples/aplusb/tests/aplusb-10.ok | 2 - examples/aplusb/tests/aplusb-11.in | 1 - examples/aplusb/tests/aplusb-11.ok | 2 - examples/aplusb/tests/aplusb-12.in | 1 - examples/aplusb/tests/aplusb-12.ok | 2 - examples/aplusb/tests/aplusb-13.in | 1 - examples/aplusb/tests/aplusb-13.ok | 2 - examples/aplusb/tests/aplusb-14.in | 1 - examples/aplusb/tests/aplusb-14.ok | 2 - examples/aplusb/tests/aplusb-15.in | 1 - examples/aplusb/tests/aplusb-15.ok | 2 - examples/aplusb/tests/aplusb-16.in | 1 - examples/aplusb/tests/aplusb-16.ok | 2 - examples/aplusb/tests/aplusb-17.in | 1 - examples/aplusb/tests/aplusb-17.ok | 2 - examples/aplusb/tests/aplusb-18.in | 1 - examples/aplusb/tests/aplusb-18.ok | 2 - examples/aplusb/tests/aplusb-19.in | 1 - examples/aplusb/tests/aplusb-19.ok | 2 - examples/aplusb/tests/aplusb-2.in | 1 - examples/aplusb/tests/aplusb-2.ok | 2 - examples/aplusb/tests/aplusb-3.in | 1 - examples/aplusb/tests/aplusb-3.ok | 2 - examples/aplusb/tests/aplusb-4.in | 1 - examples/aplusb/tests/aplusb-4.ok | 2 - examples/aplusb/tests/aplusb-5.in | 1 - examples/aplusb/tests/aplusb-5.ok | 2 - examples/aplusb/tests/aplusb-6.in | 1 - examples/aplusb/tests/aplusb-6.ok | 2 - examples/aplusb/tests/aplusb-7.in | 1 - examples/aplusb/tests/aplusb-7.ok | 2 - examples/aplusb/tests/aplusb-8.in | 1 - examples/aplusb/tests/aplusb-8.ok | 2 - examples/aplusb/tests/aplusb-9.in | 1 - examples/aplusb/tests/aplusb-9.ok | 2 - examples/xxx/eval/makefile | 0 examples/xxx/incf/makefile | 0 examples/xxx/ingen/makefile | 0 examples/xxx/okgen/makefile | 0 examples/xxx/problemconfig | 2 - examples/xxx/src/buildtests | 89 ---------------- examples/xxx/src/compare | 90 ---------------- examples/xxx/src/lib/build_test_number | 26 ----- examples/xxx/src/lib/evaluate_src_test | 38 ------- examples/xxx/src/lib/run_src_test | 51 --------- examples/xxx/src/makefile | 0 examples/xxx/src/run | 107 ------------------- examples/xxx/src/todo | 9 -- examples/xxx/testmanifest | 0 src/buildtests | 4 +- src/compare | 6 +- src/run | 12 +-- 91 files changed, 426 insertions(+), 743 deletions(-) delete mode 100755 examples/aplusb/eval/eval.bin delete mode 100644 examples/aplusb/incf/fixed2 rename examples/aplusb/{src => incf}/makefile (100%) delete mode 100755 examples/aplusb/ingen/ingen.bin delete mode 100644 examples/aplusb/lib create mode 100755 examples/aplusb/lib/build_ok_number create mode 100755 examples/aplusb/lib/build_test_number create mode 100755 examples/aplusb/lib/evaluate_src_test create mode 100755 examples/aplusb/lib/run_src_test delete mode 100755 examples/aplusb/okgen/okgen.bin delete mode 100644 examples/aplusb/oldtests/.zip delete mode 100644 examples/aplusb/oldtests/asdfjkl;.zip delete mode 100644 examples/aplusb/oldtests/big.zip delete mode 100644 examples/aplusb/oldtests/first.zip delete mode 100644 examples/aplusb/oldtests/frths.zip delete mode 100644 examples/aplusb/oldtests/lll.zip delete mode 100644 examples/aplusb/oldtests/ls.zip delete mode 100644 examples/aplusb/oldtests/newtests.zip delete mode 100644 examples/aplusb/oldtests/newtests2.zip delete mode 100644 examples/aplusb/oldtests/second.zip delete mode 100644 examples/aplusb/oldtests/snd.zip delete mode 100644 examples/aplusb/oldtests/thrd.zip delete mode 100755 examples/aplusb/stage/aplusb.bin delete mode 100644 examples/aplusb/stage/aplusb.in delete mode 100644 examples/aplusb/stage/aplusb.out delete mode 100644 examples/aplusb/tests/aplusb-0.in delete mode 100644 examples/aplusb/tests/aplusb-0.ok delete mode 100644 examples/aplusb/tests/aplusb-1.in delete mode 100644 examples/aplusb/tests/aplusb-1.ok delete mode 100644 examples/aplusb/tests/aplusb-10.in delete mode 100644 examples/aplusb/tests/aplusb-10.ok delete mode 100644 examples/aplusb/tests/aplusb-11.in delete mode 100644 examples/aplusb/tests/aplusb-11.ok delete mode 100644 examples/aplusb/tests/aplusb-12.in delete mode 100644 examples/aplusb/tests/aplusb-12.ok delete mode 100644 examples/aplusb/tests/aplusb-13.in delete mode 100644 examples/aplusb/tests/aplusb-13.ok delete mode 100644 examples/aplusb/tests/aplusb-14.in delete mode 100644 examples/aplusb/tests/aplusb-14.ok delete mode 100644 examples/aplusb/tests/aplusb-15.in delete mode 100644 examples/aplusb/tests/aplusb-15.ok delete mode 100644 examples/aplusb/tests/aplusb-16.in delete mode 100644 examples/aplusb/tests/aplusb-16.ok delete mode 100644 examples/aplusb/tests/aplusb-17.in delete mode 100644 examples/aplusb/tests/aplusb-17.ok delete mode 100644 examples/aplusb/tests/aplusb-18.in delete mode 100644 examples/aplusb/tests/aplusb-18.ok delete mode 100644 examples/aplusb/tests/aplusb-19.in delete mode 100644 examples/aplusb/tests/aplusb-19.ok delete mode 100644 examples/aplusb/tests/aplusb-2.in delete mode 100644 examples/aplusb/tests/aplusb-2.ok delete mode 100644 examples/aplusb/tests/aplusb-3.in delete mode 100644 examples/aplusb/tests/aplusb-3.ok delete mode 100644 examples/aplusb/tests/aplusb-4.in delete mode 100644 examples/aplusb/tests/aplusb-4.ok delete mode 100644 examples/aplusb/tests/aplusb-5.in delete mode 100644 examples/aplusb/tests/aplusb-5.ok delete mode 100644 examples/aplusb/tests/aplusb-6.in delete mode 100644 examples/aplusb/tests/aplusb-6.ok delete mode 100644 examples/aplusb/tests/aplusb-7.in delete mode 100644 examples/aplusb/tests/aplusb-7.ok delete mode 100644 examples/aplusb/tests/aplusb-8.in delete mode 100644 examples/aplusb/tests/aplusb-8.ok delete mode 100644 examples/aplusb/tests/aplusb-9.in delete mode 100644 examples/aplusb/tests/aplusb-9.ok delete mode 100644 examples/xxx/eval/makefile delete mode 100644 examples/xxx/incf/makefile delete mode 100644 examples/xxx/ingen/makefile delete mode 100644 examples/xxx/okgen/makefile delete mode 100644 examples/xxx/problemconfig delete mode 100755 examples/xxx/src/buildtests delete mode 100755 examples/xxx/src/compare delete mode 100755 examples/xxx/src/lib/build_test_number delete mode 100755 examples/xxx/src/lib/evaluate_src_test delete mode 100755 examples/xxx/src/lib/run_src_test delete mode 100644 examples/xxx/src/makefile delete mode 100755 examples/xxx/src/run delete mode 100644 examples/xxx/src/todo delete mode 100644 examples/xxx/testmanifest diff --git a/examples/aplusb/buildtests b/examples/aplusb/buildtests index c54ff74..1287e8d 100755 --- a/examples/aplusb/buildtests +++ b/examples/aplusb/buildtests @@ -3,12 +3,39 @@ # This builds all tests using testmanifest # Tamio-Vesa Nakajima -# include the library -source lib +################################# +# Build necesisties +################################# -# include the configuration +cd eval || exit +make -s +cd .. || exit + +cd okgen || exit +make -s +cd .. || exit + +cd ingen || exit +make -s +cd .. || exit + +################################# +# PROBLEM CONFIGURATION +################################# + +# initialize problemconfig variables +problemname="" +timelimit="" + +# shellcheck disable=SC1091 source problemconfig +# Check if problemconfig variables are set +if [ -z "$problemname" ] || [ -z "$timelimit" ] ; then + echo Bad config file + exit 1 +fi + ############################ # ARGUMENT PARSING ############################# @@ -17,73 +44,71 @@ rebuild_inputs=true while getopts "r:ho" opt; do case $opt in - h) - echo "Usage: ./run -r(estore) [revision to restore]" + h) # Help: + echo "Usage: ./run [-r REVISION] [-o]" + echo " -r REVISION -- restores REVISION" + echo " -o -- rebuilds only the .ok files" exit 0 ;; - r) + r) # Restore old revision rm -r tests - unzip oldtests/$OPTARG.zip + unzip "oldtests/$OPTARG.zip" exit 0 ;; - o) + o) # DO only the ok's again rebuild_inputs=false ;; + *) + echo "Bad options" + exit 1 + ;; esac done -read -p "Name of this test revision: " testrevision -# We will want to remember this: -currtest=0 +############################ +# Building tests +############################ -# Loop over lines of -cat testmanifest | while read instr; do +# Get test revision name +read -p "Name of this test revision: " -r testrevision + +# For all lines of the test manifest: +currtest=0 +while read -r instr; do # Parse a line of testmanifest + + # shellcheck disable=SC2086 set $instr numberoftests=$1 incf=$2 totalpoints=$3 - points=$(($totalpoints / $numberoftests)) - for nr in `seq $currtest $(($currtest + $numberoftests - 1))` ; do - echo $nr - ################# - # Build input: - ################# + # Get the number of points per test + points=$((totalpoints / numberoftests)) + + # For all tests of this kind: + for ((nr=$"currtest"; nr<"$currtest"+"$numberoftests" ; nr++)) ; do + ( + echo Building test "$nr" if [ $rebuild_inputs = true ] ; then - build_test_number $nr $incf + ./lib/build_test_number "$nr" "$incf" fi - ################### - # Build ok - ################### - - # Build ok generator - cd okgen && make -s && cd .. - - # Copy ok generator and input into stage - cp okgen/okgen.bin stage/$problemname.bin - cp tests/$problemname-$nr.in stage/$problemname.in + ./lib/build_ok_number "$nr" "$points" - # Indicate the number of points in the stage - echo $points > stage/$problemname.points - - # Build ok - cd stage && ./$problemname.bin && cd .. - - # Copy ok from stage into tests - cp stage/$problemname.ok tests/$problemname-$nr.ok - - # Clean stage - rm stage/* + echo Done test "$nr" + ) & done #update currtest - currtest=$(($currtest + $numberoftests)) -done + currtest=$((currtest + numberoftests)) +done < testmanifest + +wait -if [ -n $testrevision ] ; then - zip -r oldtests/$testrevision.zip tests/* +# Store this revision in oldtests +if [ -n "$testrevision" ] ; then + zip -r "oldtests/$testrevision.zip" tests/* fi diff --git a/examples/aplusb/compare b/examples/aplusb/compare index 6a81689..d6d0498 100755 --- a/examples/aplusb/compare +++ b/examples/aplusb/compare @@ -1,18 +1,28 @@ #!/bin/bash # -# compare -s "s1 s2" -s s3 -c "c1 c2" -c c3 compares sources s1, s2, s3 with configurations c1 c2 c3 until they diverge +# compares sources # Tamio-Vesa Nakajima -source lib +problemname="" +timelimit="" + +# shellcheck disable=SC1091 source problemconfig +if [ -z "$problemname" ] || [ -z "$timelimit" ] ; then + echo Bad config file + exit 1 +fi + srcs="" configs="" while getopts "hs:c:" opt ; do case $opt in h) - echo "Usage: ./compare -s \"source1\" -s \"source2\" -c \"config1\" \"config2\"" + echo "Usage: ./compare -s SRC1 ... -s SRCn -c CONF1 ... -c CONFm" + echo " -s SRC1 ... -s SRCn -- compares SRC1 to ... to SRCn" + echo " -c CONF1 ... -s CONm -- using config files CONF1 ... CONFm" exit 0 ;; s) @@ -21,68 +31,72 @@ while getopts "hs:c:" opt ; do c) configs="$configs $OPTARG" ;; + *) + echo Bad options + exit 1 + ;; esac done if [ -z "$srcs" ] ; then - echo No sources provided + echo No sources provided >&2 exit 1 fi if [ -z "$configs" ] ; then - echo No configs provided + echo No configs provided >&2 exit 1 fi -srcs_arr=($srcs) +# shellcheck disable=SC2086 +srcs_arr=() +read -a srcs_arr -r <<< "$srcs" nr_srcs=${#srcs_arr[@]} outputs_arr=() binary_arr=() -input_file=`mktemp` -for i in `seq 0 $(($nr_srcs-1))` ; do - outputs_arr[$i]=`mktemp` - binary_arr[$i]=`mktemp` +for ((i=0; i /dev/null - echo -en " \r" - echo Doing test $curr_test - curr_test=$(($curr_test + 1)) + echo -en " \\r" >&2 + echo Doing test $curr_test >&2 + curr_test=$((curr_test + 1)) - build_test_number 999 $conf + ./lib/build_test_number 999 "$conf" hasTle=false - for i in `seq 0 $(($nr_srcs-1))` ; do - run_src_test ${binary_arr[$i]} $problemname-999 + for((i=0; i $timelimit" | bc -l ) )) ; then hasTle=true fi - - cp stage/$problemname.out ${outputs_arr[$i]} done + + # shellcheck disable=SC2086 if [ $hasTle = true ] || ! diff --from-file ${outputs_arr[*]} > /dev/null ; then - echo -en " \r" - echo Has failed on: + echo -en " \\r" >&2 + echo Has failed on: >&2 cat tests/$problemname-999.in - echo With outputs: - for i in `seq 0 $(($nr_srcs-1))` ; do - echo ${srcs_arr[$i]}: + echo With outputs: >&2 + for((i=0 ; i&2 cat ${outputs_arr[$i]} - echo + echo >&2 done exit 0 fi diff --git a/examples/aplusb/eval/eval.bin b/examples/aplusb/eval/eval.bin deleted file mode 100755 index c3c63e44b334432af0adffdc707f0829589fc1d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45496 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 R%QU05nN_vc76;w<{XcTWa~c2u diff --git a/examples/aplusb/ingen/ingen.cpp b/examples/aplusb/ingen/ingen.cpp index 223d9c2..800845e 100644 --- a/examples/aplusb/ingen/ingen.cpp +++ b/examples/aplusb/ingen/ingen.cpp @@ -1,6 +1,5 @@ #include #include -#include using namespace std; int main(){ @@ -10,9 +9,7 @@ int main(){ int x, y; f >> fixed >> x >> y; - if(fixed){ - g << x << ' ' << y << endl; - } + if(fixed) g << x << ' ' << y << endl; else{ unsigned seed1 = std::chrono::system_clock::now().time_since_epoch().count(); srand(seed1); diff --git a/examples/aplusb/lib b/examples/aplusb/lib deleted file mode 100644 index e8bf9c7..0000000 --- a/examples/aplusb/lib +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/bash -# -# Bash library for this project -# Tamio-Vesa Nakajima - -# Tries to execute $1 ; if this succeeds, do nothing -# otherwise, output $2 -try () { - if eval $1 ; then - : - else - echo $2 - exit 1 - fi -} - -# Tries to copy $1 to $2 ; if $1 doesn't exist, creates an empty $2 -maybecp () { - if [ -f $1 ] ; then - cp $1 $2 - else - touch $2 - fi -} - -# Builds test number $1 with incf $2 -build_test_number () { - source problemconfig - - nr=$1 - incf=$2 - - # Build input generator - cd ingen && make -s && cd .. - - # Copy ingen/ingen.bin and incf/$1 into stage - cp ingen/ingen.bin stage/$problemname.bin - cp incf/$incf stage/$problemname.cf - - # Build input - cd stage && ./$problemname.bin && cp $problemname.in ../tests/$problemname-$nr.in && cd .. - - # Clean stage - rm stage/* 2> /dev/null - -} - -# Run the binary $1 with test $2, returning the time used in timeUsed, and leaving the output file in stage/$problemname.out -run_src_test () { - binary=$1 - testname=$2 - - # Get an appropriate timeout command - timeoutCommand=timeout - - if [[ "$OSTYPE" == "darwin"* ]] ; then - timeoutCommand=gtimeout - fi - - # Fetch the problem configuration - source problemconfig - - # clear any previous messages - echo -en "\r \r" - - # Output an appropriate messgae - echo -en "Doing $testname\r" - - # Clean the stage - rm stage/* 2> /dev/null - - # Copy the binary into the stage - cp $binary stage/$problemname.bin - - # Copy the input into the stage - cp tests/$testname.in stage/$problemname.in - - # Get the problem config - source problemconfig - - # This string runs the competitor's executable - runExec="./$problemname.bin > /dev/null 2> /dev/null" - - # This string runs the competitors executable with an appropriate timeout - runExecWithTimeout="$timeoutCommand $timelimit $runExec" - - # Run the competitors executable with a timeout, and store the time used in timeUsed - timeUsed=$(cd stage && { time $runExecWithTimeout ; } 2>&1 >/dev/null \ - | tail -3 \ - | head -1 \ - | awk -F ' ' '{print $2}' \ - | awk -F 'm' '{print $2}' \ - | awk -F 's' '{print $1}' && cd ..) -} - -# Evaluates the binary $1 with test $2, returning the message in $message, the time used in $timeUsed and the points in $points -evaluate_src_test () { - binary=$1 - testname=$2 - - run_src_test $binary $testname - if (( $(echo "$timeUsed > $timelimit" | bc -l))) ; then - # Set the return values - # timeUsed is already set - message=TLE - points=0 - else - # Make the evaluator - try "cd eval && make -s && cd .." "evaluator build fail" - - # Copy the evaluator into the stage - cp eval/eval.bin stage/eval.bin - - # Copy the ok file into the stage - cp tests/$testname.ok stage/$problemname.ok - - # Create temporary files to hold the points and the eval message - pointsFile=`mktemp` - messageFile=`mktemp` - - # Enter the stage and evaluate, storing the results in $pointsFile and $messageFile - try "cd stage && ./eval.bin > $pointsFile 2> $messageFile && cd .." "eval error" - - # Set the return values - # timeUsed is already set - points=`cat $pointsFile` - message=`cat $messageFile` - fi -} diff --git a/examples/aplusb/lib/build_ok_number b/examples/aplusb/lib/build_ok_number new file mode 100755 index 0000000..fd4d406 --- /dev/null +++ b/examples/aplusb/lib/build_ok_number @@ -0,0 +1,39 @@ +#!/bin/bash +# + +# include the configuration +problemname="" +timelimit="" + +# shellcheck disable=SC1091 +source problemconfig + +if [ -z "$problemname" ] || [ -z "$timelimit" ] ; then + echo Bad config file + exit 1 +fi + +nr="$1" +points="$2" + +# make a stage +stage=$(mktemp -d) + +# Copy ok generator and input into stage +cp okgen/okgen.bin "$stage/$problemname.bin" +cp "tests/$problemname-$nr.in" "$stage/$problemname.in" + +# Indicate the number of points in the stage +echo "$points" > "$stage/$problemname.points" + +# Build ok +currdir=$PWD +cd "$stage" || exit +./"$problemname.bin" +cd "$currdir" || exit + +# Copy ok from stage into tests +cp "$stage/$problemname.ok" "tests/$problemname-$nr.ok" + +# Clean stage +rm -rf "$stage" diff --git a/examples/aplusb/lib/build_test_number b/examples/aplusb/lib/build_test_number new file mode 100755 index 0000000..e6a8d39 --- /dev/null +++ b/examples/aplusb/lib/build_test_number @@ -0,0 +1,40 @@ +#!/bin/bash +# +# Tamio-Vesa Nakajima +# Builds test number $1 with incf $2 + + +# include the configuration +problemname="" +timelimit="" + +# shellcheck disable=SC1091 +source problemconfig + +if [ -z "$problemname" ] || [ -z "$timelimit" ] ; then + echo Bad config file + exit 1 +fi + +nr=$1 +incf=$2 + +# Build input generator +cd ingen && make -s && cd .. + +# Make a stage +stage=$(mktemp -d) + +# Copy ingen/ingen.bin and incf/$1 into stage +cp ingen/ingen.bin "$stage/$problemname.bin" +cp "incf/$incf" "$stage/$problemname.cf" + +# Build input +currdir=$PWD +cd "$stage" || exit +./"$problemname.bin" +cp "$problemname.in" "$currdir/tests/$problemname-$nr.in" +cd "$currdir" || exit + +# Clean stage +rm -rf "$stage" diff --git a/examples/aplusb/lib/evaluate_src_test b/examples/aplusb/lib/evaluate_src_test new file mode 100755 index 0000000..414016f --- /dev/null +++ b/examples/aplusb/lib/evaluate_src_test @@ -0,0 +1,60 @@ +#!/bin/bash +# +# Tamio-Vesa Nakajima +# Evaluates the binary $1 with test $2, returning the message in $message, the time used in $timeUsed and the points in $points + +# include the configuration +problemname="" +timelimit="" + +# shellcheck disable=SC1091 +source problemconfig + +if [ -z "$problemname" ] || [ -z "$timelimit" ] ; then + echo Bad config file + exit 1 +fi + +binary=$1 +testname=$2 +output_location=$(mktemp) +timeUsed=$(./lib/run_src_test "$output_location" "$binary" "$testname") + +if (( $(echo "$timeUsed > $timelimit" | bc -l))) ; then + # Set the return values + # timeUsed is already set + message=TLE + points=0 +elif [ ! -e "$output_location" ] ; then + message="MissingOutput" + points=0 +else + # Make a stage + stage=$(mktemp -d) + + # Move output into stage + mv "$output_location" "$stage/$problemname.out" + + # Copy the evaluator into the stage + cp eval/eval.bin "$stage/eval.bin" + + # Copy the ok file into the stage + cp "tests/$testname.ok" "$stage/$problemname.ok" + + # Create temporary files to hold the points and the eval message + pointsFile=$(mktemp) + messageFile=$(mktemp) + + # Enter the stage and evaluate, storing the results in $pointsFile and $messageFile + curr_file=$PWD + cd "$stage" || exit + ./eval.bin > "$pointsFile" 2> "$messageFile" + cd "$curr_file" || exit + + # Set the return values + # timeUsed is already set + points=$(cat "$pointsFile") + message=$(cat "$messageFile") +fi + +echo "$message" "$timeUsed" "$points" diff --git a/examples/aplusb/lib/run_src_test b/examples/aplusb/lib/run_src_test new file mode 100755 index 0000000..f3d7a5c --- /dev/null +++ b/examples/aplusb/lib/run_src_test @@ -0,0 +1,64 @@ +#!/bin/bash +# +# Run the binary $2 with test $3, returning the time used stdout, and leaving the output file in $1 +output_location="$1" +binary=$2 +testname=$3 + +# include the configuration +problemname="" +timelimit="" + +# shellcheck disable=SC1091 +source problemconfig + +if [ -z "$problemname" ] || [ -z "$timelimit" ] ; then + echo Bad config file + exit 1 +fi + +# Get an appropriate timeout command +timeoutCommand=timeout + +if [[ "$OSTYPE" == "darwin"* ]] ; then + timeoutCommand=gtimeout +fi + +# clear any previous messages +echo -en "\\r \\r" >&2 + +# Output an appropriate messgae +echo -en "Doing $testname \\r" >&2 + +# Make a stage +stage=$(mktemp -d) + +# Copy the binary into the stage +cp "$binary" "$stage/$problemname.bin" + +# Copy the input into the stage +cp "tests/$testname.in" "$stage/$problemname.in" + +# This string runs the competitor's executable +runExec="./$problemname.bin" + +# This string runs the competitors executable with an appropriate timeout +runExecWithTimeout=" +$timeoutCommand $timelimit $runExec" + +# Run the competitors executable with a timeout, and store the time used in timeUsed +curr_dirr=$PWD +cd "$stage" || exit +timeUsed=$({ time $runExecWithTimeout ; } 2>&1 >/dev/null \ + | awk -F ' ' '{ if($1=="user" || $1 == "sys") { print $2 } }' \ + | awk -F 'm' '{print $2}' \ + | awk -F 's' '{print $1}' \ + | awk 'BEGIN { total = 0; } { total += $1; } END { print total; }' ) +cd "$curr_dirr" || exit + + +cp "$stage/$problemname.out" "$output_location" 2> /dev/null + +echo "$timeUsed" + +rm -rf "$stage" diff --git a/examples/aplusb/okgen/okgen.bin b/examples/aplusb/okgen/okgen.bin deleted file mode 100755 index 0b4dca097b4a78fd272070a36ffea8b4f2769ece..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36144 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 diff --git a/examples/aplusb/oldtests/ls.zip b/examples/aplusb/oldtests/ls.zip deleted file mode 100644 index 842136c4e99eb41b6e39117b27bf04dfbdd8958a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1338 zcmWIWW@h1H0DPSQ2d%ghT6;bdU;oWmFm!lf15 z42&#a85tN@M1YzCP>kAm#AgO8P!xo*7?qz5H!5y6hEawFTn1dI=0RNrrZCJiB*|$P zr}sR<=`=$<{7y3_(P>81bD9yAon{PkninuKK^Sj@;te%pnA1SUV2My@s4+6hG2=>Y z67U#a(giE+8f940=#6PCD6)w&7UU)v5M)4h?QEbhifbXs zkvL;fgB97e&oGUphHK4$VS(aWND8IYwT+m@Qp2?u(T#;9TA*vOCRo&zfIDnun9u?N Xl7Mj;%gP3dc@7}l0o0fS#0(4obzTGH diff --git a/examples/aplusb/oldtests/newtests.zip b/examples/aplusb/oldtests/newtests.zip deleted file mode 100644 index c8cb9aef8c10c7b07d4114b6834b369f4dc47bb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7194 zcmcJTJ!lj`6vy{+NlY#(C`qt5B!!BFi97poJF9IlNFt_C5iBH%MNm{oA|faVg4n1i z*rw4df~A#~_S&c^jGb5*8wC+;^bK?On9tiGyOS_*klb&7_jc|-@9q3-y}uE#pV1eu z=Aw=JU;E)TTf2g0uzYE0dFk-N^(!k&7be50#jB@J4F`4lzIKkSm760$t^aoo{(ltS z5Kcsmc?lP{Z>u3bjl_jekOgbkHJi9SB28qj-p1QQF&cJLL zay<`8nA3@fWQ4Xzk_zd|F7S8t&@p?g(?WC7isF!Fk#t@Zo9DjGbJ5&TnzUgwXQ%U- zJ5PtZXQ_5NW2m#!*>vEuqqLPJG?^e-o@XSFa`nXf(;CE@8!piM_=l4;3R8BCj0*R% zP#h!OmpCT6rEl4)I0m{eam;geflcGrb4wM+IQJ!vX^Bpir7^Z%cr7ZtUhdt*k3xfW6SPlk0LOvJhqA0X(+K& z+s^z6y6h$vaOGA?c6}ElQyh-;AqqmgpMIBp(?Hd(~!CT6eLe}Ije#!_swQ4qmK-(+&n*_pZB<7Ove;UKxseR%usJMZn{e08u+_|MqO z*9-pV2VVx^HNUoz23fwew7j&xdE;tp>B6)(bNSlI6CtPXLWy+tnIUEaCxk5ozc}jD>zmL6-S64WlqnoWJj$ zy}t$M{4#w)zI0R%LdLv=u^^Pd#p+mKXXJF1uEa6ROBTl{cO{NV&czLZ z3rBxnJ&r-{N*sf{*E5n{y6MLqzV=m7B z$LbrVj6JSnd71;3>*rwgMN`JEs93QT^=6x0Hf8Kj9ow6&zP8EOStxO)wj28==<-b{ zrwY8d+1Xp>whi1eeE(`(EU%Ssb3mJI_r23uCK7`s-s zA9ZXQwVmFq6ahom%Jz|tEyMP!ip9vavYmrRbD6J$*yA9`4<4`> diff --git a/examples/aplusb/oldtests/second.zip b/examples/aplusb/oldtests/second.zip deleted file mode 100644 index 7e0ff38acd3ee460e45da93aae86d960dda09954..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1338 zcmWIWW@h1H0D;{0Ek0ldln`W)VJJy0E-BVeEXXM>PSQ2d%ghT6;bdTro6Q&v!lf15 z42&#a85tN@M1YzCP>kAm#AgO8P!xo*7?qz5H_8vwC_@7-11?napsoT_80Hz0LJI^)0>))5D;p^0Ie>5nP-6}dGcW)EK&b^k diff --git a/examples/aplusb/oldtests/snd.zip b/examples/aplusb/oldtests/snd.zip deleted file mode 100644 index e544d0eea37f2a93a35e524c1a095fff37b26e41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6291 zcmb`LzfTlF6vyYdJM|752qu`QC5eT2cW?)k)?h**l@$aEp0C<|t^RiZ{`#wDJN=D&t=T6p)*dxf_50__W7v0IkE=@UUqz|fl>XAHg*yJYvR~I% zVfUb3J|)yCN3~ncR@3I?R+k6HYnM_x*?s@5ra`cKP{Y-_L(L}L(At#R5B+PxJ~XwW znva#c0ml(()UQUSM)u-lxV+nli5yrA2>uv=Hqtt;%-6LjkdyDbR1 zEeN|U3c4*Oxv?sz3W-{LhDPvd8hZyBoO%ZG zIu7J)thBNAIF497xT`_7%(2jQaaeFN+k`6G9_Y)KEe@M;Si6ghw!b-cG}}qbwyU$S zZE)}fHKG5&p_Vb3zd#dlQhb!Ux zlW}p;PxZa4|2<;ofD=F**F0-*w4b*(jEkc{95?*Dee!T6^1X4z%>f65RNr+EcQjvn zbvt&sRA(^H{AVpL#%r*+T%2)iZX1Cu-VFu|*Ypy9)k&AiECL(0-Q!pZ+g~o0sw~O2 zbJn3i=`4vvOVWm3EPKy zh_||&DlEx%pJQ{|h)FMe-~Ms2_}){#a81=ltHQp6O_Wx1ly*k!@_K8gHCL=`dh5XQxh1xk-*v!j! z)j^=Xe~wXS7*#G6OGTR(Sv@=v0Wx^;_VV{j{v^SV{^zm&nP!t6H5=r+mhHpS>R#q3sPbgMGE)fnAs z%x-l?w>q=iG^5*eS8g2#R$L)o1Iw&lG!^0oQK+t)7vaJSgg~X~U4#p-4+6z%7G566 zEM0dXTzGX5DAvrvivyXZ>kWhpuMGmln%PWnp&_#wuRhE4jAfHn@S%9^-D;_q#6q5j zg&eJwHr8Ip0V@}GvDKQ#Se2(ARypa%fG}*fF>JFRbn;BxqGBQ6Z`w7%B_m&5n1y!W=RHyH0}eK!a$hwnM! z!q89a`&xcIV&?$&4u0I^>+Kif!Ybg$O}^d^2`)#zFQ2(Nz=Dw0cbVY&`Qp0^b6)JY z+_=uv4MK-mY{sjHCe&{mV3%0*8)-T(qZ7*DGXqDNv zrCuil_;$nZ3^T7ZjfHI2U2JHPX)I)WjIkWq4i}sdLTk*nUBOrm+g%qMT4J{C9maCl zF3Kg|>hjPEvu!sqmc#bS#ln4$-{p|pV3j^61h@xE!scb+3Gqt)wEKl<$qx&05B0h+ A;s5{u diff --git a/examples/aplusb/problemconfig b/examples/aplusb/problemconfig index 6cfe193..61253ac 100644 --- a/examples/aplusb/problemconfig +++ b/examples/aplusb/problemconfig @@ -1,2 +1,2 @@ problemname=aplusb -timelimit=0.1 +timelimit=1 diff --git a/examples/aplusb/run b/examples/aplusb/run index 1289837..3562e21 100755 --- a/examples/aplusb/run +++ b/examples/aplusb/run @@ -2,106 +2,154 @@ # # Runs sources on tests # Tamio-Vesa Nakajima -# -# Use cases: -# ./run.sh -> runs all sources on all tests -# ./run.sh -s "a.cpp b.cpp" -s c.cpp -> runs a,b,c.cpp on all tests -# ./run.sh -t "00 01 02" -> runs all sources on tests 00, 01, 02 -# ./run.sh -s a.cpp -t 00 -> runs a.cpp on 00 -########################## -# GENERAL SETUP -######################### +################################# +# Build necesisties +################################# + +cd eval || exit +make -s +cd .. || exit + +cd okgen || exit +make -s +cd .. || exit -# include the library -source lib +cd ingen || exit +make -s +cd .. || exit -# include the configuration +################################# +# PROBLEM CONFIGURATION +################################# + +# initialize problemconfig variables +problemname="" +timelimit="" + +# shellcheck disable=SC1091 source problemconfig -# make stage (as git deletes it) -mkdir -p stage +# Check if problemconfig variables are set +if [ -z "$problemname" ] || [ -z "$timelimit" ] ; then + echo Bad config file + exit 1 +fi ############################ # ARGUMENT PARSING ############################# +run_in_parallel=false + # default values for used sources and used tests -srcs="" -tests="" +srcs=() +tests=() -while getopts "hs:t:" opt; do +while getopts "hs:t:p" opt; do case $opt in h) - echo "Usage: ./run -s [source] -t [test]" + echo "Usage: ./run [-s SRC1] ... [-s SRCn] [-t TEST1] ... [-t TESTm] [-p]" + echo " -s SRC1 ... -s SRCn -- run SRC1 ... SRCn ; if no -s is included, run all sources" + echo " -t TEST1 ... -t TESTm -- run on TEST1 ... TESTm ; if no -t is included, run on all tests" + echo " -p -- run all sources in parallel" exit 0 ;; s) for x in $OPTARG ; do - srcs="$srcs $x" + srcs+=("$x") done ;; t) for x in $OPTARG ; do - tests="$tests $problemname-$x" + tests+=("$problemname-$x") done ;; + p) + run_in_parallel=true + ;; + *) + echo Bad option + exit 1 + ;; esac done -if [ -z "$srcs" ] ; then - srcs=`ls -1 src | grep .cpp` +if [ ${#src[@]} -eq 0 ] ; then + cd src || exit + srcs=(*) + cd .. || exit fi -if [ -z "$tests" ] ; then - tests=`ls -1 tests | grep .in | awk -F '.' '{print $1}'` +if [ ${#tests[@]} -eq 0 ] ; then + cd tests || exit + for x in *.in ; do + tests+=( "$( echo "$x" | cut -f 1 -d '.')" ) + done + cd .. || exit fi -tests=`echo $tests | sort -t '-' -k 1 -n` - - ########################### # EVALUATING ########################## -for src in $srcs ; do +for src in "${srcs[@]}" ; do + # Make a stage + stage=$(mktemp -d) + # Copy the source into the stage - try "cp src/$src stage/$problemname.cpp" "source file missing" + cp "src/$src" "$stage/$problemname.cpp" # Create a temporary file to hold the problem binary - binary=`mktemp` + binary=$(mktemp) # Build the source - try "g++ stage/$problemname.cpp -std=c++11 -o $binary -O2" "Compile error" + g++ "$stage/$problemname.cpp" -std=c++11 -o "$binary" -O2 + + # Delete the stage + rm -rf "$stage" # Make a temporary file to hold the table: - table=`mktemp` + table=$(mktemp) # $table holds the score table - echo $src > $table - echo Test Message Time Points >> $table + echo "$src" > "$table" + echo Test Message Time Points >> "$table" # For all tests - for testname in $tests ; do - # evaluate $binary on $testname, setting $message, $timeUsed, $points - evaluate_src_test $binary $testname - echo $testname.in $message $timeUsed $points >> $table + for testname in "${tests[@]}" ; do + fun (){ + # evaluate $binary on $testname, setting $message, $timeUsed, $points + set "$(./lib/evaluate_src_test "$binary" "$testname")" + message=$1 + timeUsed=$2 + points=$3 + + echo "$testname.in" "$message" "$timeUsed" "$points" >> "$table" + } + if [ "$run_in_parallel" == "true" ] ; then + ( fun ) & + else + fun + fi done + if [ "$run_in_parallel" == "true" ] ; then + wait + fi + # Clear "Doing test ..." - echo -en "\r \r" + echo -en "\\r \\r" >&2 # Output the table - column -t $table + column -t "$table" # Calculate the score - echo SCORE: `awk -F ' ' '$1 != "Test" {sum += 0 $4} END {print sum}' $table` + echo SCORE: "$(awk -F ' ' '$1 != "Test" {sum += 0 $4} END {print sum}' "$table")" >&2 # Clear the temporary files - rm $table - rm $binary + rm "$table" + rm "$binary" - # And the stage - rm stage/* done diff --git a/examples/aplusb/src/almost_ok.cpp b/examples/aplusb/src/almost_ok.cpp index 9464e09..475adf6 100644 --- a/examples/aplusb/src/almost_ok.cpp +++ b/examples/aplusb/src/almost_ok.cpp @@ -6,6 +6,6 @@ int main(){ ofstream g("aplusb.out"); long long x, y; f >> x >> y; - if((x+y)%100 == 0) g << -1 << endl; + if((x+y)%10 == 0) g << -1 << endl; else g << x+y << endl; return 0; } diff --git a/examples/aplusb/src/wa.cpp b/examples/aplusb/src/wa.cpp index 7134bde..e06c3ea 100644 --- a/examples/aplusb/src/wa.cpp +++ b/examples/aplusb/src/wa.cpp @@ -4,4 +4,5 @@ using namespace std; int main(){ ofstream g("aplusb.out"); - g << -1 << endl; } + g << -1; +} diff --git a/examples/aplusb/stage/aplusb.bin b/examples/aplusb/stage/aplusb.bin deleted file mode 100755 index 51e0c25f9235e1fec36d63ec74620df607d71d13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25948 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 M9lW+UtDxt90hL~H-2eap diff --git a/examples/aplusb/stage/aplusb.in b/examples/aplusb/stage/aplusb.in deleted file mode 100644 index ac00f99..0000000 --- a/examples/aplusb/stage/aplusb.in +++ /dev/null @@ -1 +0,0 @@ -468168176 122451424 diff --git a/examples/aplusb/stage/aplusb.out b/examples/aplusb/stage/aplusb.out deleted file mode 100644 index 3a2e3f4..0000000 --- a/examples/aplusb/stage/aplusb.out +++ /dev/null @@ -1 +0,0 @@ --1 diff --git a/examples/aplusb/testmanifest b/examples/aplusb/testmanifest index 9e68729..83d2d86 100644 --- a/examples/aplusb/testmanifest +++ b/examples/aplusb/testmanifest @@ -1,3 +1,2 @@ 1 fixed 10 -1 fixed2 10 18 random 90 diff --git a/examples/aplusb/tests/aplusb-0.in b/examples/aplusb/tests/aplusb-0.in deleted file mode 100644 index 65cd68b..0000000 --- a/examples/aplusb/tests/aplusb-0.in +++ /dev/null @@ -1 +0,0 @@ -0 2 diff --git a/examples/aplusb/tests/aplusb-0.ok b/examples/aplusb/tests/aplusb-0.ok deleted file mode 100644 index 77f4b16..0000000 --- a/examples/aplusb/tests/aplusb-0.ok +++ /dev/null @@ -1,2 +0,0 @@ -10 -2 diff --git a/examples/aplusb/tests/aplusb-1.in b/examples/aplusb/tests/aplusb-1.in deleted file mode 100644 index 10ec153..0000000 --- a/examples/aplusb/tests/aplusb-1.in +++ /dev/null @@ -1 +0,0 @@ -100 200 diff --git a/examples/aplusb/tests/aplusb-1.ok b/examples/aplusb/tests/aplusb-1.ok deleted file mode 100644 index 222b847..0000000 --- a/examples/aplusb/tests/aplusb-1.ok +++ /dev/null @@ -1,2 +0,0 @@ -10 -300 diff --git a/examples/aplusb/tests/aplusb-10.in b/examples/aplusb/tests/aplusb-10.in deleted file mode 100644 index 32ce837..0000000 --- a/examples/aplusb/tests/aplusb-10.in +++ /dev/null @@ -1 +0,0 @@ -1405884291 2082194543 diff --git a/examples/aplusb/tests/aplusb-10.ok b/examples/aplusb/tests/aplusb-10.ok deleted file mode 100644 index 275004c..0000000 --- a/examples/aplusb/tests/aplusb-10.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3488078834 diff --git a/examples/aplusb/tests/aplusb-11.in b/examples/aplusb/tests/aplusb-11.in deleted file mode 100644 index 32ce837..0000000 --- a/examples/aplusb/tests/aplusb-11.in +++ /dev/null @@ -1 +0,0 @@ -1405884291 2082194543 diff --git a/examples/aplusb/tests/aplusb-11.ok b/examples/aplusb/tests/aplusb-11.ok deleted file mode 100644 index 275004c..0000000 --- a/examples/aplusb/tests/aplusb-11.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3488078834 diff --git a/examples/aplusb/tests/aplusb-12.in b/examples/aplusb/tests/aplusb-12.in deleted file mode 100644 index 32ce837..0000000 --- a/examples/aplusb/tests/aplusb-12.in +++ /dev/null @@ -1 +0,0 @@ -1405884291 2082194543 diff --git a/examples/aplusb/tests/aplusb-12.ok b/examples/aplusb/tests/aplusb-12.ok deleted file mode 100644 index 275004c..0000000 --- a/examples/aplusb/tests/aplusb-12.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3488078834 diff --git a/examples/aplusb/tests/aplusb-13.in b/examples/aplusb/tests/aplusb-13.in deleted file mode 100644 index 32ce837..0000000 --- a/examples/aplusb/tests/aplusb-13.in +++ /dev/null @@ -1 +0,0 @@ -1405884291 2082194543 diff --git a/examples/aplusb/tests/aplusb-13.ok b/examples/aplusb/tests/aplusb-13.ok deleted file mode 100644 index 275004c..0000000 --- a/examples/aplusb/tests/aplusb-13.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3488078834 diff --git a/examples/aplusb/tests/aplusb-14.in b/examples/aplusb/tests/aplusb-14.in deleted file mode 100644 index 32ce837..0000000 --- a/examples/aplusb/tests/aplusb-14.in +++ /dev/null @@ -1 +0,0 @@ -1405884291 2082194543 diff --git a/examples/aplusb/tests/aplusb-14.ok b/examples/aplusb/tests/aplusb-14.ok deleted file mode 100644 index 275004c..0000000 --- a/examples/aplusb/tests/aplusb-14.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3488078834 diff --git a/examples/aplusb/tests/aplusb-15.in b/examples/aplusb/tests/aplusb-15.in deleted file mode 100644 index 32ce837..0000000 --- a/examples/aplusb/tests/aplusb-15.in +++ /dev/null @@ -1 +0,0 @@ -1405884291 2082194543 diff --git a/examples/aplusb/tests/aplusb-15.ok b/examples/aplusb/tests/aplusb-15.ok deleted file mode 100644 index 275004c..0000000 --- a/examples/aplusb/tests/aplusb-15.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3488078834 diff --git a/examples/aplusb/tests/aplusb-16.in b/examples/aplusb/tests/aplusb-16.in deleted file mode 100644 index 32ce837..0000000 --- a/examples/aplusb/tests/aplusb-16.in +++ /dev/null @@ -1 +0,0 @@ -1405884291 2082194543 diff --git a/examples/aplusb/tests/aplusb-16.ok b/examples/aplusb/tests/aplusb-16.ok deleted file mode 100644 index 275004c..0000000 --- a/examples/aplusb/tests/aplusb-16.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3488078834 diff --git a/examples/aplusb/tests/aplusb-17.in b/examples/aplusb/tests/aplusb-17.in deleted file mode 100644 index 32ce837..0000000 --- a/examples/aplusb/tests/aplusb-17.in +++ /dev/null @@ -1 +0,0 @@ -1405884291 2082194543 diff --git a/examples/aplusb/tests/aplusb-17.ok b/examples/aplusb/tests/aplusb-17.ok deleted file mode 100644 index 275004c..0000000 --- a/examples/aplusb/tests/aplusb-17.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3488078834 diff --git a/examples/aplusb/tests/aplusb-18.in b/examples/aplusb/tests/aplusb-18.in deleted file mode 100644 index ca06237..0000000 --- a/examples/aplusb/tests/aplusb-18.in +++ /dev/null @@ -1 +0,0 @@ -1405901098 217186145 diff --git a/examples/aplusb/tests/aplusb-18.ok b/examples/aplusb/tests/aplusb-18.ok deleted file mode 100644 index 9391515..0000000 --- a/examples/aplusb/tests/aplusb-18.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -1623087243 diff --git a/examples/aplusb/tests/aplusb-19.in b/examples/aplusb/tests/aplusb-19.in deleted file mode 100644 index ca06237..0000000 --- a/examples/aplusb/tests/aplusb-19.in +++ /dev/null @@ -1 +0,0 @@ -1405901098 217186145 diff --git a/examples/aplusb/tests/aplusb-19.ok b/examples/aplusb/tests/aplusb-19.ok deleted file mode 100644 index 9391515..0000000 --- a/examples/aplusb/tests/aplusb-19.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -1623087243 diff --git a/examples/aplusb/tests/aplusb-2.in b/examples/aplusb/tests/aplusb-2.in deleted file mode 100644 index 3cb1cbe..0000000 --- a/examples/aplusb/tests/aplusb-2.in +++ /dev/null @@ -1 +0,0 @@ -1405867484 1799719294 diff --git a/examples/aplusb/tests/aplusb-2.ok b/examples/aplusb/tests/aplusb-2.ok deleted file mode 100644 index 4919a58..0000000 --- a/examples/aplusb/tests/aplusb-2.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3205586778 diff --git a/examples/aplusb/tests/aplusb-3.in b/examples/aplusb/tests/aplusb-3.in deleted file mode 100644 index 3cb1cbe..0000000 --- a/examples/aplusb/tests/aplusb-3.in +++ /dev/null @@ -1 +0,0 @@ -1405867484 1799719294 diff --git a/examples/aplusb/tests/aplusb-3.ok b/examples/aplusb/tests/aplusb-3.ok deleted file mode 100644 index 4919a58..0000000 --- a/examples/aplusb/tests/aplusb-3.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3205586778 diff --git a/examples/aplusb/tests/aplusb-4.in b/examples/aplusb/tests/aplusb-4.in deleted file mode 100644 index 3cb1cbe..0000000 --- a/examples/aplusb/tests/aplusb-4.in +++ /dev/null @@ -1 +0,0 @@ -1405867484 1799719294 diff --git a/examples/aplusb/tests/aplusb-4.ok b/examples/aplusb/tests/aplusb-4.ok deleted file mode 100644 index 4919a58..0000000 --- a/examples/aplusb/tests/aplusb-4.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3205586778 diff --git a/examples/aplusb/tests/aplusb-5.in b/examples/aplusb/tests/aplusb-5.in deleted file mode 100644 index 3cb1cbe..0000000 --- a/examples/aplusb/tests/aplusb-5.in +++ /dev/null @@ -1 +0,0 @@ -1405867484 1799719294 diff --git a/examples/aplusb/tests/aplusb-5.ok b/examples/aplusb/tests/aplusb-5.ok deleted file mode 100644 index 4919a58..0000000 --- a/examples/aplusb/tests/aplusb-5.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3205586778 diff --git a/examples/aplusb/tests/aplusb-6.in b/examples/aplusb/tests/aplusb-6.in deleted file mode 100644 index 3cb1cbe..0000000 --- a/examples/aplusb/tests/aplusb-6.in +++ /dev/null @@ -1 +0,0 @@ -1405867484 1799719294 diff --git a/examples/aplusb/tests/aplusb-6.ok b/examples/aplusb/tests/aplusb-6.ok deleted file mode 100644 index 4919a58..0000000 --- a/examples/aplusb/tests/aplusb-6.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3205586778 diff --git a/examples/aplusb/tests/aplusb-7.in b/examples/aplusb/tests/aplusb-7.in deleted file mode 100644 index 3cb1cbe..0000000 --- a/examples/aplusb/tests/aplusb-7.in +++ /dev/null @@ -1 +0,0 @@ -1405867484 1799719294 diff --git a/examples/aplusb/tests/aplusb-7.ok b/examples/aplusb/tests/aplusb-7.ok deleted file mode 100644 index 4919a58..0000000 --- a/examples/aplusb/tests/aplusb-7.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3205586778 diff --git a/examples/aplusb/tests/aplusb-8.in b/examples/aplusb/tests/aplusb-8.in deleted file mode 100644 index 3cb1cbe..0000000 --- a/examples/aplusb/tests/aplusb-8.in +++ /dev/null @@ -1 +0,0 @@ -1405867484 1799719294 diff --git a/examples/aplusb/tests/aplusb-8.ok b/examples/aplusb/tests/aplusb-8.ok deleted file mode 100644 index 4919a58..0000000 --- a/examples/aplusb/tests/aplusb-8.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3205586778 diff --git a/examples/aplusb/tests/aplusb-9.in b/examples/aplusb/tests/aplusb-9.in deleted file mode 100644 index 3cb1cbe..0000000 --- a/examples/aplusb/tests/aplusb-9.in +++ /dev/null @@ -1 +0,0 @@ -1405867484 1799719294 diff --git a/examples/aplusb/tests/aplusb-9.ok b/examples/aplusb/tests/aplusb-9.ok deleted file mode 100644 index 4919a58..0000000 --- a/examples/aplusb/tests/aplusb-9.ok +++ /dev/null @@ -1,2 +0,0 @@ -5 -3205586778 diff --git a/examples/xxx/eval/makefile b/examples/xxx/eval/makefile deleted file mode 100644 index e69de29..0000000 diff --git a/examples/xxx/incf/makefile b/examples/xxx/incf/makefile deleted file mode 100644 index e69de29..0000000 diff --git a/examples/xxx/ingen/makefile b/examples/xxx/ingen/makefile deleted file mode 100644 index e69de29..0000000 diff --git a/examples/xxx/okgen/makefile b/examples/xxx/okgen/makefile deleted file mode 100644 index e69de29..0000000 diff --git a/examples/xxx/problemconfig b/examples/xxx/problemconfig deleted file mode 100644 index 35b1076..0000000 --- a/examples/xxx/problemconfig +++ /dev/null @@ -1,2 +0,0 @@ -problemname=xxx -timelimit=1 diff --git a/examples/xxx/src/buildtests b/examples/xxx/src/buildtests deleted file mode 100755 index 5c912ce..0000000 --- a/examples/xxx/src/buildtests +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/bash -# -# This builds all tests using testmanifest -# Tamio-Vesa Nakajima - -# include the library -source lib - -# include the configuration -source problemconfig - -############################ -# ARGUMENT PARSING -############################# - -rebuild_inputs=true - -while getopts "r:ho" opt; do - case $opt in - h) - echo "Usage: ./run -r(estore) [revision to restore]" - exit 0 - ;; - r) - rm -r tests - unzip oldtests/$OPTARG.zip - exit 0 - ;; - o) - rebuild_inputs=false - ;; - esac -done - -read -p "Name of this test revision: " testrevision - -# We will want to remember this: -currtest=0 - -# Loop over lines of -cat testmanifest | while read instr; do - # Parse a line of testmanifest - set $instr - numberoftests=$1 - incf=$2 - totalpoints=$3 - points=$(($totalpoints / $numberoftests)) - - for nr in `seq $currtest $(($currtest + $numberoftests - 1))` ; do - echo $nr - ################# - # Build input: - ################# - - if [ $rebuild_inputs = true ] ; then - ./lib/build_test_number $nr $incf - fi - - ################### - # Build ok - ################### - - # Build ok generator - cd okgen && make -s && cd .. - - # Copy ok generator and input into stage - cp okgen/okgen.bin stage/$problemname.bin - cp tests/$problemname-$nr.in stage/$problemname.in - - # Indicate the number of points in the stage - echo $points > stage/$problemname.points - - # Build ok - cd stage && ./$problemname.bin && cd .. - - # Copy ok from stage into tests - cp stage/$problemname.ok tests/$problemname-$nr.ok - - # Clean stage - rm stage/* - done - - #update currtest - currtest=$(($currtest + $numberoftests)) -done - -if [ -n $testrevision ] ; then - zip -r oldtests/$testrevision.zip tests/* -fi diff --git a/examples/xxx/src/compare b/examples/xxx/src/compare deleted file mode 100755 index 6a81689..0000000 --- a/examples/xxx/src/compare +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/bash -# -# compare -s "s1 s2" -s s3 -c "c1 c2" -c c3 compares sources s1, s2, s3 with configurations c1 c2 c3 until they diverge -# Tamio-Vesa Nakajima - -source lib -source problemconfig - -srcs="" -configs="" - -while getopts "hs:c:" opt ; do - case $opt in - h) - echo "Usage: ./compare -s \"source1\" -s \"source2\" -c \"config1\" \"config2\"" - exit 0 - ;; - s) - srcs="$srcs $OPTARG" - ;; - c) - configs="$configs $OPTARG" - ;; - esac -done - -if [ -z "$srcs" ] ; then - echo No sources provided - exit 1 -fi - -if [ -z "$configs" ] ; then - echo No configs provided - exit 1 -fi - -srcs_arr=($srcs) -nr_srcs=${#srcs_arr[@]} -outputs_arr=() -binary_arr=() -input_file=`mktemp` - -for i in `seq 0 $(($nr_srcs-1))` ; do - outputs_arr[$i]=`mktemp` - binary_arr[$i]=`mktemp` -done - -for i in `seq 0 $(($nr_srcs-1))` ; do - g++ src/${srcs_arr[$i]} -std=c++11 -O2 -o ${binary_arr[$i]} -done - -curr_test=0 - -path_to_tests=`realpath tests` -trap "rm $path_to_tests/$problemname-999.in" EXIT - -while : ; do - for conf in $configs ; do - rm stage/* 2> /dev/null - echo -en " \r" - echo Doing test $curr_test - curr_test=$(($curr_test + 1)) - - build_test_number 999 $conf - - hasTle=false - - for i in `seq 0 $(($nr_srcs-1))` ; do - run_src_test ${binary_arr[$i]} $problemname-999 - - if (( $(echo "$timeUsed > $timelimit" | bc -l ) )) ; then - hasTle=true - fi - - cp stage/$problemname.out ${outputs_arr[$i]} - done - if [ $hasTle = true ] || ! diff --from-file ${outputs_arr[*]} > /dev/null ; then - echo -en " \r" - echo Has failed on: - cat tests/$problemname-999.in - echo With outputs: - for i in `seq 0 $(($nr_srcs-1))` ; do - echo ${srcs_arr[$i]}: - cat ${outputs_arr[$i]} - echo - done - exit 0 - fi - done -done diff --git a/examples/xxx/src/lib/build_test_number b/examples/xxx/src/lib/build_test_number deleted file mode 100755 index efd7bfa..0000000 --- a/examples/xxx/src/lib/build_test_number +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -# -# Tamio-Vesa Nakajima -# Builds test number $1 with incf $2 -build_test_number () { - source problemconfig - - nr=$1 - incf=$2 - - # Build input generator - cd ingen && make -s && cd .. - - # Copy ingen/ingen.bin and incf/$1 into stage - cp ingen/ingen.bin stage/$problemname.bin - cp incf/$incf stage/$problemname.cf - - # Build input - cd stage && ./$problemname.bin && cp $problemname.in ../tests/$problemname-$nr.in && cd .. - - # Clean stage - rm stage/* 2> /dev/null - -} - - diff --git a/examples/xxx/src/lib/evaluate_src_test b/examples/xxx/src/lib/evaluate_src_test deleted file mode 100755 index fbf4038..0000000 --- a/examples/xxx/src/lib/evaluate_src_test +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -# -# Tamio-Vesa Nakajima - -# Evaluates the binary $1 with test $2, returning the message in $message, the time used in $timeUsed and the points in $points -evaluate_src_test () { - binary=$1 - testname=$2 - - ./lib/run_src_test $binary $testname - if (( $(echo "$timeUsed > $timelimit" | bc -l))) ; then - # Set the return values - # timeUsed is already set - message=TLE - points=0 - else - # Make the evaluator - cd eval && make -s && cd .. - - # Copy the evaluator into the stage - cp eval/eval.bin stage/eval.bin - - # Copy the ok file into the stage - cp tests/$testname.ok stage/$problemname.ok - - # Create temporary files to hold the points and the eval message - pointsFile=`mktemp` - messageFile=`mktemp` - - # Enter the stage and evaluate, storing the results in $pointsFile and $messageFile - cd stage && ./eval.bin > $pointsFile 2> $messageFile && cd .. - - # Set the return values - # timeUsed is already set - points=`cat $pointsFile` - message=`cat $messageFile` - fi -} diff --git a/examples/xxx/src/lib/run_src_test b/examples/xxx/src/lib/run_src_test deleted file mode 100755 index 488cf7f..0000000 --- a/examples/xxx/src/lib/run_src_test +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -# -# Run the binary $1 with test $2, returning the time used in timeUsed, and leaving the output file in stage/$problemname.out -run_src_test () { - binary=$1 - testname=$2 - - # Get an appropriate timeout command - timeoutCommand=timeout - - if [[ "$OSTYPE" == "darwin"* ]] ; then - timeoutCommand=gtimeout - fi - - # Fetch the problem configuration - source problemconfig - - # clear any previous messages - echo -en "\r \r" - - # Output an appropriate messgae - echo -en "Doing $testname\r" - - # Clean the stage - rm stage/* 2> /dev/null - - # Copy the binary into the stage - cp $binary stage/$problemname.bin - - # Copy the input into the stage - cp tests/$testname.in stage/$problemname.in - - # Get the problem config - source problemconfig - - # This string runs the competitor's executable - runExec="./$problemname.bin > /dev/null 2> /dev/null" - - # This string runs the competitors executable with an appropriate timeout - runExecWithTimeout="$timeoutCommand $timelimit $runExec" - - # Run the competitors executable with a timeout, and store the time used in timeUsed - timeUsed=$(cd stage && { time $runExecWithTimeout ; } 2>&1 >/dev/null \ - | tail -3 \ - | head -1 \ - | awk -F ' ' '{print $2}' \ - | awk -F 'm' '{print $2}' \ - | awk -F 's' '{print $1}' && cd ..) -} - - diff --git a/examples/xxx/src/makefile b/examples/xxx/src/makefile deleted file mode 100644 index e69de29..0000000 diff --git a/examples/xxx/src/run b/examples/xxx/src/run deleted file mode 100755 index 3e9943e..0000000 --- a/examples/xxx/src/run +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/bash -# -# Runs sources on tests -# Tamio-Vesa Nakajima -# -# Use cases: -# ./run.sh -> runs all sources on all tests -# ./run.sh -s "a.cpp b.cpp" -s c.cpp -> runs a,b,c.cpp on all tests -# ./run.sh -t "00 01 02" -> runs all sources on tests 00, 01, 02 -# ./run.sh -s a.cpp -t 00 -> runs a.cpp on 00 - -########################## -# GENERAL SETUP -######################### - -# include the library -source lib - -# include the configuration -source problemconfig - -# make stage (as git deletes it) -mkdir -p stage - -############################ -# ARGUMENT PARSING -############################# - -# default values for used sources and used tests - -srcs="" -tests="" - -while getopts "hs:t:" opt; do - case $opt in - h) - echo "Usage: ./run -s [source] -t [test]" - exit 0 - ;; - s) - for x in $OPTARG ; do - srcs="$srcs $x" - done - ;; - t) - for x in $OPTARG ; do - tests="$tests $problemname-$x" - done - ;; - esac -done - -if [ -z "$srcs" ] ; then - srcs=`ls -1 src | grep .cpp` -fi - -if [ -z "$tests" ] ; then - tests=`ls -1 tests | grep .in | awk -F '.' '{print $1}'` -fi - -tests=`echo $tests | sort -t '-' -k 1 -n` - - -########################### -# EVALUATING -########################## - -for src in $srcs ; do - # Copy the source into the stage - cp src/$src stage/$problemname.cpp - - # Create a temporary file to hold the problem binary - binary=`mktemp` - - # Build the source - g++ stage/$problemname.cpp -std=c++11 -o $binary -O2 - - # Make a temporary file to hold the table: - table=`mktemp` - - # $table holds the score table - echo $src > $table - echo Test Message Time Points >> $table - - # For all tests - for testname in $tests ; do - # evaluate $binary on $testname, setting $message, $timeUsed, $points - ./lib/evaluate_src_test $binary $testname - echo $testname.in $message $timeUsed $points >> $table - done - - # Clear "Doing test ..." - echo -en "\r \r" - - # Output the table - column -t $table - - # Calculate the score - echo SCORE: `awk -F ' ' '$1 != "Test" {sum += 0 $4} END {print sum}' $table` - - # Clear the temporary files - rm $table - rm $binary - - # And the stage - rm stage/* -done diff --git a/examples/xxx/src/todo b/examples/xxx/src/todo deleted file mode 100644 index 8f8b63e..0000000 --- a/examples/xxx/src/todo +++ /dev/null @@ -1,9 +0,0 @@ -TODO: - -- make an evaluator (should read from $problemname.out and $problemname.ok, write the evaluation message to stderr and the # of points to cout -- make an input generator (should read configuration from $problemname.cf and write the input to $problemname.in) -- make an ok generator (should read the # of points from $problemname.points, the input from $problemname.in, and write to ok to $problemname.ok) -- make a testmanifest (each line should contain a group of tests, described by the # of tests, the configuration file, and the # of points for that group) -- call ./buildtests.sh -- add source files to src -- call ./run.sh diff --git a/examples/xxx/testmanifest b/examples/xxx/testmanifest deleted file mode 100644 index e69de29..0000000 diff --git a/src/buildtests b/src/buildtests index e91383f..1287e8d 100755 --- a/src/buildtests +++ b/src/buildtests @@ -45,7 +45,9 @@ rebuild_inputs=true while getopts "r:ho" opt; do case $opt in h) # Help: - echo "Usage: ./run -r(estore) [revision to restore]" + echo "Usage: ./run [-r REVISION] [-o]" + echo " -r REVISION -- restores REVISION" + echo " -o -- rebuilds only the .ok files" exit 0 ;; r) # Restore old revision diff --git a/src/compare b/src/compare index 3e02187..d6d0498 100755 --- a/src/compare +++ b/src/compare @@ -1,6 +1,6 @@ #!/bin/bash # -# compare -s "s1 s2" -s s3 -c "c1 c2" -c c3 compares sources s1, s2, s3 with configurations c1 c2 c3 until they diverge +# compares sources # Tamio-Vesa Nakajima problemname="" @@ -20,7 +20,9 @@ configs="" while getopts "hs:c:" opt ; do case $opt in h) - echo "Usage: ./compare -s \"source1\" -s \"source2\" -c \"config1\" \"config2\"" >&2 + echo "Usage: ./compare -s SRC1 ... -s SRCn -c CONF1 ... -c CONFm" + echo " -s SRC1 ... -s SRCn -- compares SRC1 to ... to SRCn" + echo " -c CONF1 ... -s CONm -- using config files CONF1 ... CONFm" exit 0 ;; s) diff --git a/src/run b/src/run index 74cf583..3562e21 100755 --- a/src/run +++ b/src/run @@ -2,13 +2,6 @@ # # Runs sources on tests # Tamio-Vesa Nakajima -# -# Use cases: -# ./run -> runs all sources on all tests -# ./run -s "a.cpp b.cpp" -s c.cpp -> runs a,b,c.cpp on all tests -# ./run -t "00 01 02" -> runs all sources on tests 00, 01, 02 -# ./run -s a.cpp -t 00 -> runs a.cpp on 00 -# ./run -n ---- same as above, but without paralelism ################################# # Build necesisties @@ -57,7 +50,10 @@ tests=() while getopts "hs:t:p" opt; do case $opt in h) - echo "Usage: ./run -s [source] -t [test] -p [[if parallelism is desired]]" >&2 + echo "Usage: ./run [-s SRC1] ... [-s SRCn] [-t TEST1] ... [-t TESTm] [-p]" + echo " -s SRC1 ... -s SRCn -- run SRC1 ... SRCn ; if no -s is included, run all sources" + echo " -t TEST1 ... -t TESTm -- run on TEST1 ... TESTm ; if no -t is included, run on all tests" + echo " -p -- run all sources in parallel" exit 0 ;; s)