PTest

Hex Artifact Content

Artifact 8ebf5b3ba420535060505e0f6236303c2694e9172577fe86b13fd69d87729af4:


0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0050: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .#              
0060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0070: 47 65 6e 65 72 61 6c 20 56 61 72 69 61 62 6c 65  General Variable
0080: 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s               
0090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00a0: 23 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  #.##############
00b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 0a 42 41 53 45 5f 4e 41 4d 45 20 3a 3d 20  ##.BASE_NAME := 
0100: 4d 61 69 6e 0a 0a 43 41 53 45 53 5f 49 4e 50 55  Main..CASES_INPU
0110: 54 20 3a 3d 20 24 28 73 6f 72 74 20 24 28 77 69  T := $(sort $(wi
0120: 6c 64 63 61 72 64 20 2a 2e 69 6e 29 29 0a 43 41  ldcard *.in)).CA
0130: 53 45 53 5f 4f 55 54 50 55 54 20 3a 3d 20 24 28  SES_OUTPUT := $(
0140: 73 6f 72 74 20 24 28 77 69 6c 64 63 61 72 64 20  sort $(wildcard 
0150: 2a 2e 6f 75 74 29 29 0a 54 45 53 54 53 20 3a 3d  *.out)).TESTS :=
0160: 20 24 28 66 69 6c 74 65 72 20 24 28 62 61 73 65   $(filter $(base
0170: 6e 61 6d 65 20 24 28 43 41 53 45 53 5f 49 4e 50  name $(CASES_INP
0180: 55 54 29 29 2c 24 28 62 61 73 65 6e 61 6d 65 20  UT)),$(basename 
0190: 24 28 43 41 53 45 53 5f 4f 55 54 50 55 54 29 29  $(CASES_OUTPUT))
01a0: 29 0a 0a 53 48 45 4c 4c 20 3a 3d 20 2f 62 69 6e  )..SHELL := /bin
01b0: 2f 73 68 0a 0a 4c 49 4d 49 54 45 52 20 3f 3d 20  /sh..LIMITER ?= 
01c0: 74 69 6d 65 6f 75 74 0a 4c 49 4d 49 54 45 52 5f  timeout.LIMITER_
01d0: 46 4c 41 47 53 20 3f 3d 20 2d 2d 70 72 65 73 65  FLAGS ?= --prese
01e0: 72 76 65 2d 73 74 61 74 75 73 20 2d 73 20 53 49  rve-status -s SI
01f0: 47 4b 49 4c 4c 20 31 30 73 0a 0a 65 78 70 6f 72  GKILL 10s..expor
0200: 74 20 54 49 4d 45 3d 72 65 61 6c 20 25 65 73 5c  t TIME=real %es\
0210: 6e 75 73 65 72 20 25 55 73 5c 6e 73 79 73 20 20  nuser %Us\nsys  
0220: 25 53 73 5c 6e 6d 65 6d 20 20 25 4d 4b 42 0a 0a  %Ss\nmem  %MKB..
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .#              
0290: 20 20 20 20 20 20 20 20 20 43 6f 6d 70 69 6c 61           Compila
02a0: 74 69 6f 6e 2f 45 78 65 63 75 74 69 6f 6e 20 56  tion/Execution V
02b0: 61 72 69 61 62 6c 65 73 20 20 20 20 20 20 20 20  ariables        
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02d0: 23 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  #.##############
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0a 43 43 20 3f 3d 20 67 63 63 0a 43 43 5f  ##.CC ?= gcc.CC_
0330: 46 4c 41 47 53 20 3f 3d 20 2d 57 61 6c 6c 20 2d  FLAGS ?= -Wall -
0340: 57 65 78 74 72 61 20 2d 70 65 64 61 6e 74 69 63  Wextra -pedantic
0350: 20 2d 57 73 68 61 64 6f 77 20 2d 57 66 6f 72 6d   -Wshadow -Wform
0360: 61 74 3d 32 20 2d 57 66 6c 6f 61 74 2d 65 71 75  at=2 -Wfloat-equ
0370: 61 6c 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  al \.           
0380: 20 2d 57 63 6f 6e 76 65 72 73 69 6f 6e 20 2d 57   -Wconversion -W
0390: 6c 6f 67 69 63 61 6c 2d 6f 70 20 2d 57 73 68 69  logical-op -Wshi
03a0: 66 74 2d 6f 76 65 72 66 6c 6f 77 3d 32 20 2d 57  ft-overflow=2 -W
03b0: 64 75 70 6c 69 63 61 74 65 64 2d 63 6f 6e 64 20  duplicated-cond 
03c0: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 57  \.            -W
03d0: 63 61 73 74 2d 71 75 61 6c 20 2d 57 63 61 73 74  cast-qual -Wcast
03e0: 2d 61 6c 69 67 6e 20 2d 57 6e 6f 2d 75 6e 75 73  -align -Wno-unus
03f0: 65 64 2d 72 65 73 75 6c 74 20 2d 57 6e 6f 2d 73  ed-result -Wno-s
0400: 69 67 6e 2d 63 6f 6e 76 65 72 73 69 6f 6e 0a 0a  ign-conversion..
0410: 43 58 58 20 3f 3d 20 67 2b 2b 0a 43 58 58 5f 46  CXX ?= g++.CXX_F
0420: 4c 41 47 53 20 3f 3d 20 2d 57 61 6c 6c 20 2d 57  LAGS ?= -Wall -W
0430: 65 78 74 72 61 20 2d 70 65 64 61 6e 74 69 63 20  extra -pedantic 
0440: 2d 57 73 68 61 64 6f 77 20 2d 57 66 6f 72 6d 61  -Wshadow -Wforma
0450: 74 3d 32 20 2d 57 66 6c 6f 61 74 2d 65 71 75 61  t=2 -Wfloat-equa
0460: 6c 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  l \.            
0470: 20 2d 57 63 6f 6e 76 65 72 73 69 6f 6e 20 2d 57   -Wconversion -W
0480: 6c 6f 67 69 63 61 6c 2d 6f 70 20 2d 57 73 68 69  logical-op -Wshi
0490: 66 74 2d 6f 76 65 72 66 6c 6f 77 3d 32 20 2d 57  ft-overflow=2 -W
04a0: 64 75 70 6c 69 63 61 74 65 64 2d 63 6f 6e 64 20  duplicated-cond 
04b0: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2d  \.             -
04c0: 57 63 61 73 74 2d 71 75 61 6c 20 2d 57 63 61 73  Wcast-qual -Wcas
04d0: 74 2d 61 6c 69 67 6e 20 2d 57 6e 6f 2d 75 6e 75  t-align -Wno-unu
04e0: 73 65 64 2d 72 65 73 75 6c 74 20 2d 57 6e 6f 2d  sed-result -Wno-
04f0: 73 69 67 6e 2d 63 6f 6e 76 65 72 73 69 6f 6e 0a  sign-conversion.
0500: 0a 4a 43 20 3f 3d 20 6a 61 76 61 63 0a 4a 43 5f  .JC ?= javac.JC_
0510: 46 4c 41 47 53 20 3f 3d 20 2d 67 0a 4a 41 56 41  FLAGS ?= -g.JAVA
0520: 20 3f 3d 20 6a 61 76 61 0a 4a 41 56 41 5f 46 4c   ?= java.JAVA_FL
0530: 41 47 53 20 3f 3d 0a 0a 50 59 54 48 4f 4e 20 3f  AGS ?=..PYTHON ?
0540: 3d 20 70 79 74 68 6f 6e 33 0a 50 59 54 48 4f 4e  = python3.PYTHON
0550: 5f 46 4c 41 47 53 20 3f 3d 0a 0a 52 55 42 59 20  _FLAGS ?=..RUBY 
0560: 3f 3d 20 72 75 62 79 0a 52 55 42 59 5f 46 4c 41  ?= ruby.RUBY_FLA
0570: 47 53 20 3f 3d 0a 0a 23 23 23 23 23 23 23 23 23  GS ?=..#########
0580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
05a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
05b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
05c0: 23 23 23 23 23 23 23 0a 23 20 20 20 20 20 20 20  #######.#       
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05e0: 20 20 20 20 20 20 20 20 20 46 69 6c 65 20 56 61           File Va
05f0: 72 69 61 62 6c 65 73 20 20 20 20 20 20 20 20 20  riables         
0600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0610: 20 20 20 20 20 20 20 23 0a 23 23 23 23 23 23 23         #.#######
0620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0660: 23 23 23 23 23 23 23 23 23 0a 43 4f 4d 50 49 4c  #########.COMPIL
0670: 45 44 5f 53 52 43 53 20 3a 3d 0a 43 4f 4d 50 49  ED_SRCS :=.COMPI
0680: 4c 45 44 5f 4f 42 4a 53 20 3a 3d 0a 49 4e 54 45  LED_OBJS :=.INTE
0690: 52 50 52 45 54 45 44 5f 53 52 43 53 20 3a 3d 0a  RPRETED_SRCS :=.
06a0: 52 45 53 55 4c 54 53 20 3a 3d 0a 0a 69 66 6e 65  RESULTS :=..ifne
06b0: 71 20 28 2c 24 28 77 69 6c 64 63 61 72 64 20 2e  q (,$(wildcard .
06c0: 2f 24 28 42 41 53 45 5f 4e 41 4d 45 29 2e 63 29  /$(BASE_NAME).c)
06d0: 29 0a 09 43 4f 4d 50 49 4c 45 44 5f 53 52 43 53  )..COMPILED_SRCS
06e0: 20 2b 3d 20 24 28 42 41 53 45 5f 4e 41 4d 45 29   += $(BASE_NAME)
06f0: 2e 63 0a 09 43 4f 4d 50 49 4c 45 44 5f 4f 42 4a  .c..COMPILED_OBJ
0700: 53 20 2b 3d 20 24 28 42 41 53 45 5f 4e 41 4d 45  S += $(BASE_NAME
0710: 29 2e 63 2e 65 78 65 0a 09 52 45 53 55 4c 54 53  ).c.exe..RESULTS
0720: 20 2b 3d 20 24 28 61 64 64 73 75 66 66 69 78 20   += $(addsuffix 
0730: 2e 24 28 42 41 53 45 5f 4e 41 4d 45 29 2e 63 2e  .$(BASE_NAME).c.
0740: 65 78 65 2e 72 65 73 2c 24 28 54 45 53 54 53 29  exe.res,$(TESTS)
0750: 29 0a 65 6e 64 69 66 0a 0a 69 66 6e 65 71 20 28  ).endif..ifneq (
0760: 2c 24 28 77 69 6c 64 63 61 72 64 20 2e 2f 24 28  ,$(wildcard ./$(
0770: 42 41 53 45 5f 4e 41 4d 45 29 2e 63 70 70 29 29  BASE_NAME).cpp))
0780: 0a 09 43 4f 4d 50 49 4c 45 44 5f 53 52 43 53 20  ..COMPILED_SRCS 
0790: 2b 3d 20 24 28 42 41 53 45 5f 4e 41 4d 45 29 2e  += $(BASE_NAME).
07a0: 63 70 70 0a 09 43 4f 4d 50 49 4c 45 44 5f 4f 42  cpp..COMPILED_OB
07b0: 4a 53 20 2b 3d 20 24 28 42 41 53 45 5f 4e 41 4d  JS += $(BASE_NAM
07c0: 45 29 2e 63 70 70 2e 65 78 65 0a 09 52 45 53 55  E).cpp.exe..RESU
07d0: 4c 54 53 20 2b 3d 20 24 28 61 64 64 73 75 66 66  LTS += $(addsuff
07e0: 69 78 20 2e 24 28 42 41 53 45 5f 4e 41 4d 45 29  ix .$(BASE_NAME)
07f0: 2e 63 70 70 2e 65 78 65 2e 72 65 73 2c 24 28 54  .cpp.exe.res,$(T
0800: 45 53 54 53 29 29 0a 65 6e 64 69 66 0a 0a 69 66  ESTS)).endif..if
0810: 6e 65 71 20 28 2c 24 28 77 69 6c 64 63 61 72 64  neq (,$(wildcard
0820: 20 2e 2f 24 28 42 41 53 45 5f 4e 41 4d 45 29 2e   ./$(BASE_NAME).
0830: 6a 61 76 61 29 29 0a 09 43 4f 4d 50 49 4c 45 44  java))..COMPILED
0840: 5f 53 52 43 53 20 2b 3d 20 24 28 42 41 53 45 5f  _SRCS += $(BASE_
0850: 4e 41 4d 45 29 2e 6a 61 76 61 0a 09 43 4f 4d 50  NAME).java..COMP
0860: 49 4c 45 44 5f 4f 42 4a 53 20 2b 3d 20 24 28 42  ILED_OBJS += $(B
0870: 41 53 45 5f 4e 41 4d 45 29 2e 63 6c 61 73 73 0a  ASE_NAME).class.
0880: 09 52 45 53 55 4c 54 53 20 2b 3d 20 24 28 61 64  .RESULTS += $(ad
0890: 64 73 75 66 66 69 78 20 2e 24 28 42 41 53 45 5f  dsuffix .$(BASE_
08a0: 4e 41 4d 45 29 2e 63 6c 61 73 73 2e 72 65 73 2c  NAME).class.res,
08b0: 24 28 54 45 53 54 53 29 29 0a 65 6e 64 69 66 0a  $(TESTS)).endif.
08c0: 0a 69 66 6e 65 71 20 28 2c 24 28 77 69 6c 64 63  .ifneq (,$(wildc
08d0: 61 72 64 20 2e 2f 24 28 42 41 53 45 5f 4e 41 4d  ard ./$(BASE_NAM
08e0: 45 29 2e 70 79 29 29 0a 09 49 4e 54 45 52 50 52  E).py))..INTERPR
08f0: 45 54 45 44 5f 53 52 43 53 20 2b 3d 20 24 28 42  ETED_SRCS += $(B
0900: 41 53 45 5f 4e 41 4d 45 29 2e 70 79 0a 09 52 45  ASE_NAME).py..RE
0910: 53 55 4c 54 53 20 2b 3d 20 24 28 61 64 64 73 75  SULTS += $(addsu
0920: 66 66 69 78 20 2e 24 28 42 41 53 45 5f 4e 41 4d  ffix .$(BASE_NAM
0930: 45 29 2e 70 79 2e 72 65 73 2c 24 28 54 45 53 54  E).py.res,$(TEST
0940: 53 29 29 0a 65 6e 64 69 66 0a 0a 69 66 6e 65 71  S)).endif..ifneq
0950: 20 28 2c 24 28 77 69 6c 64 63 61 72 64 20 2e 2f   (,$(wildcard ./
0960: 24 28 42 41 53 45 5f 4e 41 4d 45 29 2e 72 62 29  $(BASE_NAME).rb)
0970: 29 0a 09 49 4e 54 45 52 50 52 45 54 45 44 5f 53  )..INTERPRETED_S
0980: 52 43 53 20 2b 3d 20 24 28 42 41 53 45 5f 4e 41  RCS += $(BASE_NA
0990: 4d 45 29 2e 72 62 0a 09 52 45 53 55 4c 54 53 20  ME).rb..RESULTS 
09a0: 2b 3d 20 24 28 61 64 64 73 75 66 66 69 78 20 2e  += $(addsuffix .
09b0: 24 28 42 41 53 45 5f 4e 41 4d 45 29 2e 72 62 2e  $(BASE_NAME).rb.
09c0: 72 65 73 2c 24 28 54 45 53 54 53 29 29 0a 65 6e  res,$(TESTS)).en
09d0: 64 69 66 0a 0a 53 54 41 54 53 20 3a 3d 20 24 28  dif..STATS := $(
09e0: 70 61 74 73 75 62 73 74 20 25 2e 72 65 73 2c 25  patsubst %.res,%
09f0: 2e 73 74 61 74 2c 24 28 52 45 53 55 4c 54 53 29  .stat,$(RESULTS)
0a00: 29 0a 0a 43 4c 45 41 4e 41 42 4c 45 20 3a 3d 20  )..CLEANABLE := 
0a10: 24 28 66 69 6c 74 65 72 20 24 28 43 4f 4d 50 49  $(filter $(COMPI
0a20: 4c 45 44 5f 4f 42 4a 53 29 20 24 28 52 45 53 55  LED_OBJS) $(RESU
0a30: 4c 54 53 29 20 24 28 53 54 41 54 53 29 2c 24 28  LTS) $(STATS),$(
0a40: 77 69 6c 64 63 61 72 64 20 2a 29 29 0a 0a 23 23  wildcard *))..##
0a50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0a60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0a70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0a80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ac0: 20 50 68 6f 6e 79 20 52 75 6c 65 73 20 20 20 20   Phony Rules    
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0a                #.
0af0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0b00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0b10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0b20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0b30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0b40: 0a 2e 50 48 4f 4e 59 3a 20 61 6c 6c 20 62 75 69  ..PHONY: all bui
0b50: 6c 64 20 63 6c 65 61 6e 20 72 65 74 65 73 74 20  ld clean retest 
0b60: 74 65 73 74 0a 0a 61 6c 6c 3a 20 74 65 73 74 0a  test..all: test.
0b70: 0a 62 75 69 6c 64 3a 20 24 28 43 4f 4d 50 49 4c  .build: $(COMPIL
0b80: 45 44 5f 4f 42 4a 53 29 0a 0a 63 6c 65 61 6e 3a  ED_OBJS)..clean:
0b90: 0a 69 66 6e 65 71 20 28 2c 24 28 43 4c 45 41 4e  .ifneq (,$(CLEAN
0ba0: 41 42 4c 45 29 29 0a 09 72 6d 20 24 28 43 4c 45  ABLE))..rm $(CLE
0bb0: 41 4e 41 42 4c 45 29 0a 65 6e 64 69 66 0a 0a 72  ANABLE).endif..r
0bc0: 65 74 65 73 74 3a 20 63 6c 65 61 6e 20 74 65 73  etest: clean tes
0bd0: 74 0a 0a 74 65 73 74 3a 20 62 75 69 6c 64 20 24  t..test: build $
0be0: 28 52 45 53 55 4c 54 53 29 20 24 28 53 54 41 54  (RESULTS) $(STAT
0bf0: 53 29 20 24 28 43 41 53 45 53 5f 4f 55 54 50 55  S) $(CASES_OUTPU
0c00: 54 29 0a 09 40 70 61 73 73 3d 30 3b 20 5c 0a 09  T)..@pass=0; \..
0c10: 66 61 69 6c 3d 30 3b 20 5c 0a 09 66 6f 72 20 74  fail=0; \..for t
0c20: 65 73 74 20 69 6e 20 24 28 70 61 74 73 75 62 73  est in $(patsubs
0c30: 74 20 25 2e 72 65 73 2c 25 2c 24 28 52 45 53 55  t %.res,%,$(RESU
0c40: 4c 54 53 29 29 3b 20 64 6f 20 5c 0a 09 09 65 63  LTS)); do \...ec
0c50: 68 6f 20 22 23 23 23 23 23 23 23 23 23 23 23 23  ho "############
0c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0c70: 23 23 23 23 23 23 23 23 23 23 23 23 22 3b 20 5c  ############"; \
0c80: 0a 09 09 70 72 69 6e 74 66 20 22 23 20 25 2d 32  ...printf "# %-2
0c90: 39 73 20 23 20 25 73 20 23 5c 6e 22 20 24 24 74  9s # %s #\n" $$t
0ca0: 65 73 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20  est \.          
0cb0: 20 24 24 28 64 69 66 66 20 24 24 74 65 73 74 2e   $$(diff $$test.
0cc0: 72 65 73 20 22 24 24 28 65 63 68 6f 20 22 24 24  res "$$(echo "$$
0cd0: 74 65 73 74 22 20 7c 20 63 75 74 20 2d 66 20 31  test" | cut -f 1
0ce0: 20 2d 64 20 27 2e 27 29 2e 6f 75 74 22 20 5c 0a   -d '.').out" \.
0cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 3e                2>
0d00: 26 31 3e 2f 64 65 76 2f 6e 75 6c 6c 20 26 26 20  &1>/dev/null && 
0d10: 65 63 68 6f 20 27 50 41 53 53 27 20 7c 7c 20 65  echo 'PASS' || e
0d20: 63 68 6f 20 27 46 41 49 4c 27 29 3b 20 5c 0a 09  cho 'FAIL'); \..
0d30: 09 65 63 68 6f 20 22 23 23 23 23 23 23 23 23 23  .echo "#########
0d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 22  ###############"
0d60: 3b 20 5c 0a 09 09 63 61 74 20 24 24 74 65 73 74  ; \...cat $$test
0d70: 2e 73 74 61 74 3b 20 5c 0a 09 09 65 63 68 6f 20  .stat; \...echo 
0d80: 22 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  "###############
0d90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0da0: 23 23 23 23 23 23 23 23 23 22 3b 20 5c 0a 09 09  #########"; \...
0db0: 64 69 66 66 20 2d 2d 63 6f 6c 6f 72 20 24 24 74  diff --color $$t
0dc0: 65 73 74 2e 72 65 73 20 22 24 24 28 65 63 68 6f  est.res "$$(echo
0dd0: 20 22 24 24 74 65 73 74 22 20 7c 20 63 75 74 20   "$$test" | cut 
0de0: 2d 66 20 31 20 2d 64 20 27 2e 27 29 2e 6f 75 74  -f 1 -d '.').out
0df0: 22 20 5c 0a 20 20 20 20 20 20 20 20 20 26 26 20  " \.         && 
0e00: 70 61 73 73 3d 24 24 28 28 70 61 73 73 20 2b 20  pass=$$((pass + 
0e10: 31 29 29 20 7c 7c 20 66 61 69 6c 3d 24 24 28 28  1)) || fail=$$((
0e20: 66 61 69 6c 20 2b 20 31 29 29 3b 20 5c 0a 09 09  fail + 1)); \...
0e30: 65 63 68 6f 20 3b 20 5c 0a 09 64 6f 6e 65 3b 20  echo ; \..done; 
0e40: 5c 0a 09 65 63 68 6f 20 22 23 23 23 23 23 23 23  \..echo "#######
0e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e70: 23 22 3b 20 5c 0a 09 70 72 69 6e 74 66 20 22 23  #"; \..printf "#
0e80: 20 54 4f 54 41 4c 3a 20 25 2d 35 73 20 23 20 50   TOTAL: %-5s # P
0e90: 41 53 53 3a 20 25 2d 33 73 20 23 20 46 41 49 4c  ASS: %-3s # FAIL
0ea0: 3a 20 25 2d 33 73 20 23 5c 6e 22 20 5c 0a 20 20  : %-3s #\n" \.  
0eb0: 20 20 20 20 20 20 20 24 24 28 28 70 61 73 73 20         $$((pass 
0ec0: 2b 20 66 61 69 6c 29 29 20 24 24 70 61 73 73 20  + fail)) $$pass 
0ed0: 24 24 66 61 69 6c 3b 20 5c 0a 09 65 63 68 6f 20  $$fail; \..echo 
0ee0: 22 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  "###############
0ef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f00: 23 23 23 23 23 23 23 23 23 22 0a 0a 23 23 23 23  #########"..####
0f10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f50: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 20  ############.#  
0f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6d               Com
0f80: 70 69 6c 69 6e 67 20 52 75 6c 65 73 20 20 20 20  piling Rules    
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fa0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0a 23 23              #.##
0fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0fc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0fd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0fe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 24  ##############.$
1000: 28 42 41 53 45 5f 4e 41 4d 45 29 2e 63 2e 65 78  (BASE_NAME).c.ex
1010: 65 3a 20 24 28 42 41 53 45 5f 4e 41 4d 45 29 2e  e: $(BASE_NAME).
1020: 63 0a 09 24 28 43 43 29 20 24 28 43 43 5f 46 4c  c..$(CC) $(CC_FL
1030: 41 47 53 29 20 24 5e 20 2d 6f 20 24 40 0a 0a 24  AGS) $^ -o $@..$
1040: 28 42 41 53 45 5f 4e 41 4d 45 29 2e 63 70 70 2e  (BASE_NAME).cpp.
1050: 65 78 65 3a 20 24 28 42 41 53 45 5f 4e 41 4d 45  exe: $(BASE_NAME
1060: 29 2e 63 70 70 0a 09 24 28 43 58 58 29 20 24 28  ).cpp..$(CXX) $(
1070: 43 58 58 5f 46 4c 41 47 53 29 20 24 5e 20 2d 6f  CXX_FLAGS) $^ -o
1080: 20 24 40 0a 0a 24 28 42 41 53 45 5f 4e 41 4d 45   $@..$(BASE_NAME
1090: 29 2e 63 6c 61 73 73 3a 20 24 28 42 41 53 45 5f  ).class: $(BASE_
10a0: 4e 41 4d 45 29 2e 6a 61 76 61 0a 09 24 28 4a 43  NAME).java..$(JC
10b0: 29 20 24 28 4a 43 5f 46 4c 41 47 53 29 20 24 5e  ) $(JC_FLAGS) $^
10c0: 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
10d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1110: 23 23 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  ##.#            
1120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1130: 20 20 20 20 52 75 6e 6e 69 6e 67 20 72 75 6c 65      Running rule
1140: 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s               
1150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1160: 20 20 23 0a 23 23 23 23 23 23 23 23 23 23 23 23    #.############
1170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b0: 23 23 23 23 0a 25 2e 24 28 42 41 53 45 5f 4e 41  ####.%.$(BASE_NA
11c0: 4d 45 29 2e 63 2e 65 78 65 2e 72 65 73 20 25 2e  ME).c.exe.res %.
11d0: 24 28 42 41 53 45 5f 4e 41 4d 45 29 2e 63 2e 65  $(BASE_NAME).c.e
11e0: 78 65 2e 73 74 61 74 3a 20 25 2e 69 6e 20 24 28  xe.stat: %.in $(
11f0: 42 41 53 45 5f 4e 41 4d 45 29 2e 63 2e 65 78 65  BASE_NAME).c.exe
1200: 0a 09 2d 40 5c 74 69 6d 65 20 24 28 4c 49 4d 49  ..-@\time $(LIMI
1210: 54 45 52 29 20 24 28 4c 49 4d 49 54 45 52 5f 46  TER) $(LIMITER_F
1220: 4c 41 47 53 29 20 2e 2f 24 28 42 41 53 45 5f 4e  LAGS) ./$(BASE_N
1230: 41 4d 45 29 2e 63 2e 65 78 65 20 3c 20 24 2a 2e  AME).c.exe < $*.
1240: 69 6e 20 5c 0a 20 20 20 20 20 20 20 20 20 20 3e  in \.          >
1250: 20 24 2a 2e 24 28 42 41 53 45 5f 4e 41 4d 45 29   $*.$(BASE_NAME)
1260: 2e 63 2e 65 78 65 2e 72 65 73 20 32 3e 20 24 2a  .c.exe.res 2> $*
1270: 2e 24 28 42 41 53 45 5f 4e 41 4d 45 29 2e 63 2e  .$(BASE_NAME).c.
1280: 65 78 65 2e 73 74 61 74 0a 0a 25 2e 24 28 42 41  exe.stat..%.$(BA
1290: 53 45 5f 4e 41 4d 45 29 2e 63 70 70 2e 65 78 65  SE_NAME).cpp.exe
12a0: 2e 72 65 73 3a 20 25 2e 69 6e 20 24 28 42 41 53  .res: %.in $(BAS
12b0: 45 5f 4e 41 4d 45 29 2e 63 70 70 2e 65 78 65 0a  E_NAME).cpp.exe.
12c0: 09 2d 40 5c 74 69 6d 65 20 24 28 4c 49 4d 49 54  .-@\time $(LIMIT
12d0: 45 52 29 20 24 28 4c 49 4d 49 54 45 52 5f 46 4c  ER) $(LIMITER_FL
12e0: 41 47 53 29 20 2e 2f 24 28 42 41 53 45 5f 4e 41  AGS) ./$(BASE_NA
12f0: 4d 45 29 2e 63 70 70 2e 65 78 65 20 3c 20 24 2a  ME).cpp.exe < $*
1300: 2e 69 6e 20 5c 0a 20 20 20 20 20 20 20 20 20 20  .in \.          
1310: 3e 20 24 2a 2e 24 28 42 41 53 45 5f 4e 41 4d 45  > $*.$(BASE_NAME
1320: 29 2e 63 70 70 2e 65 78 65 2e 72 65 73 20 32 3e  ).cpp.exe.res 2>
1330: 20 24 2a 2e 24 28 42 41 53 45 5f 4e 41 4d 45 29   $*.$(BASE_NAME)
1340: 2e 63 70 70 2e 65 78 65 2e 73 74 61 74 0a 0a 25  .cpp.exe.stat..%
1350: 2e 24 28 42 41 53 45 5f 4e 41 4d 45 29 2e 63 6c  .$(BASE_NAME).cl
1360: 61 73 73 2e 72 65 73 3a 20 25 2e 69 6e 20 24 28  ass.res: %.in $(
1370: 42 41 53 45 5f 4e 41 4d 45 29 2e 63 6c 61 73 73  BASE_NAME).class
1380: 0a 09 2d 40 5c 74 69 6d 65 20 24 28 4c 49 4d 49  ..-@\time $(LIMI
1390: 54 45 52 29 20 24 28 4c 49 4d 49 54 45 52 5f 46  TER) $(LIMITER_F
13a0: 4c 41 47 53 29 20 24 28 4a 41 56 41 29 20 24 28  LAGS) $(JAVA) $(
13b0: 4a 41 56 41 5f 46 4c 41 47 53 29 20 24 28 42 41  JAVA_FLAGS) $(BA
13c0: 53 45 5f 4e 41 4d 45 29 20 5c 0a 20 20 20 20 20  SE_NAME) \.     
13d0: 20 20 20 20 20 3c 20 24 2a 2e 69 6e 20 3e 20 24       < $*.in > $
13e0: 2a 2e 24 28 42 41 53 45 5f 4e 41 4d 45 29 2e 63  *.$(BASE_NAME).c
13f0: 6c 61 73 73 2e 72 65 73 20 32 3e 20 24 2a 2e 24  lass.res 2> $*.$
1400: 28 42 41 53 45 5f 4e 41 4d 45 29 2e 63 6c 61 73  (BASE_NAME).clas
1410: 73 2e 73 74 61 74 0a 0a 25 2e 24 28 42 41 53 45  s.stat..%.$(BASE
1420: 5f 4e 41 4d 45 29 2e 70 79 2e 72 65 73 3a 20 25  _NAME).py.res: %
1430: 2e 69 6e 20 24 28 42 41 53 45 5f 4e 41 4d 45 29  .in $(BASE_NAME)
1440: 2e 70 79 0a 09 2d 40 5c 74 69 6d 65 20 24 28 4c  .py..-@\time $(L
1450: 49 4d 49 54 45 52 29 20 24 28 4c 49 4d 49 54 45  IMITER) $(LIMITE
1460: 52 5f 46 4c 41 47 53 29 20 24 28 50 59 54 48 4f  R_FLAGS) $(PYTHO
1470: 4e 29 20 24 28 50 59 54 48 4f 4e 5f 46 4c 41 47  N) $(PYTHON_FLAG
1480: 53 29 20 5c 0a 20 20 20 20 20 20 20 20 20 20 24  S) \.          $
1490: 28 42 41 53 45 5f 4e 41 4d 45 29 2e 70 79 20 3c  (BASE_NAME).py <
14a0: 20 24 2a 2e 69 6e 20 3e 20 24 2a 2e 24 28 42 41   $*.in > $*.$(BA
14b0: 53 45 5f 4e 41 4d 45 29 2e 70 79 2e 72 65 73 20  SE_NAME).py.res 
14c0: 5c 0a 20 20 20 20 20 20 20 20 20 20 32 3e 20 24  \.          2> $
14d0: 2a 2e 24 28 42 41 53 45 5f 4e 41 4d 45 29 2e 70  *.$(BASE_NAME).p
14e0: 79 2e 73 74 61 74 0a 0a 25 2e 24 28 42 41 53 45  y.stat..%.$(BASE
14f0: 5f 4e 41 4d 45 29 2e 72 62 2e 72 65 73 3a 20 25  _NAME).rb.res: %
1500: 2e 69 6e 20 24 28 42 41 53 45 5f 4e 41 4d 45 29  .in $(BASE_NAME)
1510: 2e 72 62 0a 09 2d 40 5c 74 69 6d 65 20 24 28 4c  .rb..-@\time $(L
1520: 49 4d 49 54 45 52 29 20 24 28 4c 49 4d 49 54 45  IMITER) $(LIMITE
1530: 52 5f 46 4c 41 47 53 29 20 24 28 52 55 42 59 29  R_FLAGS) $(RUBY)
1540: 20 24 28 52 55 42 59 5f 46 4c 41 47 53 29 20 5c   $(RUBY_FLAGS) \
1550: 0a 20 20 20 20 20 20 20 20 20 20 24 28 42 41 53  .          $(BAS
1560: 45 5f 4e 41 4d 45 29 2e 72 62 20 3c 20 24 2a 2e  E_NAME).rb < $*.
1570: 69 6e 20 3e 20 24 2a 2e 24 28 42 41 53 45 5f 4e  in > $*.$(BASE_N
1580: 41 4d 45 29 2e 72 62 2e 72 65 73 20 5c 0a 20 20  AME).rb.res \.  
1590: 20 20 20 20 20 20 20 20 32 3e 20 24 2a 2e 24 28          2> $*.$(
15a0: 42 41 53 45 5f 4e 41 4d 45 29 2e 72 62 2e 73 74  BASE_NAME).rb.st
15b0: 61 74                                            at