Megatest

Hex Artifact Content
Login

Artifact 35a078568515ba67cd1dec20dd263ec62ad5c24b:


0000: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ;;==============
0010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 43 6f 70 79  ========.;; Copy
0050: 72 69 67 68 74 20 32 30 30 36 2d 32 30 31 32 2c  right 2006-2012,
0060: 20 4d 61 74 74 68 65 77 20 57 65 6c 6c 61 6e 64   Matthew Welland
0070: 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68 69 73 20 70  ..;; .;;  This p
0080: 72 6f 67 72 61 6d 20 69 73 20 6d 61 64 65 20 61  rogram is made a
0090: 76 61 69 6c 61 62 6c 65 20 75 6e 64 65 72 20 74  vailable under t
00a0: 68 65 20 47 4e 55 20 47 50 4c 20 76 65 72 73 69  he GNU GPL versi
00b0: 6f 6e 20 32 2e 30 20 6f 72 0a 3b 3b 20 20 67 72  on 2.0 or.;;  gr
00c0: 65 61 74 65 72 2e 20 53 65 65 20 74 68 65 20 61  eater. See the a
00d0: 63 63 6f 6d 70 61 6e 79 69 6e 67 20 66 69 6c 65  ccompanying file
00e0: 20 43 4f 50 59 49 4e 47 20 66 6f 72 20 64 65 74   COPYING for det
00f0: 61 69 6c 73 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68  ails..;; .;;  Th
0100: 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69  is program is di
0110: 73 74 72 69 62 75 74 65 64 20 57 49 54 48 4f 55  stributed WITHOU
0120: 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b 20  T ANY WARRANTY; 
0130: 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68 65  without even the
0140: 0a 3b 3b 20 20 69 6d 70 6c 69 65 64 20 77 61 72  .;;  implied war
0150: 72 61 6e 74 79 20 6f 66 20 4d 45 52 43 48 41 4e  ranty of MERCHAN
0160: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e  TABILITY or FITN
0170: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43  ESS FOR A PARTIC
0180: 55 4c 41 52 0a 3b 3b 20 20 50 55 52 50 4f 53 45  ULAR.;;  PURPOSE
0190: 2e 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ..;;============
01a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 63  ==========..(dec
01e0: 6c 61 72 65 20 28 75 6e 69 74 20 67 65 6e 65 78  lare (unit genex
01f0: 61 6d 70 6c 65 29 29 0a 28 75 73 65 20 70 6f 73  ample)).(use pos
0200: 69 78 29 0a 0a 28 64 65 66 69 6e 65 20 67 65 6e  ix)..(define gen
0210: 65 78 61 6d 70 6c 65 3a 65 78 61 6d 70 6c 65 2d  example:example-
0220: 6c 6f 67 70 72 6f 0a 23 3c 3c 45 4f 46 0a 3b 3b  logpro.#<<EOF.;;
0230: 20 59 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65   You should have
0240: 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 65 78   at least one ex
0250: 70 65 63 74 3a 72 65 71 75 69 72 65 64 2e 20 54  pect:required. T
0260: 68 69 73 20 65 6e 73 75 72 65 73 20 74 68 61 74  his ensures that
0270: 20 79 6f 75 72 20 70 72 6f 63 65 73 73 20 72 61   your process ra
0280: 6e 0a 28 65 78 70 65 63 74 3a 72 65 71 75 69 72  n.(expect:requir
0290: 65 64 20 69 6e 20 22 4c 6f 67 46 69 6c 65 42 6f  ed in "LogFileBo
02a0: 64 79 22 20 3e 20 30 20 22 50 75 74 20 64 65 73  dy" > 0 "Put des
02b0: 63 72 69 70 74 69 6f 6e 20 68 65 72 65 22 20 23  cription here" #
02c0: 2f 70 75 74 20 70 61 74 74 65 72 6e 20 68 65 72  /put pattern her
02d0: 65 2f 29 0a 0a 3b 3b 20 59 6f 75 20 6d 61 79 20  e/)..;; You may 
02e0: 6e 65 65 64 20 69 67 6e 6f 72 65 73 20 74 6f 20  need ignores to 
02f0: 73 75 70 70 72 65 73 73 20 66 61 6c 73 65 20 65  suppress false e
0300: 72 72 6f 72 20 6f 72 20 77 61 72 6e 69 6e 67 20  rror or warning 
0310: 68 69 74 73 20 66 72 6f 6d 20 74 68 65 20 6c 61  hits from the la
0320: 74 65 72 20 65 78 70 65 63 74 73 0a 3b 3b 20 4e  ter expects.;; N
0330: 4f 54 45 3a 20 4f 72 64 65 72 20 69 73 20 69 6d  OTE: Order is im
0340: 70 6f 72 74 61 6e 74 20 68 65 72 65 21 0a 28 65  portant here!.(e
0350: 78 70 65 63 74 3a 69 67 6e 6f 72 65 20 20 20 69  xpect:ignore   i
0360: 6e 20 22 4c 6f 67 46 69 6c 65 42 6f 64 79 22 20  n "LogFileBody" 
0370: 20 3c 20 39 39 20 22 49 67 6e 6f 72 65 20 74 68   < 99 "Ignore th
0380: 65 20 77 6f 72 64 20 65 72 72 6f 72 20 69 6e 20  e word error in 
0390: 63 6f 6d 6d 65 6e 74 73 22 20 23 2f 5e 5c 2f 5c  comments" #/^\/\
03a0: 2f 2e 2a 65 72 72 6f 72 2f 29 0a 28 65 78 70 65  /.*error/).(expe
03b0: 63 74 3a 77 61 72 6e 69 6e 67 20 20 69 6e 20 22  ct:warning  in "
03c0: 4c 6f 67 46 69 6c 65 42 6f 64 79 22 20 20 3d 20  LogFileBody"  = 
03d0: 30 20 22 41 6e 79 20 77 61 72 6e 69 6e 67 22 20  0 "Any warning" 
03e0: 23 2f 77 61 72 6e 2f 29 0a 28 65 78 70 65 63 74  #/warn/).(expect
03f0: 3a 65 72 72 6f 72 20 20 20 20 69 6e 20 22 4c 6f  :error    in "Lo
0400: 67 46 69 6c 65 42 6f 64 79 22 20 20 3d 20 30 20  gFileBody"  = 0 
0410: 22 41 6e 79 20 65 72 72 6f 72 22 20 20 28 6c 69  "Any error"  (li
0420: 73 74 20 23 2f 45 52 52 4f 52 2f 20 23 2f 65 72  st #/ERROR/ #/er
0430: 72 6f 72 2f 29 29 20 3b 3b 20 62 75 74 20 64 69  ror/)) ;; but di
0440: 73 61 6c 6c 6f 77 20 61 6e 79 20 6f 74 68 65 72  sallow any other
0450: 20 65 72 72 6f 72 73 0a 45 4f 46 0a 29 0a 0a 28   errors.EOF.)..(
0460: 64 65 66 69 6e 65 20 67 65 6e 65 78 61 6d 70 6c  define genexampl
0470: 65 3a 65 78 61 6d 70 6c 65 2d 73 63 72 69 70 74  e:example-script
0480: 0a 23 3c 3c 45 4f 46 0a 23 21 2f 75 73 72 2f 62  .#<<EOF.#!/usr/b
0490: 69 6e 2f 65 6e 76 20 62 61 73 68 0a 0a 23 20 52  in/env bash..# R
04a0: 75 6e 20 79 6f 75 72 20 73 74 65 70 20 68 65 72  un your step her
04b0: 65 0a 45 4f 46 0a 29 0a 0a 28 64 65 66 69 6e 65  e.EOF.)..(define
04c0: 20 28 67 65 6e 65 78 61 6d 70 6c 65 3a 6d 6b 2d   (genexample:mk-
04d0: 6d 65 67 61 74 65 73 74 2e 63 6f 6e 66 69 67 29  megatest.config)
04e0: 0a 20 20 28 6c 65 74 20 28 28 6b 65 79 73 74 72  .  (let ((keystr
04f0: 20 23 66 29 0a 09 28 6b 65 79 73 20 20 20 23 66   #f)..(keys   #f
0500: 29 0a 09 28 6c 6e 74 72 65 65 20 23 66 29 0a 09  )..(lntree #f)..
0510: 28 70 61 74 68 20 20 20 23 66 29 0a 09 28 66 69  (path   #f)..(fi
0520: 72 73 74 64 20 23 66 29 29 0a 20 20 20 20 28 70  rstd #f)).    (p
0530: 72 69 6e 74 20 22 4e 6f 74 65 3a 20 64 6f 6e 27  rint "Note: don'
0540: 74 20 77 6f 72 72 79 20 74 6f 6f 20 6d 75 63 68  t worry too much
0550: 20 61 62 6f 75 74 20 74 79 70 6f 73 20 69 6e 20   about typos in 
0560: 74 68 69 73 20 70 72 6f 63 65 73 73 2c 20 79 6f  this process, yo
0570: 75 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74  u will be able t
0580: 6f 20 65 64 69 74 0a 74 68 65 20 67 65 6e 65 72  o edit.the gener
0590: 61 74 65 64 20 66 69 6c 65 73 20 62 65 66 6f 72  ated files befor
05a0: 65 20 73 74 61 72 74 69 6e 67 20 79 6f 75 72 20  e starting your 
05b0: 66 69 72 73 74 20 72 75 6e 73 22 29 0a 0a 20 20  first runs")..  
05c0: 20 20 3b 3b 20 63 72 65 61 74 65 20 74 68 65 20    ;; create the 
05d0: 6e 65 65 64 65 64 20 61 72 65 61 0a 20 20 20 20  needed area.    
05e0: 28 70 72 69 6e 74 20 22 3d 3d 3d 3d 3d 3d 3d 3d  (print "========
05f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 5c 6e 57 68 65 72  ==========\nWher
0600: 65 20 63 61 6e 20 49 20 63 72 65 61 74 65 20 79  e can I create y
0610: 6f 75 72 20 4d 65 67 61 74 65 73 74 20 72 65 67  our Megatest reg
0620: 72 65 73 73 73 69 6f 6e 2f 63 6f 6e 74 69 6e 75  resssion/continu
0630: 6f 75 73 20 62 75 69 6c 64 20 61 72 65 61 3f 20  ous build area? 
0640: 4e 6f 74 65 2c 20 79 6f 75 72 20 5c 6e 22 0a 09  Note, your \n"..
0650: 20 20 20 22 74 65 73 74 73 20 77 69 6c 6c 20 6e     "tests will n
0660: 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 62  ot necessarily b
0670: 65 20 72 75 6e 20 69 6e 20 74 68 69 73 20 61 72  e run in this ar
0680: 65 61 2c 20 64 69 73 6b 20 73 70 61 63 65 20 6e  ea, disk space n
0690: 65 65 64 73 20 61 72 65 20 6d 6f 64 65 73 74 2e  eeds are modest.
06a0: 22 29 0a 20 20 20 20 28 64 69 73 70 6c 61 79 20  ").    (display 
06b0: 22 45 6e 74 65 72 20 79 6f 75 72 20 6d 65 67 61  "Enter your mega
06c0: 74 65 73 74 20 64 69 72 65 63 74 6f 72 79 3a 20  test directory: 
06d0: 22 29 0a 20 20 20 20 28 73 65 74 21 20 70 61 74  ").    (set! pat
06e0: 68 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 0a 0a  h (read-line))..
06f0: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 64 69      (if (not (di
0700: 72 65 63 74 6f 72 79 3f 20 70 61 74 68 29 29 0a  rectory? path)).
0710: 09 28 62 65 67 69 6e 0a 09 20 20 28 70 72 69 6e  .(begin..  (prin
0720: 74 20 22 54 68 65 20 70 61 74 68 20 22 20 70 61  t "The path " pa
0730: 74 68 20 22 20 64 6f 65 73 20 6e 6f 74 20 65 78  th " does not ex
0740: 69 73 74 20 6f 72 20 69 73 20 6e 6f 74 20 61 20  ist or is not a 
0750: 64 69 72 65 63 74 6f 72 79 2e 20 41 74 74 65 6d  directory. Attem
0760: 70 74 69 6e 67 20 74 6f 20 63 72 65 61 74 65 20  pting to create 
0770: 69 74 20 6e 6f 77 22 29 0a 09 20 20 28 63 72 65  it now")..  (cre
0780: 61 74 65 2d 64 69 72 65 63 74 6f 72 79 20 70 61  ate-directory pa
0790: 74 68 20 23 74 29 29 29 0a 0a 20 20 20 20 3b 3b  th #t)))..    ;;
07a0: 20 66 69 72 73 74 20 70 72 6f 6d 70 74 20 75 73   first prompt us
07b0: 65 72 20 66 6f 72 20 66 69 65 6c 64 73 0a 20 20  er for fields.  
07c0: 20 20 3b 3b 0a 20 20 20 20 28 70 72 69 6e 74 20    ;;.    (print 
07d0: 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  "===============
07e0: 3d 3d 3d 5c 6e 4e 65 78 74 20 79 6f 75 20 6d 75  ===\nNext you mu
07f0: 73 74 20 73 70 65 63 69 66 79 20 66 69 65 6c 64  st specify field
0800: 73 20 6f 72 20 6b 65 79 73 20 66 6f 72 20 79 6f  s or keys for yo
0810: 75 72 20 6d 65 67 61 74 65 73 74 20 61 72 65 61  ur megatest area
0820: 2e 20 54 68 65 73 65 20 77 69 6c 6c 20 0a 62 65  . These will .be
0830: 20 75 73 65 64 20 74 6f 20 6f 72 67 61 6e 69 73   used to organis
0840: 65 20 79 6f 75 72 20 72 75 6e 73 2e 20 4f 6e 65  e your runs. One
0850: 20 66 69 65 6c 64 20 73 68 6f 75 6c 64 20 70 72   field should pr
0860: 6f 62 61 62 6c 79 20 62 65 20 5c 22 52 45 4c 45  obably be \"RELE
0870: 41 53 45 5c 22 2e 20 0a 4f 74 68 65 72 20 65 78  ASE\". .Other ex
0880: 61 6d 70 6c 65 73 20 6f 66 20 75 73 65 66 75 6c  amples of useful
0890: 20 66 69 65 6c 64 73 20 6d 69 67 68 74 20 62 65   fields might be
08a0: 20 5c 22 50 4c 41 54 46 4f 52 4d 5c 22 2c 20 5c   \"PLATFORM\", \
08b0: 22 54 41 52 47 45 54 5f 4f 53 5c 22 20 6f 72 20  "TARGET_OS\" or 
08c0: 69 66 20 79 6f 75 20 61 72 65 20 69 6e 20 74 68  if you are in th
08d0: 65 0a 73 65 6d 69 63 6f 6e 64 75 63 74 6f 72 20  e.semiconductor 
08e0: 62 75 73 69 6e 65 73 73 20 70 65 72 68 61 70 73  business perhaps
08f0: 20 74 68 69 6e 67 73 20 6c 69 6b 65 20 5c 22 54   things like \"T
0900: 45 43 48 4e 4f 4c 4f 47 59 5f 4e 4f 44 45 5c 22  ECHNOLOGY_NODE\"
0910: 2c 20 5c 22 44 45 53 49 47 4e 5f 4b 49 54 5c 22  , \"DESIGN_KIT\"
0920: 20 6f 72 20 5c 22 4d 45 54 41 4c 5f 53 54 41 43   or \"METAL_STAC
0930: 4b 5c 22 2e 0a 0a 54 68 65 20 61 6c 6c 20 63 61  K\"...The all ca
0940: 70 73 20 69 73 20 61 20 63 6f 6e 76 65 6e 74 69  ps is a conventi
0950: 6f 6e 20 62 65 63 61 75 73 65 20 74 68 65 20 76  on because the v
0960: 61 72 69 61 62 6c 65 73 20 79 6f 75 20 63 68 6f  ariables you cho
0970: 6f 73 65 20 77 69 6c 6c 20 62 65 20 61 76 61 69  ose will be avai
0980: 6c 61 62 6c 65 20 74 6f 20 79 6f 75 72 20 74 65  lable to your te
0990: 73 74 73 0a 61 73 20 65 6e 76 69 72 6f 6e 6d 65  sts.as environme
09a0: 6e 74 20 76 61 72 69 61 62 6c 65 73 2e 20 59 6f  nt variables. Yo
09b0: 75 20 63 61 6e 20 65 64 69 74 20 74 68 65 73 65  u can edit these
09c0: 20 76 61 6c 75 65 73 20 6c 61 74 65 72 20 62 75   values later bu
09d0: 74 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  t it is generall
09e0: 79 20 61 20 67 6f 6f 64 20 69 64 65 61 20 74 6f  y a good idea to
09f0: 0a 73 65 74 74 6c 65 20 6f 6e 20 74 68 65 6d 20  .settle on them 
0a00: 61 6e 64 20 67 65 74 20 74 68 65 6d 20 72 69 67  and get them rig
0a10: 68 74 20 65 61 72 6c 79 20 6f 6e 2e 20 59 6f 75  ht early on. You
0a20: 72 20 72 75 6e 73 20 77 69 6c 6c 20 62 65 20 73  r runs will be s
0a30: 74 6f 72 65 64 20 69 6e 20 64 69 72 65 63 74 6f  tored in directo
0a40: 72 69 65 73 20 73 70 65 63 69 66 69 65 64 20 62  ries specified b
0a50: 79 0a 79 6f 75 72 20 6b 65 79 73 2e 20 45 78 61  y.your keys. Exa
0a60: 6d 70 6c 65 2c 20 69 66 20 79 6f 75 20 68 61 76  mple, if you hav
0a70: 65 20 6b 65 79 73 20 4f 53 46 41 4d 49 4c 59 2f  e keys OSFAMILY/
0a80: 56 41 52 49 41 4e 54 2f 4f 53 56 45 52 2f 52 45  VARIANT/OSVER/RE
0a90: 4c 45 41 53 45 20 79 6f 75 20 6d 61 79 20 67 65  LEASE you may ge
0aa0: 74 20 61 20 74 65 73 74 20 5c 22 62 75 69 6c 64  t a test \"build
0ab0: 5c 22 0a 69 6e 20 61 20 64 69 72 65 63 74 6f 72  \".in a director
0ac0: 79 20 6c 69 6b 65 20 74 68 69 73 3a 20 6c 69 6e  y like this: lin
0ad0: 75 78 2f 75 62 75 6e 74 75 2f 31 31 2e 30 34 2f  ux/ubuntu/11.04/
0ae0: 72 65 76 5f 31 2e 32 2f 62 75 69 6c 64 0a 0a 50  rev_1.2/build..P
0af0: 6c 65 61 73 65 20 65 6e 74 65 72 20 79 6f 75 72  lease enter your
0b00: 20 6b 65 79 73 20 6e 6f 77 2c 20 73 65 70 61 72   keys now, separ
0b10: 61 74 65 64 20 62 79 20 73 70 61 63 65 73 20 6f  ated by spaces o
0b20: 72 20 73 6c 61 73 68 65 73 2e 20 4f 6e 6c 79 20  r slashes. Only 
0b30: 61 6c 70 68 61 2d 6e 75 6d 65 72 69 63 20 63 68  alpha-numeric ch
0b40: 61 72 61 63 74 65 72 73 2e 20 0a 55 70 70 65 72  aracters. .Upper
0b50: 20 63 61 73 65 20 72 65 63 6f 6d 6d 65 6e 64 65   case recommende
0b60: 64 2e 22 29 0a 20 20 20 20 28 64 69 73 70 6c 61  d.").    (displa
0b70: 79 20 22 45 6e 74 65 72 20 6b 65 79 73 20 73 65  y "Enter keys se
0b80: 70 61 72 61 74 65 64 20 62 79 20 73 70 61 63 65  parated by space
0b90: 73 20 6f 72 20 73 6c 61 73 68 65 73 3a 20 22 29  s or slashes: ")
0ba0: 0a 20 20 20 20 28 73 65 74 21 20 6b 65 79 73 74  .    (set! keyst
0bb0: 72 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 0a 20  r (read-line)). 
0bc0: 20 20 20 28 73 65 74 21 20 6b 65 79 73 20 20 20     (set! keys   
0bd0: 28 61 70 70 6c 79 20 61 70 70 65 6e 64 0a 09 09  (apply append...
0be0: 09 28 6d 61 70 20 73 74 72 69 6e 67 2d 73 70 6c  .(map string-spl
0bf0: 69 74 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74  it (string-split
0c00: 20 6b 65 79 73 74 72 20 22 2f 22 29 29 29 29 0a   keystr "/")))).
0c10: 20 20 20 20 0a 20 20 20 20 3b 3b 20 4e 6f 77 20      .    ;; Now 
0c20: 67 65 74 20 74 68 65 20 6c 69 6e 6b 20 74 72 65  get the link tre
0c30: 65 20 6c 6f 63 61 74 69 6f 6e 20 61 6e 64 20 61  e location and a
0c40: 20 66 69 72 73 74 20 64 69 73 6b 0a 20 20 20 20   first disk.    
0c50: 28 70 72 69 6e 74 20 22 3d 3d 3d 3d 3d 3d 3d 3d  (print "========
0c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 5c 6e 4e 6f 77 20  ==========\nNow 
0c70: 79 6f 75 20 6e 65 65 64 20 61 6e 20 69 6e 69 74  you need an init
0c80: 69 61 6c 20 70 6c 61 63 65 20 74 6f 20 73 74 6f  ial place to sto
0c90: 72 65 20 79 6f 75 72 20 72 75 6e 73 2e 20 54 68  re your runs. Th
0ca0: 65 73 65 20 61 72 65 20 63 61 6c 6c 65 64 20 5c  ese are called \
0cb0: 22 64 69 73 6b 73 5c 22 20 61 6e 64 20 79 6f 75  "disks\" and you
0cc0: 0a 63 61 6e 20 61 64 64 20 6d 6f 72 65 20 61 74  .can add more at
0cd0: 20 61 6e 79 20 74 69 6d 65 2e 20 54 6f 20 67 65   any time. To ge
0ce0: 74 20 67 6f 69 6e 67 20 70 72 6f 76 69 64 65 20  t going provide 
0cf0: 61 20 77 72 69 74 65 61 62 6c 65 20 64 69 72 65  a writeable dire
0d00: 63 74 6f 72 79 20 6e 61 6d 65 2e 20 22 29 0a 20  ctory name. "). 
0d10: 20 20 20 28 64 69 73 70 6c 61 79 20 22 45 6e 74     (display "Ent
0d20: 65 72 20 79 6f 75 72 20 74 65 73 74 20 72 75 6e  er your test run
0d30: 73 20 64 69 72 65 63 74 6f 72 79 3a 20 22 29 0a  s directory: ").
0d40: 20 20 20 20 28 73 65 74 21 20 66 69 72 73 74 64      (set! firstd
0d50: 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 0a 20 20   (read-line)).  
0d60: 20 20 28 69 66 20 28 6e 6f 74 20 28 64 69 72 65    (if (not (dire
0d70: 63 74 6f 72 79 3f 20 66 69 72 73 74 64 29 29 0a  ctory? firstd)).
0d80: 09 28 62 65 67 69 6e 0a 09 20 20 28 70 72 69 6e  .(begin..  (prin
0d90: 74 20 22 57 41 52 4e 49 4e 47 3a 20 79 6f 75 20  t "WARNING: you 
0da0: 68 61 76 65 20 73 70 65 63 69 66 69 65 64 20 61  have specified a
0db0: 20 70 61 74 68 20 22 20 66 69 72 73 74 64 20 22   path " firstd "
0dc0: 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 65   that does not e
0dd0: 78 69 73 74 2e 20 41 74 74 65 6d 70 74 69 6e 67  xist. Attempting
0de0: 20 74 6f 20 63 72 65 61 74 65 20 69 74 2e 2e 2e   to create it...
0df0: 5c 6e 22 29 0a 09 20 20 28 63 72 65 61 74 65 2d  \n")..  (create-
0e00: 64 69 72 65 63 74 6f 72 79 20 66 69 72 73 74 64  directory firstd
0e10: 20 23 74 29 29 29 0a 0a 20 20 20 20 28 70 72 69   #t)))..    (pri
0e20: 6e 74 20 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  nt "============
0e30: 3d 3d 3d 3d 3d 3d 5c 6e 4d 65 67 61 74 65 73 74  ======\nMegatest
0e40: 20 75 73 65 73 20 61 20 74 72 65 65 20 6f 66 20   uses a tree of 
0e50: 73 79 6d 6c 69 6e 6b 73 20 74 6f 20 70 72 6f 76  symlinks to prov
0e60: 69 64 65 20 61 20 75 6e 69 66 6f 72 6d 20 73 74  ide a uniform st
0e70: 72 75 63 74 75 72 65 20 66 6f 72 20 66 69 6e 64  ructure for find
0e80: 69 6e 67 20 61 6c 6c 20 74 68 65 20 74 65 73 74  ing all the test
0e90: 73 0a 79 6f 75 20 72 75 6e 20 6f 76 65 72 20 74  s.you run over t
0ea0: 69 6d 65 2e 20 50 6c 65 61 73 65 20 70 72 6f 76  ime. Please prov
0eb0: 69 64 65 20 61 20 70 61 74 68 20 77 68 65 72 65  ide a path where
0ec0: 20 77 65 20 63 61 6e 20 63 72 65 61 74 65 20 74   we can create t
0ed0: 68 69 73 20 6c 69 6e 6b 20 74 72 65 65 2e 22 29  his link tree.")
0ee0: 0a 20 20 20 20 28 64 69 73 70 6c 61 79 20 22 45  .    (display "E
0ef0: 6e 74 65 72 20 6c 69 6e 6b 20 74 72 65 65 20 64  nter link tree d
0f00: 69 72 65 63 74 6f 72 79 3a 20 22 29 0a 20 20 20  irectory: ").   
0f10: 20 28 73 65 74 21 20 6c 6e 74 72 65 65 20 28 72   (set! lntree (r
0f20: 65 61 64 2d 6c 69 6e 65 29 29 0a 20 20 20 20 28  ead-line)).    (
0f30: 69 66 20 28 6e 6f 74 20 28 64 69 72 65 63 74 6f  if (not (directo
0f40: 72 79 3f 20 6c 6e 74 72 65 65 29 29 0a 09 28 62  ry? lntree))..(b
0f50: 65 67 69 6e 0a 09 20 20 28 70 72 69 6e 74 20 22  egin..  (print "
0f60: 57 41 52 4e 49 4e 47 3a 20 79 6f 75 20 68 61 76  WARNING: you hav
0f70: 65 20 73 70 65 63 69 66 69 65 64 20 61 20 70 61  e specified a pa
0f80: 74 68 20 22 20 6c 6e 74 72 65 65 20 22 74 68 61  th " lntree "tha
0f90: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
0fa0: 2e 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  . Attempting to 
0fb0: 63 72 65 61 74 65 20 69 74 2e 2e 2e 5c 6e 22 29  create it...\n")
0fc0: 0a 09 20 20 28 63 72 65 61 74 65 2d 64 69 72 65  ..  (create-dire
0fd0: 63 74 6f 72 79 20 6c 6e 74 72 65 65 20 23 74 29  ctory lntree #t)
0fe0: 29 29 0a 20 20 20 20 0a 20 20 20 20 28 77 69 74  )).    .    (wit
0ff0: 68 2d 6f 75 74 70 75 74 2d 74 6f 2d 66 69 6c 65  h-output-to-file
1000: 20 28 63 6f 6e 63 20 70 61 74 68 20 22 2f 6d 65   (conc path "/me
1010: 67 61 74 65 73 74 2e 63 6f 6e 66 69 67 22 29 0a  gatest.config").
1020: 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29        (lambda ()
1030: 0a 09 28 70 72 69 6e 74 20 22 5b 66 69 65 6c 64  ..(print "[field
1040: 73 5d 22 29 0a 09 28 6d 61 70 20 28 6c 61 6d 62  s]")..(map (lamb
1050: 64 61 20 28 6b 29 28 70 72 69 6e 74 20 6b 20 22  da (k)(print k "
1060: 20 54 45 58 54 22 29 29 20 6b 65 79 73 29 0a 09   TEXT")) keys)..
1070: 28 70 72 69 6e 74 20 22 22 29 0a 09 28 70 72 69  (print "")..(pri
1080: 6e 74 20 22 5b 73 65 74 75 70 5d 22 29 0a 09 28  nt "[setup]")..(
1090: 70 72 69 6e 74 20 22 23 20 41 64 6a 75 73 74 20  print "# Adjust 
10a0: 6d 61 78 5f 63 6f 6e 63 75 72 72 65 6e 74 5f 6a  max_concurrent_j
10b0: 6f 62 73 20 74 6f 20 6c 69 6d 69 74 20 68 6f 77  obs to limit how
10c0: 20 6d 75 63 68 20 79 6f 75 20 6c 6f 61 64 20 79   much you load y
10d0: 6f 75 72 20 6d 61 63 68 69 6e 65 73 22 29 0a 09  our machines")..
10e0: 28 70 72 69 6e 74 20 22 6d 61 78 5f 63 6f 6e 63  (print "max_conc
10f0: 75 72 72 65 6e 74 5f 6a 6f 62 73 20 35 30 5c 6e  urrent_jobs 50\n
1100: 22 29 0a 09 28 70 72 69 6e 74 20 22 23 20 54 68  ")..(print "# Th
1110: 69 73 20 69 73 20 79 6f 75 72 20 6c 69 6e 6b 20  is is your link 
1120: 70 61 74 68 2c 20 79 6f 75 20 63 61 6e 20 6d 6f  path, you can mo
1130: 76 65 20 69 74 20 62 75 74 20 69 74 20 69 73 20  ve it but it is 
1140: 67 65 6e 65 72 61 6c 6c 79 20 62 65 74 74 65 72  generally better
1150: 20 74 6f 20 6b 65 65 70 20 69 74 20 73 74 61 62   to keep it stab
1160: 6c 65 22 29 0a 09 28 70 72 69 6e 74 20 22 6c 69  le")..(print "li
1170: 6e 6b 74 72 65 65 20 22 20 6c 6e 74 72 65 65 29  nktree " lntree)
1180: 0a 09 28 70 72 69 6e 74 20 22 5c 6e 23 20 4a 6f  ..(print "\n# Jo
1190: 62 20 74 6f 6f 6c 73 20 61 72 65 20 6d 6f 72 65  b tools are more
11a0: 20 61 64 76 61 6e 63 65 64 20 77 61 79 73 20 74   advanced ways t
11b0: 6f 20 63 6f 6e 74 72 6f 6c 20 68 6f 77 20 79 6f  o control how yo
11c0: 75 72 20 6a 6f 62 73 20 61 72 65 20 6c 61 75 6e  ur jobs are laun
11d0: 63 68 65 64 22 29 0a 09 28 70 72 69 6e 74 20 22  ched")..(print "
11e0: 5b 6a 6f 62 74 6f 6f 6c 73 5d 5c 6e 75 73 65 73  [jobtools]\nuses
11f0: 68 65 6c 6c 20 79 65 73 5c 6e 6c 61 75 6e 63 68  hell yes\nlaunch
1200: 65 72 20 6e 62 66 69 6e 64 5c 6e 22 29 0a 09 28  er nbfind\n")..(
1210: 70 72 69 6e 74 20 22 23 20 59 6f 75 20 63 61 6e  print "# You can
1220: 20 6f 76 65 72 72 69 64 65 20 65 6e 76 69 72 6f   override enviro
1230: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20  nment variables 
1240: 66 6f 72 20 61 6c 6c 20 79 6f 75 72 20 74 65 73  for all your tes
1250: 74 73 20 68 65 72 65 22 29 0a 09 28 70 72 69 6e  ts here")..(prin
1260: 74 20 22 5b 65 6e 76 2d 6f 76 65 72 72 69 64 65  t "[env-override
1270: 5d 5c 6e 45 58 41 4d 50 4c 45 5f 56 41 52 20 65  ]\nEXAMPLE_VAR e
1280: 78 61 6d 70 6c 65 20 76 61 6c 75 65 5c 6e 22 29  xample value\n")
1290: 0a 09 28 70 72 69 6e 74 20 22 23 20 41 73 20 79  ..(print "# As y
12a0: 6f 75 20 72 75 6e 20 6d 6f 72 65 20 74 65 73 74  ou run more test
12b0: 73 20 79 6f 75 20 6d 61 79 20 6e 65 65 64 20 74  s you may need t
12c0: 6f 20 61 64 64 20 61 64 64 69 74 69 6f 6e 61 6c  o add additional
12d0: 20 64 69 73 6b 73 2c 20 74 68 65 20 6e 61 6d 65   disks, the name
12e0: 73 20 61 72 65 20 61 72 62 69 74 72 61 72 79 20  s are arbitrary 
12f0: 62 75 74 20 6d 75 73 74 20 62 65 20 75 6e 69 71  but must be uniq
1300: 75 65 22 29 0a 09 28 70 72 69 6e 74 20 22 5b 64  ue")..(print "[d
1310: 69 73 6b 73 5d 5c 6e 64 69 73 6b 30 20 22 20 66  isks]\ndisk0 " f
1320: 69 72 73 74 64 29 29 29 0a 0a 20 20 20 20 28 70  irstd)))..    (p
1330: 72 69 6e 74 20 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  rint "==========
1340: 3d 3d 3d 3d 3d 3d 3d 3d 5c 6e 49 27 6d 20 6e 6f  ========\nI'm no
1350: 77 20 63 72 65 61 74 69 6e 67 20 61 20 72 75 6e  w creating a run
1360: 63 6f 6e 66 69 67 73 2e 63 6f 6e 66 69 67 20 66  configs.config f
1370: 69 6c 65 20 66 6f 72 20 79 6f 75 20 77 69 74 68  ile for you with
1380: 20 61 20 64 65 66 61 75 6c 74 20 73 65 63 74 69   a default secti
1390: 6f 6e 2e 0a 59 6f 75 20 63 61 6e 20 75 73 65 20  on..You can use 
13a0: 74 68 69 73 20 66 69 6c 65 20 74 6f 20 73 65 74  this file to set
13b0: 20 76 61 72 69 61 62 6c 65 73 20 66 6f 72 20 79   variables for y
13c0: 6f 75 72 20 74 65 73 74 73 20 62 61 73 65 64 20  our tests based 
13d0: 6f 6e 20 74 68 65 20 5c 22 74 61 72 67 65 74 5c  on the \"target\
13e0: 22 20 28 74 68 65 20 63 6f 6d 62 69 6e 61 74 69  " (the combinati
13f0: 6f 6e 0a 6f 66 20 6b 65 79 73 29 2e 22 29 0a 20  on.of keys)."). 
1400: 20 20 20 28 77 69 74 68 2d 6f 75 74 70 75 74 2d     (with-output-
1410: 74 6f 2d 66 69 6c 65 20 28 63 6f 6e 63 20 70 61  to-file (conc pa
1420: 74 68 20 22 2f 72 75 6e 63 6f 6e 66 69 67 73 2e  th "/runconfigs.
1430: 63 6f 6e 66 69 67 22 29 0a 20 20 20 20 20 20 28  config").      (
1440: 6c 61 6d 62 64 61 20 28 29 0a 09 28 70 72 69 6e  lambda ()..(prin
1450: 74 20 22 23 20 54 68 65 20 76 61 72 69 61 62 6c  t "# The variabl
1460: 65 73 20 69 6e 20 74 68 65 20 64 65 66 61 75 6c  es in the defaul
1470: 74 20 63 61 74 65 67 6f 72 79 20 77 69 6c 6c 20  t category will 
1480: 62 65 20 73 65 65 6e 20 69 6e 20 61 6c 6c 20 72  be seen in all r
1490: 75 6e 73 5c 6e 5b 64 65 66 61 75 6c 74 5d 5c 6e  uns\n[default]\n
14a0: 41 4c 4c 54 45 53 54 53 20 73 65 65 20 74 68 69  ALLTESTS see thi
14b0: 73 20 76 61 72 69 61 62 6c 65 5c 6e 22 29 0a 09  s variable\n")..
14c0: 0a 09 28 70 72 69 6e 74 20 22 23 20 59 6f 75 72  ..(print "# Your
14d0: 20 76 61 72 69 61 62 6c 65 73 20 68 65 72 65 20   variables here 
14e0: 61 72 65 20 67 72 6f 75 70 65 64 20 62 79 20 74  are grouped by t
14f0: 61 72 67 65 74 73 20 5b 22 20 28 73 74 72 69 6e  argets [" (strin
1500: 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 6b 65  g-intersperse ke
1510: 79 73 20 22 2f 22 29 20 22 5d 22 29 0a 09 28 6c  ys "/") "]")..(l
1520: 65 74 20 28 28 65 78 61 6d 70 6c 65 2d 74 61 72  et ((example-tar
1530: 67 65 74 20 28 73 74 72 69 6e 67 2d 69 6e 74 65  get (string-inte
1540: 72 73 70 65 72 73 65 20 28 6d 61 70 20 28 6c 61  rsperse (map (la
1550: 6d 62 64 61 20 28 6b 29 28 63 6f 6e 63 20 6b 20  mbda (k)(conc k 
1560: 22 5f 76 61 6c 22 29 29 20 6b 65 79 73 29 20 22  "_val")) keys) "
1570: 2f 22 29 29 29 0a 09 20 20 28 70 72 69 6e 74 20  /")))..  (print 
1580: 22 5b 22 20 65 78 61 6d 70 6c 65 2d 74 61 72 67  "[" example-targ
1590: 65 74 20 22 5d 22 29 0a 09 20 20 28 70 72 69 6e  et "]")..  (prin
15a0: 74 20 22 41 4e 4f 54 48 45 52 56 41 52 20 6f 6e  t "ANOTHERVAR on
15b0: 6c 79 20 64 65 66 69 6e 65 64 20 69 66 20 74 61  ly defined if ta
15c0: 72 67 65 74 20 69 73 20 22 20 65 78 61 6d 70 6c  rget is " exampl
15d0: 65 2d 74 61 72 67 65 74 29 29 29 29 0a 0a 20 20  e-target))))..  
15e0: 20 20 3b 3b 20 4e 6f 77 20 63 72 65 61 74 65 20    ;; Now create 
15f0: 61 20 74 65 73 74 20 61 6e 64 20 6c 6f 67 70 72  a test and logpr
1600: 6f 20 66 69 6c 65 0a 20 20 20 20 28 70 72 69 6e  o file.    (prin
1610: 74 20 22 59 6f 75 20 6e 6f 77 20 68 61 76 65 20  t "You now have 
1620: 74 68 65 20 62 61 73 69 63 20 63 6f 6d 6d 6f 6e  the basic common
1630: 20 66 69 6c 65 73 20 66 6f 72 20 79 6f 75 72 20   files for your 
1640: 6d 65 67 61 74 65 73 74 20 73 65 74 75 70 2e 20  megatest setup. 
1650: 4e 65 78 74 20 72 75 6e 20 5c 22 6d 65 67 61 74  Next run \"megat
1660: 65 73 74 20 2d 67 65 6e 74 65 73 74 5c 22 5c 6e  est -gentest\"\n
1670: 22 0a 09 20 20 20 22 74 6f 20 63 72 65 61 74 65  "..   "to create
1680: 20 61 20 74 65 73 74 2e 5c 6e 5c 6e 54 68 61 6e   a test.\n\nThan
1690: 6b 73 20 66 6f 72 20 75 73 69 6e 67 20 4d 65 67  ks for using Meg
16a0: 61 74 65 73 74 2e 20 59 6f 75 20 63 61 6e 20 65  atest. You can e
16b0: 64 69 74 20 79 6f 75 72 20 63 6f 6e 66 69 67 20  dit your config 
16c0: 66 69 6c 65 73 20 61 6e 64 20 63 72 65 61 74 65  files and create
16d0: 20 74 65 73 74 73 5c 6e 22 0a 09 20 20 20 22 69   tests\n"..   "i
16e0: 6e 20 74 68 65 20 22 20 70 61 74 68 20 22 20 64  n the " path " d
16f0: 69 72 65 63 74 6f 72 79 22 29 29 29 0a 0a 0a 3b  irectory")))...;
1700: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ;===============
1710: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1720: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1730: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1740: 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 63 72 65 61 74  =======.;; creat
1750: 65 20 73 6b 65 6c 65 74 6f 6e 20 66 69 6c 65 73  e skeleton files
1760: 20 66 6f 72 20 61 20 74 65 73 74 0a 3b 3b 3d 3d   for a test.;;==
1770: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1780: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1790: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
17a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
17b0: 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 67  ====..(define (g
17c0: 65 6e 65 78 61 6d 70 6c 65 3a 6d 6b 2d 6d 65 67  enexample:mk-meg
17d0: 61 74 65 73 74 2d 74 65 73 74 20 74 65 73 74 6e  atest-test testn
17e0: 61 6d 65 29 0a 20 20 3b 3b 20 47 61 74 68 65 72  ame).  ;; Gather
17f0: 20 6e 65 65 64 65 64 20 64 61 74 61 0a 20 20 28   needed data.  (
1800: 6c 65 74 20 28 28 77 61 69 74 6f 6e 20 20 20 23  let ((waiton   #
1810: 66 29 0a 09 28 70 72 69 6f 72 69 74 79 20 23 66  f)..(priority #f
1820: 29 0a 09 28 64 65 73 63 72 69 70 74 69 6f 6e 20  )..(description 
1830: 23 66 29 0a 09 28 73 74 65 70 73 20 20 20 20 27  #f)..(steps    '
1840: 28 29 29 0a 09 28 73 63 72 69 70 74 73 20 20 27  ())..(scripts  '
1850: 28 29 29 0a 09 28 69 74 65 6d 73 20 20 20 20 27  ())..(items    '
1860: 28 29 29 0a 09 28 72 65 6c 2d 70 61 74 68 20 23  ())..(rel-path #
1870: 66 29 29 0a 20 20 20 20 28 70 72 69 6e 74 20 22  f)).    (print "
1880: 57 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20  We are going to 
1890: 67 65 6e 65 72 61 74 65 20 61 20 73 6b 65 6c 65  generate a skele
18a0: 74 6f 6e 20 73 65 74 20 6f 66 20 66 69 6c 65 73  ton set of files
18b0: 20 66 6f 72 20 79 6f 75 72 20 74 65 73 74 20 22   for your test "
18c0: 20 74 65 73 74 6e 61 6d 65 20 22 20 4e 6f 74 65   testname " Note
18d0: 3a 20 64 6f 20 6e 6f 74 20 77 6f 72 72 79 20 22  : do not worry "
18e0: 0a 09 20 20 20 22 74 6f 6f 20 6d 75 63 68 20 61  ..   "too much a
18f0: 62 6f 75 74 20 74 79 70 6f 73 2c 20 79 6f 75 20  bout typos, you 
1900: 63 61 6e 20 65 64 69 74 20 74 68 65 20 66 69 6c  can edit the fil
1910: 65 73 20 77 68 65 6e 20 79 6f 75 20 61 72 65 20  es when you are 
1920: 64 6f 6e 65 22 29 0a 0a 20 20 20 20 28 70 72 69  done")..    (pri
1930: 6e 74 20 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  nt "============
1940: 3d 3d 3d 3d 3d 3d 5c 6e 50 6c 65 61 73 65 20 64  ======\nPlease d
1950: 65 73 63 72 69 62 65 20 74 68 69 73 20 74 65 73  escribe this tes
1960: 74 2e 20 54 68 65 20 64 65 73 63 72 69 70 74 69  t. The descripti
1970: 6f 6e 20 77 69 6c 6c 20 62 65 20 76 69 73 69 62  on will be visib
1980: 6c 65 20 69 6e 20 76 61 72 69 6f 75 73 20 64 69  le in various di
1990: 61 6c 6f 67 73 20 61 6e 64 20 72 65 70 6f 72 74  alogs and report
19a0: 73 22 29 0a 20 20 20 20 28 64 69 73 70 6c 61 79  s").    (display
19b0: 20 22 45 6e 74 65 72 20 6f 6e 65 20 6c 69 6e 65   "Enter one line
19c0: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 66 6f 72   description for
19d0: 20 74 68 69 73 20 74 65 73 74 3a 20 22 29 0a 20   this test: "). 
19e0: 20 20 20 28 73 65 74 21 20 64 65 73 63 72 69 70     (set! descrip
19f0: 74 69 6f 6e 20 28 72 65 61 64 2d 6c 69 6e 65 29  tion (read-line)
1a00: 29 0a 0a 20 20 20 20 28 70 72 69 6e 74 20 22 3d  )..    (print "=
1a10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1a20: 3d 5c 6e 44 6f 65 73 20 74 68 69 73 20 74 65 73  =\nDoes this tes
1a30: 74 2c 20 22 20 74 65 73 74 6e 61 6d 65 20 22 2c  t, " testname ",
1a40: 20 72 65 71 75 69 72 65 20 61 6e 79 20 6f 74 68   require any oth
1a50: 65 72 20 74 65 73 74 20 62 65 20 72 75 6e 20 70  er test be run p
1a60: 72 69 6f 72 20 74 6f 20 6c 61 75 6e 63 68 3f 22  rior to launch?"
1a70: 29 0a 20 20 20 20 28 64 69 73 70 6c 61 79 20 28  ).    (display (
1a80: 63 6f 6e 63 20 22 45 6e 74 65 72 20 73 70 61 63  conc "Enter spac
1a90: 65 20 64 65 6c 69 6d 69 74 65 64 20 6c 69 73 74  e delimited list
1aa0: 20 6f 66 20 74 65 73 74 73 20 77 68 69 63 68 20   of tests which 
1ab0: 22 20 74 65 73 74 6e 61 6d 65 20 22 20 6d 75 73  " testname " mus
1ac0: 74 20 77 61 69 74 20 66 6f 72 3a 20 22 29 29 0a  t wait for: ")).
1ad0: 20 20 20 20 28 73 65 74 21 20 77 61 69 74 6f 6e      (set! waiton
1ae0: 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 0a 0a 20   (read-line)).. 
1af0: 20 20 20 28 70 72 69 6e 74 20 22 3d 3d 3d 3d 3d     (print "=====
1b00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 5c 6e 44  =============\nD
1b10: 6f 20 79 6f 75 20 77 69 73 68 20 74 6f 20 70 72  o you wish to pr
1b20: 69 6f 72 69 74 69 7a 65 20 74 68 65 20 72 75 6e  ioritize the run
1b30: 6e 69 6e 67 20 6f 66 20 74 68 69 73 20 74 65 73  ning of this tes
1b40: 74 20 6f 76 65 72 20 6f 74 68 65 72 20 74 65 73  t over other tes
1b50: 74 73 3f 20 49 66 20 73 6f 22 29 0a 20 20 20 20  ts? If so").    
1b60: 28 70 72 69 6e 74 20 22 65 6e 74 65 72 20 61 20  (print "enter a 
1b70: 6e 75 6d 62 65 72 20 67 72 65 61 74 65 72 20 74  number greater t
1b80: 68 61 6e 20 7a 65 72 6f 20 68 65 72 65 22 29 0a  han zero here").
1b90: 20 20 20 20 28 64 69 73 70 6c 61 79 20 22 45 6e      (display "En
1ba0: 74 65 72 20 61 20 70 72 69 6f 72 69 74 79 20 6f  ter a priority o
1bb0: 66 20 30 20 28 64 65 66 61 75 6c 74 29 20 6f 72  f 0 (default) or
1bc0: 20 68 69 67 68 65 72 3a 20 22 29 0a 20 20 20 20   higher: ").    
1bd0: 28 73 65 74 21 20 70 72 69 6f 72 69 74 79 20 28  (set! priority (
1be0: 72 65 61 64 2d 6c 69 6e 65 29 29 0a 0a 20 20 20  read-line))..   
1bf0: 20 3b 3b 20 47 65 74 20 74 68 65 20 73 74 65 70   ;; Get the step
1c00: 73 0a 20 20 20 20 28 70 72 69 6e 74 20 22 3d 3d  s.    (print "==
1c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1c20: 5c 6e 4e 6f 77 20 74 6f 20 65 6e 74 65 72 20 74  \nNow to enter t
1c30: 68 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73  he one or more s
1c40: 74 65 70 73 20 74 68 61 74 20 6d 61 6b 65 20 75  teps that make u
1c50: 70 20 79 6f 75 72 20 74 65 73 74 2c 20 6e 6f 74  p your test, not
1c60: 65 3b 20 79 6f 75 20 63 61 6e 20 61 64 64 20 6d  e; you can add m
1c70: 6f 72 65 20 6c 61 74 65 72 22 29 0a 20 20 20 20  ore later").    
1c80: 28 70 72 69 6e 74 20 22 48 69 6e 74 3b 20 75 73  (print "Hint; us
1c90: 65 20 2e 73 68 20 65 78 74 65 6e 73 69 6f 6e 20  e .sh extension 
1ca0: 6f 6e 20 74 68 65 20 73 63 72 69 70 74 20 6e 61  on the script na
1cb0: 6d 65 73 20 61 6e 64 20 77 65 27 6c 6c 20 63 72  mes and we'll cr
1cc0: 65 61 74 65 20 70 6c 61 63 65 68 6f 6c 64 65 72  eate placeholder
1cd0: 20 73 63 72 69 70 74 73 2e 22 0a 0a 20 20 20 20   scripts."..    
1ce0: 28 6c 65 74 20 28 28 73 74 65 70 6e 61 6d 65 20  (let ((stepname 
1cf0: 20 20 23 66 29 0a 09 20 20 28 73 63 72 69 70 74    #f)..  (script
1d00: 6e 61 6d 65 20 23 66 29 29 0a 20 20 20 20 20 20  name #f)).      
1d10: 28 6c 65 74 20 6c 6f 6f 70 20 28 28 64 6f 6e 65  (let loop ((done
1d20: 20 23 66 29 29 0a 09 28 64 69 73 70 6c 61 79 20   #f))..(display 
1d30: 22 45 6e 74 65 72 20 74 68 65 20 6e 61 6d 65 20  "Enter the name 
1d40: 66 6f 72 20 74 68 69 73 20 73 74 65 70 20 28 62  for this step (b
1d50: 6c 61 6e 6b 20 74 6f 20 73 74 6f 70 29 3a 20 22  lank to stop): "
1d60: 29 0a 09 28 73 65 74 21 20 73 74 65 70 6e 61 6d  )..(set! stepnam
1d70: 65 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 0a 09  e (read-line))..
1d80: 28 69 66 20 28 6e 6f 74 20 28 65 71 75 61 6c 3f  (if (not (equal?
1d90: 20 73 74 65 70 6e 61 6d 65 20 22 22 29 29 0a 09   stepname ""))..
1da0: 20 20 20 20 28 62 65 67 69 6e 0a 09 20 20 20 20      (begin..    
1db0: 20 20 28 64 69 73 70 6c 61 79 20 22 45 6e 74 65    (display "Ente
1dc0: 72 20 74 68 65 20 73 63 72 69 70 74 20 6f 72 20  r the script or 
1dd0: 70 72 6f 67 61 6d 20 74 6f 20 72 75 6e 3a 20 22  progam to run: "
1de0: 29 0a 09 20 20 20 20 20 20 28 73 65 74 21 20 73  )..      (set! s
1df0: 63 72 69 70 74 6e 61 6d 65 20 28 72 65 61 64 2d  criptname (read-
1e00: 6c 69 6e 65 29 29 0a 09 20 20 20 20 20 20 28 73  line))..      (s
1e10: 65 74 21 20 73 74 65 70 73 20 28 61 70 70 65 6e  et! steps (appen
1e20: 64 20 73 74 65 70 73 20 28 6c 69 73 74 20 28 6c  d steps (list (l
1e30: 69 73 74 20 73 74 65 70 6e 61 6d 65 20 73 63 72  ist stepname scr
1e40: 69 70 74 6e 61 6d 65 29 29 29 29 29 29 0a 09 28  iptname))))))..(
1e50: 69 66 20 28 6e 6f 74 20 28 65 71 75 61 6c 3f 20  if (not (equal? 
1e60: 73 74 65 70 6e 61 6d 65 20 22 22 29 29 0a 09 20  stepname "")).. 
1e70: 20 20 20 28 6c 6f 6f 70 20 23 66 29 29 29 29 0a     (loop #f)))).
1e80: 0a 20 20 20 20 3b 3b 20 47 65 74 20 74 68 65 20  .    ;; Get the 
1e90: 69 74 65 6d 73 0a 20 20 20 20 28 70 72 69 6e 74  items.    (print
1ea0: 20 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d   "==============
1eb0: 3d 3d 3d 3d 5c 6e 4e 65 78 74 20 77 65 20 6e 65  ====\nNext we ne
1ec0: 65 64 20 74 6f 20 67 65 74 20 74 68 65 20 76 61  ed to get the va
1ed0: 72 69 61 62 6c 65 73 20 61 6e 64 20 76 61 6c 75  riables and valu
1ee0: 65 73 20 79 6f 75 20 77 69 73 68 20 74 6f 20 69  es you wish to i
1ef0: 74 65 72 61 74 65 20 74 68 69 73 20 74 65 73 74  terate this test
1f00: 20 6f 76 65 72 20 28 62 6c 61 6e 6b 20 66 6f 72   over (blank for
1f10: 20 6e 6f 6e 65 29 22 29 0a 20 20 20 20 28 6c 65   none)").    (le
1f20: 74 20 28 28 76 61 72 6e 61 6d 65 20 23 66 29 0a  t ((varname #f).
1f30: 09 20 20 28 76 61 6c 75 65 73 20 20 23 66 29 29  .  (values  #f))
1f40: 0a 20 20 20 20 20 20 28 6c 65 74 20 6c 6f 6f 70  .      (let loop
1f50: 20 28 28 64 6f 6e 65 20 23 66 29 29 0a 09 28 64   ((done #f))..(d
1f60: 69 73 70 6c 61 79 20 22 45 6e 74 65 72 20 74 68  isplay "Enter th
1f70: 65 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 3a  e variable name:
1f80: 20 22 29 0a 09 28 73 65 74 21 20 76 61 72 6e 61   ")..(set! varna
1f90: 6d 65 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 0a  me (read-line)).
1fa0: 09 28 69 66 20 28 6e 6f 74 20 28 65 71 75 61 6c  .(if (not (equal
1fb0: 3f 20 76 61 72 6e 61 6d 65 20 22 22 29 29 0a 09  ? varname ""))..
1fc0: 20 20 20 20 28 62 65 67 69 6e 0a 09 20 20 20 20      (begin..    
1fd0: 20 20 28 64 69 73 70 6c 61 79 20 28 63 6f 6e 63    (display (conc
1fe0: 20 22 45 6e 74 65 72 20 74 68 65 20 73 70 61 63   "Enter the spac
1ff0: 65 20 73 65 70 61 72 61 74 65 64 20 6c 69 73 74  e separated list
2000: 20 6f 66 20 76 61 6c 75 65 73 20 66 6f 72 20 22   of values for "
2010: 20 76 61 72 6e 61 6d 65 20 22 3a 20 22 29 29 0a   varname ": ")).
2020: 09 20 20 20 20 20 20 28 73 65 74 21 20 76 61 6c  .      (set! val
2030: 75 65 73 20 28 72 65 61 64 2d 6c 69 6e 65 29 29  ues (read-line))
2040: 0a 09 20 20 20 20 20 20 28 73 65 74 21 20 69 74  ..      (set! it
2050: 65 6d 73 20 28 61 70 70 65 6e 64 20 69 74 65 6d  ems (append item
2060: 73 20 28 6c 69 73 74 20 28 63 6f 6e 63 20 76 61  s (list (conc va
2070: 72 6e 61 6d 65 20 22 20 22 20 76 61 6c 75 65 73  rname " " values
2080: 29 29 29 29 29 29 0a 09 28 69 66 20 28 6e 6f 74  ))))))..(if (not
2090: 20 28 65 71 75 61 6c 3f 20 76 61 72 6e 61 6d 65   (equal? varname
20a0: 20 22 22 29 29 0a 09 20 20 20 20 28 6c 6f 6f 70   ""))..    (loop
20b0: 20 23 66 29 29 29 29 0a 0a 20 20 20 20 3b 3b 20   #f))))..    ;; 
20c0: 4e 6f 77 20 63 72 65 61 74 65 20 74 68 65 20 74  Now create the t
20d0: 65 73 74 0a 20 20 20 20 28 63 6f 6e 64 0a 20 20  est.    (cond.  
20e0: 20 20 20 28 28 66 69 6c 65 2d 65 78 69 73 74 73     ((file-exists
20f0: 3f 20 22 6d 65 67 61 74 65 73 74 2e 63 6f 6e 66  ? "megatest.conf
2100: 69 67 22 29 20 20 20 20 20 20 20 20 20 28 73 65  ig")         (se
2110: 74 21 20 72 65 6c 2d 70 61 74 68 20 22 2e 2f 22  t! rel-path "./"
2120: 29 29 0a 20 20 20 20 20 28 28 66 69 6c 65 2d 65  )).     ((file-e
2130: 78 69 73 74 73 3f 20 22 2e 2e 2f 6d 65 67 61 74  xists? "../megat
2140: 65 73 74 2e 63 6f 6e 66 69 67 22 29 20 20 20 20  est.config")    
2150: 20 20 28 73 65 74 21 20 72 65 6c 2d 70 61 74 68    (set! rel-path
2160: 20 22 2e 2e 2f 22 29 29 0a 20 20 20 20 20 28 28   "../")).     ((
2170: 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 22 2e 2e  file-exists? "..
2180: 2f 2e 2e 2f 6d 65 67 61 74 65 73 74 2e 63 6f 6e  /../megatest.con
2190: 66 69 67 22 29 20 20 20 28 73 65 74 21 20 72 65  fig")   (set! re
21a0: 6c 2d 70 61 74 68 20 22 2e 2e 2f 2e 2e 2f 22 29  l-path "../../")
21b0: 29 0a 20 20 20 20 20 28 28 66 69 6c 65 2d 65 78  ).     ((file-ex
21c0: 69 73 74 73 3f 20 22 2e 2e 2f 2e 2e 2f 2e 2e 2f  ists? "../../../
21d0: 6d 65 67 61 74 65 73 74 2e 63 6f 6e 66 69 67 22  megatest.config"
21e0: 29 28 73 65 74 21 20 72 65 6c 2d 70 61 74 68 20  )(set! rel-path 
21f0: 22 2e 2e 2f 2e 2e 2f 2e 2e 2f 22 29 29 29 20 3b  "../../../"))) ;
2200: 3b 20 67 6f 6f 64 20 65 6e 6f 75 67 68 20 64 61  ; good enough da
2210: 6e 67 20 69 74 2e 0a 20 20 20 20 28 69 66 20 28  ng it..    (if (
2220: 6e 6f 74 20 72 65 6c 2d 70 61 74 68 29 0a 09 28  not rel-path)..(
2230: 62 65 67 69 6e 0a 09 20 20 28 70 72 69 6e 74 20  begin..  (print 
2240: 22 45 52 52 4f 52 3a 20 59 6f 75 20 6d 75 73 74  "ERROR: You must
2250: 20 72 75 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e   run this comman
2260: 64 20 69 6e 20 61 20 6d 65 67 61 74 65 73 74 20  d in a megatest 
2270: 61 72 65 61 20 75 6e 64 65 72 20 77 68 65 72 65  area under where
2280: 20 74 68 65 20 6d 65 67 61 74 65 73 74 2e 63 6f   the megatest.co
2290: 6e 66 69 67 20 66 69 6c 65 20 65 78 69 73 74 73  nfig file exists
22a0: 2e 22 29 0a 09 20 20 28 65 78 69 74 20 31 29 29  .")..  (exit 1))
22b0: 0a 09 28 6c 65 74 20 28 28 74 65 73 74 64 69 72  ..(let ((testdir
22c0: 20 28 63 6f 6e 63 20 72 65 6c 2d 70 61 74 68 20   (conc rel-path 
22d0: 22 74 65 73 74 73 2f 22 20 74 65 73 74 6e 61 6d  "tests/" testnam
22e0: 65 29 29 29 0a 09 20 20 28 63 72 65 61 74 65 2d  e)))..  (create-
22f0: 64 69 72 65 63 74 6f 72 79 20 74 65 73 74 64 69  directory testdi
2300: 72 20 23 74 29 0a 09 20 20 28 77 69 74 68 2d 6f  r #t)..  (with-o
2310: 75 74 70 75 74 2d 74 6f 2d 66 69 6c 65 20 28 63  utput-to-file (c
2320: 6f 6e 63 20 74 65 73 74 64 69 72 20 22 2f 74 65  onc testdir "/te
2330: 73 74 63 6f 6e 66 69 67 22 29 0a 09 20 20 20 20  stconfig")..    
2340: 28 6c 61 6d 62 64 61 20 28 29 0a 09 20 20 20 20  (lambda ()..    
2350: 20 20 28 70 72 69 6e 74 20 22 23 20 41 64 64 20    (print "# Add 
2360: 61 64 64 69 74 69 6f 6e 61 6c 20 73 74 65 70 73  additional steps
2370: 20 68 65 72 65 2e 20 46 6f 72 6d 61 74 20 69 73   here. Format is
2380: 20 5c 22 73 74 65 70 6e 61 6d 65 20 73 63 72 69   \"stepname scri
2390: 70 74 5c 22 5c 6e 5b 65 7a 73 74 65 70 73 5d 22  pt\"\n[ezsteps]"
23a0: 29 0a 09 20 20 20 20 20 20 28 6d 61 70 20 28 6c  )..      (map (l
23b0: 61 6d 62 64 61 20 28 73 74 70 29 28 70 72 69 6e  ambda (stp)(prin
23c0: 74 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73  t (string-inters
23d0: 70 65 72 73 65 20 73 74 70 20 22 20 22 29 29 29  perse stp " ")))
23e0: 20 73 74 65 70 73 29 0a 09 20 20 20 20 20 20 28   steps)..      (
23f0: 70 72 69 6e 74 20 22 22 29 0a 09 20 20 20 20 20  print "")..     
2400: 20 28 70 72 69 6e 74 20 22 23 20 54 65 73 74 20   (print "# Test 
2410: 72 65 71 75 69 72 65 6d 65 6e 74 73 20 61 72 65  requirements are
2420: 20 73 70 65 63 69 66 69 65 64 20 68 65 72 65 5c   specified here\
2430: 6e 5b 72 65 71 75 69 72 65 6d 65 6e 74 73 5d 22  n[requirements]"
2440: 29 0a 09 20 20 20 20 20 20 28 70 72 69 6e 74 20  )..      (print 
2450: 22 77 61 69 74 6f 6e 20 22 20 77 61 69 74 6f 6e  "waiton " waiton
2460: 29 0a 09 20 20 20 20 20 20 28 70 72 69 6e 74 20  )..      (print 
2470: 22 70 72 69 6f 72 69 74 79 20 22 20 70 72 69 6f  "priority " prio
2480: 72 69 74 79 20 22 5c 6e 22 29 0a 09 20 20 20 20  rity "\n")..    
2490: 20 20 28 70 72 69 6e 74 20 22 23 20 49 74 65 72    (print "# Iter
24a0: 61 74 69 6f 6e 20 66 6f 72 20 79 6f 75 72 20 74  ation for your t
24b0: 65 73 74 73 20 61 72 65 20 63 6f 6e 74 72 6f 6c  ests are control
24c0: 6c 65 64 20 62 79 20 74 68 65 20 69 74 65 6d 73  led by the items
24d0: 20 73 65 63 74 69 6f 6e 5c 6e 5b 69 74 65 6d 73   section\n[items
24e0: 5d 22 29 0a 09 20 20 20 20 20 20 28 6d 61 70 20  ]")..      (map 
24f0: 70 72 69 6e 74 20 69 74 65 6d 73 29 0a 09 20 20  print items)..  
2500: 20 20 20 20 28 70 72 69 6e 74 20 22 22 29 0a 09      (print "")..
2510: 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 23 20        (print "# 
2520: 74 65 73 74 5f 6d 65 74 61 20 69 73 20 61 20 73  test_meta is a s
2530: 65 63 74 69 6f 6e 20 66 6f 72 20 73 74 6f 72 69  ection for stori
2540: 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61  ng additional da
2550: 74 61 20 6f 6e 20 79 6f 75 72 20 74 65 73 74 5c  ta on your test\
2560: 6e 5b 74 65 73 74 5f 6d 65 74 61 5d 22 29 0a 09  n[test_meta]")..
2570: 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 61 75        (print "au
2580: 74 68 6f 72 20 22 20 28 67 65 74 2d 65 6e 76 69  thor " (get-envi
2590: 72 6f 6e 6d 65 6e 74 2d 76 61 72 69 61 62 6c 65  ronment-variable
25a0: 20 22 55 53 45 52 22 29 29 0a 09 20 20 20 20 20   "USER"))..     
25b0: 20 28 70 72 69 6e 74 20 22 6f 77 6e 65 72 20 20   (print "owner  
25c0: 22 20 28 67 65 74 2d 65 6e 76 69 72 6f 6e 6d 65  " (get-environme
25d0: 6e 74 2d 76 61 72 69 61 62 6c 65 20 22 55 53 45  nt-variable "USE
25e0: 52 22 29 29 0a 09 20 20 20 20 20 20 28 70 72 69  R"))..      (pri
25f0: 6e 74 20 22 64 65 73 63 72 69 70 74 69 6f 6e 20  nt "description 
2600: 22 20 64 65 73 63 72 69 70 74 69 6f 6e 29 0a 09  " description)..
2610: 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 74 61        (print "ta
2620: 67 73 20 74 61 67 6f 6e 65 2c 74 61 67 74 77 6f  gs tagone,tagtwo
2630: 22 29 0a 09 20 20 20 20 20 20 28 70 72 69 6e 74  ")..      (print
2640: 20 22 72 65 76 69 65 77 65 64 20 6e 65 76 65 72   "reviewed never
2650: 22 29 29 29 0a 09 20 20 3b 3b 20 4e 6f 77 20 63  ")))..  ;; Now c
2660: 72 65 61 74 65 20 73 68 65 6c 6c 20 73 63 72 69  reate shell scri
2670: 70 74 73 20 28 69 66 20 65 78 74 65 6e 73 69 6f  pts (if extensio
2680: 6e 20 69 73 20 2e 73 68 29 20 61 6e 64 20 6c 6f  n is .sh) and lo
2690: 67 70 72 6f 20 66 69 6c 65 73 0a 09 20 20 28 66  gpro files..  (f
26a0: 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 20  or-each (lambda 
26b0: 28 73 74 70 29 0a 09 09 20 20 20 20 20 20 28 6c  (stp)...      (l
26c0: 65 74 20 28 28 73 74 65 70 6e 61 6d 65 20 28 63  et ((stepname (c
26d0: 61 72 20 73 74 70 29 29 0a 09 09 09 20 20 20 20  ar stp))....    
26e0: 28 73 63 72 69 70 74 20 20 20 28 63 61 64 72 20  (script   (cadr 
26f0: 73 74 70 29 29 29 0a 09 09 09 28 77 69 74 68 2d  stp)))....(with-
2700: 6f 75 74 70 75 74 2d 74 6f 2d 66 69 6c 65 20 28  output-to-file (
2710: 63 6f 6e 63 20 74 65 73 74 64 69 72 20 22 2f 22  conc testdir "/"
2720: 20 73 74 65 70 6e 61 6d 65 20 22 2e 6c 6f 67 70   stepname ".logp
2730: 72 6f 22 29 0a 09 09 09 20 20 28 6c 61 6d 62 64  ro")....  (lambd
2740: 61 20 28 29 0a 09 09 09 20 20 20 20 28 70 72 69  a ()....    (pri
2750: 6e 74 20 67 65 6e 65 78 61 6d 70 6c 65 3a 65 78  nt genexample:ex
2760: 61 6d 70 6c 65 2d 6c 6f 67 70 72 6f 29 29 29 0a  ample-logpro))).
2770: 09 09 09 28 77 69 74 68 2d 6f 75 74 70 75 74 2d  ...(with-output-
2780: 74 6f 2d 66 69 6c 65 20 28 63 6f 6e 63 20 74 65  to-file (conc te
2790: 73 74 64 69 72 20 22 2f 22 20 73 63 72 69 70 74  stdir "/" script
27a0: 20 22 2e 73 68 22 29 0a 09 09 09 20 20 28 6c 61   ".sh")....  (la
27b0: 6d 62 64 61 20 28 29 0a 09 09 09 20 20 20 20 28  mbda ()....    (
27c0: 70 72 69 6e 74 20 67 65 6e 65 78 61 6d 70 6c 65  print genexample
27d0: 3a 65 78 61 6d 70 6c 65 2d 73 63 72 69 70 74 29  :example-script)
27e0: 29 29 0a 09 09 09 28 73 79 73 74 65 6d 20 28 63  ))....(system (c
27f0: 6f 6e 63 20 22 63 68 6d 6f 64 20 75 67 2b 72 20  onc "chmod ug+r 
2800: 22 20 28 63 6f 6e 63 20 74 65 73 74 64 69 72 20  " (conc testdir 
2810: 22 2f 22 20 73 63 72 69 70 74 20 22 2e 73 68 22  "/" script ".sh"
2820: 29 29 29 29 29 0a 09 09 20 20 20 20 73 74 65 70  )))))...    step
2830: 73 29 29 29 29 29 29 0a 09 20 20 3b 3b 20 0a     s))))))..  ;; .