/ Hex Artifact Content
Login

Artifact 9bf1d25180a2e05fc12ce3940cc8003033642f68:


0000: 23 20 32 30 31 32 20 4a 75 6e 65 20 31 38 0a 23  # 2012 June 18.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 20 0a 23 20 54 65 73 74 73 20  ****.# .# Tests 
0170: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 41 74  of the sqlite3At
0180: 6f 46 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 23  oF() function..#
0190: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  ..set testdir [f
01a0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
01b0: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
01c0: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a  dir/tester.tcl..
01d0: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
01e0: 73 20 5f 5f 47 4e 55 43 5f 5f 5d 7d 20 7b 0a 20  s __GNUC__]} {. 
01f0: 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72   finish_test.  r
0200: 65 74 75 72 6e 0a 7d 0a 0a 65 78 70 72 20 73 72  eturn.}..expr sr
0210: 61 6e 64 28 31 29 0a 66 6f 72 20 7b 73 65 74 20  and(1).for {set 
0220: 69 20 31 7d 20 7b 24 69 3c 32 30 30 30 30 7d 20  i 1} {$i<20000} 
0230: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 73 65 74  {incr i} {.  set
0240: 20 70 6f 77 20 5b 65 78 70 72 20 7b 69 6e 74 28   pow [expr {int(
0250: 28 72 61 6e 64 28 29 2d 30 2e 35 29 2a 31 30 30  (rand()-0.5)*100
0260: 29 7d 5d 0a 20 20 73 65 74 20 78 20 5b 65 78 70  )}].  set x [exp
0270: 72 20 7b 70 6f 77 28 28 72 61 6e 64 28 29 2d 30  r {pow((rand()-0
0280: 2e 35 29 2a 32 2a 72 61 6e 64 28 29 2c 24 70 6f  .5)*2*rand(),$po
0290: 77 29 7d 5d 0a 20 20 73 65 74 20 78 66 20 5b 66  w)}].  set xf [f
02a0: 6f 72 6d 61 74 20 25 2e 33 32 65 20 24 78 5d 0a  ormat %.32e $x].
02b0: 0a 20 20 23 20 56 65 72 69 66 79 20 74 68 61 74  .  # Verify that
02c0: 20 74 65 78 74 2d 3e 72 65 61 6c 20 63 6f 6e 76   text->real conv
02d0: 65 72 73 69 6f 6e 73 20 67 65 74 20 65 78 61 63  ersions get exac
02e0: 74 6c 79 20 73 61 6d 65 20 69 65 65 65 37 35 34  tly same ieee754
02f0: 20 66 6c 6f 61 74 69 6e 67 2d 0a 20 20 23 20 70   floating-.  # p
0300: 6f 69 6e 74 20 76 61 6c 75 65 20 69 6e 20 53 51  oint value in SQ
0310: 4c 69 74 65 20 61 73 20 74 68 65 79 20 64 6f 20  Lite as they do 
0320: 69 6e 20 54 43 4c 2e 0a 20 20 23 0a 20 20 64 6f  in TCL..  #.  do
0330: 5f 74 65 73 74 20 61 74 6f 66 31 2d 31 2e 24 69  _test atof1-1.$i
0340: 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 79 20 5b  .1 {.    set y [
0350: 64 62 20 65 76 61 6c 20 22 53 45 4c 45 43 54 20  db eval "SELECT 
0360: 24 78 66 3d 5c 24 78 22 5d 0a 20 20 20 20 69 66  $xf=\$x"].    if
0370: 20 7b 21 24 79 7d 20 7b 0a 20 20 20 20 20 20 70   {!$y} {.      p
0380: 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 5c  uts -nonewline \
0390: 31 37 33 5b 64 62 20 65 76 61 6c 20 22 53 45 4c  173[db eval "SEL
03a0: 45 43 54 20 72 65 61 6c 32 68 65 78 28 24 78 66  ECT real2hex($xf
03b0: 29 2c 20 72 65 61 6c 32 68 65 78 28 5c 24 78 29  ), real2hex(\$x)
03c0: 22 5d 5c 31 37 35 0a 20 20 20 20 20 20 64 62 20  "]\175.      db 
03d0: 65 76 61 6c 20 22 53 45 4c 45 43 54 20 24 78 66  eval "SELECT $xf
03e0: 2b 30 2e 30 20 41 53 20 61 2c 20 5c 24 78 20 41  +0.0 AS a, \$x A
03f0: 53 20 62 22 20 7b 0a 20 20 20 20 20 20 20 20 70  S b" {.        p
0400: 75 74 73 20 5b 66 6f 72 6d 61 74 20 22 5c 6e 25  uts [format "\n%
0410: 2e 36 30 65 5c 6e 25 2e 36 30 65 5c 6e 25 2e 36  .60e\n%.60e\n%.6
0420: 30 65 22 20 24 78 20 24 61 20 24 62 5d 0a 20 20  0e" $x $a $b].  
0430: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
0440: 73 65 74 20 79 0a 20 20 7d 20 7b 31 7d 0a 0a 20  set y.  } {1}.. 
0450: 20 23 20 56 65 72 69 66 79 20 74 68 61 74 20 72   # Verify that r
0460: 6f 75 6e 64 2d 74 72 69 70 20 72 65 61 6c 2d 3e  ound-trip real->
0470: 74 65 78 74 2d 3e 72 65 61 6c 20 63 6f 6e 76 65  text->real conve
0480: 72 73 69 6f 6e 73 20 75 73 69 6e 67 20 74 68 65  rsions using the
0490: 20 71 75 6f 74 65 28 29 0a 20 20 23 20 66 75 6e   quote().  # fun
04a0: 63 74 69 6f 6e 20 70 72 65 73 65 72 76 65 20 74  ction preserve t
04b0: 68 65 20 62 69 74 73 20 6f 66 20 74 68 65 20 6e  he bits of the n
04c0: 75 6d 65 72 69 63 20 76 61 6c 75 65 20 65 78 61  umeric value exa
04d0: 63 74 6c 79 2e 0a 20 20 23 0a 20 20 64 6f 5f 74  ctly..  #.  do_t
04e0: 65 73 74 20 61 74 6f 66 31 2d 31 2e 24 69 2e 32  est atof1-1.$i.2
04f0: 20 7b 0a 20 20 20 20 73 65 74 20 79 20 5b 64 62   {.    set y [db
0500: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 24 78   eval {SELECT $x
0510: 3d 43 41 53 54 28 71 75 6f 74 65 28 24 78 29 20  =CAST(quote($x) 
0520: 41 53 20 72 65 61 6c 29 7d 5d 0a 20 20 20 20 69  AS real)}].    i
0530: 66 20 7b 21 24 79 7d 20 7b 0a 20 20 20 20 20 20  f {!$y} {.      
0540: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
0550: 72 65 61 6c 32 68 65 78 28 24 78 29 20 61 2c 20  real2hex($x) a, 
0560: 72 65 61 6c 32 68 65 78 28 43 41 53 54 28 71 75  real2hex(CAST(qu
0570: 6f 74 65 28 24 78 29 20 41 53 20 72 65 61 6c 29  ote($x) AS real)
0580: 29 20 62 7d 20 7b 7d 0a 20 20 20 20 20 20 70 75  ) b} {}.      pu
0590: 74 73 20 22 5c 6e 49 4e 3a 20 20 20 20 24 61 20  ts "\nIN:    $a 
05a0: 24 78 66 22 0a 20 20 20 20 20 20 70 75 74 73 20  $xf".      puts 
05b0: 5b 66 6f 72 6d 61 74 20 7b 51 55 4f 54 45 3a 20  [format {QUOTE: 
05c0: 25 31 36 73 20 25 73 7d 20 7b 7d 20 5b 64 62 20  %16s %s} {} [db 
05d0: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 71 75 6f  eval {SELECT quo
05e0: 74 65 28 24 78 29 7d 5d 5d 0a 20 20 20 20 20 20  te($x)}]].      
05f0: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
0600: 43 41 53 54 28 71 75 6f 74 65 28 24 78 29 20 41  CAST(quote($x) A
0610: 53 20 72 65 61 6c 29 20 63 7d 20 7b 7d 0a 20 20  S real) c} {}.  
0620: 20 20 20 20 70 75 74 73 20 22 4f 55 54 3a 20 20      puts "OUT:  
0630: 20 24 62 20 5b 66 6f 72 6d 61 74 20 25 2e 33 32   $b [format %.32
0640: 65 20 24 63 5d 22 0a 20 20 20 20 7d 0a 20 20 20  e $c]".    }.   
0650: 20 73 65 74 20 79 0a 20 20 7d 20 7b 31 7d 0a 7d   set y.  } {1}.}
0660: 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     ...finish_test.