PTest

Hex Artifact Content

Artifact a97fe239e556269f1633ade85dd692fd3f3a6909be483a8fed562b232720f30d:


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                                               .