Tcl Source Code

Hex Artifact Content
Login

Artifact afee4f40621652b1eb4d9df44d4941ee2824b261bbecb5348261352622c76521:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 74 63 6c 73 68  #!/usr/bin/tclsh
0010: 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .# -------------
0020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20  -----------.#.# 
0060: 74 65 73 74 2d 70 65 72 66 6f 72 6d 61 6e 63 65  test-performance
0070: 2e 74 63 6c 20 2d 2d 0a 23 20 0a 23 20 20 54 68  .tcl --.# .#  Th
0080: 69 73 20 66 69 6c 65 20 70 72 6f 76 69 64 65 73  is file provides
0090: 20 63 6f 6d 6d 6f 6e 20 70 65 72 66 6f 72 6d 61   common performa
00a0: 6e 63 65 20 74 65 73 74 73 20 66 6f 72 20 63 6f  nce tests for co
00b0: 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 63 6c 2d  mparison of tcl-
00c0: 73 70 65 65 64 0a 23 20 20 64 65 67 72 61 64 61  speed.#  degrada
00d0: 74 69 6f 6e 20 62 79 20 73 77 69 74 63 68 69 6e  tion by switchin
00e0: 67 20 62 65 74 77 65 65 6e 20 62 72 61 6e 63 68  g between branch
00f0: 65 73 2e 0a 23 20 20 28 63 75 72 72 65 6e 74 6c  es..#  (currentl
0100: 79 20 66 6f 72 20 63 6c 6f 63 6b 20 65 6e 73 65  y for clock ense
0110: 6d 62 6c 65 20 6f 6e 6c 79 29 0a 23 0a 23 20 2d  mble only).#.# -
0120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0160: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 0a 23 20 43 6f 70  -------.# .# Cop
0170: 79 72 69 67 68 74 20 28 63 29 20 32 30 31 34 20  yright (c) 2014 
0180: 53 65 72 67 20 47 2e 20 42 72 65 73 74 65 72 20  Serg G. Brester 
0190: 28 61 6b 61 20 73 65 62 72 65 73 29 0a 23 20 0a  (aka sebres).# .
01a0: 23 20 53 65 65 20 74 68 65 20 66 69 6c 65 20 22  # See the file "
01b0: 6c 69 63 65 6e 73 65 2e 74 65 72 6d 73 22 20 66  license.terms" f
01c0: 6f 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  or information o
01d0: 6e 20 75 73 61 67 65 20 61 6e 64 20 72 65 64 69  n usage and redi
01e0: 73 74 72 69 62 75 74 69 6f 6e 0a 23 20 6f 66 20  stribution.# of 
01f0: 74 68 69 73 20 66 69 6c 65 2e 0a 23 20 0a 0a 61  this file..# ..a
0200: 72 72 61 79 20 73 65 74 20 69 6e 20 7b 2d 74 69  rray set in {-ti
0210: 6d 65 20 35 30 30 7d 0a 69 66 20 7b 5b 69 6e 66  me 500}.if {[inf
0220: 6f 20 65 78 69 73 74 73 20 3a 3a 61 72 67 76 30  o exists ::argv0
0230: 5d 20 26 26 20 5b 66 69 6c 65 20 74 61 69 6c 20  ] && [file tail 
0240: 24 3a 3a 61 72 67 76 30 5d 20 65 71 20 5b 66 69  $::argv0] eq [fi
0250: 6c 65 20 74 61 69 6c 20 5b 69 6e 66 6f 20 73 63  le tail [info sc
0260: 72 69 70 74 5d 5d 7d 20 7b 0a 20 20 61 72 72 61  ript]]} {.  arra
0270: 79 20 73 65 74 20 69 6e 20 24 61 72 67 76 0a 7d  y set in $argv.}
0280: 0a 0a 23 23 20 63 6f 6d 6d 6f 6e 20 74 65 73 74  ..## common test
0290: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 66 72 61   performance fra
02a0: 6d 65 77 6f 72 6b 3a 0a 69 66 20 7b 21 5b 6e 61  mework:.if {![na
02b0: 6d 65 73 70 61 63 65 20 65 78 69 73 74 73 20 3a  mespace exists :
02c0: 3a 74 63 6c 54 65 73 74 50 65 72 66 5d 7d 20 7b  :tclTestPerf]} {
02d0: 0a 20 20 73 6f 75 72 63 65 20 5b 66 69 6c 65 20  .  source [file 
02e0: 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61  join [file dirna
02f0: 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d  me [info script]
0300: 5d 20 74 65 73 74 2d 70 65 72 66 6f 72 6d 61 6e  ] test-performan
0310: 63 65 2e 74 63 6c 5d 0a 7d 0a 0a 6e 61 6d 65 73  ce.tcl].}..names
0320: 70 61 63 65 20 65 76 61 6c 20 3a 3a 74 63 6c 54  pace eval ::tclT
0330: 65 73 74 50 65 72 66 2d 54 63 6c 43 6c 6f 63 6b  estPerf-TclClock
0340: 20 7b 0a 0a 6e 61 6d 65 73 70 61 63 65 20 70 61   {..namespace pa
0350: 74 68 20 7b 3a 3a 74 63 6c 54 65 73 74 50 65 72  th {::tclTestPer
0360: 66 7d 0a 0a 23 23 20 73 65 74 20 74 65 73 74 69  f}..## set testi
0370: 6e 67 20 64 65 66 61 75 6c 74 73 3a 0a 73 65 74  ng defaults:.set
0380: 20 3a 3a 65 6e 76 28 54 43 4c 5f 54 5a 29 20 3a   ::env(TCL_TZ) :
0390: 43 45 54 0a 0a 23 20 77 61 72 6d 2d 75 70 20 69  CET..# warm-up i
03a0: 6e 74 65 72 70 65 74 65 72 20 63 6f 6d 70 69 6c  nterpeter compil
03b0: 65 72 20 65 6e 76 2c 20 63 6c 6f 63 6b 20 70 6c  er env, clock pl
03c0: 61 74 66 6f 72 6d 2d 72 65 6c 61 74 65 64 20 66  atform-related f
03d0: 65 61 74 75 72 65 73 3a 0a 0a 23 23 20 77 61 72  eatures:..## war
03e0: 6d 2d 75 70 20 74 65 73 74 2d 72 65 6c 61 74 65  m-up test-relate
03f0: 64 20 66 65 61 74 75 72 65 73 20 28 6c 6f 61 64  d features (load
0400: 20 63 6c 6f 63 6b 2e 74 63 6c 2c 20 73 79 73 74   clock.tcl, syst
0410: 65 6d 20 7a 6f 6e 65 73 2c 20 6c 6f 63 61 6c 65  em zones, locale
0420: 73 2c 20 65 74 63 2e 29 3a 0a 63 6c 6f 63 6b 20  s, etc.):.clock 
0430: 73 63 61 6e 20 22 22 20 2d 67 6d 74 20 31 0a 63  scan "" -gmt 1.c
0440: 6c 6f 63 6b 20 73 63 61 6e 20 22 22 0a 63 6c 6f  lock scan "".clo
0450: 63 6b 20 73 63 61 6e 20 22 22 20 2d 74 69 6d 65  ck scan "" -time
0460: 7a 6f 6e 65 20 3a 43 45 54 0a 63 6c 6f 63 6b 20  zone :CET.clock 
0470: 73 63 61 6e 20 22 22 20 2d 66 6f 72 6d 61 74 20  scan "" -format 
0480: 22 22 20 2d 6c 6f 63 61 6c 65 20 65 6e 0a 63 6c  "" -locale en.cl
0490: 6f 63 6b 20 73 63 61 6e 20 22 22 20 2d 66 6f 72  ock scan "" -for
04a0: 6d 61 74 20 22 22 20 2d 6c 6f 63 61 6c 65 20 64  mat "" -locale d
04b0: 65 0a 0a 23 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  e..## ----------
04c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04e0: 0a 0a 70 72 6f 63 20 74 65 73 74 2d 66 6f 72 6d  ..proc test-form
04f0: 61 74 20 7b 7b 72 65 70 74 69 6d 65 20 31 30 30  at {{reptime 100
0500: 30 7d 7d 20 7b 0a 20 20 5f 74 65 73 74 5f 72 75  0}} {.  _test_ru
0510: 6e 20 24 72 65 70 74 69 6d 65 20 7b 0a 20 20 20  n $reptime {.   
0520: 20 23 20 46 6f 72 6d 61 74 20 3a 20 73 68 6f 72   # Format : shor
0530: 74 2c 20 77 65 65 6b 20 6f 6e 6c 79 20 28 69 6e  t, week only (in
0540: 20 67 6d 74 29 0a 20 20 20 20 7b 63 6c 6f 63 6b   gmt).    {clock
0550: 20 66 6f 72 6d 61 74 20 31 34 38 32 35 32 35 39   format 14825259
0560: 33 36 20 2d 66 6f 72 6d 61 74 20 22 25 75 22 20  36 -format "%u" 
0570: 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 46 6f  -gmt 1}.    # Fo
0580: 72 6d 61 74 20 3a 20 73 68 6f 72 74 2c 20 77 65  rmat : short, we
0590: 65 6b 20 6f 6e 6c 79 20 28 73 79 73 74 65 6d 20  ek only (system 
05a0: 7a 6f 6e 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b  zone).    {clock
05b0: 20 66 6f 72 6d 61 74 20 31 34 38 32 35 32 35 39   format 14825259
05c0: 33 36 20 2d 66 6f 72 6d 61 74 20 22 25 75 22 7d  36 -format "%u"}
05d0: 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20  .    # Format : 
05e0: 73 68 6f 72 74 2c 20 77 65 65 6b 20 6f 6e 6c 79  short, week only
05f0: 20 28 43 45 53 54 29 0a 20 20 20 20 7b 63 6c 6f   (CEST).    {clo
0600: 63 6b 20 66 6f 72 6d 61 74 20 31 34 38 32 35 32  ck format 148252
0610: 35 39 33 36 20 2d 66 6f 72 6d 61 74 20 22 25 75  5936 -format "%u
0620: 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 43 45 54  " -timezone :CET
0630: 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20 3a  }.    # Format :
0640: 20 64 61 74 65 20 6f 6e 6c 79 20 28 69 6e 20 67   date only (in g
0650: 6d 74 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66  mt).    {clock f
0660: 6f 72 6d 61 74 20 31 34 38 32 35 32 35 39 33 36  ormat 1482525936
0670: 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d 2d   -format "%Y-%m-
0680: 25 64 22 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20  %d" -gmt 1}.    
0690: 23 20 46 6f 72 6d 61 74 20 3a 20 64 61 74 65 20  # Format : date 
06a0: 6f 6e 6c 79 20 28 73 79 73 74 65 6d 20 7a 6f 6e  only (system zon
06b0: 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f  e).    {clock fo
06c0: 72 6d 61 74 20 31 34 38 32 35 32 35 39 33 36 20  rmat 1482525936 
06d0: 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d 2d 25  -format "%Y-%m-%
06e0: 64 22 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74  d"}.    # Format
06f0: 20 3a 20 64 61 74 65 20 6f 6e 6c 79 20 28 43 45   : date only (CE
0700: 53 54 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66  ST).    {clock f
0710: 6f 72 6d 61 74 20 31 34 38 32 35 32 35 39 33 36  ormat 1482525936
0720: 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d 2d   -format "%Y-%m-
0730: 25 64 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 43  %d" -timezone :C
0740: 45 54 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74  ET}.    # Format
0750: 20 3a 20 74 69 6d 65 20 6f 6e 6c 79 20 28 69 6e   : time only (in
0760: 20 67 6d 74 29 0a 20 20 20 20 7b 63 6c 6f 63 6b   gmt).    {clock
0770: 20 66 6f 72 6d 61 74 20 31 34 38 32 35 32 35 39   format 14825259
0780: 33 36 20 2d 66 6f 72 6d 61 74 20 22 25 48 3a 25  36 -format "%H:%
0790: 4d 22 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23  M" -gmt 1}.    #
07a0: 20 46 6f 72 6d 61 74 20 3a 20 74 69 6d 65 20 6f   Format : time o
07b0: 6e 6c 79 20 28 73 79 73 74 65 6d 20 7a 6f 6e 65  nly (system zone
07c0: 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72  ).    {clock for
07d0: 6d 61 74 20 31 34 38 32 35 32 35 39 33 36 20 2d  mat 1482525936 -
07e0: 66 6f 72 6d 61 74 20 22 25 48 3a 25 4d 22 7d 0a  format "%H:%M"}.
07f0: 20 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 74      # Format : t
0800: 69 6d 65 20 6f 6e 6c 79 20 28 43 45 53 54 29 0a  ime only (CEST).
0810: 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61      {clock forma
0820: 74 20 31 34 38 32 35 32 35 39 33 36 20 2d 66 6f  t 1482525936 -fo
0830: 72 6d 61 74 20 22 25 48 3a 25 4d 22 20 2d 74 69  rmat "%H:%M" -ti
0840: 6d 65 7a 6f 6e 65 20 3a 43 45 54 7d 0a 20 20 20  mezone :CET}.   
0850: 20 23 20 46 6f 72 6d 61 74 20 3a 20 74 69 6d 65   # Format : time
0860: 20 6f 6e 6c 79 20 28 69 6e 20 67 6d 74 29 0a 20   only (in gmt). 
0870: 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74     {clock format
0880: 20 31 34 38 32 35 32 35 39 33 36 20 2d 66 6f 72   1482525936 -for
0890: 6d 61 74 20 22 25 48 3a 25 4d 3a 25 53 22 20 2d  mat "%H:%M:%S" -
08a0: 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 46 6f 72  gmt 1}.    # For
08b0: 6d 61 74 20 3a 20 74 69 6d 65 20 6f 6e 6c 79 20  mat : time only 
08c0: 28 73 79 73 74 65 6d 20 7a 6f 6e 65 29 0a 20 20  (system zone).  
08d0: 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20    {clock format 
08e0: 31 34 38 32 35 32 35 39 33 36 20 2d 66 6f 72 6d  1482525936 -form
08f0: 61 74 20 22 25 48 3a 25 4d 3a 25 53 22 7d 0a 20  at "%H:%M:%S"}. 
0900: 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 74 69     # Format : ti
0910: 6d 65 20 6f 6e 6c 79 20 28 43 45 53 54 29 0a 20  me only (CEST). 
0920: 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74     {clock format
0930: 20 31 34 38 32 35 32 35 39 33 36 20 2d 66 6f 72   1482525936 -for
0940: 6d 61 74 20 22 25 48 3a 25 4d 3a 25 53 22 20 2d  mat "%H:%M:%S" -
0950: 74 69 6d 65 7a 6f 6e 65 20 3a 43 45 54 7d 0a 20  timezone :CET}. 
0960: 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 64 65     # Format : de
0970: 66 61 75 6c 74 20 28 69 6e 20 67 6d 74 29 0a 20  fault (in gmt). 
0980: 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74     {clock format
0990: 20 31 34 38 32 35 32 35 39 33 36 20 2d 67 6d 74   1482525936 -gmt
09a0: 20 31 20 2d 6c 6f 63 61 6c 65 20 65 6e 7d 0a 20   1 -locale en}. 
09b0: 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 64 65     # Format : de
09c0: 66 61 75 6c 74 20 28 73 79 73 74 65 6d 20 7a 6f  fault (system zo
09d0: 6e 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66  ne).    {clock f
09e0: 6f 72 6d 61 74 20 31 34 38 32 35 32 35 39 33 36  ormat 1482525936
09f0: 20 2d 6c 6f 63 61 6c 65 20 65 6e 7d 0a 20 20 20   -locale en}.   
0a00: 20 23 20 46 6f 72 6d 61 74 20 3a 20 64 65 66 61   # Format : defa
0a10: 75 6c 74 20 28 43 45 53 54 29 0a 20 20 20 20 7b  ult (CEST).    {
0a20: 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 31 34 38  clock format 148
0a30: 32 35 32 35 39 33 36 20 2d 74 69 6d 65 7a 6f 6e  2525936 -timezon
0a40: 65 20 3a 43 45 54 20 2d 6c 6f 63 61 6c 65 20 65  e :CET -locale e
0a50: 6e 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20  n}.    # Format 
0a60: 3a 20 49 53 4f 20 64 61 74 65 2d 74 69 6d 65 20  : ISO date-time 
0a70: 28 69 6e 20 67 6d 74 2c 20 6e 75 6d 65 72 69 63  (in gmt, numeric
0a80: 20 7a 6f 6e 65 29 0a 20 20 20 20 7b 63 6c 6f 63   zone).    {cloc
0a90: 6b 20 66 6f 72 6d 61 74 20 31 32 34 36 33 37 39  k format 1246379
0aa0: 34 30 30 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d  400 -format "%Y-
0ab0: 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 20 25  %m-%dT%H:%M:%S %
0ac0: 7a 22 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23  z" -gmt 1}.    #
0ad0: 20 46 6f 72 6d 61 74 20 3a 20 49 53 4f 20 64 61   Format : ISO da
0ae0: 74 65 2d 74 69 6d 65 20 28 73 79 73 74 65 6d 20  te-time (system 
0af0: 7a 6f 6e 65 2c 20 43 45 53 54 2c 20 6e 75 6d 65  zone, CEST, nume
0b00: 72 69 63 20 7a 6f 6e 65 29 0a 20 20 20 20 7b 63  ric zone).    {c
0b10: 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 31 32 34 36  lock format 1246
0b20: 33 37 39 34 30 30 20 2d 66 6f 72 6d 61 74 20 22  379400 -format "
0b30: 25 59 2d 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25  %Y-%m-%dT%H:%M:%
0b40: 53 20 25 7a 22 7d 0a 20 20 20 20 23 20 46 6f 72  S %z"}.    # For
0b50: 6d 61 74 20 3a 20 49 53 4f 20 64 61 74 65 2d 74  mat : ISO date-t
0b60: 69 6d 65 20 28 43 45 53 54 2c 20 6e 75 6d 65 72  ime (CEST, numer
0b70: 69 63 20 7a 6f 6e 65 29 0a 20 20 20 20 7b 63 6c  ic zone).    {cl
0b80: 6f 63 6b 20 66 6f 72 6d 61 74 20 31 32 34 36 33  ock format 12463
0b90: 37 39 34 30 30 20 2d 66 6f 72 6d 61 74 20 22 25  79400 -format "%
0ba0: 59 2d 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53  Y-%m-%dT%H:%M:%S
0bb0: 20 25 7a 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a   %z" -timezone :
0bc0: 43 45 54 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61  CET}.    # Forma
0bd0: 74 20 3a 20 49 53 4f 20 64 61 74 65 2d 74 69 6d  t : ISO date-tim
0be0: 65 20 28 73 79 73 74 65 6d 20 7a 6f 6e 65 2c 20  e (system zone, 
0bf0: 43 45 53 54 29 0a 20 20 20 20 7b 63 6c 6f 63 6b  CEST).    {clock
0c00: 20 66 6f 72 6d 61 74 20 31 32 34 36 33 37 39 34   format 12463794
0c10: 30 30 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25  00 -format "%Y-%
0c20: 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 20 25 5a  m-%dT%H:%M:%S %Z
0c30: 22 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20  "}.    # Format 
0c40: 3a 20 6a 75 6c 69 61 6e 20 64 61 79 20 77 69 74  : julian day wit
0c50: 68 20 74 69 6d 65 20 28 69 6e 20 67 6d 74 29 3a  h time (in gmt):
0c60: 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d  .    {clock form
0c70: 61 74 20 31 32 34 36 33 37 39 34 31 35 20 2d 66  at 1246379415 -f
0c80: 6f 72 6d 61 74 20 22 25 4a 20 25 48 3a 25 4d 3a  ormat "%J %H:%M:
0c90: 25 53 22 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20  %S" -gmt 1}.    
0ca0: 23 20 46 6f 72 6d 61 74 20 3a 20 6a 75 6c 69 61  # Format : julia
0cb0: 6e 20 64 61 79 20 77 69 74 68 20 74 69 6d 65 20  n day with time 
0cc0: 28 73 79 73 74 65 6d 20 7a 6f 6e 65 29 3a 0a 20  (system zone):. 
0cd0: 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74     {clock format
0ce0: 20 31 32 34 36 33 37 39 34 31 35 20 2d 66 6f 72   1246379415 -for
0cf0: 6d 61 74 20 22 25 4a 20 25 48 3a 25 4d 3a 25 53  mat "%J %H:%M:%S
0d00: 22 7d 0a 0a 20 20 20 20 23 20 46 6f 72 6d 61 74  "}..    # Format
0d10: 20 3a 20 6c 6f 63 61 6c 65 20 64 61 74 65 2d 74   : locale date-t
0d20: 69 6d 65 20 28 65 6e 29 3a 0a 20 20 20 20 7b 63  ime (en):.    {c
0d30: 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 31 32 34 36  lock format 1246
0d40: 33 37 39 34 31 35 20 2d 66 6f 72 6d 61 74 20 22  379415 -format "
0d50: 25 78 20 25 58 22 20 2d 6c 6f 63 61 6c 65 20 65  %x %X" -locale e
0d60: 6e 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20  n}.    # Format 
0d70: 3a 20 6c 6f 63 61 6c 65 20 64 61 74 65 2d 74 69  : locale date-ti
0d80: 6d 65 20 28 64 65 29 3a 0a 20 20 20 20 7b 63 6c  me (de):.    {cl
0d90: 6f 63 6b 20 66 6f 72 6d 61 74 20 31 32 34 36 33  ock format 12463
0da0: 37 39 34 31 35 20 2d 66 6f 72 6d 61 74 20 22 25  79415 -format "%
0db0: 78 20 25 58 22 20 2d 6c 6f 63 61 6c 65 20 64 65  x %X" -locale de
0dc0: 7d 0a 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20  }..    # Format 
0dd0: 3a 20 6c 6f 63 61 6c 65 20 6c 6f 6f 6b 75 70 20  : locale lookup 
0de0: 74 61 62 6c 65 20 6d 6f 6e 74 68 3a 0a 20 20 20  table month:.   
0df0: 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 31   {clock format 1
0e00: 32 34 36 33 37 39 34 30 30 20 2d 66 6f 72 6d 61  246379400 -forma
0e10: 74 20 22 25 62 22 20 2d 6c 6f 63 61 6c 65 20 65  t "%b" -locale e
0e20: 6e 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20  n -gmt 1}.    # 
0e30: 46 6f 72 6d 61 74 20 3a 20 6c 6f 63 61 6c 65 20  Format : locale 
0e40: 6c 6f 6f 6b 75 70 20 32 20 74 61 62 6c 65 73 20  lookup 2 tables 
0e50: 2d 20 6d 6f 6e 74 68 20 61 6e 64 20 64 61 79 3a  - month and day:
0e60: 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d  .    {clock form
0e70: 61 74 20 31 32 34 36 33 37 39 34 30 30 20 2d 66  at 1246379400 -f
0e80: 6f 72 6d 61 74 20 22 25 62 20 25 4f 64 22 20 2d  ormat "%b %Od" -
0e90: 6c 6f 63 61 6c 65 20 65 6e 20 2d 67 6d 74 20 31  locale en -gmt 1
0ea0: 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20 3a  }.    # Format :
0eb0: 20 6c 6f 63 61 6c 65 20 6c 6f 6f 6b 75 70 20 33   locale lookup 3
0ec0: 20 74 61 62 6c 65 73 20 2d 20 77 65 65 6b 2c 20   tables - week, 
0ed0: 6d 6f 6e 74 68 20 61 6e 64 20 64 61 79 3a 0a 20  month and day:. 
0ee0: 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74     {clock format
0ef0: 20 31 32 34 36 33 37 39 34 30 30 20 2d 66 6f 72   1246379400 -for
0f00: 6d 61 74 20 22 25 61 20 25 62 20 25 4f 64 22 20  mat "%a %b %Od" 
0f10: 2d 6c 6f 63 61 6c 65 20 65 6e 20 2d 67 6d 74 20  -locale en -gmt 
0f20: 31 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20  1}.    # Format 
0f30: 3a 20 6c 6f 63 61 6c 65 20 6c 6f 6f 6b 75 70 20  : locale lookup 
0f40: 34 20 74 61 62 6c 65 73 20 2d 20 77 65 65 6b 2c  4 tables - week,
0f50: 20 6d 6f 6e 74 68 2c 20 64 61 79 20 61 6e 64 20   month, day and 
0f60: 79 65 61 72 3a 0a 20 20 20 20 7b 63 6c 6f 63 6b  year:.    {clock
0f70: 20 66 6f 72 6d 61 74 20 31 32 34 36 33 37 39 34   format 12463794
0f80: 30 30 20 2d 66 6f 72 6d 61 74 20 22 25 61 20 25  00 -format "%a %
0f90: 62 20 25 4f 64 20 25 4f 79 22 20 2d 6c 6f 63 61  b %Od %Oy" -loca
0fa0: 6c 65 20 65 6e 20 2d 67 6d 74 20 31 7d 0a 0a 20  le en -gmt 1}.. 
0fb0: 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 64 79     # Format : dy
0fc0: 6e 61 6d 69 63 20 63 6c 6f 63 6b 20 76 61 6c 75  namic clock valu
0fd0: 65 20 28 77 69 74 68 6f 75 74 20 63 6f 6e 76 65  e (without conve
0fe0: 72 74 65 72 20 63 61 63 68 65 73 29 3a 0a 20 20  rter caches):.  
0ff0: 20 20 73 65 74 75 70 20 7b 73 65 74 20 69 20 30    setup {set i 0
1000: 7d 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72  }.    {clock for
1010: 6d 61 74 20 5b 69 6e 63 72 20 69 5d 20 2d 66 6f  mat [incr i] -fo
1020: 72 6d 61 74 20 22 25 59 2d 25 6d 2d 25 64 54 25  rmat "%Y-%m-%dT%
1030: 48 3a 25 4d 3a 25 53 22 20 2d 6c 6f 63 61 6c 65  H:%M:%S" -locale
1040: 20 65 6e 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 43   en -timezone :C
1050: 45 54 7d 0a 20 20 20 20 63 6c 65 61 6e 75 70 20  ET}.    cleanup 
1060: 7b 70 75 74 73 20 5b 63 6c 6f 63 6b 20 66 6f 72  {puts [clock for
1070: 6d 61 74 20 24 69 20 2d 66 6f 72 6d 61 74 20 22  mat $i -format "
1080: 25 59 2d 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25  %Y-%m-%dT%H:%M:%
1090: 53 22 20 2d 6c 6f 63 61 6c 65 20 65 6e 20 2d 74  S" -locale en -t
10a0: 69 6d 65 7a 6f 6e 65 20 3a 43 45 54 5d 7d 0a 20  imezone :CET]}. 
10b0: 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 64 79     # Format : dy
10c0: 6e 61 6d 69 63 20 63 6c 6f 63 6b 20 76 61 6c 75  namic clock valu
10d0: 65 20 28 77 69 74 68 6f 75 74 20 61 6e 79 20 63  e (without any c
10e0: 6f 6e 76 65 72 74 65 72 20 63 61 63 68 65 73 2c  onverter caches,
10f0: 20 7a 6f 6e 65 20 72 61 6e 67 65 20 6f 76 65 72   zone range over
1100: 66 6c 6f 77 29 3a 0a 20 20 20 20 73 65 74 75 70  flow):.    setup
1110: 20 7b 73 65 74 20 69 20 30 7d 0a 20 20 20 20 7b   {set i 0}.    {
1120: 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 69 6e  clock format [in
1130: 63 72 20 69 20 38 36 34 30 30 5d 20 2d 66 6f 72  cr i 86400] -for
1140: 6d 61 74 20 22 25 59 2d 25 6d 2d 25 64 54 25 48  mat "%Y-%m-%dT%H
1150: 3a 25 4d 3a 25 53 22 20 2d 6c 6f 63 61 6c 65 20  :%M:%S" -locale 
1160: 65 6e 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 43 45  en -timezone :CE
1170: 54 7d 0a 20 20 20 20 63 6c 65 61 6e 75 70 20 7b  T}.    cleanup {
1180: 70 75 74 73 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d  puts [clock form
1190: 61 74 20 24 69 20 2d 66 6f 72 6d 61 74 20 22 25  at $i -format "%
11a0: 59 2d 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53  Y-%m-%dT%H:%M:%S
11b0: 22 20 2d 6c 6f 63 61 6c 65 20 65 6e 20 2d 74 69  " -locale en -ti
11c0: 6d 65 7a 6f 6e 65 20 3a 43 45 54 5d 7d 0a 0a 20  mezone :CET]}.. 
11d0: 20 20 20 23 20 46 6f 72 6d 61 74 20 3a 20 64 79     # Format : dy
11e0: 6e 61 6d 69 63 20 66 6f 72 6d 61 74 20 28 63 61  namic format (ca
11f0: 63 68 65 61 62 6c 65 29 0a 20 20 20 20 7b 63 6c  cheable).    {cl
1200: 6f 63 6b 20 66 6f 72 6d 61 74 20 31 32 34 36 33  ock format 12463
1210: 37 39 34 31 35 20 2d 66 6f 72 6d 61 74 20 5b 73  79415 -format [s
1220: 74 72 69 6e 67 20 74 72 69 6d 20 22 25 64 2e 25  tring trim "%d.%
1230: 6d 2e 25 59 20 25 48 3a 25 4d 3a 25 53 20 22 5d  m.%Y %H:%M:%S "]
1240: 20 2d 67 6d 74 20 31 7d 0a 0a 20 20 20 20 23 20   -gmt 1}..    # 
1250: 46 6f 72 6d 61 74 20 3a 20 61 6c 6c 20 28 69 6e  Format : all (in
1260: 20 67 6d 74 2c 20 6c 6f 63 61 6c 65 20 65 6e 29   gmt, locale en)
1270: 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d  .    {clock form
1280: 61 74 20 31 34 38 32 35 32 35 39 33 36 20 2d 66  at 1482525936 -f
1290: 6f 72 6d 61 74 20 22 25 25 61 20 3d 20 25 61 20  ormat "%%a = %a 
12a0: 7c 20 25 25 41 20 3d 20 25 41 20 7c 20 25 25 62  | %%A = %A | %%b
12b0: 20 3d 20 25 62 20 7c 20 25 25 68 20 3d 20 25 68   = %b | %%h = %h
12c0: 20 7c 20 25 25 42 20 3d 20 25 42 20 7c 20 25 25   | %%B = %B | %%
12d0: 43 20 3d 20 25 43 20 7c 20 25 25 64 20 3d 20 25  C = %C | %%d = %
12e0: 64 20 7c 20 25 25 65 20 3d 20 25 65 20 7c 20 25  d | %%e = %e | %
12f0: 25 67 20 3d 20 25 67 20 7c 20 25 25 47 20 3d 20  %g = %g | %%G = 
1300: 25 47 20 7c 20 25 25 48 20 3d 20 25 48 20 7c 20  %G | %%H = %H | 
1310: 25 25 49 20 3d 20 25 49 20 7c 20 25 25 6a 20 3d  %%I = %I | %%j =
1320: 20 25 6a 20 7c 20 25 25 4a 20 3d 20 25 4a 20 7c   %j | %%J = %J |
1330: 20 25 25 6b 20 3d 20 25 6b 20 7c 20 25 25 6c 20   %%k = %k | %%l 
1340: 3d 20 25 6c 20 7c 20 25 25 6d 20 3d 20 25 6d 20  = %l | %%m = %m 
1350: 7c 20 25 25 4d 20 3d 20 25 4d 20 7c 20 25 25 4e  | %%M = %M | %%N
1360: 20 3d 20 25 4e 20 7c 20 25 25 70 20 3d 20 25 70   = %N | %%p = %p
1370: 20 7c 20 25 25 50 20 3d 20 25 50 20 7c 20 25 25   | %%P = %P | %%
1380: 51 20 3d 20 25 51 20 7c 20 25 25 73 20 3d 20 25  Q = %Q | %%s = %
1390: 73 20 7c 20 25 25 53 20 3d 20 25 53 20 7c 20 25  s | %%S = %S | %
13a0: 25 74 20 3d 20 25 74 20 7c 20 25 25 75 20 3d 20  %t = %t | %%u = 
13b0: 25 75 20 7c 20 25 25 55 20 3d 20 25 55 20 7c 20  %u | %%U = %U | 
13c0: 25 25 56 20 3d 20 25 56 20 7c 20 25 25 77 20 3d  %%V = %V | %%w =
13d0: 20 25 77 20 7c 20 25 25 57 20 3d 20 25 57 20 7c   %w | %%W = %W |
13e0: 20 25 25 79 20 3d 20 25 79 20 7c 20 25 25 59 20   %%y = %y | %%Y 
13f0: 3d 20 25 59 20 7c 20 25 25 7a 20 3d 20 25 7a 20  = %Y | %%z = %z 
1400: 7c 20 25 25 5a 20 3d 20 25 5a 20 7c 20 25 25 6e  | %%Z = %Z | %%n
1410: 20 3d 20 25 6e 20 7c 20 25 25 45 45 20 3d 20 25   = %n | %%EE = %
1420: 45 45 20 7c 20 25 25 45 43 20 3d 20 25 45 43 20  EE | %%EC = %EC 
1430: 7c 20 25 25 45 79 20 3d 20 25 45 79 20 7c 20 25  | %%Ey = %Ey | %
1440: 25 6e 20 3d 20 25 6e 20 7c 20 25 25 4f 64 20 3d  %n = %n | %%Od =
1450: 20 25 4f 64 20 7c 20 25 25 4f 65 20 3d 20 25 4f   %Od | %%Oe = %O
1460: 65 20 7c 20 25 25 4f 48 20 3d 20 25 4f 48 20 7c  e | %%OH = %OH |
1470: 20 25 25 4f 6b 20 3d 20 25 4f 6b 20 7c 20 25 25   %%Ok = %Ok | %%
1480: 4f 49 20 3d 20 25 4f 49 20 7c 20 25 25 4f 6c 20  OI = %OI | %%Ol 
1490: 3d 20 25 4f 6c 20 7c 20 25 25 4f 6d 20 3d 20 25  = %Ol | %%Om = %
14a0: 4f 6d 20 7c 20 25 25 4f 4d 20 3d 20 25 4f 4d 20  Om | %%OM = %OM 
14b0: 7c 20 25 25 4f 53 20 3d 20 25 4f 53 20 7c 20 25  | %%OS = %OS | %
14c0: 25 4f 75 20 3d 20 25 4f 75 20 7c 20 25 25 4f 77  %Ou = %Ou | %%Ow
14d0: 20 3d 20 25 4f 77 20 7c 20 25 25 4f 79 20 3d 20   = %Ow | %%Oy = 
14e0: 25 4f 79 22 20 2d 67 6d 74 20 31 20 2d 6c 6f 63  %Oy" -gmt 1 -loc
14f0: 61 6c 65 20 65 6e 7d 0a 20 20 20 20 23 20 46 6f  ale en}.    # Fo
1500: 72 6d 61 74 20 3a 20 61 6c 6c 20 28 69 6e 20 43  rmat : all (in C
1510: 45 54 2c 20 6c 6f 63 61 6c 65 20 64 65 29 0a 20  ET, locale de). 
1520: 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74     {clock format
1530: 20 31 34 38 32 35 32 35 39 33 36 20 2d 66 6f 72   1482525936 -for
1540: 6d 61 74 20 22 25 25 61 20 3d 20 25 61 20 7c 20  mat "%%a = %a | 
1550: 25 25 41 20 3d 20 25 41 20 7c 20 25 25 62 20 3d  %%A = %A | %%b =
1560: 20 25 62 20 7c 20 25 25 68 20 3d 20 25 68 20 7c   %b | %%h = %h |
1570: 20 25 25 42 20 3d 20 25 42 20 7c 20 25 25 43 20   %%B = %B | %%C 
1580: 3d 20 25 43 20 7c 20 25 25 64 20 3d 20 25 64 20  = %C | %%d = %d 
1590: 7c 20 25 25 65 20 3d 20 25 65 20 7c 20 25 25 67  | %%e = %e | %%g
15a0: 20 3d 20 25 67 20 7c 20 25 25 47 20 3d 20 25 47   = %g | %%G = %G
15b0: 20 7c 20 25 25 48 20 3d 20 25 48 20 7c 20 25 25   | %%H = %H | %%
15c0: 49 20 3d 20 25 49 20 7c 20 25 25 6a 20 3d 20 25  I = %I | %%j = %
15d0: 6a 20 7c 20 25 25 4a 20 3d 20 25 4a 20 7c 20 25  j | %%J = %J | %
15e0: 25 6b 20 3d 20 25 6b 20 7c 20 25 25 6c 20 3d 20  %k = %k | %%l = 
15f0: 25 6c 20 7c 20 25 25 6d 20 3d 20 25 6d 20 7c 20  %l | %%m = %m | 
1600: 25 25 4d 20 3d 20 25 4d 20 7c 20 25 25 4e 20 3d  %%M = %M | %%N =
1610: 20 25 4e 20 7c 20 25 25 70 20 3d 20 25 70 20 7c   %N | %%p = %p |
1620: 20 25 25 50 20 3d 20 25 50 20 7c 20 25 25 51 20   %%P = %P | %%Q 
1630: 3d 20 25 51 20 7c 20 25 25 73 20 3d 20 25 73 20  = %Q | %%s = %s 
1640: 7c 20 25 25 53 20 3d 20 25 53 20 7c 20 25 25 74  | %%S = %S | %%t
1650: 20 3d 20 25 74 20 7c 20 25 25 75 20 3d 20 25 75   = %t | %%u = %u
1660: 20 7c 20 25 25 55 20 3d 20 25 55 20 7c 20 25 25   | %%U = %U | %%
1670: 56 20 3d 20 25 56 20 7c 20 25 25 77 20 3d 20 25  V = %V | %%w = %
1680: 77 20 7c 20 25 25 57 20 3d 20 25 57 20 7c 20 25  w | %%W = %W | %
1690: 25 79 20 3d 20 25 79 20 7c 20 25 25 59 20 3d 20  %y = %y | %%Y = 
16a0: 25 59 20 7c 20 25 25 7a 20 3d 20 25 7a 20 7c 20  %Y | %%z = %z | 
16b0: 25 25 5a 20 3d 20 25 5a 20 7c 20 25 25 6e 20 3d  %%Z = %Z | %%n =
16c0: 20 25 6e 20 7c 20 25 25 45 45 20 3d 20 25 45 45   %n | %%EE = %EE
16d0: 20 7c 20 25 25 45 43 20 3d 20 25 45 43 20 7c 20   | %%EC = %EC | 
16e0: 25 25 45 79 20 3d 20 25 45 79 20 7c 20 25 25 6e  %%Ey = %Ey | %%n
16f0: 20 3d 20 25 6e 20 7c 20 25 25 4f 64 20 3d 20 25   = %n | %%Od = %
1700: 4f 64 20 7c 20 25 25 4f 65 20 3d 20 25 4f 65 20  Od | %%Oe = %Oe 
1710: 7c 20 25 25 4f 48 20 3d 20 25 4f 48 20 7c 20 25  | %%OH = %OH | %
1720: 25 4f 6b 20 3d 20 25 4f 6b 20 7c 20 25 25 4f 49  %Ok = %Ok | %%OI
1730: 20 3d 20 25 4f 49 20 7c 20 25 25 4f 6c 20 3d 20   = %OI | %%Ol = 
1740: 25 4f 6c 20 7c 20 25 25 4f 6d 20 3d 20 25 4f 6d  %Ol | %%Om = %Om
1750: 20 7c 20 25 25 4f 4d 20 3d 20 25 4f 4d 20 7c 20   | %%OM = %OM | 
1760: 25 25 4f 53 20 3d 20 25 4f 53 20 7c 20 25 25 4f  %%OS = %OS | %%O
1770: 75 20 3d 20 25 4f 75 20 7c 20 25 25 4f 77 20 3d  u = %Ou | %%Ow =
1780: 20 25 4f 77 20 7c 20 25 25 4f 79 20 3d 20 25 4f   %Ow | %%Oy = %O
1790: 79 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 43 45  y" -timezone :CE
17a0: 54 20 2d 6c 6f 63 61 6c 65 20 64 65 7d 0a 20 20  T -locale de}.  
17b0: 7d 0a 7d 0a 0a 70 72 6f 63 20 74 65 73 74 2d 73  }.}..proc test-s
17c0: 63 61 6e 20 7b 7b 72 65 70 74 69 6d 65 20 31 30  can {{reptime 10
17d0: 30 30 7d 7d 20 7b 0a 20 20 5f 74 65 73 74 5f 72  00}} {.  _test_r
17e0: 75 6e 20 24 72 65 70 74 69 6d 65 20 7b 0a 20 20  un $reptime {.  
17f0: 20 20 23 20 53 63 61 6e 20 3a 20 64 61 74 65 20    # Scan : date 
1800: 28 69 6e 20 67 6d 74 29 0a 20 20 20 20 7b 63 6c  (in gmt).    {cl
1810: 6f 63 6b 20 73 63 61 6e 20 22 32 35 2e 31 31 2e  ock scan "25.11.
1820: 32 30 31 35 22 20 2d 66 6f 72 6d 61 74 20 22 25  2015" -format "%
1830: 64 2e 25 6d 2e 25 59 22 20 2d 62 61 73 65 20 30  d.%m.%Y" -base 0
1840: 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 53   -gmt 1}.    # S
1850: 63 61 6e 20 3a 20 64 61 74 65 20 28 73 79 73 74  can : date (syst
1860: 65 6d 20 74 69 6d 65 20 7a 6f 6e 65 2c 20 77 69  em time zone, wi
1870: 74 68 20 62 61 73 65 29 0a 20 20 20 20 7b 63 6c  th base).    {cl
1880: 6f 63 6b 20 73 63 61 6e 20 22 32 35 2e 31 31 2e  ock scan "25.11.
1890: 32 30 31 35 22 20 2d 66 6f 72 6d 61 74 20 22 25  2015" -format "%
18a0: 64 2e 25 6d 2e 25 59 22 20 2d 62 61 73 65 20 30  d.%m.%Y" -base 0
18b0: 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 3a 20 64  }.    # Scan : d
18c0: 61 74 65 20 28 73 79 73 74 65 6d 20 74 69 6d 65  ate (system time
18d0: 20 7a 6f 6e 65 2c 20 77 69 74 68 6f 75 74 20 62   zone, without b
18e0: 61 73 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20  ase).    {clock 
18f0: 73 63 61 6e 20 22 32 35 2e 31 31 2e 32 30 31 35  scan "25.11.2015
1900: 22 20 2d 66 6f 72 6d 61 74 20 22 25 64 2e 25 6d  " -format "%d.%m
1910: 2e 25 59 22 7d 0a 20 20 20 20 23 20 53 63 61 6e  .%Y"}.    # Scan
1920: 20 3a 20 67 72 65 65 64 79 20 6d 61 74 63 68 0a   : greedy match.
1930: 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20      {clock scan 
1940: 22 31 31 31 22 20 2d 66 6f 72 6d 61 74 20 22 25  "111" -format "%
1950: 64 25 6d 25 79 22 20 2d 62 61 73 65 20 30 20 2d  d%m%y" -base 0 -
1960: 67 6d 74 20 31 7d 0a 20 20 20 20 7b 63 6c 6f 63  gmt 1}.    {cloc
1970: 6b 20 73 63 61 6e 20 22 31 31 31 31 22 20 2d 66  k scan "1111" -f
1980: 6f 72 6d 61 74 20 22 25 64 25 6d 25 79 22 20 2d  ormat "%d%m%y" -
1990: 62 61 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a 20  base 0 -gmt 1}. 
19a0: 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22     {clock scan "
19b0: 31 31 31 31 31 22 20 2d 66 6f 72 6d 61 74 20 22  11111" -format "
19c0: 25 64 25 6d 25 79 22 20 2d 62 61 73 65 20 30 20  %d%m%y" -base 0 
19d0: 2d 67 6d 74 20 31 7d 0a 20 20 20 20 7b 63 6c 6f  -gmt 1}.    {clo
19e0: 63 6b 20 73 63 61 6e 20 22 31 31 31 31 31 31 22  ck scan "111111"
19f0: 20 2d 66 6f 72 6d 61 74 20 22 25 64 25 6d 25 79   -format "%d%m%y
1a00: 22 20 2d 62 61 73 65 20 30 20 2d 67 6d 74 20 31  " -base 0 -gmt 1
1a10: 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 3a 20 67  }.    # Scan : g
1a20: 72 65 65 64 79 20 6d 61 74 63 68 20 28 73 70 61  reedy match (spa
1a30: 63 65 20 73 65 70 61 72 61 74 65 64 29 0a 20 20  ce separated).  
1a40: 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31    {clock scan "1
1a50: 20 31 20 31 22 20 2d 66 6f 72 6d 61 74 20 22 25   1 1" -format "%
1a60: 64 25 6d 25 79 22 20 2d 62 61 73 65 20 30 20 2d  d%m%y" -base 0 -
1a70: 67 6d 74 20 31 7d 0a 20 20 20 20 7b 63 6c 6f 63  gmt 1}.    {cloc
1a80: 6b 20 73 63 61 6e 20 22 31 31 31 20 31 22 20 2d  k scan "111 1" -
1a90: 66 6f 72 6d 61 74 20 22 25 64 25 6d 25 79 22 20  format "%d%m%y" 
1aa0: 2d 62 61 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a  -base 0 -gmt 1}.
1ab0: 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20      {clock scan 
1ac0: 22 31 20 31 31 31 22 20 2d 66 6f 72 6d 61 74 20  "1 111" -format 
1ad0: 22 25 64 25 6d 25 79 22 20 2d 62 61 73 65 20 30  "%d%m%y" -base 0
1ae0: 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 7b 63 6c   -gmt 1}.    {cl
1af0: 6f 63 6b 20 73 63 61 6e 20 22 31 20 31 31 20 31  ock scan "1 11 1
1b00: 22 20 2d 66 6f 72 6d 61 74 20 22 25 64 25 6d 25  " -format "%d%m%
1b10: 79 22 20 2d 62 61 73 65 20 30 20 2d 67 6d 74 20  y" -base 0 -gmt 
1b20: 31 7d 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63  1}.    {clock sc
1b30: 61 6e 20 22 31 20 31 31 20 31 31 22 20 2d 66 6f  an "1 11 11" -fo
1b40: 72 6d 61 74 20 22 25 64 25 6d 25 79 22 20 2d 62  rmat "%d%m%y" -b
1b50: 61 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a 20 20  ase 0 -gmt 1}.  
1b60: 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31    {clock scan "1
1b70: 31 20 31 31 20 31 31 22 20 2d 66 6f 72 6d 61 74  1 11 11" -format
1b80: 20 22 25 64 25 6d 25 79 22 20 2d 62 61 73 65 20   "%d%m%y" -base 
1b90: 30 20 2d 67 6d 74 20 31 7d 0a 0a 20 20 20 20 23  0 -gmt 1}..    #
1ba0: 20 53 63 61 6e 20 3a 20 74 69 6d 65 20 28 69 6e   Scan : time (in
1bb0: 20 67 6d 74 29 0a 20 20 20 20 7b 63 6c 6f 63 6b   gmt).    {clock
1bc0: 20 73 63 61 6e 20 22 31 30 3a 33 35 3a 35 35 22   scan "10:35:55"
1bd0: 20 2d 66 6f 72 6d 61 74 20 22 25 48 3a 25 4d 3a   -format "%H:%M:
1be0: 25 53 22 20 2d 62 61 73 65 20 31 30 30 30 30 30  %S" -base 100000
1bf0: 30 30 30 30 20 2d 67 6d 74 20 31 7d 0a 20 20 20  0000 -gmt 1}.   
1c00: 20 23 20 53 63 61 6e 20 3a 20 74 69 6d 65 20 28   # Scan : time (
1c10: 73 79 73 74 65 6d 20 74 69 6d 65 20 7a 6f 6e 65  system time zone
1c20: 2c 20 77 69 74 68 20 62 61 73 65 29 0a 20 20 20  , with base).   
1c30: 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 30   {clock scan "10
1c40: 3a 33 35 3a 35 35 22 20 2d 66 6f 72 6d 61 74 20  :35:55" -format 
1c50: 22 25 48 3a 25 4d 3a 25 53 22 20 2d 62 61 73 65  "%H:%M:%S" -base
1c60: 20 31 30 30 30 30 30 30 30 30 30 7d 0a 20 20 20   1000000000}.   
1c70: 20 23 20 53 63 61 6e 20 3a 20 74 69 6d 65 20 28   # Scan : time (
1c80: 67 6d 74 2c 20 77 69 74 68 6f 75 74 20 62 61 73  gmt, without bas
1c90: 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63  e).    {clock sc
1ca0: 61 6e 20 22 31 30 3a 33 35 3a 35 35 22 20 2d 66  an "10:35:55" -f
1cb0: 6f 72 6d 61 74 20 22 25 48 3a 25 4d 3a 25 53 22  ormat "%H:%M:%S"
1cc0: 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 53   -gmt 1}.    # S
1cd0: 63 61 6e 20 3a 20 74 69 6d 65 20 28 73 79 73 74  can : time (syst
1ce0: 65 6d 20 74 69 6d 65 20 7a 6f 6e 65 2c 20 77 69  em time zone, wi
1cf0: 74 68 6f 75 74 20 62 61 73 65 29 0a 20 20 20 20  thout base).    
1d00: 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 30 3a  {clock scan "10:
1d10: 33 35 3a 35 35 22 20 2d 66 6f 72 6d 61 74 20 22  35:55" -format "
1d20: 25 48 3a 25 4d 3a 25 53 22 7d 0a 0a 20 20 20 20  %H:%M:%S"}..    
1d30: 23 20 53 63 61 6e 20 3a 20 64 61 74 65 2d 74 69  # Scan : date-ti
1d40: 6d 65 20 28 69 6e 20 67 6d 74 29 0a 20 20 20 20  me (in gmt).    
1d50: 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 32 35 2e  {clock scan "25.
1d60: 31 31 2e 32 30 31 35 20 31 30 3a 33 35 3a 35 35  11.2015 10:35:55
1d70: 22 20 2d 66 6f 72 6d 61 74 20 22 25 64 2e 25 6d  " -format "%d.%m
1d80: 2e 25 59 20 25 48 3a 25 4d 3a 25 53 22 20 2d 62  .%Y %H:%M:%S" -b
1d90: 61 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a 20 20  ase 0 -gmt 1}.  
1da0: 20 20 23 20 53 63 61 6e 20 3a 20 64 61 74 65 2d    # Scan : date-
1db0: 74 69 6d 65 20 28 73 79 73 74 65 6d 20 74 69 6d  time (system tim
1dc0: 65 20 7a 6f 6e 65 20 77 69 74 68 20 62 61 73 65  e zone with base
1dd0: 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61  ).    {clock sca
1de0: 6e 20 22 32 35 2e 31 31 2e 32 30 31 35 20 31 30  n "25.11.2015 10
1df0: 3a 33 35 3a 35 35 22 20 2d 66 6f 72 6d 61 74 20  :35:55" -format 
1e00: 22 25 64 2e 25 6d 2e 25 59 20 25 48 3a 25 4d 3a  "%d.%m.%Y %H:%M:
1e10: 25 53 22 20 2d 62 61 73 65 20 30 7d 0a 20 20 20  %S" -base 0}.   
1e20: 20 23 20 53 63 61 6e 20 3a 20 64 61 74 65 2d 74   # Scan : date-t
1e30: 69 6d 65 20 28 73 79 73 74 65 6d 20 74 69 6d 65  ime (system time
1e40: 20 7a 6f 6e 65 20 77 69 74 68 6f 75 74 20 62 61   zone without ba
1e50: 73 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73  se).    {clock s
1e60: 63 61 6e 20 22 32 35 2e 31 31 2e 32 30 31 35 20  can "25.11.2015 
1e70: 31 30 3a 33 35 3a 35 35 22 20 2d 66 6f 72 6d 61  10:35:55" -forma
1e80: 74 20 22 25 64 2e 25 6d 2e 25 59 20 25 48 3a 25  t "%d.%m.%Y %H:%
1e90: 4d 3a 25 53 22 7d 0a 0a 20 20 20 20 23 20 53 63  M:%S"}..    # Sc
1ea0: 61 6e 20 3a 20 6a 75 6c 69 61 6e 20 64 61 79 20  an : julian day 
1eb0: 69 6e 20 67 6d 74 0a 20 20 20 20 7b 63 6c 6f 63  in gmt.    {cloc
1ec0: 6b 20 73 63 61 6e 20 32 34 35 31 35 34 35 20 2d  k scan 2451545 -
1ed0: 66 6f 72 6d 61 74 20 25 4a 20 2d 67 6d 74 20 31  format %J -gmt 1
1ee0: 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 3a 20 6a  }.    # Scan : j
1ef0: 75 6c 69 61 6e 20 64 61 79 20 69 6e 20 73 79 73  ulian day in sys
1f00: 74 65 6d 20 54 5a 0a 20 20 20 20 7b 63 6c 6f 63  tem TZ.    {cloc
1f10: 6b 20 73 63 61 6e 20 32 34 35 31 35 34 35 20 2d  k scan 2451545 -
1f20: 66 6f 72 6d 61 74 20 25 4a 7d 0a 20 20 20 20 23  format %J}.    #
1f30: 20 53 63 61 6e 20 3a 20 6a 75 6c 69 61 6e 20 64   Scan : julian d
1f40: 61 79 20 69 6e 20 6f 74 68 65 72 20 54 5a 0a 20  ay in other TZ. 
1f50: 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 32     {clock scan 2
1f60: 34 35 31 35 34 35 20 2d 66 6f 72 6d 61 74 20 25  451545 -format %
1f70: 4a 20 2d 74 69 6d 65 7a 6f 6e 65 20 2b 30 32 30  J -timezone +020
1f80: 30 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 3a 20  0}.    # Scan : 
1f90: 6a 75 6c 69 61 6e 20 64 61 79 20 77 69 74 68 20  julian day with 
1fa0: 74 69 6d 65 3a 0a 20 20 20 20 7b 63 6c 6f 63 6b  time:.    {clock
1fb0: 20 73 63 61 6e 20 22 32 34 35 31 35 34 35 20 31   scan "2451545 1
1fc0: 30 3a 32 30 3a 33 30 22 20 2d 66 6f 72 6d 61 74  0:20:30" -format
1fd0: 20 22 25 4a 20 25 48 3a 25 4d 3a 25 53 22 7d 0a   "%J %H:%M:%S"}.
1fe0: 20 20 20 20 23 20 53 63 61 6e 20 3a 20 6a 75 6c      # Scan : jul
1ff0: 69 61 6e 20 64 61 79 20 77 69 74 68 20 74 69 6d  ian day with tim
2000: 65 20 28 67 72 65 65 64 79 20 6d 61 74 63 68 29  e (greedy match)
2010: 3a 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61  :.    {clock sca
2020: 6e 20 22 32 34 35 31 35 34 35 20 31 30 32 30 33  n "2451545 10203
2030: 30 22 20 2d 66 6f 72 6d 61 74 20 22 25 4a 25 48  0" -format "%J%H
2040: 25 4d 25 53 22 7d 0a 0a 20 20 20 20 23 20 53 63  %M%S"}..    # Sc
2050: 61 6e 20 3a 20 63 65 6e 74 75 72 79 2c 20 6c 6f  an : century, lo
2060: 6f 6b 75 70 20 74 61 62 6c 65 20 6d 6f 6e 74 68  okup table month
2070: 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e  .    {clock scan
2080: 20 7b 31 39 37 30 20 4a 61 6e 20 32 7d 20 2d 66   {1970 Jan 2} -f
2090: 6f 72 6d 61 74 20 7b 25 43 25 79 20 25 62 20 25  ormat {%C%y %b %
20a0: 64 7d 20 2d 6c 6f 63 61 6c 65 20 65 6e 20 2d 67  d} -locale en -g
20b0: 6d 74 20 31 7d 0a 20 20 20 20 23 20 53 63 61 6e  mt 1}.    # Scan
20c0: 20 3a 20 63 65 6e 74 75 72 79 2c 20 6c 6f 6f 6b   : century, look
20d0: 75 70 20 74 61 62 6c 65 20 6d 6f 6e 74 68 20 61  up table month a
20e0: 6e 64 20 64 61 79 20 28 62 6f 74 68 20 65 6e 74  nd day (both ent
20f0: 72 69 65 73 20 61 72 65 20 66 69 72 73 74 29 0a  ries are first).
2100: 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20      {clock scan 
2110: 7b 31 39 37 30 20 4a 61 6e 20 30 31 7d 20 2d 66  {1970 Jan 01} -f
2120: 6f 72 6d 61 74 20 7b 25 43 25 79 20 25 62 20 25  ormat {%C%y %b %
2130: 4f 64 7d 20 2d 6c 6f 63 61 6c 65 20 65 6e 20 2d  Od} -locale en -
2140: 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 53 63 61  gmt 1}.    # Sca
2150: 6e 20 3a 20 63 65 6e 74 75 72 79 2c 20 6c 6f 6f  n : century, loo
2160: 6b 75 70 20 74 61 62 6c 65 20 6d 6f 6e 74 68 20  kup table month 
2170: 61 6e 64 20 64 61 79 20 28 6c 69 73 74 20 73 63  and day (list sc
2180: 61 6e 3a 20 65 6e 74 72 69 65 73 20 77 69 74 68  an: entries with
2190: 20 70 6f 73 69 74 69 6f 6e 20 31 32 20 2f 20 33   position 12 / 3
21a0: 31 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63  1).    {clock sc
21b0: 61 6e 20 7b 32 30 31 36 20 44 65 63 20 33 31 7d  an {2016 Dec 31}
21c0: 20 2d 66 6f 72 6d 61 74 20 7b 25 43 25 79 20 25   -format {%C%y %
21d0: 62 20 25 4f 64 7d 20 2d 6c 6f 63 61 6c 65 20 65  b %Od} -locale e
21e0: 6e 20 2d 67 6d 74 20 31 7d 0a 0a 20 20 20 20 23  n -gmt 1}..    #
21f0: 20 53 63 61 6e 20 3a 20 49 53 4f 20 64 61 74 65   Scan : ISO date
2200: 2d 74 69 6d 65 20 28 43 45 53 54 29 0a 20 20 20  -time (CEST).   
2210: 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 32 30   {clock scan "20
2220: 30 39 2d 30 36 2d 33 30 54 31 38 3a 33 30 3a 30  09-06-30T18:30:0
2230: 30 2b 30 32 3a 30 30 22 20 2d 66 6f 72 6d 61 74  0+02:00" -format
2240: 20 22 25 59 2d 25 6d 2d 25 64 54 25 48 3a 25 4d   "%Y-%m-%dT%H:%M
2250: 3a 25 53 25 7a 22 7d 0a 20 20 20 20 7b 63 6c 6f  :%S%z"}.    {clo
2260: 63 6b 20 73 63 61 6e 20 22 32 30 30 39 2d 30 36  ck scan "2009-06
2270: 2d 33 30 54 31 38 3a 33 30 3a 30 30 20 43 45 53  -30T18:30:00 CES
2280: 54 22 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25  T" -format "%Y-%
2290: 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 20 25 7a  m-%dT%H:%M:%S %z
22a0: 22 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 3a 20  "}.    # Scan : 
22b0: 49 53 4f 20 64 61 74 65 2d 74 69 6d 65 20 28 55  ISO date-time (U
22c0: 54 43 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73  TC).    {clock s
22d0: 63 61 6e 20 22 32 30 30 39 2d 30 36 2d 33 30 54  can "2009-06-30T
22e0: 31 38 3a 33 30 3a 30 30 5a 22 20 2d 66 6f 72 6d  18:30:00Z" -form
22f0: 61 74 20 22 25 59 2d 25 6d 2d 25 64 54 25 48 3a  at "%Y-%m-%dT%H:
2300: 25 4d 3a 25 53 25 7a 22 7d 0a 20 20 20 20 7b 63  %M:%S%z"}.    {c
2310: 6c 6f 63 6b 20 73 63 61 6e 20 22 32 30 30 39 2d  lock scan "2009-
2320: 30 36 2d 33 30 54 31 38 3a 33 30 3a 30 30 20 55  06-30T18:30:00 U
2330: 54 43 22 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d  TC" -format "%Y-
2340: 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 20 25  %m-%dT%H:%M:%S %
2350: 7a 22 7d 0a 0a 20 20 20 20 23 20 53 63 61 6e 20  z"}..    # Scan 
2360: 3a 20 6c 6f 63 61 6c 65 20 64 61 74 65 2d 74 69  : locale date-ti
2370: 6d 65 20 28 65 6e 29 3a 0a 20 20 20 20 7b 63 6c  me (en):.    {cl
2380: 6f 63 6b 20 73 63 61 6e 20 22 30 36 2f 33 30 2f  ock scan "06/30/
2390: 32 30 30 39 20 31 38 3a 33 30 3a 31 35 22 20 2d  2009 18:30:15" -
23a0: 66 6f 72 6d 61 74 20 22 25 78 20 25 58 22 20 2d  format "%x %X" -
23b0: 67 6d 74 20 31 20 2d 6c 6f 63 61 6c 65 20 65 6e  gmt 1 -locale en
23c0: 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 3a 20 6c  }.    # Scan : l
23d0: 6f 63 61 6c 65 20 64 61 74 65 2d 74 69 6d 65 20  ocale date-time 
23e0: 28 64 65 29 3a 0a 20 20 20 20 7b 63 6c 6f 63 6b  (de):.    {clock
23f0: 20 73 63 61 6e 20 22 33 30 2e 30 36 2e 32 30 30   scan "30.06.200
2400: 39 20 31 38 3a 33 30 3a 31 35 22 20 2d 66 6f 72  9 18:30:15" -for
2410: 6d 61 74 20 22 25 78 20 25 58 22 20 2d 67 6d 74  mat "%x %X" -gmt
2420: 20 31 20 2d 6c 6f 63 61 6c 65 20 64 65 7d 0a 0a   1 -locale de}..
2430: 20 20 20 20 23 20 53 63 61 6e 20 3a 20 64 79 6e      # Scan : dyn
2440: 61 6d 69 63 20 66 6f 72 6d 61 74 20 28 63 61 63  amic format (cac
2450: 68 65 61 62 6c 65 29 0a 20 20 20 20 7b 63 6c 6f  heable).    {clo
2460: 63 6b 20 73 63 61 6e 20 22 32 35 2e 31 31 2e 32  ck scan "25.11.2
2470: 30 31 35 20 31 30 3a 33 35 3a 35 35 22 20 2d 66  015 10:35:55" -f
2480: 6f 72 6d 61 74 20 5b 73 74 72 69 6e 67 20 74 72  ormat [string tr
2490: 69 6d 20 22 25 64 2e 25 6d 2e 25 59 20 25 48 3a  im "%d.%m.%Y %H:
24a0: 25 4d 3a 25 53 20 22 5d 20 2d 62 61 73 65 20 30  %M:%S "] -base 0
24b0: 20 2d 67 6d 74 20 31 7d 0a 0a 20 20 20 20 62 72   -gmt 1}..    br
24c0: 65 61 6b 0a 20 20 20 20 23 20 23 20 53 63 61 6e  eak.    # # Scan
24d0: 20 3a 20 6c 6f 6e 67 20 66 6f 72 6d 61 74 20 74   : long format t
24e0: 65 73 74 20 28 61 6c 6c 6f 63 6b 20 63 68 61 69  est (allock chai
24f0: 6e 29 0a 20 20 20 20 23 20 7b 63 6c 6f 63 6b 20  n).    # {clock 
2500: 73 63 61 6e 20 22 32 35 2e 31 31 2e 32 30 31 35  scan "25.11.2015
2510: 22 20 2d 66 6f 72 6d 61 74 20 22 25 64 2e 25 6d  " -format "%d.%m
2520: 2e 25 59 20 25 64 2e 25 6d 2e 25 59 20 25 64 2e  .%Y %d.%m.%Y %d.
2530: 25 6d 2e 25 59 20 25 64 2e 25 6d 2e 25 59 20 25  %m.%Y %d.%m.%Y %
2540: 64 2e 25 6d 2e 25 59 20 25 64 2e 25 6d 2e 25 59  d.%m.%Y %d.%m.%Y
2550: 20 25 64 2e 25 6d 2e 25 59 20 25 64 2e 25 6d 2e   %d.%m.%Y %d.%m.
2560: 25 59 22 20 2d 62 61 73 65 20 30 20 2d 67 6d 74  %Y" -base 0 -gmt
2570: 20 31 7d 0a 20 20 20 20 23 20 23 20 53 63 61 6e   1}.    # # Scan
2580: 20 3a 20 64 79 6e 61 6d 69 63 2c 20 76 65 72 79   : dynamic, very
2590: 20 6c 6f 6e 67 20 66 6f 72 6d 61 74 20 74 65 73   long format tes
25a0: 74 20 28 63 72 65 61 74 65 20 6f 62 6a 20 72 65  t (create obj re
25b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2c 20 61 6c  presentation, al
25c0: 6c 6f 63 6b 20 63 68 61 69 6e 2c 20 47 43 2c 20  lock chain, GC, 
25d0: 65 74 63 29 3a 0a 20 20 20 20 23 20 7b 63 6c 6f  etc):.    # {clo
25e0: 63 6b 20 73 63 61 6e 20 22 32 35 2e 31 31 2e 32  ck scan "25.11.2
25f0: 30 31 35 22 20 2d 66 6f 72 6d 61 74 20 5b 73 74  015" -format [st
2600: 72 69 6e 67 20 72 65 70 65 61 74 20 22 5b 69 6e  ring repeat "[in
2610: 63 72 20 69 5d 20 25 64 2e 25 6d 2e 25 59 20 25  cr i] %d.%m.%Y %
2620: 64 2e 25 6d 2e 25 59 22 20 31 30 5d 20 2d 62 61  d.%m.%Y" 10] -ba
2630: 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a 20 20 20  se 0 -gmt 1}.   
2640: 20 23 20 23 20 53 63 61 6e 20 3a 20 61 67 61 69   # # Scan : agai
2650: 6e 3a 0a 20 20 20 20 23 20 7b 63 6c 6f 63 6b 20  n:.    # {clock 
2660: 73 63 61 6e 20 22 32 35 2e 31 31 2e 32 30 31 35  scan "25.11.2015
2670: 22 20 2d 66 6f 72 6d 61 74 20 5b 73 74 72 69 6e  " -format [strin
2680: 67 20 72 65 70 65 61 74 20 22 5b 69 6e 63 72 20  g repeat "[incr 
2690: 69 20 2d 31 5d 20 25 64 2e 25 6d 2e 25 59 20 25  i -1] %d.%m.%Y %
26a0: 64 2e 25 6d 2e 25 59 22 20 31 30 5d 20 2d 62 61  d.%m.%Y" 10] -ba
26b0: 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a 20 20 7d  se 0 -gmt 1}.  }
26c0: 20 7b 70 75 74 73 20 5b 63 6c 6f 63 6b 20 66 6f   {puts [clock fo
26d0: 72 6d 61 74 20 24 5f 28 72 29 20 2d 6c 6f 63 61  rmat $_(r) -loca
26e0: 6c 65 20 65 6e 5d 7d 0a 7d 0a 0a 70 72 6f 63 20  le en]}.}..proc 
26f0: 74 65 73 74 2d 66 72 65 65 73 63 61 6e 20 7b 7b  test-freescan {{
2700: 72 65 70 74 69 6d 65 20 31 30 30 30 7d 7d 20 7b  reptime 1000}} {
2710: 0a 20 20 5f 74 65 73 74 5f 72 75 6e 20 24 72 65  .  _test_run $re
2720: 70 74 69 6d 65 20 7b 0a 20 20 20 20 23 20 46 72  ptime {.    # Fr
2730: 65 65 53 63 61 6e 20 3a 20 72 65 6c 61 74 69 76  eeScan : relativ
2740: 65 20 64 61 74 65 0a 20 20 20 20 7b 63 6c 6f 63  e date.    {cloc
2750: 6b 20 73 63 61 6e 20 22 35 20 79 65 61 72 73 20  k scan "5 years 
2760: 31 38 20 6d 6f 6e 74 68 73 20 33 38 35 20 64 61  18 months 385 da
2770: 79 73 22 20 2d 62 61 73 65 20 30 20 2d 67 6d 74  ys" -base 0 -gmt
2780: 20 31 7d 0a 20 20 20 20 23 20 46 72 65 65 53 63   1}.    # FreeSc
2790: 61 6e 20 3a 20 72 65 6c 61 74 69 76 65 20 64 61  an : relative da
27a0: 74 65 20 77 69 74 68 20 72 65 6c 61 74 69 76 65  te with relative
27b0: 20 77 65 65 6b 64 61 79 0a 20 20 20 20 7b 63 6c   weekday.    {cl
27c0: 6f 63 6b 20 73 63 61 6e 20 22 35 20 79 65 61 72  ock scan "5 year
27d0: 73 20 31 38 20 6d 6f 6e 74 68 73 20 33 38 35 20  s 18 months 385 
27e0: 64 61 79 73 20 46 72 69 22 20 2d 62 61 73 65 20  days Fri" -base 
27f0: 30 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20  0 -gmt 1}.    # 
2800: 46 72 65 65 53 63 61 6e 20 3a 20 72 65 6c 61 74  FreeScan : relat
2810: 69 76 65 20 64 61 74 65 20 77 69 74 68 20 6f 72  ive date with or
2820: 64 69 6e 61 6c 20 6d 6f 6e 74 68 0a 20 20 20 20  dinal month.    
2830: 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 35 20 79  {clock scan "5 y
2840: 65 61 72 73 20 31 38 20 6d 6f 6e 74 68 73 20 33  ears 18 months 3
2850: 38 35 20 64 61 79 73 20 6e 65 78 74 20 31 20 4a  85 days next 1 J
2860: 61 6e 75 61 72 79 22 20 2d 62 61 73 65 20 30 20  anuary" -base 0 
2870: 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 46 72  -gmt 1}.    # Fr
2880: 65 65 53 63 61 6e 20 3a 20 72 65 6c 61 74 69 76  eeScan : relativ
2890: 65 20 64 61 74 65 20 77 69 74 68 20 6f 72 64 69  e date with ordi
28a0: 6e 61 6c 20 6d 6f 6e 74 68 20 61 6e 64 20 72 65  nal month and re
28b0: 6c 61 74 69 76 65 20 77 65 65 6b 64 61 79 0a 20  lative weekday. 
28c0: 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22     {clock scan "
28d0: 35 20 79 65 61 72 73 20 31 38 20 6d 6f 6e 74 68  5 years 18 month
28e0: 73 20 33 38 35 20 64 61 79 73 20 6e 65 78 74 20  s 385 days next 
28f0: 4a 61 6e 75 61 72 79 20 46 72 69 22 20 2d 62 61  January Fri" -ba
2900: 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a 20 20 20  se 0 -gmt 1}.   
2910: 20 23 20 46 72 65 65 53 63 61 6e 20 3a 20 6f 72   # FreeScan : or
2920: 64 69 6e 61 6c 20 6d 6f 6e 74 68 0a 20 20 20 20  dinal month.    
2930: 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 6e 65 78  {clock scan "nex
2940: 74 20 4a 61 6e 75 61 72 79 22 20 2d 62 61 73 65  t January" -base
2950: 20 30 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23   0 -gmt 1}.    #
2960: 20 46 72 65 65 53 63 61 6e 20 3a 20 72 65 6c 61   FreeScan : rela
2970: 74 69 76 65 20 77 65 65 6b 0a 20 20 20 20 7b 63  tive week.    {c
2980: 6c 6f 63 6b 20 73 63 61 6e 20 22 6e 65 78 74 20  lock scan "next 
2990: 46 72 69 22 20 2d 62 61 73 65 20 30 20 2d 67 6d  Fri" -base 0 -gm
29a0: 74 20 31 7d 0a 20 20 20 20 23 20 46 72 65 65 53  t 1}.    # FreeS
29b0: 63 61 6e 20 3a 20 72 65 6c 61 74 69 76 65 20 77  can : relative w
29c0: 65 65 6b 64 61 79 20 61 6e 64 20 77 65 65 6b 20  eekday and week 
29d0: 6f 66 66 73 65 74 20 0a 20 20 20 20 7b 63 6c 6f  offset .    {clo
29e0: 63 6b 20 73 63 61 6e 20 22 6e 65 78 74 20 4a 61  ck scan "next Ja
29f0: 6e 75 61 72 79 20 2b 20 32 20 77 65 65 6b 22 20  nuary + 2 week" 
2a00: 2d 62 61 73 65 20 30 20 2d 67 6d 74 20 31 7d 0a  -base 0 -gmt 1}.
2a10: 20 20 20 20 23 20 46 72 65 65 53 63 61 6e 20 3a      # FreeScan :
2a20: 20 74 69 6d 65 20 6f 6e 6c 79 20 77 69 74 68 20   time only with 
2a30: 62 61 73 65 0a 20 20 20 20 7b 63 6c 6f 63 6b 20  base.    {clock 
2a40: 73 63 61 6e 20 22 31 39 3a 31 38 3a 33 30 22 20  scan "19:18:30" 
2a50: 2d 62 61 73 65 20 31 34 38 38 36 33 36 30 30 20  -base 148863600 
2a60: 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 46 72  -gmt 1}.    # Fr
2a70: 65 65 53 63 61 6e 20 3a 20 74 69 6d 65 20 6f 6e  eeScan : time on
2a80: 6c 79 20 77 69 74 68 6f 75 74 20 62 61 73 65 2c  ly without base,
2a90: 20 67 6d 74 0a 20 20 20 20 7b 63 6c 6f 63 6b 20   gmt.    {clock 
2aa0: 73 63 61 6e 20 22 31 39 3a 31 38 3a 33 30 22 20  scan "19:18:30" 
2ab0: 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 46 72  -gmt 1}.    # Fr
2ac0: 65 65 53 63 61 6e 20 3a 20 74 69 6d 65 20 6f 6e  eeScan : time on
2ad0: 6c 79 20 77 69 74 68 6f 75 74 20 62 61 73 65 2c  ly without base,
2ae0: 20 73 79 73 74 65 6d 0a 20 20 20 20 7b 63 6c 6f   system.    {clo
2af0: 63 6b 20 73 63 61 6e 20 22 31 39 3a 31 38 3a 33  ck scan "19:18:3
2b00: 30 22 7d 0a 20 20 20 20 23 20 46 72 65 65 53 63  0"}.    # FreeSc
2b10: 61 6e 20 3a 20 64 61 74 65 2c 20 73 79 73 74 65  an : date, syste
2b20: 6d 20 74 69 6d 65 20 7a 6f 6e 65 0a 20 20 20 20  m time zone.    
2b30: 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 30 35 2f  {clock scan "05/
2b40: 30 38 2f 32 30 31 36 20 32 30 3a 31 38 3a 33 30  08/2016 20:18:30
2b50: 22 7d 0a 20 20 20 20 23 20 46 72 65 65 53 63 61  "}.    # FreeSca
2b60: 6e 20 3a 20 64 61 74 65 2c 20 73 75 70 70 6c 69  n : date, suppli
2b70: 65 64 20 74 69 6d 65 20 7a 6f 6e 65 0a 20 20 20  ed time zone.   
2b80: 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 30 35   {clock scan "05
2b90: 2f 30 38 2f 32 30 31 36 20 32 30 3a 31 38 3a 33  /08/2016 20:18:3
2ba0: 30 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 43 45  0" -timezone :CE
2bb0: 54 7d 0a 20 20 20 20 23 20 46 72 65 65 53 63 61  T}.    # FreeSca
2bc0: 6e 20 3a 20 64 61 74 65 2c 20 73 75 70 70 6c 69  n : date, suppli
2bd0: 65 64 20 67 6d 74 20 28 65 71 75 69 76 61 6c 65  ed gmt (equivale
2be0: 6e 74 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a 47 4d  nt -timezone :GM
2bf0: 54 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63  T).    {clock sc
2c00: 61 6e 20 22 30 35 2f 30 38 2f 32 30 31 36 20 32  an "05/08/2016 2
2c10: 30 3a 31 38 3a 33 30 22 20 2d 67 6d 74 20 31 7d  0:18:30" -gmt 1}
2c20: 0a 20 20 20 20 23 20 46 72 65 65 53 63 61 6e 20  .    # FreeScan 
2c30: 3a 20 64 61 74 65 2c 20 73 75 70 70 6c 69 65 64  : date, supplied
2c40: 20 74 69 6d 65 20 7a 6f 6e 65 20 67 6d 74 0a 20   time zone gmt. 
2c50: 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22     {clock scan "
2c60: 30 35 2f 30 38 2f 32 30 31 36 20 32 30 3a 31 38  05/08/2016 20:18
2c70: 3a 33 30 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 3a  :30" -timezone :
2c80: 47 4d 54 7d 0a 20 20 20 20 23 20 46 72 65 65 53  GMT}.    # FreeS
2c90: 63 61 6e 20 3a 20 74 69 6d 65 20 6f 6e 6c 79 2c  can : time only,
2ca0: 20 6e 75 6d 65 72 69 63 20 7a 6f 6e 65 20 69 6e   numeric zone in
2cb0: 20 73 74 72 69 6e 67 2c 20 62 61 73 65 20 74 69   string, base ti
2cc0: 6d 65 20 67 6d 74 20 28 65 78 63 68 61 6e 67 65  me gmt (exchange
2cd0: 20 7a 6f 6e 65 73 20 62 65 74 77 65 65 6e 20 67   zones between g
2ce0: 6d 74 20 2f 20 2d 30 35 30 30 29 0a 20 20 20 20  mt / -0500).    
2cf0: 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 32 30 3a  {clock scan "20:
2d00: 31 38 3a 33 30 20 2d 30 35 30 30 22 20 2d 62 61  18:30 -0500" -ba
2d10: 73 65 20 31 34 38 38 36 33 36 30 30 20 2d 67 6d  se 148863600 -gm
2d20: 74 20 31 7d 0a 20 20 20 20 23 20 46 72 65 65 53  t 1}.    # FreeS
2d30: 63 61 6e 20 3a 20 74 69 6d 65 20 6f 6e 6c 79 2c  can : time only,
2d40: 20 7a 6f 6e 65 20 69 6e 20 73 74 72 69 6e 67 20   zone in string 
2d50: 28 65 78 63 68 61 6e 67 65 20 7a 6f 6e 65 73 20  (exchange zones 
2d60: 62 65 74 77 65 65 6e 20 73 79 73 74 65 6d 20 2f  between system /
2d70: 20 67 6d 74 29 0a 20 20 20 20 7b 63 6c 6f 63 6b   gmt).    {clock
2d80: 20 73 63 61 6e 20 22 31 39 3a 31 38 3a 33 30 20   scan "19:18:30 
2d90: 47 4d 54 22 20 2d 62 61 73 65 20 31 34 38 38 36  GMT" -base 14886
2da0: 33 36 30 30 7d 0a 20 20 20 20 23 20 46 72 65 65  3600}.    # Free
2db0: 53 63 61 6e 20 3a 20 66 61 73 74 20 73 77 69 74  Scan : fast swit
2dc0: 63 68 20 6f 66 20 7a 6f 6e 65 73 20 69 6e 20 63  ch of zones in c
2dd0: 79 63 6c 65 20 2d 20 47 4d 54 2c 20 4d 53 54 2c  ycle - GMT, MST,
2de0: 20 43 45 54 20 28 73 79 73 74 65 6d 29 20 61 6e   CET (system) an
2df0: 64 20 45 53 54 0a 20 20 20 20 7b 63 6c 6f 63 6b  d EST.    {clock
2e00: 20 73 63 61 6e 20 22 31 39 3a 31 38 3a 33 30 20   scan "19:18:30 
2e10: 4d 53 54 22 20 2d 62 61 73 65 20 31 34 38 38 36  MST" -base 14886
2e20: 33 36 30 30 20 2d 67 6d 74 20 31 0a 20 20 20 20  3600 -gmt 1.    
2e30: 20 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 39 3a   clock scan "19:
2e40: 31 38 3a 33 30 20 45 53 54 22 20 2d 62 61 73 65  18:30 EST" -base
2e50: 20 31 34 38 38 36 33 36 30 30 0a 20 20 20 20 7d   148863600.    }
2e60: 0a 20 20 7d 20 7b 70 75 74 73 20 5b 63 6c 6f 63  .  } {puts [cloc
2e70: 6b 20 66 6f 72 6d 61 74 20 24 5f 28 72 29 20 2d  k format $_(r) -
2e80: 6c 6f 63 61 6c 65 20 65 6e 5d 7d 0a 7d 0a 0a 70  locale en]}.}..p
2e90: 72 6f 63 20 74 65 73 74 2d 61 64 64 20 7b 7b 72  roc test-add {{r
2ea0: 65 70 74 69 6d 65 20 31 30 30 30 7d 7d 20 7b 0a  eptime 1000}} {.
2eb0: 20 20 73 65 74 20 74 65 73 74 73 20 7b 0a 20 20    set tests {.  
2ec0: 20 20 23 20 41 64 64 20 3a 20 79 65 61 72 73 0a    # Add : years.
2ed0: 20 20 20 20 7b 63 6c 6f 63 6b 20 61 64 64 20 31      {clock add 1
2ee0: 32 34 36 33 37 39 34 31 35 20 35 20 79 65 61 72  246379415 5 year
2ef0: 73 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20  s -gmt 1}.    # 
2f00: 41 64 64 20 3a 20 6d 6f 6e 74 68 73 0a 20 20 20  Add : months.   
2f10: 20 7b 63 6c 6f 63 6b 20 61 64 64 20 31 32 34 36   {clock add 1246
2f20: 33 37 39 34 31 35 20 31 38 20 6d 6f 6e 74 68 73  379415 18 months
2f30: 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 41   -gmt 1}.    # A
2f40: 64 64 20 3a 20 77 65 65 6b 73 0a 20 20 20 20 7b  dd : weeks.    {
2f50: 63 6c 6f 63 6b 20 61 64 64 20 31 32 34 36 33 37  clock add 124637
2f60: 39 34 31 35 20 32 30 20 77 65 65 6b 73 20 2d 67  9415 20 weeks -g
2f70: 6d 74 20 31 7d 0a 20 20 20 20 23 20 41 64 64 20  mt 1}.    # Add 
2f80: 3a 20 64 61 79 73 0a 20 20 20 20 7b 63 6c 6f 63  : days.    {cloc
2f90: 6b 20 61 64 64 20 31 32 34 36 33 37 39 34 31 35  k add 1246379415
2fa0: 20 33 38 35 20 64 61 79 73 20 2d 67 6d 74 20 31   385 days -gmt 1
2fb0: 7d 0a 20 20 20 20 23 20 41 64 64 20 3a 20 77 65  }.    # Add : we
2fc0: 65 6b 64 61 79 73 0a 20 20 20 20 7b 63 6c 6f 63  ekdays.    {cloc
2fd0: 6b 20 61 64 64 20 31 32 34 36 33 37 39 34 31 35  k add 1246379415
2fe0: 20 33 20 77 65 65 6b 64 61 79 73 20 2d 67 6d 74   3 weekdays -gmt
2ff0: 20 31 7d 0a 0a 20 20 20 20 23 20 41 64 64 20 3a   1}..    # Add :
3000: 20 68 6f 75 72 73 0a 20 20 20 20 7b 63 6c 6f 63   hours.    {cloc
3010: 6b 20 61 64 64 20 31 32 34 36 33 37 39 34 31 35  k add 1246379415
3020: 20 35 20 68 6f 75 72 73 20 2d 67 6d 74 20 31 7d   5 hours -gmt 1}
3030: 0a 20 20 20 20 23 20 41 64 64 20 3a 20 6d 69 6e  .    # Add : min
3040: 75 74 65 73 0a 20 20 20 20 7b 63 6c 6f 63 6b 20  utes.    {clock 
3050: 61 64 64 20 31 32 34 36 33 37 39 34 31 35 20 35  add 1246379415 5
3060: 35 20 6d 69 6e 75 74 65 73 20 2d 67 6d 74 20 31  5 minutes -gmt 1
3070: 7d 0a 20 20 20 20 23 20 41 64 64 20 3a 20 73 65  }.    # Add : se
3080: 63 6f 6e 64 73 0a 20 20 20 20 7b 63 6c 6f 63 6b  conds.    {clock
3090: 20 61 64 64 20 31 32 34 36 33 37 39 34 31 35 20   add 1246379415 
30a0: 31 30 30 20 73 65 63 6f 6e 64 73 20 2d 67 6d 74  100 seconds -gmt
30b0: 20 31 7d 0a 0a 20 20 20 20 23 20 41 64 64 20 3a   1}..    # Add :
30c0: 20 2b 2f 2d 20 69 6e 20 67 6d 74 0a 20 20 20 20   +/- in gmt.    
30d0: 7b 63 6c 6f 63 6b 20 61 64 64 20 31 32 34 36 33  {clock add 12463
30e0: 37 39 34 31 35 20 2d 35 20 79 65 61 72 73 20 2b  79415 -5 years +
30f0: 32 31 20 6d 6f 6e 74 68 73 20 2d 32 30 20 77 65  21 months -20 we
3100: 65 6b 73 20 2b 33 38 36 20 64 61 79 73 20 2d 31  eks +386 days -1
3110: 39 20 68 6f 75 72 73 20 2b 33 30 20 6d 69 6e 75  9 hours +30 minu
3120: 74 65 73 20 2d 31 30 20 73 65 63 6f 6e 64 73 20  tes -10 seconds 
3130: 2d 67 6d 74 20 31 7d 0a 20 20 20 20 23 20 41 64  -gmt 1}.    # Ad
3140: 64 20 3a 20 2b 2f 2d 20 69 6e 20 73 79 73 74 65  d : +/- in syste
3150: 6d 20 74 69 6d 65 7a 6f 6e 65 0a 20 20 20 20 7b  m timezone.    {
3160: 63 6c 6f 63 6b 20 61 64 64 20 31 32 34 36 33 37  clock add 124637
3170: 39 34 31 35 20 2d 35 20 79 65 61 72 73 20 2b 32  9415 -5 years +2
3180: 31 20 6d 6f 6e 74 68 73 20 2d 32 30 20 77 65 65  1 months -20 wee
3190: 6b 73 20 2b 33 38 36 20 64 61 79 73 20 2d 31 39  ks +386 days -19
31a0: 20 68 6f 75 72 73 20 2b 33 30 20 6d 69 6e 75 74   hours +30 minut
31b0: 65 73 20 2d 31 30 20 73 65 63 6f 6e 64 73 20 2d  es -10 seconds -
31c0: 74 69 6d 65 7a 6f 6e 65 20 3a 43 45 54 7d 0a 0a  timezone :CET}..
31d0: 20 20 20 20 23 20 41 64 64 20 3a 20 67 6d 74 0a      # Add : gmt.
31e0: 20 20 20 20 7b 63 6c 6f 63 6b 20 61 64 64 20 31      {clock add 1
31f0: 32 34 36 33 37 39 34 31 35 20 2d 35 20 79 65 61  246379415 -5 yea
3200: 72 73 20 31 38 20 6d 6f 6e 74 68 73 20 33 36 36  rs 18 months 366
3210: 20 64 61 79 73 20 35 20 68 6f 75 72 73 20 33 30   days 5 hours 30
3220: 20 6d 69 6e 75 74 65 73 20 31 30 20 73 65 63 6f   minutes 10 seco
3230: 6e 64 73 20 2d 67 6d 74 20 31 7d 0a 20 20 20 20  nds -gmt 1}.    
3240: 23 20 41 64 64 20 3a 20 73 79 73 74 65 6d 20 74  # Add : system t
3250: 69 6d 65 7a 6f 6e 65 0a 20 20 20 20 7b 63 6c 6f  imezone.    {clo
3260: 63 6b 20 61 64 64 20 31 32 34 36 33 37 39 34 31  ck add 124637941
3270: 35 20 2d 35 20 79 65 61 72 73 20 31 38 20 6d 6f  5 -5 years 18 mo
3280: 6e 74 68 73 20 33 36 36 20 64 61 79 73 20 35 20  nths 366 days 5 
3290: 68 6f 75 72 73 20 33 30 20 6d 69 6e 75 74 65 73  hours 30 minutes
32a0: 20 31 30 20 73 65 63 6f 6e 64 73 20 2d 74 69 6d   10 seconds -tim
32b0: 65 7a 6f 6e 65 20 3a 43 45 54 7d 0a 0a 20 20 20  ezone :CET}..   
32c0: 20 23 20 41 64 64 20 3a 20 61 6c 6c 20 69 6e 20   # Add : all in 
32d0: 67 6d 74 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 61  gmt.    {clock a
32e0: 64 64 20 31 32 34 36 33 37 39 34 31 35 20 34 20  dd 1246379415 4 
32f0: 79 65 61 72 73 20 31 38 20 6d 6f 6e 74 68 73 20  years 18 months 
3300: 35 30 20 77 65 65 6b 73 20 33 37 38 20 64 61 79  50 weeks 378 day
3310: 73 20 33 20 77 65 65 6b 64 61 79 73 20 35 20 68  s 3 weekdays 5 h
3320: 6f 75 72 73 20 33 30 20 6d 69 6e 75 74 65 73 20  ours 30 minutes 
3330: 31 30 20 73 65 63 6f 6e 64 73 20 2d 67 6d 74 20  10 seconds -gmt 
3340: 31 7d 0a 20 20 20 20 23 20 41 64 64 20 3a 20 61  1}.    # Add : a
3350: 6c 6c 20 69 6e 20 73 79 73 74 65 6d 20 74 69 6d  ll in system tim
3360: 65 7a 6f 6e 65 0a 20 20 20 20 7b 63 6c 6f 63 6b  ezone.    {clock
3370: 20 61 64 64 20 31 32 34 36 33 37 39 34 31 35 20   add 1246379415 
3380: 34 20 79 65 61 72 73 20 31 38 20 6d 6f 6e 74 68  4 years 18 month
3390: 73 20 35 30 20 77 65 65 6b 73 20 33 37 38 20 64  s 50 weeks 378 d
33a0: 61 79 73 20 33 20 77 65 65 6b 64 61 79 73 20 35  ays 3 weekdays 5
33b0: 20 68 6f 75 72 73 20 33 30 20 6d 69 6e 75 74 65   hours 30 minute
33c0: 73 20 31 30 20 73 65 63 6f 6e 64 73 20 2d 74 69  s 10 seconds -ti
33d0: 6d 65 7a 6f 6e 65 20 3a 43 45 54 7d 0a 0a 20 20  mezone :CET}..  
33e0: 7d 0a 20 20 23 20 69 66 20 64 6f 65 73 20 6e 6f  }.  # if does no
33f0: 74 20 73 75 70 70 6f 72 74 20 61 64 64 20 6f 66  t support add of
3400: 20 77 65 65 6b 64 61 79 73 3a 0a 20 20 69 66 20   weekdays:.  if 
3410: 7b 5b 63 61 74 63 68 20 7b 63 6c 6f 63 6b 20 61  {[catch {clock a
3420: 64 64 20 30 20 33 20 77 65 65 6b 64 61 79 73 20  dd 0 3 weekdays 
3430: 2d 67 6d 74 20 31 7d 5d 7d 20 7b 0a 20 20 20 20  -gmt 1}]} {.    
3440: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 6d 77  regsub -all {\mw
3450: 65 65 6b 64 61 79 73 5c 4d 7d 20 24 74 65 73 74  eekdays\M} $test
3460: 73 20 22 64 61 79 73 22 20 74 65 73 74 73 0a 20  s "days" tests. 
3470: 20 7d 0a 20 20 5f 74 65 73 74 5f 72 75 6e 20 24   }.  _test_run $
3480: 72 65 70 74 69 6d 65 20 24 74 65 73 74 73 20 7b  reptime $tests {
3490: 70 75 74 73 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d  puts [clock form
34a0: 61 74 20 24 5f 28 72 29 20 2d 6c 6f 63 61 6c 65  at $_(r) -locale
34b0: 20 65 6e 5d 7d 0a 7d 0a 0a 70 72 6f 63 20 74 65   en]}.}..proc te
34c0: 73 74 2d 63 6f 6e 76 65 72 74 20 7b 7b 72 65 70  st-convert {{rep
34d0: 74 69 6d 65 20 31 30 30 30 7d 7d 20 7b 0a 20 20  time 1000}} {.  
34e0: 5f 74 65 73 74 5f 72 75 6e 20 24 72 65 70 74 69  _test_run $repti
34f0: 6d 65 20 7b 0a 20 20 20 20 23 20 43 6f 6e 76 65  me {.    # Conve
3500: 72 74 20 6c 6f 63 61 6c 65 20 28 65 6e 20 2d 3e  rt locale (en ->
3510: 20 64 65 29 3a 0a 20 20 20 20 7b 63 6c 6f 63 6b   de):.    {clock
3520: 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73   format [clock s
3530: 63 61 6e 20 22 54 75 65 20 4d 61 79 20 33 30 20  can "Tue May 30 
3540: 32 30 31 37 22 20 2d 66 6f 72 6d 61 74 20 22 25  2017" -format "%
3550: 61 20 25 62 20 25 64 20 25 59 22 20 2d 67 6d 74  a %b %d %Y" -gmt
3560: 20 31 20 2d 6c 6f 63 61 6c 65 20 65 6e 5d 20 2d   1 -locale en] -
3570: 66 6f 72 6d 61 74 20 22 25 61 20 25 62 20 25 64  format "%a %b %d
3580: 20 25 59 22 20 2d 67 6d 74 20 31 20 2d 6c 6f 63   %Y" -gmt 1 -loc
3590: 61 6c 65 20 64 65 7d 0a 20 20 20 20 23 20 43 6f  ale de}.    # Co
35a0: 6e 76 65 72 74 20 6c 6f 63 61 6c 65 20 28 64 65  nvert locale (de
35b0: 20 2d 3e 20 65 6e 29 3a 0a 20 20 20 20 7b 63 6c   -> en):.    {cl
35c0: 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63  ock format [cloc
35d0: 6b 20 73 63 61 6e 20 22 44 69 20 4d 61 69 20 33  k scan "Di Mai 3
35e0: 30 20 32 30 31 37 22 20 2d 66 6f 72 6d 61 74 20  0 2017" -format 
35f0: 22 25 61 20 25 62 20 25 64 20 25 59 22 20 2d 67  "%a %b %d %Y" -g
3600: 6d 74 20 31 20 2d 6c 6f 63 61 6c 65 20 64 65 5d  mt 1 -locale de]
3610: 20 2d 66 6f 72 6d 61 74 20 22 25 61 20 25 62 20   -format "%a %b 
3620: 25 64 20 25 59 22 20 2d 67 6d 74 20 31 20 2d 6c  %d %Y" -gmt 1 -l
3630: 6f 63 61 6c 65 20 65 6e 7d 0a 0a 20 20 20 20 23  ocale en}..    #
3640: 20 43 6f 6e 76 65 72 74 20 54 5a 3a 20 64 69 72   Convert TZ: dir
3650: 65 63 74 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66  ect.    {clock f
3660: 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 63 61  ormat [clock sca
3670: 6e 20 22 31 39 3a 31 38 3a 33 30 22 20 2d 62 61  n "19:18:30" -ba
3680: 73 65 20 31 34 38 38 36 33 36 30 30 20 2d 74 69  se 148863600 -ti
3690: 6d 65 7a 6f 6e 65 20 45 53 54 5d 20 2d 74 69 6d  mezone EST] -tim
36a0: 65 7a 6f 6e 65 20 4d 53 54 7d 0a 20 20 20 20 7b  ezone MST}.    {
36b0: 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c  clock format [cl
36c0: 6f 63 6b 20 73 63 61 6e 20 22 31 39 3a 31 38 3a  ock scan "19:18:
36d0: 33 30 22 20 2d 62 61 73 65 20 31 34 38 38 36 33  30" -base 148863
36e0: 36 30 30 20 2d 74 69 6d 65 7a 6f 6e 65 20 4d 53  600 -timezone MS
36f0: 54 5d 20 2d 74 69 6d 65 7a 6f 6e 65 20 45 53 54  T] -timezone EST
3700: 7d 0a 20 20 20 20 23 20 43 6f 6e 76 65 72 74 20  }.    # Convert 
3710: 54 5a 3a 20 69 6e 63 6c 75 64 65 64 20 69 6e 20  TZ: included in 
3720: 73 63 61 6e 20 73 74 72 69 6e 67 20 26 20 66 6f  scan string & fo
3730: 72 6d 61 74 0a 20 20 20 20 7b 63 6c 6f 63 6b 20  rmat.    {clock 
3740: 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 63  format [clock sc
3750: 61 6e 20 22 31 39 3a 31 38 3a 33 30 20 45 53 54  an "19:18:30 EST
3760: 22 20 2d 62 61 73 65 20 31 34 38 38 36 33 36 30  " -base 14886360
3770: 30 5d 20 2d 66 6f 72 6d 61 74 20 22 25 48 3a 25  0] -format "%H:%
3780: 4d 3a 25 53 20 25 7a 22 20 2d 74 69 6d 65 7a 6f  M:%S %z" -timezo
3790: 6e 65 20 4d 53 54 7d 0a 20 20 20 20 7b 63 6c 6f  ne MST}.    {clo
37a0: 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b  ck format [clock
37b0: 20 73 63 61 6e 20 22 31 39 3a 31 38 3a 33 30 20   scan "19:18:30 
37c0: 45 53 54 22 20 2d 62 61 73 65 20 31 34 38 38 36  EST" -base 14886
37d0: 33 36 30 30 5d 20 2d 66 6f 72 6d 61 74 20 22 25  3600] -format "%
37e0: 48 3a 25 4d 3a 25 53 20 25 7a 22 20 2d 74 69 6d  H:%M:%S %z" -tim
37f0: 65 7a 6f 6e 65 20 45 53 54 7d 0a 0a 20 20 20 20  ezone EST}..    
3800: 23 20 46 6f 72 6d 61 74 20 6c 6f 63 61 6c 65 20  # Format locale 
3810: 31 78 3a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 76  1x: comparison v
3820: 61 6c 75 65 73 0a 20 20 20 20 7b 63 6c 6f 63 6b  alues.    {clock
3830: 20 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 20 31   format 0 -gmt 1
3840: 20 2d 6c 6f 63 61 6c 65 20 65 6e 7d 20 0a 20 20   -locale en} .  
3850: 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20    {clock format 
3860: 30 20 2d 67 6d 74 20 31 20 2d 6c 6f 63 61 6c 65  0 -gmt 1 -locale
3870: 20 64 65 7d 0a 20 20 20 20 7b 63 6c 6f 63 6b 20   de}.    {clock 
3880: 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 20 31 20  format 0 -gmt 1 
3890: 2d 6c 6f 63 61 6c 65 20 66 72 7d 0a 20 20 20 20  -locale fr}.    
38a0: 23 20 46 6f 72 6d 61 74 20 6c 6f 63 61 6c 65 20  # Format locale 
38b0: 32 78 3a 20 77 69 74 68 6f 75 74 20 73 77 69 74  2x: without swit
38c0: 63 68 69 6e 67 20 6c 6f 63 61 6c 65 20 28 65 6e  ching locale (en
38d0: 2c 20 65 6e 29 0a 20 20 20 20 7b 63 6c 6f 63 6b  , en).    {clock
38e0: 20 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 20 31   format 0 -gmt 1
38f0: 20 2d 6c 6f 63 61 6c 65 20 65 6e 3b 20 63 6c 6f   -locale en; clo
3900: 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74  ck format 0 -gmt
3910: 20 31 20 2d 6c 6f 63 61 6c 65 20 65 6e 7d 0a 20   1 -locale en}. 
3920: 20 20 20 23 20 46 6f 72 6d 61 74 20 6c 6f 63 61     # Format loca
3930: 6c 65 20 32 78 3a 20 77 69 74 68 20 73 77 69 74  le 2x: with swit
3940: 63 68 69 6e 67 20 6c 6f 63 61 6c 65 20 28 65 6e  ching locale (en
3950: 2c 20 64 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b  , de).    {clock
3960: 20 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 20 31   format 0 -gmt 1
3970: 20 2d 6c 6f 63 61 6c 65 20 65 6e 3b 20 63 6c 6f   -locale en; clo
3980: 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74  ck format 0 -gmt
3990: 20 31 20 2d 6c 6f 63 61 6c 65 20 64 65 7d 0a 20   1 -locale de}. 
39a0: 20 20 20 23 20 46 6f 72 6d 61 74 20 6c 6f 63 61     # Format loca
39b0: 6c 65 20 33 78 3a 20 77 69 74 68 6f 75 74 20 73  le 3x: without s
39c0: 77 69 74 63 68 69 6e 67 20 6c 6f 63 61 6c 65 20  witching locale 
39d0: 28 65 6e 2c 20 65 6e 2c 20 65 6e 29 0a 20 20 20  (en, en, en).   
39e0: 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 30   {clock format 0
39f0: 20 2d 67 6d 74 20 31 20 2d 6c 6f 63 61 6c 65 20   -gmt 1 -locale 
3a00: 65 6e 3b 20 63 6c 6f 63 6b 20 66 6f 72 6d 61 74  en; clock format
3a10: 20 30 20 2d 67 6d 74 20 31 20 2d 6c 6f 63 61 6c   0 -gmt 1 -local
3a20: 65 20 65 6e 3b 20 63 6c 6f 63 6b 20 66 6f 72 6d  e en; clock form
3a30: 61 74 20 30 20 2d 67 6d 74 20 31 20 2d 6c 6f 63  at 0 -gmt 1 -loc
3a40: 61 6c 65 20 65 6e 7d 0a 20 20 20 20 23 20 46 6f  ale en}.    # Fo
3a50: 72 6d 61 74 20 6c 6f 63 61 6c 65 20 33 78 3a 20  rmat locale 3x: 
3a60: 77 69 74 68 20 73 77 69 74 63 68 69 6e 67 20 6c  with switching l
3a70: 6f 63 61 6c 65 20 28 65 6e 2c 20 64 65 2c 20 66  ocale (en, de, f
3a80: 72 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f  r).    {clock fo
3a90: 72 6d 61 74 20 30 20 2d 67 6d 74 20 31 20 2d 6c  rmat 0 -gmt 1 -l
3aa0: 6f 63 61 6c 65 20 65 6e 3b 20 63 6c 6f 63 6b 20  ocale en; clock 
3ab0: 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 20 31 20  format 0 -gmt 1 
3ac0: 2d 6c 6f 63 61 6c 65 20 64 65 3b 20 63 6c 6f 63  -locale de; cloc
3ad0: 6b 20 66 6f 72 6d 61 74 20 30 20 2d 67 6d 74 20  k format 0 -gmt 
3ae0: 31 20 2d 6c 6f 63 61 6c 65 20 66 72 7d 0a 0a 20  1 -locale fr}.. 
3af0: 20 20 20 23 20 53 63 61 6e 20 6c 6f 63 61 6c 65     # Scan locale
3b00: 20 32 78 3a 20 77 69 74 68 6f 75 74 20 73 77 69   2x: without swi
3b10: 74 63 68 69 6e 67 20 6c 6f 63 61 6c 65 20 28 65  tching locale (e
3b20: 6e 2c 20 65 6e 29 20 2b 20 28 64 65 2c 20 64 65  n, en) + (de, de
3b30: 29 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61  ).    {clock sca
3b40: 6e 20 22 54 75 65 20 4d 61 79 20 33 30 20 32 30  n "Tue May 30 20
3b50: 31 37 22 20 2d 66 6f 72 6d 61 74 20 22 25 61 20  17" -format "%a 
3b60: 25 62 20 25 64 20 25 59 22 20 2d 67 6d 74 20 31  %b %d %Y" -gmt 1
3b70: 20 2d 6c 6f 63 61 6c 65 20 65 6e 3b 20 63 6c 6f   -locale en; clo
3b80: 63 6b 20 73 63 61 6e 20 22 54 75 65 20 4d 61 79  ck scan "Tue May
3b90: 20 33 30 20 32 30 31 37 22 20 2d 66 6f 72 6d 61   30 2017" -forma
3ba0: 74 20 22 25 61 20 25 62 20 25 64 20 25 59 22 20  t "%a %b %d %Y" 
3bb0: 2d 67 6d 74 20 31 20 2d 6c 6f 63 61 6c 65 20 65  -gmt 1 -locale e
3bc0: 6e 7d 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63  n}.    {clock sc
3bd0: 61 6e 20 22 44 69 20 4d 61 69 20 33 30 20 32 30  an "Di Mai 30 20
3be0: 31 37 22 20 2d 66 6f 72 6d 61 74 20 22 25 61 20  17" -format "%a 
3bf0: 25 62 20 25 64 20 25 59 22 20 2d 67 6d 74 20 31  %b %d %Y" -gmt 1
3c00: 20 2d 6c 6f 63 61 6c 65 20 64 65 3b 20 63 6c 6f   -locale de; clo
3c10: 63 6b 20 73 63 61 6e 20 22 44 69 20 4d 61 69 20  ck scan "Di Mai 
3c20: 33 30 20 32 30 31 37 22 20 2d 66 6f 72 6d 61 74  30 2017" -format
3c30: 20 22 25 61 20 25 62 20 25 64 20 25 59 22 20 2d   "%a %b %d %Y" -
3c40: 67 6d 74 20 31 20 2d 6c 6f 63 61 6c 65 20 64 65  gmt 1 -locale de
3c50: 7d 0a 20 20 20 20 23 20 53 63 61 6e 20 6c 6f 63  }.    # Scan loc
3c60: 61 6c 65 20 32 78 3a 20 77 69 74 68 20 73 77 69  ale 2x: with swi
3c70: 74 63 68 69 6e 67 20 6c 6f 63 61 6c 65 20 28 65  tching locale (e
3c80: 6e 2c 20 64 65 29 0a 20 20 20 20 7b 63 6c 6f 63  n, de).    {cloc
3c90: 6b 20 73 63 61 6e 20 22 54 75 65 20 4d 61 79 20  k scan "Tue May 
3ca0: 33 30 20 32 30 31 37 22 20 2d 66 6f 72 6d 61 74  30 2017" -format
3cb0: 20 22 25 61 20 25 62 20 25 64 20 25 59 22 20 2d   "%a %b %d %Y" -
3cc0: 67 6d 74 20 31 20 2d 6c 6f 63 61 6c 65 20 65 6e  gmt 1 -locale en
3cd0: 3b 20 63 6c 6f 63 6b 20 73 63 61 6e 20 22 44 69  ; clock scan "Di
3ce0: 20 4d 61 69 20 33 30 20 32 30 31 37 22 20 2d 66   Mai 30 2017" -f
3cf0: 6f 72 6d 61 74 20 22 25 61 20 25 62 20 25 64 20  ormat "%a %b %d 
3d00: 25 59 22 20 2d 67 6d 74 20 31 20 2d 6c 6f 63 61  %Y" -gmt 1 -loca
3d10: 6c 65 20 64 65 7d 0a 20 20 20 20 23 20 53 63 61  le de}.    # Sca
3d20: 6e 20 6c 6f 63 61 6c 65 20 33 78 3a 20 77 69 74  n locale 3x: wit
3d30: 68 20 73 77 69 74 63 68 69 6e 67 20 6c 6f 63 61  h switching loca
3d40: 6c 65 20 28 65 6e 2c 20 64 65 2c 20 66 72 29 0a  le (en, de, fr).
3d50: 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20      {clock scan 
3d60: 22 54 75 65 20 4d 61 79 20 33 30 20 32 30 31 37  "Tue May 30 2017
3d70: 22 20 2d 66 6f 72 6d 61 74 20 22 25 61 20 25 62  " -format "%a %b
3d80: 20 25 64 20 25 59 22 20 2d 67 6d 74 20 31 20 2d   %d %Y" -gmt 1 -
3d90: 6c 6f 63 61 6c 65 20 65 6e 3b 20 63 6c 6f 63 6b  locale en; clock
3da0: 20 73 63 61 6e 20 22 44 69 20 4d 61 69 20 33 30   scan "Di Mai 30
3db0: 20 32 30 31 37 22 20 2d 66 6f 72 6d 61 74 20 22   2017" -format "
3dc0: 25 61 20 25 62 20 25 64 20 25 59 22 20 2d 67 6d  %a %b %d %Y" -gm
3dd0: 74 20 31 20 2d 6c 6f 63 61 6c 65 20 64 65 3b 20  t 1 -locale de; 
3de0: 63 6c 6f 63 6b 20 73 63 61 6e 20 22 6d 61 72 2e  clock scan "mar.
3df0: 20 6d 61 69 20 33 30 20 32 30 31 37 22 20 2d 66   mai 30 2017" -f
3e00: 6f 72 6d 61 74 20 22 25 61 20 25 62 20 25 64 20  ormat "%a %b %d 
3e10: 25 59 22 20 2d 67 6d 74 20 31 20 2d 6c 6f 63 61  %Y" -gmt 1 -loca
3e20: 6c 65 20 66 72 7d 0a 0a 20 20 20 20 23 20 46 6f  le fr}..    # Fo
3e30: 72 6d 61 74 20 54 5a 20 32 78 3a 20 63 6f 6d 70  rmat TZ 2x: comp
3e40: 61 72 69 73 6f 6e 20 76 61 6c 75 65 73 0a 20 20  arison values.  
3e50: 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20    {clock format 
3e60: 30 20 2d 74 69 6d 65 7a 6f 6e 65 20 43 45 54 20  0 -timezone CET 
3e70: 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d 2d 25  -format "%Y-%m-%
3e80: 64 20 25 48 3a 25 4d 3a 25 53 20 25 7a 22 7d 0a  d %H:%M:%S %z"}.
3e90: 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61      {clock forma
3ea0: 74 20 30 20 2d 74 69 6d 65 7a 6f 6e 65 20 45 53  t 0 -timezone ES
3eb0: 54 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d  T -format "%Y-%m
3ec0: 2d 25 64 20 25 48 3a 25 4d 3a 25 53 20 25 7a 22  -%d %H:%M:%S %z"
3ed0: 7d 0a 20 20 20 20 23 20 46 6f 72 6d 61 74 20 54  }.    # Format T
3ee0: 5a 20 32 78 3a 20 77 69 74 68 6f 75 74 20 73 77  Z 2x: without sw
3ef0: 69 74 63 68 69 6e 67 0a 20 20 20 20 7b 63 6c 6f  itching.    {clo
3f00: 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d 74 69 6d  ck format 0 -tim
3f10: 65 7a 6f 6e 65 20 43 45 54 20 2d 66 6f 72 6d 61  ezone CET -forma
3f20: 74 20 22 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25  t "%Y-%m-%d %H:%
3f30: 4d 3a 25 53 20 25 7a 22 3b 20 63 6c 6f 63 6b 20  M:%S %z"; clock 
3f40: 66 6f 72 6d 61 74 20 30 20 2d 74 69 6d 65 7a 6f  format 0 -timezo
3f50: 6e 65 20 43 45 54 20 2d 66 6f 72 6d 61 74 20 22  ne CET -format "
3f60: 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25  %Y-%m-%d %H:%M:%
3f70: 53 20 25 7a 22 7d 0a 20 20 20 20 7b 63 6c 6f 63  S %z"}.    {cloc
3f80: 6b 20 66 6f 72 6d 61 74 20 30 20 2d 74 69 6d 65  k format 0 -time
3f90: 7a 6f 6e 65 20 45 53 54 20 2d 66 6f 72 6d 61 74  zone EST -format
3fa0: 20 22 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d   "%Y-%m-%d %H:%M
3fb0: 3a 25 53 20 25 7a 22 3b 20 63 6c 6f 63 6b 20 66  :%S %z"; clock f
3fc0: 6f 72 6d 61 74 20 30 20 2d 74 69 6d 65 7a 6f 6e  ormat 0 -timezon
3fd0: 65 20 45 53 54 20 2d 66 6f 72 6d 61 74 20 22 25  e EST -format "%
3fe0: 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53  Y-%m-%d %H:%M:%S
3ff0: 20 25 7a 22 7d 0a 20 20 20 20 23 20 46 6f 72 6d   %z"}.    # Form
4000: 61 74 20 54 5a 20 32 78 3a 20 77 69 74 68 20 73  at TZ 2x: with s
4010: 77 69 74 63 68 69 6e 67 0a 20 20 20 20 7b 63 6c  witching.    {cl
4020: 6f 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d 74 69  ock format 0 -ti
4030: 6d 65 7a 6f 6e 65 20 43 45 54 20 2d 66 6f 72 6d  mezone CET -form
4040: 61 74 20 22 25 59 2d 25 6d 2d 25 64 20 25 48 3a  at "%Y-%m-%d %H:
4050: 25 4d 3a 25 53 20 25 7a 22 3b 20 63 6c 6f 63 6b  %M:%S %z"; clock
4060: 20 66 6f 72 6d 61 74 20 30 20 2d 74 69 6d 65 7a   format 0 -timez
4070: 6f 6e 65 20 45 53 54 20 2d 66 6f 72 6d 61 74 20  one EST -format 
4080: 22 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a  "%Y-%m-%d %H:%M:
4090: 25 53 20 25 7a 22 7d 0a 20 20 20 20 23 20 46 6f  %S %z"}.    # Fo
40a0: 72 6d 61 74 20 54 5a 20 33 78 3a 20 77 69 74 68  rmat TZ 3x: with
40b0: 20 73 77 69 74 63 68 69 6e 67 20 28 43 45 54 2c   switching (CET,
40c0: 20 45 53 54 2c 20 4d 53 54 29 0a 20 20 20 20 7b   EST, MST).    {
40d0: 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d  clock format 0 -
40e0: 74 69 6d 65 7a 6f 6e 65 20 43 45 54 20 2d 66 6f  timezone CET -fo
40f0: 72 6d 61 74 20 22 25 59 2d 25 6d 2d 25 64 20 25  rmat "%Y-%m-%d %
4100: 48 3a 25 4d 3a 25 53 20 25 7a 22 3b 20 63 6c 6f  H:%M:%S %z"; clo
4110: 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d 74 69 6d  ck format 0 -tim
4120: 65 7a 6f 6e 65 20 45 53 54 20 2d 66 6f 72 6d 61  ezone EST -forma
4130: 74 20 22 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25  t "%Y-%m-%d %H:%
4140: 4d 3a 25 53 20 25 7a 22 3b 20 63 6c 6f 63 6b 20  M:%S %z"; clock 
4150: 66 6f 72 6d 61 74 20 30 20 2d 74 69 6d 65 7a 6f  format 0 -timezo
4160: 6e 65 20 4d 53 54 20 2d 66 6f 72 6d 61 74 20 22  ne MST -format "
4170: 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25  %Y-%m-%d %H:%M:%
4180: 53 20 25 7a 22 7d 0a 20 20 20 20 23 20 46 6f 72  S %z"}.    # For
4190: 6d 61 74 20 54 5a 20 33 78 3a 20 77 69 74 68 20  mat TZ 3x: with 
41a0: 73 77 69 74 63 68 69 6e 67 20 28 47 4d 54 2c 20  switching (GMT, 
41b0: 45 53 54 2c 20 4d 53 54 29 0a 20 20 20 20 7b 63  EST, MST).    {c
41c0: 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 30 20 2d 67  lock format 0 -g
41d0: 6d 74 20 31 20 2d 66 6f 72 6d 61 74 20 22 25 59  mt 1 -format "%Y
41e0: 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 20  -%m-%d %H:%M:%S 
41f0: 25 7a 22 3b 20 63 6c 6f 63 6b 20 66 6f 72 6d 61  %z"; clock forma
4200: 74 20 30 20 2d 74 69 6d 65 7a 6f 6e 65 20 45 53  t 0 -timezone ES
4210: 54 20 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d  T -format "%Y-%m
4220: 2d 25 64 20 25 48 3a 25 4d 3a 25 53 20 25 7a 22  -%d %H:%M:%S %z"
4230: 3b 20 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 30  ; clock format 0
4240: 20 2d 74 69 6d 65 7a 6f 6e 65 20 4d 53 54 20 2d   -timezone MST -
4250: 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d 2d 25 64  format "%Y-%m-%d
4260: 20 25 48 3a 25 4d 3a 25 53 20 25 7a 22 7d 0a 0a   %H:%M:%S %z"}..
4270: 20 20 20 20 23 20 46 72 65 65 53 63 61 6e 20 54      # FreeScan T
4280: 5a 20 32 78 20 28 2b 31 20 73 79 73 74 65 6d 2d  Z 2x (+1 system-
4290: 64 65 66 61 75 6c 74 29 3a 20 77 69 74 68 6f 75  default): withou
42a0: 74 20 73 77 69 74 63 68 69 6e 67 20 54 5a 0a 20  t switching TZ. 
42b0: 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22     {clock scan "
42c0: 31 39 3a 31 38 3a 33 30 20 4d 53 54 22 20 2d 62  19:18:30 MST" -b
42d0: 61 73 65 20 31 34 38 38 36 33 36 30 30 3b 20 63  ase 148863600; c
42e0: 6c 6f 63 6b 20 73 63 61 6e 20 22 31 39 3a 31 38  lock scan "19:18
42f0: 3a 33 30 20 4d 53 54 22 20 2d 62 61 73 65 20 31  :30 MST" -base 1
4300: 34 38 38 36 33 36 30 30 7d 0a 20 20 20 20 7b 63  48863600}.    {c
4310: 6c 6f 63 6b 20 73 63 61 6e 20 22 31 39 3a 31 38  lock scan "19:18
4320: 3a 33 30 20 45 53 54 22 20 2d 62 61 73 65 20 31  :30 EST" -base 1
4330: 34 38 38 36 33 36 30 30 3b 20 63 6c 6f 63 6b 20  48863600; clock 
4340: 73 63 61 6e 20 22 31 39 3a 31 38 3a 33 30 20 45  scan "19:18:30 E
4350: 53 54 22 20 2d 62 61 73 65 20 31 34 38 38 36 33  ST" -base 148863
4360: 36 30 30 7d 0a 20 20 20 20 23 20 46 72 65 65 53  600}.    # FreeS
4370: 63 61 6e 20 54 5a 20 32 78 20 28 2b 31 20 73 79  can TZ 2x (+1 sy
4380: 73 74 65 6d 2d 64 65 66 61 75 6c 74 29 3a 20 77  stem-default): w
4390: 69 74 68 20 73 77 69 74 63 68 69 6e 67 20 54 5a  ith switching TZ
43a0: 0a 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e  .    {clock scan
43b0: 20 22 31 39 3a 31 38 3a 33 30 20 4d 53 54 22 20   "19:18:30 MST" 
43c0: 2d 62 61 73 65 20 31 34 38 38 36 33 36 30 30 3b  -base 148863600;
43d0: 20 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 39 3a   clock scan "19:
43e0: 31 38 3a 33 30 20 45 53 54 22 20 2d 62 61 73 65  18:30 EST" -base
43f0: 20 31 34 38 38 36 33 36 30 30 7d 0a 20 20 20 20   148863600}.    
4400: 23 20 46 72 65 65 53 63 61 6e 20 54 5a 20 32 78  # FreeScan TZ 2x
4410: 20 28 2b 31 20 67 6d 74 2c 20 2b 31 20 73 79 73   (+1 gmt, +1 sys
4420: 74 65 6d 2d 64 65 66 61 75 6c 74 29 0a 20 20 20  tem-default).   
4430: 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 39   {clock scan "19
4440: 3a 31 38 3a 33 30 20 4d 53 54 22 20 2d 62 61 73  :18:30 MST" -bas
4450: 65 20 31 34 38 38 36 33 36 30 30 20 2d 67 6d 74  e 148863600 -gmt
4460: 20 31 3b 20 63 6c 6f 63 6b 20 73 63 61 6e 20 22   1; clock scan "
4470: 31 39 3a 31 38 3a 33 30 20 45 53 54 22 20 2d 62  19:18:30 EST" -b
4480: 61 73 65 20 31 34 38 38 36 33 36 30 30 7d 0a 20  ase 148863600}. 
4490: 20 20 20 0a 20 20 20 20 23 20 53 63 61 6e 20 54     .    # Scan T
44a0: 5a 3a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 6e  Z: comparison in
44b0: 63 6c 75 64 65 64 20 69 6e 20 73 63 61 6e 20 73  cluded in scan s
44c0: 74 72 69 6e 67 20 76 73 2e 20 67 69 76 65 6e 0a  tring vs. given.
44d0: 20 20 20 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20      {clock scan 
44e0: 22 32 30 30 39 2d 30 36 2d 33 30 54 31 38 3a 33  "2009-06-30T18:3
44f0: 30 3a 30 30 20 43 45 53 54 22 20 2d 66 6f 72 6d  0:00 CEST" -form
4500: 61 74 20 22 25 59 2d 25 6d 2d 25 64 54 25 48 3a  at "%Y-%m-%dT%H:
4510: 25 4d 3a 25 53 20 25 7a 22 7d 0a 20 20 20 20 7b  %M:%S %z"}.    {
4520: 63 6c 6f 63 6b 20 73 63 61 6e 20 22 32 30 30 39  clock scan "2009
4530: 2d 30 36 2d 33 30 54 31 38 3a 33 30 3a 30 30 20  -06-30T18:30:00 
4540: 43 45 54 22 20 2d 66 6f 72 6d 61 74 20 22 25 59  CET" -format "%Y
4550: 2d 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 20  -%m-%dT%H:%M:%S 
4560: 25 7a 22 7d 0a 20 20 20 20 7b 63 6c 6f 63 6b 20  %z"}.    {clock 
4570: 73 63 61 6e 20 22 32 30 30 39 2d 30 36 2d 33 30  scan "2009-06-30
4580: 54 31 38 3a 33 30 3a 30 30 22 20 2d 74 69 6d 65  T18:30:00" -time
4590: 7a 6f 6e 65 20 43 45 54 20 2d 66 6f 72 6d 61 74  zone CET -format
45a0: 20 22 25 59 2d 25 6d 2d 25 64 54 25 48 3a 25 4d   "%Y-%m-%dT%H:%M
45b0: 3a 25 53 22 7d 0a 20 20 7d 0a 7d 0a 0a 70 72 6f  :%S"}.  }.}..pro
45c0: 63 20 74 65 73 74 2d 6f 74 68 65 72 20 7b 7b 72  c test-other {{r
45d0: 65 70 74 69 6d 65 20 31 30 30 30 7d 7d 20 7b 0a  eptime 1000}} {.
45e0: 20 20 5f 74 65 73 74 5f 72 75 6e 20 24 72 65 70    _test_run $rep
45f0: 74 69 6d 65 20 7b 0a 20 20 20 20 23 20 42 61 64  time {.    # Bad
4600: 20 7a 6f 6e 65 0a 20 20 20 20 7b 63 61 74 63 68   zone.    {catch
4610: 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 31 20   {clock scan "1 
4620: 64 61 79 22 20 2d 74 69 6d 65 7a 6f 6e 65 20 42  day" -timezone B
4630: 41 44 5f 5a 4f 4e 45 20 2d 6c 6f 63 61 6c 65 20  AD_ZONE -locale 
4640: 65 6e 7d 7d 0a 0a 20 20 20 20 23 20 53 63 61 6e  en}}..    # Scan
4650: 20 3a 20 6a 75 6c 69 61 6e 20 64 61 79 20 28 6f   : julian day (o
4660: 76 65 72 66 6c 6f 77 29 0a 20 20 20 20 7b 63 61  verflow).    {ca
4670: 74 63 68 20 7b 63 6c 6f 63 6b 20 73 63 61 6e 20  tch {clock scan 
4680: 35 33 37 33 34 38 35 20 2d 66 6f 72 6d 61 74 20  5373485 -format 
4690: 25 4a 7d 7d 0a 0a 20 20 20 20 23 20 53 63 61 6e  %J}}..    # Scan
46a0: 20 3a 20 74 65 73 74 20 72 6f 74 61 74 65 20 6f   : test rotate o
46b0: 66 20 47 43 20 6f 62 6a 65 63 74 73 20 28 66 6f  f GC objects (fo
46c0: 72 6d 61 74 20 69 73 20 64 79 6e 61 6d 69 63 2c  rmat is dynamic,
46d0: 20 73 6f 20 74 63 6c 2d 6f 62 6a 20 72 65 6d 6f   so tcl-obj remo
46e0: 76 65 64 20 77 69 74 68 20 6c 61 73 74 20 72 65  ved with last re
46f0: 66 65 72 65 6e 63 65 29 0a 20 20 20 20 7b 73 65  ference).    {se
4700: 74 20 69 20 30 3b 20 74 69 6d 65 20 7b 20 63 6c  t i 0; time { cl
4710: 6f 63 6b 20 73 63 61 6e 20 22 5b 69 6e 63 72 20  ock scan "[incr 
4720: 69 5d 20 2d 20 32 35 2e 31 31 2e 32 30 31 35 22  i] - 25.11.2015"
4730: 20 2d 66 6f 72 6d 61 74 20 22 24 69 20 2d 20 25   -format "$i - %
4740: 64 2e 25 6d 2e 25 59 22 20 2d 62 61 73 65 20 30  d.%m.%Y" -base 0
4750: 20 2d 67 6d 74 20 31 20 7d 20 35 30 7d 0a 20 20   -gmt 1 } 50}.  
4760: 20 20 23 20 53 63 61 6e 20 3a 20 74 65 73 74 20    # Scan : test 
4770: 72 65 75 73 61 62 69 6c 69 74 79 20 6f 66 20 47  reusability of G
4780: 43 20 6f 62 6a 65 63 74 73 20 28 66 6f 72 6d 61  C objects (forma
4790: 74 20 69 73 20 64 79 6e 61 6d 69 63 2c 20 73 6f  t is dynamic, so
47a0: 20 74 63 6c 2d 6f 62 6a 20 72 65 6d 6f 76 65 64   tcl-obj removed
47b0: 20 77 69 74 68 20 6c 61 73 74 20 72 65 66 65 72   with last refer
47c0: 65 6e 63 65 29 0a 20 20 20 20 7b 73 65 74 20 69  ence).    {set i
47d0: 20 35 30 3b 20 74 69 6d 65 20 7b 20 63 6c 6f 63   50; time { cloc
47e0: 6b 20 73 63 61 6e 20 22 5b 69 6e 63 72 20 69 20  k scan "[incr i 
47f0: 2d 31 5d 20 2d 20 32 35 2e 31 31 2e 32 30 31 35  -1] - 25.11.2015
4800: 22 20 2d 66 6f 72 6d 61 74 20 22 24 69 20 2d 20  " -format "$i - 
4810: 25 64 2e 25 6d 2e 25 59 22 20 2d 62 61 73 65 20  %d.%m.%Y" -base 
4820: 30 20 2d 67 6d 74 20 31 20 7d 20 35 30 7d 0a 20  0 -gmt 1 } 50}. 
4830: 20 7d 0a 7d 0a 0a 70 72 6f 63 20 74 65 73 74 2d   }.}..proc test-
4840: 65 6e 73 65 6d 62 6c 65 2d 70 65 72 66 20 7b 7b  ensemble-perf {{
4850: 72 65 70 74 69 6d 65 20 31 30 30 30 7d 7d 20 7b  reptime 1000}} {
4860: 0a 20 20 5f 74 65 73 74 5f 72 75 6e 20 24 72 65  .  _test_run $re
4870: 70 74 69 6d 65 20 7b 0a 20 20 20 20 23 20 43 6c  ptime {.    # Cl
4880: 6f 63 6b 20 63 6c 69 63 6b 73 20 28 65 6e 73 65  ock clicks (ense
4890: 6d 62 6c 65 29 0a 20 20 20 20 7b 63 6c 6f 63 6b  mble).    {clock
48a0: 20 63 6c 69 63 6b 73 7d 0a 20 20 20 20 23 20 43   clicks}.    # C
48b0: 6c 6f 63 6b 20 63 6c 69 63 6b 73 20 28 64 69 72  lock clicks (dir
48c0: 65 63 74 29 0a 20 20 20 20 7b 3a 3a 74 63 6c 3a  ect).    {::tcl:
48d0: 3a 63 6c 6f 63 6b 3a 3a 63 6c 69 63 6b 73 7d 0a  :clock::clicks}.
48e0: 20 20 20 20 23 20 43 6c 6f 63 6b 20 73 65 63 6f      # Clock seco
48f0: 6e 64 73 20 28 65 6e 73 65 6d 62 6c 65 29 0a 20  nds (ensemble). 
4900: 20 20 20 7b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64     {clock second
4910: 73 7d 0a 20 20 20 20 23 20 43 6c 6f 63 6b 20 73  s}.    # Clock s
4920: 65 63 6f 6e 64 73 20 28 64 69 72 65 63 74 29 0a  econds (direct).
4930: 20 20 20 20 7b 3a 3a 74 63 6c 3a 3a 63 6c 6f 63      {::tcl::cloc
4940: 6b 3a 3a 73 65 63 6f 6e 64 73 7d 0a 20 20 20 20  k::seconds}.    
4950: 23 20 43 6c 6f 63 6b 20 6d 69 63 72 6f 73 65 63  # Clock microsec
4960: 6f 6e 64 73 20 28 65 6e 73 65 6d 62 6c 65 29 0a  onds (ensemble).
4970: 20 20 20 20 7b 63 6c 6f 63 6b 20 6d 69 63 72 6f      {clock micro
4980: 73 65 63 6f 6e 64 73 7d 0a 20 20 20 20 23 20 43  seconds}.    # C
4990: 6c 6f 63 6b 20 6d 69 63 72 6f 73 65 63 6f 6e 64  lock microsecond
49a0: 73 20 28 64 69 72 65 63 74 29 0a 20 20 20 20 7b  s (direct).    {
49b0: 3a 3a 74 63 6c 3a 3a 63 6c 6f 63 6b 3a 3a 6d 69  ::tcl::clock::mi
49c0: 63 72 6f 73 65 63 6f 6e 64 73 7d 0a 20 20 20 20  croseconds}.    
49d0: 23 20 43 6c 6f 63 6b 20 73 63 61 6e 20 28 65 6e  # Clock scan (en
49e0: 73 65 6d 62 6c 65 29 0a 20 20 20 20 7b 63 6c 6f  semble).    {clo
49f0: 63 6b 20 73 63 61 6e 20 22 22 7d 0a 20 20 20 20  ck scan ""}.    
4a00: 23 20 43 6c 6f 63 6b 20 73 63 61 6e 20 28 64 69  # Clock scan (di
4a10: 72 65 63 74 29 0a 20 20 20 20 7b 3a 3a 74 63 6c  rect).    {::tcl
4a20: 3a 3a 63 6c 6f 63 6b 3a 3a 73 63 61 6e 20 22 22  ::clock::scan ""
4a30: 7d 0a 20 20 20 20 23 20 43 6c 6f 63 6b 20 66 6f  }.    # Clock fo
4a40: 72 6d 61 74 20 28 65 6e 73 65 6d 62 6c 65 29 0a  rmat (ensemble).
4a50: 20 20 20 20 7b 63 6c 6f 63 6b 20 66 6f 72 6d 61      {clock forma
4a60: 74 20 30 20 2d 66 20 25 73 7d 0a 20 20 20 20 23  t 0 -f %s}.    #
4a70: 20 43 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 28 64   Clock format (d
4a80: 69 72 65 63 74 29 0a 20 20 20 20 7b 3a 3a 74 63  irect).    {::tc
4a90: 6c 3a 3a 63 6c 6f 63 6b 3a 3a 66 6f 72 6d 61 74  l::clock::format
4aa0: 20 30 20 2d 66 20 25 73 7d 0a 20 20 7d 0a 7d 0a   0 -f %s}.  }.}.
4ab0: 0a 70 72 6f 63 20 74 65 73 74 20 7b 7b 72 65 70  .proc test {{rep
4ac0: 74 69 6d 65 20 31 30 30 30 7d 7d 20 7b 0a 20 20  time 1000}} {.  
4ad0: 70 75 74 73 20 22 22 0a 20 20 74 65 73 74 2d 65  puts "".  test-e
4ae0: 6e 73 65 6d 62 6c 65 2d 70 65 72 66 20 5b 65 78  nsemble-perf [ex
4af0: 70 72 20 7b 24 72 65 70 74 69 6d 65 20 2f 20 32  pr {$reptime / 2
4b00: 7d 5d 3b 20 23 66 61 73 74 20 65 6e 6f 75 67 68  }]; #fast enough
4b10: 0a 20 20 74 65 73 74 2d 66 6f 72 6d 61 74 20 24  .  test-format $
4b20: 72 65 70 74 69 6d 65 0a 20 20 74 65 73 74 2d 73  reptime.  test-s
4b30: 63 61 6e 20 24 72 65 70 74 69 6d 65 0a 20 20 74  can $reptime.  t
4b40: 65 73 74 2d 66 72 65 65 73 63 61 6e 20 24 72 65  est-freescan $re
4b50: 70 74 69 6d 65 0a 20 20 74 65 73 74 2d 61 64 64  ptime.  test-add
4b60: 20 24 72 65 70 74 69 6d 65 0a 20 20 74 65 73 74   $reptime.  test
4b70: 2d 63 6f 6e 76 65 72 74 20 5b 65 78 70 72 20 7b  -convert [expr {
4b80: 24 72 65 70 74 69 6d 65 20 2f 20 32 7d 5d 3b 20  $reptime / 2}]; 
4b90: 23 66 61 73 74 20 65 6e 6f 75 67 68 0a 20 20 74  #fast enough.  t
4ba0: 65 73 74 2d 6f 74 68 65 72 20 24 72 65 70 74 69  est-other $repti
4bb0: 6d 65 0a 0a 20 20 70 75 74 73 20 5c 6e 2a 2a 4f  me..  puts \n**O
4bc0: 4b 2a 2a 0a 7d 0a 0a 7d 3b 20 23 20 65 6e 64 20  K**.}..}; # end 
4bd0: 6f 66 20 3a 3a 74 63 6c 54 65 73 74 50 65 72 66  of ::tclTestPerf
4be0: 2d 54 63 6c 43 6c 6f 63 6b 0a 0a 23 20 2d 2d 2d  -TclClock..# ---
4bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c30: 2d 2d 2d 2d 2d 0a 0a 23 20 69 66 20 63 61 6c 6c  -----..# if call
4c40: 69 6e 67 20 64 69 72 65 63 74 3a 0a 69 66 20 7b  ing direct:.if {
4c50: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 61  [info exists ::a
4c60: 72 67 76 30 5d 20 26 26 20 5b 66 69 6c 65 20 74  rgv0] && [file t
4c70: 61 69 6c 20 24 3a 3a 61 72 67 76 30 5d 20 65 71  ail $::argv0] eq
4c80: 20 5b 66 69 6c 65 20 74 61 69 6c 20 5b 69 6e 66   [file tail [inf
4c90: 6f 20 73 63 72 69 70 74 5d 5d 7d 20 7b 0a 20 20  o script]]} {.  
4ca0: 3a 3a 74 63 6c 54 65 73 74 50 65 72 66 2d 54 63  ::tclTestPerf-Tc
4cb0: 6c 43 6c 6f 63 6b 3a 3a 74 65 73 74 20 24 69 6e  lClock::test $in
4cc0: 28 2d 74 69 6d 65 29 0a 7d 0a                    (-time).}.