Artifact
a97fe239e556269f1633ade85dd692fd3f3a6909be483a8fed562b232720f30d :
Executable file
ptest
— part of check-in
[9a0559829b]
at
2021-12-23 03:09:17
on branch archive
— add final 1.x version of ptest
(user:
theo
size: 1473)
0000: 23 21 2f 62 69 6e 2f 73 68 0a 44 4f 43 55 4d 45 #!/bin/sh.DOCUME
0010: 4e 54 41 54 49 4f 4e 3d 24 28 63 61 74 20 3c 3c NTATION=$(cat <<
0020: 45 4e 44 5f 4f 46 5f 44 4f 43 55 4d 45 4e 54 41 END_OF_DOCUMENTA
0030: 54 49 4f 4e 0a 70 74 65 73 74 20 31 2e 32 0a 0a TION.ptest 1.2..
0040: 41 20 73 68 65 6c 6c 20 73 63 72 69 70 74 20 74 A shell script t
0050: 6f 20 6c 6f 63 61 6c 6c 79 20 74 65 73 74 20 73 o locally test s
0060: 6f 6c 75 74 69 6f 6e 73 20 74 6f 20 63 6f 6d 70 olutions to comp
0070: 65 74 69 74 69 76 65 20 70 72 6f 67 72 61 6d 6d etitive programm
0080: 69 6e 67 0a 70 72 6f 62 6c 65 6d 73 2e 0a 0a 55 ing.problems...U
0090: 53 41 47 45 3a 20 70 74 65 73 74 20 5b 4f 50 54 SAGE: ptest [OPT
00a0: 49 4f 4e 53 5d 20 50 52 4f 47 52 41 4d 0a 0a 57 IONS] PROGRAM..W
00b0: 68 65 72 65 20 74 68 65 20 4f 50 54 49 4f 4e 53 here the OPTIONS
00c0: 20 61 72 65 3a 0a 20 20 2d 2d 68 65 6c 70 0a 20 are:. --help.
00d0: 20 20 20 4f 75 74 70 75 74 73 20 74 68 69 73 20 Outputs this
00e0: 6d 61 6e 75 61 6c 2d 73 74 79 6c 65 20 68 65 6c manual-style hel
00f0: 70 20 6d 65 73 73 61 67 65 20 61 6e 64 20 69 6d p message and im
0100: 6d 65 64 69 61 74 65 6c 79 20 65 78 69 74 73 2e mediately exits.
0110: 0a 0a 20 20 2d 2d 76 65 72 73 69 6f 6e 0a 20 20 .. --version.
0120: 20 20 4f 75 74 70 75 74 73 20 74 68 65 20 73 63 Outputs the sc
0130: 72 69 70 74 20 6e 61 6d 65 20 61 6c 6f 6e 67 20 ript name along
0140: 77 69 74 68 20 69 74 73 20 76 65 72 73 69 6f 6e with its version
0150: 20 6e 75 6d 62 65 72 2e 0a 0a 57 68 65 72 65 20 number...Where
0160: 50 52 4f 47 52 41 4d 20 69 73 20 74 68 65 20 70 PROGRAM is the p
0170: 72 6f 67 72 61 6d 20 74 68 61 74 20 73 68 6f 75 rogram that shou
0180: 6c 64 20 62 65 20 72 75 6e 2e 20 20 54 68 69 73 ld be run. This
0190: 20 73 63 72 69 70 74 73 20 65 78 70 65 63 74 73 scripts expects
01a0: 0a 61 20 73 68 65 62 61 6e 67 20 6f 6e 20 74 68 .a shebang on th
01b0: 65 20 66 69 72 73 74 20 6c 69 6e 65 20 6f 66 20 e first line of
01c0: 74 68 65 20 73 63 72 69 70 74 2e 0a 0a 53 50 44 the script...SPD
01d0: 58 2d 46 69 6c 65 43 6f 70 79 72 69 67 68 74 54 X-FileCopyrightT
01e0: 65 78 74 3a 20 43 6f 70 79 72 69 67 68 74 20 28 ext: Copyright (
01f0: 63 29 20 32 30 32 31 2c 20 54 68 65 6f 64 6f 72 c) 2021, Theodor
0200: 65 20 50 72 65 64 75 74 61 2e 0a 53 50 44 58 2d e Preduta..SPDX-
0210: 4c 69 63 65 6e 73 65 2d 49 64 65 6e 74 69 66 69 License-Identifi
0220: 65 72 3a 20 42 53 44 2d 32 2d 43 6c 61 75 73 65 er: BSD-2-Clause
0230: 0a 45 4e 44 5f 4f 46 5f 44 4f 43 55 4d 45 4e 54 .END_OF_DOCUMENT
0240: 41 54 49 4f 4e 0a 29 0a 0a 73 65 74 20 2d 65 0a ATION.)..set -e.
0250: 0a 75 73 61 67 65 28 29 20 7b 0a 20 20 5b 20 2d .usage() {. [ -
0260: 6e 20 22 24 31 22 20 5d 20 26 26 20 65 63 68 6f n "$1" ] && echo
0270: 20 22 24 31 22 20 26 26 20 65 63 68 6f 0a 0a 20 "$1" && echo..
0280: 20 65 63 68 6f 20 22 55 73 61 67 65 3a 20 70 74 echo "Usage: pt
0290: 65 73 74 20 5b 4f 50 54 49 4f 4e 53 5d 20 50 52 est [OPTIONS] PR
02a0: 4f 47 52 41 4d 22 0a 20 20 65 63 68 6f 20 22 54 OGRAM". echo "T
02b0: 72 79 20 72 75 6e 6e 69 6e 67 20 77 69 74 68 20 ry running with
02c0: 2d 2d 68 65 6c 70 20 66 6f 72 20 6d 6f 72 65 20 --help for more
02d0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 22 0a 0a 20 information."..
02e0: 20 65 78 69 74 20 31 0a 7d 0a 0a 77 68 69 6c 65 exit 1.}..while
02f0: 20 5b 20 21 20 22 24 2a 22 20 3d 20 22 22 20 5d [ ! "$*" = "" ]
0300: 3b 20 64 6f 0a 20 20 63 61 73 65 20 22 24 31 22 ; do. case "$1"
0310: 20 69 6e 0a 20 20 20 20 2d 2d 68 65 6c 70 29 0a in. --help).
0320: 20 20 20 20 20 20 65 63 68 6f 20 22 24 44 4f 43 echo "$DOC
0330: 55 4d 45 4e 54 41 54 49 4f 4e 22 0a 20 20 20 20 UMENTATION".
0340: 20 20 65 78 69 74 20 30 3b 3b 0a 20 20 20 20 2d exit 0;;. -
0350: 2d 76 65 72 73 69 6f 6e 29 0a 20 20 20 20 20 20 -version).
0360: 65 63 68 6f 20 22 24 44 4f 43 55 4d 45 4e 54 41 echo "$DOCUMENTA
0370: 54 49 4f 4e 22 20 7c 20 68 65 61 64 20 2d 6e 20 TION" | head -n
0380: 31 0a 20 20 20 20 20 20 65 78 69 74 20 30 3b 3b 1. exit 0;;
0390: 0a 20 20 20 20 2a 29 0a 20 20 20 20 20 20 74 61 . *). ta
03a0: 72 67 65 74 3d 22 24 31 22 0a 20 20 20 20 20 20 rget="$1".
03b0: 73 68 69 66 74 20 31 3b 3b 0a 20 20 65 73 61 63 shift 1;;. esac
03c0: 0a 64 6f 6e 65 0a 0a 52 45 44 3d 27 5c 30 33 33 .done..RED='\033
03d0: 5b 30 3b 33 31 6d 27 0a 47 52 45 45 4e 3d 27 5c [0;31m'.GREEN='\
03e0: 30 33 33 5b 30 3b 33 32 6d 27 0a 4e 43 3d 27 5c 033[0;32m'.NC='\
03f0: 30 33 33 5b 30 6d 27 0a 0a 74 61 72 67 65 74 5f 033[0m'..target_
0400: 69 6e 74 65 72 70 72 65 74 65 72 3d 24 28 73 65 interpreter=$(se
0410: 64 20 2d 6e 20 27 31 73 2f 5e 23 21 2f 2f 70 27 d -n '1s/^#!//p'
0420: 20 22 24 74 61 72 67 65 74 22 29 0a 0a 74 6f 74 "$target")..tot
0430: 61 6c 5f 70 61 73 73 3d 30 0a 74 6f 74 61 6c 5f al_pass=0.total_
0440: 66 61 69 6c 3d 30 0a 0a 66 6f 72 20 66 20 69 6e fail=0..for f in
0450: 20 24 28 66 69 6e 64 20 22 64 61 74 61 22 20 2d $(find "data" -
0460: 74 79 70 65 20 66 20 2d 6e 61 6d 65 20 5c 2a 2e type f -name \*.
0470: 69 6e 20 7c 20 63 75 74 20 2d 66 20 31 20 2d 64 in | cut -f 1 -d
0480: 20 27 2e 27 29 3b 20 64 6f 0a 20 20 70 72 69 6e '.'); do. prin
0490: 74 66 20 22 25 73 2e 2e 2e 22 20 22 24 66 22 0a tf "%s..." "$f".
04a0: 20 20 0a 20 20 69 66 20 24 74 61 72 67 65 74 5f . if $target_
04b0: 69 6e 74 65 72 70 72 65 74 65 72 20 22 24 74 61 interpreter "$ta
04c0: 72 67 65 74 22 20 3c 20 22 24 66 2e 69 6e 22 20 rget" < "$f.in"
04d0: 7c 20 63 6d 70 20 2d 73 20 2d 20 22 24 66 2e 6f | cmp -s - "$f.o
04e0: 75 74 22 3b 20 74 68 65 6e 0a 20 20 20 20 70 72 ut"; then. pr
04f0: 69 6e 74 66 20 22 24 7b 47 52 45 45 4e 7d 50 41 intf "${GREEN}PA
0500: 53 53 24 7b 4e 43 7d 5c 6e 22 0a 20 20 20 20 74 SS${NC}\n". t
0510: 6f 74 61 6c 5f 70 61 73 73 3d 24 28 28 20 74 6f otal_pass=$(( to
0520: 74 61 6c 5f 70 61 73 73 20 2b 20 31 20 29 29 0a tal_pass + 1 )).
0530: 20 20 65 6c 73 65 0a 20 20 20 20 70 72 69 6e 74 else. print
0540: 66 20 22 24 7b 52 45 44 7d 46 41 49 4c 24 7b 4e f "${RED}FAIL${N
0550: 43 7d 5c 6e 22 0a 20 20 20 20 74 6f 74 61 6c 5f C}\n". total_
0560: 66 61 69 6c 3d 24 28 28 20 74 6f 74 61 6c 5f 66 fail=$(( total_f
0570: 61 69 6c 20 2b 20 31 20 29 29 0a 20 20 66 69 0a ail + 1 )). fi.
0580: 64 6f 6e 65 0a 0a 65 63 68 6f 0a 65 63 68 6f 20 done..echo.echo
0590: 22 50 61 73 73 65 64 3a 20 24 74 6f 74 61 6c 5f "Passed: $total_
05a0: 70 61 73 73 22 0a 65 63 68 6f 20 22 46 61 69 6c pass".echo "Fail
05b0: 65 64 3a 20 24 74 6f 74 61 6c 5f 66 61 69 6c 22 ed: $total_fail"
05c0: 0a .