binary.test
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:52k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # This file tests the tclBinary.c file and the "binary" Tcl command. 
  2. #
  3. # This file contains a collection of tests for one or more of the Tcl
  4. # built-in commands.  Sourcing this file into Tcl runs the tests and
  5. # generates output for errors.  No output means no errors were found.
  6. #
  7. # Copyright (c) 1997 by Sun Microsystems, Inc.
  8. # Copyright (c) 1998-1999 by Scriptics Corporation.
  9. #
  10. # See the file "license.terms" for information on usage and redistribution
  11. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  12. #
  13. # RCS: @(#) $Id: binary.test,v 1.11.2.4 2006/04/05 15:17:06 dgp Exp $
  14. if {[lsearch [namespace children] ::tcltest] == -1} {
  15.     package require tcltest
  16.     namespace import -force ::tcltest::*
  17. }
  18. test binary-0.1 {DupByteArrayInternalRep} {
  19.     set hdr [binary format cc 0 0316]
  20.     set buf hellomatt
  21.     
  22.     set data $hdr
  23.     append data $buf
  24.     
  25.     string length $data
  26. } 11
  27. test binary-1.1 {Tcl_BinaryObjCmd: bad args} {
  28.     list [catch {binary} msg] $msg
  29. } {1 {wrong # args: should be "binary option ?arg arg ...?"}}
  30. test binary-1.2 {Tcl_BinaryObjCmd: bad args} {
  31.     list [catch {binary foo} msg] $msg
  32. } {1 {bad option "foo": must be format or scan}}
  33. test binary-1.3 {Tcl_BinaryObjCmd: format error} {
  34.     list [catch {binary f} msg] $msg
  35. } {1 {wrong # args: should be "binary format formatString ?arg arg ...?"}}
  36. test binary-1.4 {Tcl_BinaryObjCmd: format} {
  37.     binary format ""
  38. } {}
  39. test binary-2.1 {Tcl_BinaryObjCmd: format} {
  40.     list [catch {binary format a } msg] $msg
  41. } {1 {not enough arguments for all format specifiers}}
  42. test binary-2.2 {Tcl_BinaryObjCmd: format} {
  43.     binary format a0 foo
  44. } {}
  45. test binary-2.3 {Tcl_BinaryObjCmd: format} {
  46.     binary format a f
  47. } {f}
  48. test binary-2.4 {Tcl_BinaryObjCmd: format} {
  49.     binary format a foo
  50. } {f}
  51. test binary-2.5 {Tcl_BinaryObjCmd: format} {
  52.     binary format a3 foo
  53. } {foo}
  54. test binary-2.6 {Tcl_BinaryObjCmd: format} {
  55.     binary format a5 foo
  56. } foox00x00
  57. test binary-2.7 {Tcl_BinaryObjCmd: format} {
  58.     binary format a*a3 foobarbaz blat
  59. } foobarbazbla
  60. test binary-2.8 {Tcl_BinaryObjCmd: format} {
  61.     binary format a*X3a2 foobar x
  62. } fooxx00r
  63. test binary-3.1 {Tcl_BinaryObjCmd: format} {
  64.     list [catch {binary format A} msg] $msg
  65. } {1 {not enough arguments for all format specifiers}}
  66. test binary-3.2 {Tcl_BinaryObjCmd: format} {
  67.     binary format A0 f
  68. } {}
  69. test binary-3.3 {Tcl_BinaryObjCmd: format} {
  70.     binary format A f
  71. } {f}
  72. test binary-3.4 {Tcl_BinaryObjCmd: format} {
  73.     binary format A foo
  74. } {f}
  75. test binary-3.5 {Tcl_BinaryObjCmd: format} {
  76.     binary format A3 foo
  77. } {foo}
  78. test binary-3.6 {Tcl_BinaryObjCmd: format} {
  79.     binary format A5 foo
  80. } {foo  }
  81. test binary-3.7 {Tcl_BinaryObjCmd: format} {
  82.     binary format A*A3 foobarbaz blat
  83. } foobarbazbla
  84. test binary-3.8 {Tcl_BinaryObjCmd: format} {
  85.     binary format A*X3A2 foobar x
  86. } {foox r}
  87. test binary-4.1 {Tcl_BinaryObjCmd: format} {
  88.     list [catch {binary format B} msg] $msg
  89. } {1 {not enough arguments for all format specifiers}}
  90. test binary-4.2 {Tcl_BinaryObjCmd: format} {
  91.     binary format B0 1
  92. } {}
  93. test binary-4.3 {Tcl_BinaryObjCmd: format} {
  94.     binary format B 1
  95. } x80
  96. test binary-4.4 {Tcl_BinaryObjCmd: format} {
  97.     binary format B* 010011
  98. } x4c
  99. test binary-4.5 {Tcl_BinaryObjCmd: format} {
  100.     binary format B8 01001101
  101. } x4d
  102. test binary-4.6 {Tcl_BinaryObjCmd: format} {
  103.     binary format A2X2B9 oo 01001101
  104. } x4dx00
  105. test binary-4.7 {Tcl_BinaryObjCmd: format} {
  106.     binary format B9 010011011010
  107. } x4dx80
  108. test binary-4.8 {Tcl_BinaryObjCmd: format} {
  109.     binary format B2B3 10 010
  110. } x80x40
  111. test binary-4.9 {Tcl_BinaryObjCmd: format} {
  112.     list [catch {binary format B1B5 1 foo} msg] $msg
  113. } {1 {expected binary string but got "foo" instead}}
  114. test binary-5.1 {Tcl_BinaryObjCmd: format} {
  115.     list [catch {binary format b} msg] $msg
  116. } {1 {not enough arguments for all format specifiers}}
  117. test binary-5.2 {Tcl_BinaryObjCmd: format} {
  118.     binary format b0 1
  119. } {}
  120. test binary-5.3 {Tcl_BinaryObjCmd: format} {
  121.     binary format b 1
  122. } x01
  123. test binary-5.4 {Tcl_BinaryObjCmd: format} {
  124.     binary format b* 010011
  125. } 2
  126. test binary-5.5 {Tcl_BinaryObjCmd: format} {
  127.     binary format b8 01001101
  128. } xb2
  129. test binary-5.6 {Tcl_BinaryObjCmd: format} {
  130.     binary format A2X2b9 oo 01001101
  131. } xb2x00
  132. test binary-5.7 {Tcl_BinaryObjCmd: format} {
  133.     binary format b9 010011011010
  134. } xb2x01
  135. test binary-5.8 {Tcl_BinaryObjCmd: format} {
  136.     binary format b17 1
  137. } x0100
  138. test binary-5.9 {Tcl_BinaryObjCmd: format} {
  139.     binary format b2b3 10 010
  140. } x01x02
  141. test binary-5.10 {Tcl_BinaryObjCmd: format} {
  142.     list [catch {binary format b1b5 1 foo} msg] $msg
  143. } {1 {expected binary string but got "foo" instead}}
  144. test binary-6.1 {Tcl_BinaryObjCmd: format} {
  145.     list [catch {binary format h} msg] $msg
  146. } {1 {not enough arguments for all format specifiers}}
  147. test binary-6.2 {Tcl_BinaryObjCmd: format} {
  148.     binary format h0 1
  149. } {}
  150. test binary-6.3 {Tcl_BinaryObjCmd: format} {
  151.     binary format h 1
  152. } x01
  153. test binary-6.4 {Tcl_BinaryObjCmd: format} {
  154.     binary format h c
  155. } x0c
  156. test binary-6.5 {Tcl_BinaryObjCmd: format} {
  157.     binary format h* baadf00d
  158. } xabxdax0fxd0
  159. test binary-6.6 {Tcl_BinaryObjCmd: format} {
  160.     binary format h4 c410
  161. } x4cx01
  162. test binary-6.7 {Tcl_BinaryObjCmd: format} {
  163.     binary format h6 c4102
  164. } x4cx01x02
  165. test binary-6.8 {Tcl_BinaryObjCmd: format} {
  166.     binary format h5 c41020304
  167. } x4cx01x02
  168. test binary-6.9 {Tcl_BinaryObjCmd: format} {
  169.     binary format a3X3h5 foo 2
  170. } x02x00x00
  171. test binary-6.10 {Tcl_BinaryObjCmd: format} {
  172.     binary format h2h3 23 456
  173. } x32x54x06
  174. test binary-6.11 {Tcl_BinaryObjCmd: format} {
  175.     list [catch {binary format h2 foo} msg] $msg
  176. } {1 {expected hexadecimal string but got "foo" instead}}
  177. test binary-7.1 {Tcl_BinaryObjCmd: format} {
  178.     list [catch {binary format H} msg] $msg
  179. } {1 {not enough arguments for all format specifiers}}
  180. test binary-7.2 {Tcl_BinaryObjCmd: format} {
  181.     binary format H0 1
  182. } {}
  183. test binary-7.3 {Tcl_BinaryObjCmd: format} {
  184.     binary format H 1
  185. } x10
  186. test binary-7.4 {Tcl_BinaryObjCmd: format} {
  187.     binary format H c
  188. } xc0
  189. test binary-7.5 {Tcl_BinaryObjCmd: format} {
  190.     binary format H* baadf00d
  191. } xbaxadxf0x0d
  192. test binary-7.6 {Tcl_BinaryObjCmd: format} {
  193.     binary format H4 c410
  194. } xc4x10
  195. test binary-7.7 {Tcl_BinaryObjCmd: format} {
  196.     binary format H6 c4102
  197. } xc4x10x20
  198. test binary-7.8 {Tcl_BinaryObjCmd: format} {
  199.     binary format H5 c41023304
  200. } xc4x10x20
  201. test binary-7.9 {Tcl_BinaryObjCmd: format} {
  202.     binary format a3X3H5 foo 2
  203. } x20x00x00
  204. test binary-7.10 {Tcl_BinaryObjCmd: format} {
  205.     binary format H2H3 23 456
  206. } x23x45x60
  207. test binary-7.11 {Tcl_BinaryObjCmd: format} {
  208.     list [catch {binary format H2 foo} msg] $msg
  209. } {1 {expected hexadecimal string but got "foo" instead}}
  210. test binary-8.1 {Tcl_BinaryObjCmd: format} {
  211.     list [catch {binary format c} msg] $msg
  212. } {1 {not enough arguments for all format specifiers}}
  213. test binary-8.2 {Tcl_BinaryObjCmd: format} {
  214.     list [catch {binary format c blat} msg] $msg
  215. } {1 {expected integer but got "blat"}}
  216. test binary-8.3 {Tcl_BinaryObjCmd: format} {
  217.     binary format c0 0x50
  218. } {}
  219. test binary-8.4 {Tcl_BinaryObjCmd: format} {
  220.     binary format c 0x50
  221. } P
  222. test binary-8.5 {Tcl_BinaryObjCmd: format} {
  223.     binary format c 0x5052
  224. } R
  225. test binary-8.6 {Tcl_BinaryObjCmd: format} {
  226.     binary format c2 {0x50 0x52}
  227. } PR
  228. test binary-8.7 {Tcl_BinaryObjCmd: format} {
  229.     binary format c2 {0x50 0x52 0x53}
  230. } PR
  231. test binary-8.8 {Tcl_BinaryObjCmd: format} {
  232.     binary format c* {0x50 0x52}
  233. } PR
  234. test binary-8.9 {Tcl_BinaryObjCmd: format} {
  235.     list [catch {binary format c2 {0x50}} msg] $msg
  236. } {1 {number of elements in list does not match count}}
  237. test binary-8.10 {Tcl_BinaryObjCmd: format} {
  238.     set a {0x50 0x51}
  239.     list [catch {binary format c $a} msg] $msg
  240. } [list 1 "expected integer but got "0x50 0x51""]
  241. test binary-8.11 {Tcl_BinaryObjCmd: format} {
  242.     set a {0x50 0x51}
  243.     binary format c1 $a
  244. } P
  245. test binary-9.1 {Tcl_BinaryObjCmd: format} {
  246.     list [catch {binary format s} msg] $msg
  247. } {1 {not enough arguments for all format specifiers}}
  248. test binary-9.2 {Tcl_BinaryObjCmd: format} {
  249.     list [catch {binary format s blat} msg] $msg
  250. } {1 {expected integer but got "blat"}}
  251. test binary-9.3 {Tcl_BinaryObjCmd: format} {
  252.     binary format s0 0x50
  253. } {}
  254. test binary-9.4 {Tcl_BinaryObjCmd: format} {
  255.     binary format s 0x50
  256. } Px00
  257. test binary-9.5 {Tcl_BinaryObjCmd: format} {
  258.     binary format s 0x5052
  259. } RP
  260. test binary-9.6 {Tcl_BinaryObjCmd: format} {
  261.     binary format s 0x505251 0x53
  262. } QR
  263. test binary-9.7 {Tcl_BinaryObjCmd: format} {
  264.     binary format s2 {0x50 0x52}
  265. } Px00Rx00
  266. test binary-9.8 {Tcl_BinaryObjCmd: format} {
  267.     binary format s* {0x5051 0x52}
  268. } QPRx00
  269. test binary-9.9 {Tcl_BinaryObjCmd: format} {
  270.     binary format s2 {0x50 0x52 0x53} 0x54
  271. } Px00Rx00
  272. test binary-9.10 {Tcl_BinaryObjCmd: format} {
  273.     list [catch {binary format s2 {0x50}} msg] $msg
  274. } {1 {number of elements in list does not match count}}
  275. test binary-9.11 {Tcl_BinaryObjCmd: format} {
  276.     set a {0x50 0x51}
  277.     list [catch {binary format s $a} msg] $msg
  278. } [list 1 "expected integer but got "0x50 0x51""]
  279. test binary-9.12 {Tcl_BinaryObjCmd: format} {
  280.     set a {0x50 0x51}
  281.     binary format s1 $a
  282. } Px00
  283. test binary-10.1 {Tcl_BinaryObjCmd: format} {
  284.     list [catch {binary format S} msg] $msg
  285. } {1 {not enough arguments for all format specifiers}}
  286. test binary-10.2 {Tcl_BinaryObjCmd: format} {
  287.     list [catch {binary format S blat} msg] $msg
  288. } {1 {expected integer but got "blat"}}
  289. test binary-10.3 {Tcl_BinaryObjCmd: format} {
  290.     binary format S0 0x50
  291. } {}
  292. test binary-10.4 {Tcl_BinaryObjCmd: format} {
  293.     binary format S 0x50
  294. } x00P
  295. test binary-10.5 {Tcl_BinaryObjCmd: format} {
  296.     binary format S 0x5052
  297. } PR
  298. test binary-10.6 {Tcl_BinaryObjCmd: format} {
  299.     binary format S 0x505251 0x53
  300. } RQ
  301. test binary-10.7 {Tcl_BinaryObjCmd: format} {
  302.     binary format S2 {0x50 0x52}
  303. } x00Px00R
  304. test binary-10.8 {Tcl_BinaryObjCmd: format} {
  305.     binary format S* {0x5051 0x52}
  306. } PQx00R
  307. test binary-10.9 {Tcl_BinaryObjCmd: format} {
  308.     binary format S2 {0x50 0x52 0x53} 0x54
  309. } x00Px00R
  310. test binary-10.10 {Tcl_BinaryObjCmd: format} {
  311.     list [catch {binary format S2 {0x50}} msg] $msg
  312. } {1 {number of elements in list does not match count}}
  313. test binary-10.11 {Tcl_BinaryObjCmd: format} {
  314.     set a {0x50 0x51}
  315.     list [catch {binary format S $a} msg] $msg
  316. } [list 1 "expected integer but got "0x50 0x51""]
  317. test binary-10.12 {Tcl_BinaryObjCmd: format} {
  318.     set a {0x50 0x51}
  319.     binary format S1 $a
  320. } x00P
  321. test binary-11.1 {Tcl_BinaryObjCmd: format} {
  322.     list [catch {binary format i} msg] $msg
  323. } {1 {not enough arguments for all format specifiers}}
  324. test binary-11.2 {Tcl_BinaryObjCmd: format} {
  325.     list [catch {binary format i blat} msg] $msg
  326. } {1 {expected integer but got "blat"}}
  327. test binary-11.3 {Tcl_BinaryObjCmd: format} {
  328.     binary format i0 0x50
  329. } {}
  330. test binary-11.4 {Tcl_BinaryObjCmd: format} {
  331.     binary format i 0x50
  332. } Px00x00x00
  333. test binary-11.5 {Tcl_BinaryObjCmd: format} {
  334.     binary format i 0x5052
  335. } RPx00x00
  336. test binary-11.6 {Tcl_BinaryObjCmd: format} {
  337.     binary format i 0x505251 0x53
  338. } QRPx00
  339. test binary-11.7 {Tcl_BinaryObjCmd: format} {
  340.     binary format i1 {0x505251 0x53}
  341. } QRPx00
  342. test binary-11.8 {Tcl_BinaryObjCmd: format} {
  343.     binary format i 0x53525150
  344. } PQRS
  345. test binary-11.9 {Tcl_BinaryObjCmd: format} {
  346.     binary format i2 {0x50 0x52}
  347. } Px00x00x00Rx00x00x00
  348. test binary-11.10 {Tcl_BinaryObjCmd: format} {
  349.     binary format i* {0x50515253 0x52}
  350. } SRQPRx00x00x00
  351. test binary-11.11 {Tcl_BinaryObjCmd: format} {
  352.     list [catch {binary format i2 {0x50}} msg] $msg
  353. } {1 {number of elements in list does not match count}}
  354. test binary-11.12 {Tcl_BinaryObjCmd: format} {
  355.     set a {0x50 0x51}
  356.     list [catch {binary format i $a} msg] $msg
  357. } [list 1 "expected integer but got "0x50 0x51""]
  358. test binary-11.13 {Tcl_BinaryObjCmd: format} {
  359.     set a {0x50 0x51}
  360.     binary format i1 $a
  361. } Px00x00x00
  362. test binary-12.1 {Tcl_BinaryObjCmd: format} {
  363.     list [catch {binary format I} msg] $msg
  364. } {1 {not enough arguments for all format specifiers}}
  365. test binary-12.2 {Tcl_BinaryObjCmd: format} {
  366.     list [catch {binary format I blat} msg] $msg
  367. } {1 {expected integer but got "blat"}}
  368. test binary-12.3 {Tcl_BinaryObjCmd: format} {
  369.     binary format I0 0x50
  370. } {}
  371. test binary-12.4 {Tcl_BinaryObjCmd: format} {
  372.     binary format I 0x50
  373. } x00x00x00P
  374. test binary-12.5 {Tcl_BinaryObjCmd: format} {
  375.     binary format I 0x5052
  376. } x00x00PR
  377. test binary-12.6 {Tcl_BinaryObjCmd: format} {
  378.     binary format I 0x505251 0x53
  379. } x00PRQ
  380. test binary-12.7 {Tcl_BinaryObjCmd: format} {
  381.     binary format I1 {0x505251 0x53}
  382. } x00PRQ
  383. test binary-12.8 {Tcl_BinaryObjCmd: format} {
  384.     binary format I 0x53525150
  385. } SRQP
  386. test binary-12.9 {Tcl_BinaryObjCmd: format} {
  387.     binary format I2 {0x50 0x52}
  388. } x00x00x00Px00x00x00R
  389. test binary-12.10 {Tcl_BinaryObjCmd: format} {
  390.     binary format I* {0x50515253 0x52}
  391. } PQRSx00x00x00R
  392. test binary-12.11 {Tcl_BinaryObjCmd: format} {
  393.     list [catch {binary format i2 {0x50}} msg] $msg
  394. } {1 {number of elements in list does not match count}}
  395. test binary-12.12 {Tcl_BinaryObjCmd: format} {
  396.     set a {0x50 0x51}
  397.     list [catch {binary format I $a} msg] $msg
  398. } [list 1 "expected integer but got "0x50 0x51""]
  399. test binary-12.13 {Tcl_BinaryObjCmd: format} {
  400.     set a {0x50 0x51}
  401.     binary format I1 $a
  402. } x00x00x00P
  403. test binary-13.1 {Tcl_BinaryObjCmd: format} {
  404.     list [catch {binary format f} msg] $msg
  405. } {1 {not enough arguments for all format specifiers}}
  406. test binary-13.2 {Tcl_BinaryObjCmd: format} {
  407.     list [catch {binary format f blat} msg] $msg
  408. } {1 {expected floating-point number but got "blat"}}
  409. test binary-13.3 {Tcl_BinaryObjCmd: format} {
  410.     binary format f0 1.6
  411. } {}
  412. test binary-13.4 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} {
  413.     binary format f 1.6
  414. } x3fxccxccxcd
  415. test binary-13.5 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} {
  416.     binary format f 1.6
  417. } xcdxccxccx3f
  418. test binary-13.6 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} {
  419.     binary format f* {1.6 3.4}
  420. } x3fxccxccxcdx40x59x99x9a
  421. test binary-13.7 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} {
  422.     binary format f* {1.6 3.4}
  423. } xcdxccxccx3fx9ax99x59x40
  424. test binary-13.8 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} {
  425.     binary format f2 {1.6 3.4}
  426. } x3fxccxccxcdx40x59x99x9a
  427. test binary-13.9 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} {
  428.     binary format f2 {1.6 3.4}
  429. } xcdxccxccx3fx9ax99x59x40
  430. test binary-13.10 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} {
  431.     binary format f2 {1.6 3.4 5.6}
  432. } x3fxccxccxcdx40x59x99x9a
  433. test binary-13.11 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} {
  434.     binary format f2 {1.6 3.4 5.6}
  435. } xcdxccxccx3fx9ax99x59x40
  436. test binary-13.12 {Tcl_BinaryObjCmd: float overflow} {nonPortable macOrUnix} {
  437.     binary format f -3.402825e+38
  438. } xffx7fxffxff
  439. test binary-13.13 {Tcl_BinaryObjCmd: float overflow} {nonPortable pcOnly} {
  440.     binary format f -3.402825e+38
  441. } xffxffx7fxff
  442. test binary-13.14 {Tcl_BinaryObjCmd: float underflow} {nonPortable macOrUnix} {
  443.     binary format f -3.402825e-100
  444. } x80x00x00x00
  445. test binary-13.15 {Tcl_BinaryObjCmd: float underflow} {nonPortable pcOnly} {
  446.     binary format f -3.402825e-100
  447. } x00x00x00x80
  448. test binary-13.16 {Tcl_BinaryObjCmd: format} {
  449.     list [catch {binary format f2 {1.6}} msg] $msg
  450. } {1 {number of elements in list does not match count}}
  451. test binary-13.17 {Tcl_BinaryObjCmd: format} {
  452.     set a {1.6 3.4}
  453.     list [catch {binary format f $a} msg] $msg
  454. } [list 1 "expected floating-point number but got "1.6 3.4""]
  455. test binary-13.18 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} {
  456.     set a {1.6 3.4}
  457.     binary format f1 $a
  458. } x3fxccxccxcd
  459. test binary-13.19 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} {
  460.     set a {1.6 3.4}
  461.     binary format f1 $a
  462. } xcdxccxccx3f
  463. test binary-14.1 {Tcl_BinaryObjCmd: format} {
  464.     list [catch {binary format d} msg] $msg
  465. } {1 {not enough arguments for all format specifiers}}
  466. test binary-14.2 {Tcl_BinaryObjCmd: format} {
  467.     list [catch {binary format d blat} msg] $msg
  468. } {1 {expected floating-point number but got "blat"}}
  469. test binary-14.3 {Tcl_BinaryObjCmd: format} {
  470.     binary format d0 1.6
  471. } {}
  472. test binary-14.4 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} {
  473.     binary format d 1.6
  474. } x3fxf9x99x99x99x99x99x9a
  475. test binary-14.5 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} {
  476.     binary format d 1.6
  477. } x9ax99x99x99x99x99xf9x3f
  478. test binary-14.6 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} {
  479.     binary format d* {1.6 3.4}
  480. } x3fxf9x99x99x99x99x99x9ax40x0bx33x33x33x33x33x33
  481. test binary-14.7 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} {
  482.     binary format d* {1.6 3.4}
  483. } x9ax99x99x99x99x99xf9x3fx33x33x33x33x33x33x0bx40
  484. test binary-14.8 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} {
  485.     binary format d2 {1.6 3.4}
  486. } x3fxf9x99x99x99x99x99x9ax40x0bx33x33x33x33x33x33
  487. test binary-14.9 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} {
  488.     binary format d2 {1.6 3.4}
  489. } x9ax99x99x99x99x99xf9x3fx33x33x33x33x33x33x0bx40
  490. test binary-14.10 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} {
  491.     binary format d2 {1.6 3.4 5.6}
  492. } x3fxf9x99x99x99x99x99x9ax40x0bx33x33x33x33x33x33
  493. test binary-14.11 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} {
  494.     binary format d2 {1.6 3.4 5.6}
  495. } x9ax99x99x99x99x99xf9x3fx33x33x33x33x33x33x0bx40
  496. test binary-14.12 {Tcl_BinaryObjCmd: float overflow} {nonPortable unixOnly} {
  497.     binary format d NaN
  498. } x7fxffxffxffxffxffxffxff
  499. test binary-14.13 {Tcl_BinaryObjCmd: float overflow} {nonPortable macOnly} {
  500.     binary format d NaN
  501. } x7fxf8x02xa0x00x00x00x00
  502. test binary-14.14 {Tcl_BinaryObjCmd: format} {
  503.     list [catch {binary format d2 {1.6}} msg] $msg
  504. } {1 {number of elements in list does not match count}}
  505. test binary-14.15 {Tcl_BinaryObjCmd: format} {
  506.     set a {1.6 3.4}
  507.     list [catch {binary format d $a} msg] $msg
  508. } [list 1 "expected floating-point number but got "1.6 3.4""]
  509. test binary-14.16 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} {
  510.     set a {1.6 3.4}
  511.     binary format d1 $a
  512. } x3fxf9x99x99x99x99x99x9a
  513. test binary-14.17 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} {
  514.     set a {1.6 3.4}
  515.     binary format d1 $a
  516. } x9ax99x99x99x99x99xf9x3f
  517. test binary-14.18 {FormatNumber: Bug 1116542} {
  518.     binary scan [binary format d 1.25] d w
  519.     set w
  520. } 1.25
  521. test binary-15.1 {Tcl_BinaryObjCmd: format} {
  522.     list [catch {binary format ax*a "y" "z"} msg] $msg
  523. } {1 {cannot use "*" in format string with "x"}}
  524. test binary-15.2 {Tcl_BinaryObjCmd: format} {
  525.     binary format axa "y" "z"
  526. } yx00z
  527. test binary-15.3 {Tcl_BinaryObjCmd: format} {
  528.     binary format ax3a "y" "z"
  529. } yx00x00x00z
  530. test binary-15.4 {Tcl_BinaryObjCmd: format} {
  531.     binary format a*X3x3a* "foo" "z"
  532. } x00x00x00z
  533. test binary-16.1 {Tcl_BinaryObjCmd: format} {
  534.     binary format a*X*a "foo" "z"
  535. } zoo
  536. test binary-16.2 {Tcl_BinaryObjCmd: format} {
  537.     binary format aX3a "y" "z"
  538. } z
  539. test binary-16.3 {Tcl_BinaryObjCmd: format} {
  540.     binary format a*Xa* "foo" "zy"
  541. } fozy
  542. test binary-16.4 {Tcl_BinaryObjCmd: format} {
  543.     binary format a*X3a "foobar" "z"
  544. } foozar
  545. test binary-16.5 {Tcl_BinaryObjCmd: format} {
  546.     binary format a*X3aX2a "foobar" "z" "b"
  547. } fobzar
  548. test binary-17.1 {Tcl_BinaryObjCmd: format} {
  549.     binary format @1
  550. } x00
  551. test binary-17.2 {Tcl_BinaryObjCmd: format} {
  552.     binary format @5a2 "ab"
  553. } x00x00x00x00x00x61x62
  554. test binary-17.3 {Tcl_BinaryObjCmd: format} {
  555.     binary format {a*  @0  a2 @* a*} "foobar" "ab" "blat"
  556. } abobarblat
  557. test binary-18.1 {Tcl_BinaryObjCmd: format} {
  558.     list [catch {binary format u0a3 abc abd} msg] $msg
  559. } {1 {bad field specifier "u"}}
  560. test binary-19.1 {Tcl_BinaryObjCmd: errors} {
  561.     list [catch {binary s} msg] $msg
  562. } {1 {wrong # args: should be "binary scan value formatString ?varName varName ...?"}}
  563. test binary-19.2 {Tcl_BinaryObjCmd: errors} {
  564.     list [catch {binary scan foo} msg] $msg
  565. } {1 {wrong # args: should be "binary scan value formatString ?varName varName ...?"}}
  566. test binary-19.3 {Tcl_BinaryObjCmd: scan} {
  567.     binary scan {} {}
  568. } 0
  569. test binary-20.1 {Tcl_BinaryObjCmd: scan} {
  570.     list [catch {binary scan abc a} msg] $msg
  571. } {1 {not enough arguments for all format specifiers}}
  572. test binary-20.2 {Tcl_BinaryObjCmd: scan} {
  573.     catch {unset arg1}
  574.     set arg1 1
  575.     list [catch {binary scan abc a arg1(a)} msg] $msg
  576. } {1 {can't set "arg1(a)": variable isn't array}}
  577. test binary-20.3 {Tcl_BinaryObjCmd: scan} {
  578.     catch {unset arg1}
  579.     set arg1 abc
  580.     list [binary scan abc a0 arg1] $arg1
  581. } {1 {}}
  582. test binary-20.4 {Tcl_BinaryObjCmd: scan} {
  583.     catch {unset arg1}
  584.     list [binary scan abc a* arg1] $arg1
  585. } {1 abc}
  586. test binary-20.5 {Tcl_BinaryObjCmd: scan} {
  587.     catch {unset arg1}
  588.     list [binary scan abc a5 arg1] [info exists arg1]
  589. } {0 0}
  590. test binary-20.6 {Tcl_BinaryObjCmd: scan} {
  591.     set arg1 foo
  592.     list [binary scan abc a2 arg1] $arg1
  593. } {1 ab}
  594. test binary-20.7 {Tcl_BinaryObjCmd: scan} {
  595.     catch {unset arg1}
  596.     catch {unset arg2}
  597.     list [binary scan abcdef a2a2 arg1 arg2] $arg1 $arg2
  598. } {2 ab cd}
  599. test binary-20.8 {Tcl_BinaryObjCmd: scan} {
  600.     catch {unset arg1}
  601.     list [binary scan abc a2 arg1(a)] $arg1(a)
  602. } {1 ab}
  603. test binary-20.9 {Tcl_BinaryObjCmd: scan} {
  604.     catch {unset arg1}
  605.     list [binary scan abc a arg1(a)] $arg1(a)
  606. } {1 a}
  607. test binary-21.1 {Tcl_BinaryObjCmd: scan} {
  608.     list [catch {binary scan abc A} msg] $msg
  609. } {1 {not enough arguments for all format specifiers}}
  610. test binary-21.2 {Tcl_BinaryObjCmd: scan} {
  611.     catch {unset arg1}
  612.     set arg1 1
  613.     list [catch {binary scan abc A arg1(a)} msg] $msg
  614. } {1 {can't set "arg1(a)": variable isn't array}}
  615. test binary-21.3 {Tcl_BinaryObjCmd: scan} {
  616.     catch {unset arg1}
  617.     set arg1 abc
  618.     list [binary scan abc A0 arg1] $arg1
  619. } {1 {}}
  620. test binary-21.4 {Tcl_BinaryObjCmd: scan} {
  621.     catch {unset arg1}
  622.     list [binary scan abc A* arg1] $arg1
  623. } {1 abc}
  624. test binary-21.5 {Tcl_BinaryObjCmd: scan} {
  625.     catch {unset arg1}
  626.     list [binary scan abc A5 arg1] [info exists arg1]
  627. } {0 0}
  628. test binary-21.6 {Tcl_BinaryObjCmd: scan} {
  629.     set arg1 foo
  630.     list [binary scan abc A2 arg1] $arg1
  631. } {1 ab}
  632. test binary-21.7 {Tcl_BinaryObjCmd: scan} {
  633.     catch {unset arg1}
  634.     catch {unset arg2}
  635.     list [binary scan abcdef A2A2 arg1 arg2] $arg1 $arg2
  636. } {2 ab cd}
  637. test binary-21.8 {Tcl_BinaryObjCmd: scan} {
  638.     catch {unset arg1}
  639.     list [binary scan abc A2 arg1(a)] $arg1(a)
  640. } {1 ab}
  641. test binary-21.9 {Tcl_BinaryObjCmd: scan} {
  642.     catch {unset arg1}
  643.     list [binary scan abc A2 arg1(a)] $arg1(a)
  644. } {1 ab}
  645. test binary-21.10 {Tcl_BinaryObjCmd: scan} {
  646.     catch {unset arg1}
  647.     list [binary scan abc A arg1(a)] $arg1(a)
  648. } {1 a}
  649. test binary-21.11 {Tcl_BinaryObjCmd: scan} {
  650.     catch {unset arg1}
  651.     list [binary scan "abc def x00  " A* arg1] $arg1
  652. } {1 {abc def}}
  653. test binary-21.12 {Tcl_BinaryObjCmd: scan} {
  654.     catch {unset arg1}
  655.     list [binary scan "abc def x00ghi  " A* arg1] $arg1
  656. } [list 1 "abc def x00ghi"]
  657. test binary-22.1 {Tcl_BinaryObjCmd: scan} {
  658.     list [catch {binary scan abc b} msg] $msg
  659. } {1 {not enough arguments for all format specifiers}}
  660. test binary-22.2 {Tcl_BinaryObjCmd: scan} {
  661.     catch {unset arg1}
  662.     list [binary scan x52x53 b* arg1] $arg1
  663. } {1 0100101011001010}
  664. test binary-22.3 {Tcl_BinaryObjCmd: scan} {
  665.     catch {unset arg1}
  666.     list [binary scan x82x53 b arg1] $arg1
  667. } {1 0}
  668. test binary-22.4 {Tcl_BinaryObjCmd: scan} {
  669.     catch {unset arg1}
  670.     list [binary scan x82x53 b1 arg1] $arg1
  671. } {1 0}
  672. test binary-22.5 {Tcl_BinaryObjCmd: scan} {
  673.     catch {unset arg1}
  674.     list [binary scan x82x53 b0 arg1] $arg1
  675. } {1 {}}
  676. test binary-22.6 {Tcl_BinaryObjCmd: scan} {
  677.     catch {unset arg1}
  678.     list [binary scan x52x53 b5 arg1] $arg1
  679. } {1 01001}
  680. test binary-22.7 {Tcl_BinaryObjCmd: scan} {
  681.     catch {unset arg1}
  682.     list [binary scan x52x53 b8 arg1] $arg1
  683. } {1 01001010}
  684. test binary-22.8 {Tcl_BinaryObjCmd: scan} {
  685.     catch {unset arg1}
  686.     list [binary scan x52x53 b14 arg1] $arg1
  687. } {1 01001010110010}
  688. test binary-22.9 {Tcl_BinaryObjCmd: scan} {
  689.     catch {unset arg1}
  690.     set arg1 foo
  691.     list [binary scan x52 b14 arg1] $arg1
  692. } {0 foo}
  693. test binary-22.10 {Tcl_BinaryObjCmd: scan} {
  694.     catch {unset arg1}
  695.     set arg1 1
  696.     list [catch {binary scan x52x53 b1 arg1(a)} msg] $msg
  697. } {1 {can't set "arg1(a)": variable isn't array}}
  698. test binary-22.11 {Tcl_BinaryObjCmd: scan} {
  699.     catch {unset arg1 arg2}
  700.     set arg1 foo
  701.     set arg2 bar
  702.     list [binary scan x07x87x05 b5b* arg1 arg2] $arg1 $arg2
  703. } {2 11100 1110000110100000}
  704. test binary-23.1 {Tcl_BinaryObjCmd: scan} {
  705.     list [catch {binary scan abc B} msg] $msg
  706. } {1 {not enough arguments for all format specifiers}}
  707. test binary-23.2 {Tcl_BinaryObjCmd: scan} {
  708.     catch {unset arg1}
  709.     list [binary scan x52x53 B* arg1] $arg1
  710. } {1 0101001001010011}
  711. test binary-23.3 {Tcl_BinaryObjCmd: scan} {
  712.     catch {unset arg1}
  713.     list [binary scan x82x53 B arg1] $arg1
  714. } {1 1}
  715. test binary-23.4 {Tcl_BinaryObjCmd: scan} {
  716.     catch {unset arg1}
  717.     list [binary scan x82x53 B1 arg1] $arg1
  718. } {1 1}
  719. test binary-23.5 {Tcl_BinaryObjCmd: scan} {
  720.     catch {unset arg1}
  721.     list [binary scan x52x53 B0 arg1] $arg1
  722. } {1 {}}
  723. test binary-23.6 {Tcl_BinaryObjCmd: scan} {
  724.     catch {unset arg1}
  725.     list [binary scan x52x53 B5 arg1] $arg1
  726. } {1 01010}
  727. test binary-23.7 {Tcl_BinaryObjCmd: scan} {
  728.     catch {unset arg1}
  729.     list [binary scan x52x53 B8 arg1] $arg1
  730. } {1 01010010}
  731. test binary-23.8 {Tcl_BinaryObjCmd: scan} {
  732.     catch {unset arg1}
  733.     list [binary scan x52x53 B14 arg1] $arg1
  734. } {1 01010010010100}
  735. test binary-23.9 {Tcl_BinaryObjCmd: scan} {
  736.     catch {unset arg1}
  737.     set arg1 foo
  738.     list [binary scan x52 B14 arg1] $arg1
  739. } {0 foo}
  740. test binary-23.10 {Tcl_BinaryObjCmd: scan} {
  741.     catch {unset arg1}
  742.     set arg1 1
  743.     list [catch {binary scan x52x53 B1 arg1(a)} msg] $msg
  744. } {1 {can't set "arg1(a)": variable isn't array}}
  745. test binary-23.11 {Tcl_BinaryObjCmd: scan} {
  746.     catch {unset arg1 arg2}
  747.     set arg1 foo
  748.     set arg2 bar
  749.     list [binary scan x70x87x05 B5B* arg1 arg2] $arg1 $arg2
  750. } {2 01110 1000011100000101}
  751. test binary-24.1 {Tcl_BinaryObjCmd: scan} {
  752.     list [catch {binary scan abc h} msg] $msg
  753. } {1 {not enough arguments for all format specifiers}}
  754. test binary-24.2 {Tcl_BinaryObjCmd: scan} {
  755.     catch {unset arg1}
  756.     list [binary scan x52xa3 h* arg1] $arg1
  757. } {1 253a}
  758. test binary-24.3 {Tcl_BinaryObjCmd: scan} {
  759.     catch {unset arg1}
  760.     list [binary scan xc2xa3 h arg1] $arg1
  761. } {1 2}
  762. test binary-24.4 {Tcl_BinaryObjCmd: scan} {
  763.     catch {unset arg1}
  764.     list [binary scan x82x53 h1 arg1] $arg1
  765. } {1 2}
  766. test binary-24.5 {Tcl_BinaryObjCmd: scan} {
  767.     catch {unset arg1}
  768.     list [binary scan x52x53 h0 arg1] $arg1
  769. } {1 {}}
  770. test binary-24.6 {Tcl_BinaryObjCmd: scan} {
  771.     catch {unset arg1}
  772.     list [binary scan xf2x53 h2 arg1] $arg1
  773. } {1 2f}
  774. test binary-24.7 {Tcl_BinaryObjCmd: scan} {
  775.     catch {unset arg1}
  776.     list [binary scan x52x53 h3 arg1] $arg1
  777. } {1 253}
  778. test binary-24.8 {Tcl_BinaryObjCmd: scan} {
  779.     catch {unset arg1}
  780.     set arg1 foo
  781.     list [binary scan x52 h3 arg1] $arg1
  782. } {0 foo}
  783. test binary-24.9 {Tcl_BinaryObjCmd: scan} {
  784.     catch {unset arg1}
  785.     set arg1 1
  786.     list [catch {binary scan x52x53 h1 arg1(a)} msg] $msg
  787. } {1 {can't set "arg1(a)": variable isn't array}}
  788. test binary-24.10 {Tcl_BinaryObjCmd: scan} {
  789.     catch {unset arg1 arg2}
  790.     set arg1 foo
  791.     set arg2 bar
  792.     list [binary scan x70x87x05 h2h* arg1 arg2] $arg1 $arg2
  793. } {2 07 7850}
  794. test binary-25.1 {Tcl_BinaryObjCmd: scan} {
  795.     list [catch {binary scan abc H} msg] $msg
  796. } {1 {not enough arguments for all format specifiers}}
  797. test binary-25.2 {Tcl_BinaryObjCmd: scan} {
  798.     catch {unset arg1}
  799.     list [binary scan x52xa3 H* arg1] $arg1
  800. } {1 52a3}
  801. test binary-25.3 {Tcl_BinaryObjCmd: scan} {
  802.     catch {unset arg1}
  803.     list [binary scan xc2xa3 H arg1] $arg1
  804. } {1 c}
  805. test binary-25.4 {Tcl_BinaryObjCmd: scan} {
  806.     catch {unset arg1}
  807.     list [binary scan x82x53 H1 arg1] $arg1
  808. } {1 8}
  809. test binary-25.5 {Tcl_BinaryObjCmd: scan} {
  810.     catch {unset arg1}
  811.     list [binary scan x52x53 H0 arg1] $arg1
  812. } {1 {}}
  813. test binary-25.6 {Tcl_BinaryObjCmd: scan} {
  814.     catch {unset arg1}
  815.     list [binary scan xf2x53 H2 arg1] $arg1
  816. } {1 f2}
  817. test binary-25.7 {Tcl_BinaryObjCmd: scan} {
  818.     catch {unset arg1}
  819.     list [binary scan x52x53 H3 arg1] $arg1
  820. } {1 525}
  821. test binary-25.8 {Tcl_BinaryObjCmd: scan} {
  822.     catch {unset arg1}
  823.     set arg1 foo
  824.     list [binary scan x52 H3 arg1] $arg1
  825. } {0 foo}
  826. test binary-25.9 {Tcl_BinaryObjCmd: scan} {
  827.     catch {unset arg1}
  828.     set arg1 1
  829.     list [catch {binary scan x52x53 H1 arg1(a)} msg] $msg
  830. } {1 {can't set "arg1(a)": variable isn't array}}
  831. test binary-25.10 {Tcl_BinaryObjCmd: scan} {
  832.     catch {unset arg1 arg2}
  833.     set arg1 foo
  834.     set arg2 bar
  835.     list [binary scan x70x87x05 H2H* arg1 arg2] $arg1 $arg2
  836. } {2 70 8705}
  837. test binary-26.1 {Tcl_BinaryObjCmd: scan} {
  838.     list [catch {binary scan abc c} msg] $msg
  839. } {1 {not enough arguments for all format specifiers}}
  840. test binary-26.2 {Tcl_BinaryObjCmd: scan} {
  841.     catch {unset arg1}
  842.     list [binary scan x52xa3 c* arg1] $arg1
  843. } {1 {82 -93}}
  844. test binary-26.3 {Tcl_BinaryObjCmd: scan} {
  845.     catch {unset arg1}
  846.     list [binary scan x52xa3 c arg1] $arg1
  847. } {1 82}
  848. test binary-26.4 {Tcl_BinaryObjCmd: scan} {
  849.     catch {unset arg1}
  850.     list [binary scan x52xa3 c1 arg1] $arg1
  851. } {1 82}
  852. test binary-26.5 {Tcl_BinaryObjCmd: scan} {
  853.     catch {unset arg1}
  854.     list [binary scan x52xa3 c0 arg1] $arg1
  855. } {1 {}}
  856. test binary-26.6 {Tcl_BinaryObjCmd: scan} {
  857.     catch {unset arg1}
  858.     list [binary scan x52xa3 c2 arg1] $arg1
  859. } {1 {82 -93}}
  860. test binary-26.7 {Tcl_BinaryObjCmd: scan} {
  861.     catch {unset arg1}
  862.     list [binary scan xff c arg1] $arg1
  863. } {1 -1}
  864. test binary-26.8 {Tcl_BinaryObjCmd: scan} {
  865.     catch {unset arg1}
  866.     set arg1 foo
  867.     list [binary scan x52 c3 arg1] $arg1
  868. } {0 foo}
  869. test binary-26.9 {Tcl_BinaryObjCmd: scan} {
  870.     catch {unset arg1}
  871.     set arg1 1
  872.     list [catch {binary scan x52x53 c1 arg1(a)} msg] $msg
  873. } {1 {can't set "arg1(a)": variable isn't array}}
  874. test binary-26.10 {Tcl_BinaryObjCmd: scan} {
  875.     catch {unset arg1 arg2}
  876.     set arg1 foo
  877.     set arg2 bar
  878.     list [binary scan x70x87x05 c2c* arg1 arg2] $arg1 $arg2
  879. } {2 {112 -121} 5}
  880. test binary-27.1 {Tcl_BinaryObjCmd: scan} {
  881.     list [catch {binary scan abc s} msg] $msg
  882. } {1 {not enough arguments for all format specifiers}}
  883. test binary-27.2 {Tcl_BinaryObjCmd: scan} {
  884.     catch {unset arg1}
  885.     list [binary scan x52xa3x53x54 s* arg1] $arg1
  886. } {1 {-23726 21587}}
  887. test binary-27.3 {Tcl_BinaryObjCmd: scan} {
  888.     catch {unset arg1}
  889.     list [binary scan x52xa3x53x54 s arg1] $arg1
  890. } {1 -23726}
  891. test binary-27.4 {Tcl_BinaryObjCmd: scan} {
  892.     catch {unset arg1}
  893.     list [binary scan x52xa3 s1 arg1] $arg1
  894. } {1 -23726}
  895. test binary-27.5 {Tcl_BinaryObjCmd: scan} {
  896.     catch {unset arg1}
  897.     list [binary scan x52xa3 s0 arg1] $arg1
  898. } {1 {}}
  899. test binary-27.6 {Tcl_BinaryObjCmd: scan} {
  900.     catch {unset arg1}
  901.     list [binary scan x52xa3x53x54 s2 arg1] $arg1
  902. } {1 {-23726 21587}}
  903. test binary-27.7 {Tcl_BinaryObjCmd: scan} {
  904.     catch {unset arg1}
  905.     set arg1 foo
  906.     list [binary scan x52 s1 arg1] $arg1
  907. } {0 foo}
  908. test binary-27.8 {Tcl_BinaryObjCmd: scan} {
  909.     catch {unset arg1}
  910.     set arg1 1
  911.     list [catch {binary scan x52x53 s1 arg1(a)} msg] $msg
  912. } {1 {can't set "arg1(a)": variable isn't array}}
  913. test binary-27.9 {Tcl_BinaryObjCmd: scan} {
  914.     catch {unset arg1 arg2}
  915.     set arg1 foo
  916.     set arg2 bar
  917.     list [binary scan x52xa3x53x54x05 s2c* arg1 arg2] $arg1 $arg2
  918. } {2 {-23726 21587} 5}
  919. test binary-28.1 {Tcl_BinaryObjCmd: scan} {
  920.     list [catch {binary scan abc S} msg] $msg
  921. } {1 {not enough arguments for all format specifiers}}
  922. test binary-28.2 {Tcl_BinaryObjCmd: scan} {
  923.     catch {unset arg1}
  924.     list [binary scan x52xa3x53x54 S* arg1] $arg1
  925. } {1 {21155 21332}}
  926. test binary-28.3 {Tcl_BinaryObjCmd: scan} {
  927.     catch {unset arg1}
  928.     list [binary scan x52xa3x53x54 S arg1] $arg1
  929. } {1 21155}
  930. test binary-28.4 {Tcl_BinaryObjCmd: scan} {
  931.     catch {unset arg1}
  932.     list [binary scan x52xa3 S1 arg1] $arg1
  933. } {1 21155}
  934. test binary-28.5 {Tcl_BinaryObjCmd: scan} {
  935.     catch {unset arg1}
  936.     list [binary scan x52xa3 S0 arg1] $arg1
  937. } {1 {}}
  938. test binary-28.6 {Tcl_BinaryObjCmd: scan} {
  939.     catch {unset arg1}
  940.     list [binary scan x52xa3x53x54 S2 arg1] $arg1
  941. } {1 {21155 21332}}
  942. test binary-28.7 {Tcl_BinaryObjCmd: scan} {
  943.     catch {unset arg1}
  944.     set arg1 foo
  945.     list [binary scan x52 S1 arg1] $arg1
  946. } {0 foo}
  947. test binary-28.8 {Tcl_BinaryObjCmd: scan} {
  948.     catch {unset arg1}
  949.     set arg1 1
  950.     list [catch {binary scan x52x53 S1 arg1(a)} msg] $msg
  951. } {1 {can't set "arg1(a)": variable isn't array}}
  952. test binary-28.9 {Tcl_BinaryObjCmd: scan} {
  953.     catch {unset arg1 arg2}
  954.     set arg1 foo
  955.     set arg2 bar
  956.     list [binary scan x52xa3x53x54x05 S2c* arg1 arg2] $arg1 $arg2
  957. } {2 {21155 21332} 5}
  958. test binary-29.1 {Tcl_BinaryObjCmd: scan} {
  959.     list [catch {binary scan abc i} msg] $msg
  960. } {1 {not enough arguments for all format specifiers}}
  961. test binary-29.2 {Tcl_BinaryObjCmd: scan} {
  962.     catch {unset arg1}
  963.     list [binary scan x52xa3x53x54x01x02x03x04 i* arg1] $arg1
  964. } {1 {1414767442 67305985}}
  965. test binary-29.3 {Tcl_BinaryObjCmd: scan} {
  966.     catch {unset arg1}
  967.     list [binary scan x52xa3x53x54x01x02x03x04 i arg1] $arg1
  968. } {1 1414767442}
  969. test binary-29.4 {Tcl_BinaryObjCmd: scan} {
  970.     catch {unset arg1}
  971.     list [binary scan x52xa3x53x54 i1 arg1] $arg1
  972. } {1 1414767442}
  973. test binary-29.5 {Tcl_BinaryObjCmd: scan} {
  974.     catch {unset arg1}
  975.     list [binary scan x52xa3x53 i0 arg1] $arg1
  976. } {1 {}}
  977. test binary-29.6 {Tcl_BinaryObjCmd: scan} {
  978.     catch {unset arg1}
  979.     list [binary scan x52xa3x53x54x01x02x03x04 i2 arg1] $arg1
  980. } {1 {1414767442 67305985}}
  981. test binary-29.7 {Tcl_BinaryObjCmd: scan} {
  982.     catch {unset arg1}
  983.     set arg1 foo
  984.     list [binary scan x52 i1 arg1] $arg1
  985. } {0 foo}
  986. test binary-29.8 {Tcl_BinaryObjCmd: scan} {
  987.     catch {unset arg1}
  988.     set arg1 1
  989.     list [catch {binary scan x52x53x53x54 i1 arg1(a)} msg] $msg
  990. } {1 {can't set "arg1(a)": variable isn't array}}
  991. test binary-29.9 {Tcl_BinaryObjCmd: scan} {
  992.     catch {unset arg1 arg2}
  993.     set arg1 foo
  994.     set arg2 bar
  995.     list [binary scan x52xa3x53x54x01x02x03x04x05 i2c* arg1 arg2] $arg1 $arg2
  996. } {2 {1414767442 67305985} 5}
  997. test binary-30.1 {Tcl_BinaryObjCmd: scan} {
  998.     list [catch {binary scan abc I} msg] $msg
  999. } {1 {not enough arguments for all format specifiers}}
  1000. test binary-30.2 {Tcl_BinaryObjCmd: scan} {
  1001.     catch {unset arg1}
  1002.     list [binary scan x52xa3x53x54x01x02x03x04 I* arg1] $arg1
  1003. } {1 {1386435412 16909060}}
  1004. test binary-30.3 {Tcl_BinaryObjCmd: scan} {
  1005.     catch {unset arg1}
  1006.     list [binary scan x52xa3x53x54x01x02x03x04 I arg1] $arg1
  1007. } {1 1386435412}
  1008. test binary-30.4 {Tcl_BinaryObjCmd: scan} {
  1009.     catch {unset arg1}
  1010.     list [binary scan x52xa3x53x54 I1 arg1] $arg1
  1011. } {1 1386435412}
  1012. test binary-30.5 {Tcl_BinaryObjCmd: scan} {
  1013.     catch {unset arg1}
  1014.     list [binary scan x52xa3x53 I0 arg1] $arg1
  1015. } {1 {}}
  1016. test binary-30.6 {Tcl_BinaryObjCmd: scan} {
  1017.     catch {unset arg1}
  1018.     list [binary scan x52xa3x53x54x01x02x03x04 I2 arg1] $arg1
  1019. } {1 {1386435412 16909060}}
  1020. test binary-30.7 {Tcl_BinaryObjCmd: scan} {
  1021.     catch {unset arg1}
  1022.     set arg1 foo
  1023.     list [binary scan x52 I1 arg1] $arg1
  1024. } {0 foo}
  1025. test binary-30.8 {Tcl_BinaryObjCmd: scan} {
  1026.     catch {unset arg1}
  1027.     set arg1 1
  1028.     list [catch {binary scan x52x53x53x54 I1 arg1(a)} msg] $msg
  1029. } {1 {can't set "arg1(a)": variable isn't array}}
  1030. test binary-30.9 {Tcl_BinaryObjCmd: scan} {
  1031.     catch {unset arg1 arg2}
  1032.     set arg1 foo
  1033.     set arg2 bar
  1034.     list [binary scan x52xa3x53x54x01x02x03x04x05 I2c* arg1 arg2] $arg1 $arg2
  1035. } {2 {1386435412 16909060} 5}
  1036. test binary-31.1 {Tcl_BinaryObjCmd: scan} {
  1037.     list [catch {binary scan abc f} msg] $msg
  1038. } {1 {not enough arguments for all format specifiers}}
  1039. test binary-31.2 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} {
  1040.     catch {unset arg1}
  1041.     list [binary scan x3fxccxccxcdx40x59x99x9a f* arg1] $arg1
  1042. } {1 {1.60000002384 3.40000009537}}
  1043. test binary-31.3 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} {
  1044.     catch {unset arg1}
  1045.     list [binary scan xcdxccxccx3fx9ax99x59x40 f* arg1] $arg1
  1046. } {1 {1.60000002384 3.40000009537}}
  1047. test binary-31.4 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} {
  1048.     catch {unset arg1}
  1049.     list [binary scan x3fxccxccxcdx40x59x99x9a f arg1] $arg1
  1050. } {1 1.60000002384}
  1051. test binary-31.5 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} {
  1052.     catch {unset arg1}
  1053.     list [binary scan xcdxccxccx3fx9ax99x59x40 f arg1] $arg1
  1054. } {1 1.60000002384}
  1055. test binary-31.6 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} {
  1056.     catch {unset arg1}
  1057.     list [binary scan x3fxccxccxcd f1 arg1] $arg1
  1058. } {1 1.60000002384}
  1059. test binary-31.7 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} {
  1060.     catch {unset arg1}
  1061.     list [binary scan xcdxccxccx3f f1 arg1] $arg1
  1062. } {1 1.60000002384}
  1063. test binary-31.8 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} {
  1064.     catch {unset arg1}
  1065.     list [binary scan x3fxccxccxcd f0 arg1] $arg1
  1066. } {1 {}}
  1067. test binary-31.9 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} {
  1068.     catch {unset arg1}
  1069.     list [binary scan xcdxccxccx3f f0 arg1] $arg1
  1070. } {1 {}}
  1071. test binary-31.10 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} {
  1072.     catch {unset arg1}
  1073.     list [binary scan x3fxccxccxcdx40x59x99x9a f2 arg1] $arg1
  1074. } {1 {1.60000002384 3.40000009537}}
  1075. test binary-31.11 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} {
  1076.     catch {unset arg1}
  1077.     list [binary scan xcdxccxccx3fx9ax99x59x40 f2 arg1] $arg1
  1078. } {1 {1.60000002384 3.40000009537}}
  1079. test binary-31.12 {Tcl_BinaryObjCmd: scan} {
  1080.     catch {unset arg1}
  1081.     set arg1 foo
  1082.     list [binary scan x52 f1 arg1] $arg1
  1083. } {0 foo}
  1084. test binary-31.13 {Tcl_BinaryObjCmd: scan} {
  1085.     catch {unset arg1}
  1086.     set arg1 1
  1087.     list [catch {binary scan x3fxccxccxcd f1 arg1(a)} msg] $msg
  1088. } {1 {can't set "arg1(a)": variable isn't array}}
  1089. test binary-31.14 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} {
  1090.     catch {unset arg1 arg2}
  1091.     set arg1 foo
  1092.     set arg2 bar
  1093.     list [binary scan x3fxccxccxcdx40x59x99x9ax05 f2c* arg1 arg2] $arg1 $arg2
  1094. } {2 {1.60000002384 3.40000009537} 5}
  1095. test binary-31.15 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} {
  1096.     catch {unset arg1 arg2}
  1097.     set arg1 foo
  1098.     set arg2 bar
  1099.     list [binary scan xcdxccxccx3fx9ax99x59x40x05 f2c* arg1 arg2] $arg1 $arg2
  1100. } {2 {1.60000002384 3.40000009537} 5}
  1101. test binary-32.1 {Tcl_BinaryObjCmd: scan} {
  1102.     list [catch {binary scan abc d} msg] $msg
  1103. } {1 {not enough arguments for all format specifiers}}
  1104. test binary-32.2 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} {
  1105.     catch {unset arg1}
  1106.     list [binary scan x3fxf9x99x99x99x99x99x9ax40x0bx33x33x33x33x33x33 d* arg1] $arg1
  1107. } {1 {1.6 3.4}}
  1108. test binary-32.3 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} {
  1109.     catch {unset arg1}
  1110.     list [binary scan x9ax99x99x99x99x99xf9x3fx33x33x33x33x33x33x0bx40 d* arg1] $arg1
  1111. } {1 {1.6 3.4}}
  1112. test binary-32.4 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} {
  1113.     catch {unset arg1}
  1114.     list [binary scan x3fxf9x99x99x99x99x99x9ax40x0bx33x33x33x33x33x33 d arg1] $arg1
  1115. } {1 1.6}
  1116. test binary-32.5 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} {
  1117.     catch {unset arg1}
  1118.     list [binary scan x9ax99x99x99x99x99xf9x3fx33x33x33x33x33x33x0bx40 d arg1] $arg1
  1119. } {1 1.6}
  1120. test binary-32.6 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} {
  1121.     catch {unset arg1}
  1122.     list [binary scan x3fxf9x99x99x99x99x99x9a d1 arg1] $arg1
  1123. } {1 1.6}
  1124. test binary-32.7 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} {
  1125.     catch {unset arg1}
  1126.     list [binary scan x9ax99x99x99x99x99xf9x3f d1 arg1] $arg1
  1127. } {1 1.6}
  1128. test binary-32.8 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} {
  1129.     catch {unset arg1}
  1130.     list [binary scan x3fxf9x99x99x99x99x99x9a d0 arg1] $arg1
  1131. } {1 {}}
  1132. test binary-32.9 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} {
  1133.     catch {unset arg1}
  1134.     list [binary scan x9ax99x99x99x99x99xf9x3f d0 arg1] $arg1
  1135. } {1 {}}
  1136. test binary-32.10 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} {
  1137.     catch {unset arg1}
  1138.     list [binary scan x3fxf9x99x99x99x99x99x9ax40x0bx33x33x33x33x33x33 d2 arg1] $arg1
  1139. } {1 {1.6 3.4}}
  1140. test binary-32.11 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} {
  1141.     catch {unset arg1}
  1142.     list [binary scan x9ax99x99x99x99x99xf9x3fx33x33x33x33x33x33x0bx40 d2 arg1] $arg1
  1143. } {1 {1.6 3.4}}
  1144. test binary-32.12 {Tcl_BinaryObjCmd: scan} {
  1145.     catch {unset arg1}
  1146.     set arg1 foo
  1147.     list [binary scan x52 d1 arg1] $arg1
  1148. } {0 foo}
  1149. test binary-32.13 {Tcl_BinaryObjCmd: scan} {
  1150.     catch {unset arg1}
  1151.     set arg1 1
  1152.     list [catch {binary scan x3fxf9x99x99x99x99x99x9a d1 arg1(a)} msg] $msg
  1153. } {1 {can't set "arg1(a)": variable isn't array}}
  1154. test binary-32.14 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} {
  1155.     catch {unset arg1 arg2}
  1156.     set arg1 foo
  1157.     set arg2 bar
  1158.     list [binary scan x3fxf9x99x99x99x99x99x9ax40x0bx33x33x33x33x33x33x05 d2c* arg1 arg2] $arg1 $arg2
  1159. } {2 {1.6 3.4} 5}
  1160. test binary-32.15 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} {
  1161.     catch {unset arg1 arg2}
  1162.     set arg1 foo
  1163.     set arg2 bar
  1164.     list [binary scan x9ax99x99x99x99x99xf9x3fx33x33x33x33x33x33x0bx40x05 d2c* arg1 arg2] $arg1 $arg2
  1165. } {2 {1.6 3.4} 5}
  1166. test binary-33.1 {Tcl_BinaryObjCmd: scan} {
  1167.     catch {unset arg1}
  1168.     catch {unset arg2}
  1169.     list [binary scan abcdefg a2xa3 arg1 arg2] $arg1 $arg2
  1170. } {2 ab def}
  1171. test binary-33.2 {Tcl_BinaryObjCmd: scan} {
  1172.     catch {unset arg1}
  1173.     catch {unset arg2}
  1174.     set arg2 foo
  1175.     list [binary scan abcdefg a3x*a3 arg1 arg2] $arg1 $arg2
  1176. } {1 abc foo}
  1177. test binary-33.3 {Tcl_BinaryObjCmd: scan} {
  1178.     catch {unset arg1}
  1179.     catch {unset arg2}
  1180.     set arg2 foo
  1181.     list [binary scan abcdefg a3x20a3 arg1 arg2] $arg1 $arg2
  1182. } {1 abc foo}
  1183. test binary-33.4 {Tcl_BinaryObjCmd: scan} {
  1184.     catch {unset arg1}
  1185.     catch {unset arg2}
  1186.     set arg2 foo
  1187.     list [binary scan abc a3x20a3 arg1 arg2] $arg1 $arg2
  1188. } {1 abc foo}
  1189. test binary-33.5 {Tcl_BinaryObjCmd: scan} {
  1190.     catch {unset arg1}
  1191.     list [binary scan abcdef x1a1 arg1] $arg1
  1192. } {1 b}
  1193. test binary-33.6 {Tcl_BinaryObjCmd: scan} {
  1194.     catch {unset arg1}
  1195.     list [binary scan abcdef x5a1 arg1] $arg1
  1196. } {1 f}
  1197. test binary-33.7 {Tcl_BinaryObjCmd: scan} {
  1198.     catch {unset arg1}
  1199.     list [binary scan abcdef x0a1 arg1] $arg1
  1200. } {1 a}
  1201. test binary-34.1 {Tcl_BinaryObjCmd: scan} {
  1202.     catch {unset arg1}
  1203.     catch {unset arg2}
  1204.     list [binary scan abcdefg a2Xa3 arg1 arg2] $arg1 $arg2
  1205. } {2 ab bcd}
  1206. test binary-34.2 {Tcl_BinaryObjCmd: scan} {
  1207.     catch {unset arg1}
  1208.     catch {unset arg2}
  1209.     set arg2 foo
  1210.     list [binary scan abcdefg a3X*a3 arg1 arg2] $arg1 $arg2
  1211. } {2 abc abc}
  1212. test binary-34.3 {Tcl_BinaryObjCmd: scan} {
  1213.     catch {unset arg1}
  1214.     catch {unset arg2}
  1215.     set arg2 foo
  1216.     list [binary scan abcdefg a3X20a3 arg1 arg2] $arg1 $arg2
  1217. } {2 abc abc}
  1218. test binary-34.4 {Tcl_BinaryObjCmd: scan} {
  1219.     catch {unset arg1}
  1220.     list [binary scan abc X20a3 arg1] $arg1
  1221. } {1 abc}
  1222. test binary-34.5 {Tcl_BinaryObjCmd: scan} {
  1223.     catch {unset arg1}
  1224.     list [binary scan abcdef x*X1a1 arg1] $arg1
  1225. } {1 f}
  1226. test binary-34.6 {Tcl_BinaryObjCmd: scan} {
  1227.     catch {unset arg1}
  1228.     list [binary scan abcdef x*X5a1 arg1] $arg1
  1229. } {1 b}
  1230. test binary-34.7 {Tcl_BinaryObjCmd: scan} {
  1231.     catch {unset arg1}
  1232.     list [binary scan abcdef x3X0a1 arg1] $arg1
  1233. } {1 d}
  1234. test binary-35.1 {Tcl_BinaryObjCmd: scan} {
  1235.     catch {unset arg1}
  1236.     catch {unset arg2}
  1237.     list [catch {binary scan abcdefg a2@a3 arg1 arg2} msg] $msg
  1238. } {1 {missing count for "@" field specifier}}
  1239. test binary-35.2 {Tcl_BinaryObjCmd: scan} {
  1240.     catch {unset arg1}
  1241.     catch {unset arg2}
  1242.     set arg2 foo
  1243.     list [binary scan abcdefg a3@*a3 arg1 arg2] $arg1 $arg2
  1244. } {1 abc foo}
  1245. test binary-35.3 {Tcl_BinaryObjCmd: scan} {
  1246.     catch {unset arg1}
  1247.     catch {unset arg2}
  1248.     set arg2 foo
  1249.     list [binary scan abcdefg a3@20a3 arg1 arg2] $arg1 $arg2
  1250. } {1 abc foo}
  1251. test binary-35.4 {Tcl_BinaryObjCmd: scan} {
  1252.     catch {unset arg1}
  1253.     list [binary scan abcdef @2a3 arg1] $arg1
  1254. } {1 cde}
  1255. test binary-35.5 {Tcl_BinaryObjCmd: scan} {
  1256.     catch {unset arg1}
  1257.     list [binary scan abcdef x*@1a1 arg1] $arg1
  1258. } {1 b}
  1259. test binary-35.6 {Tcl_BinaryObjCmd: scan} {
  1260.     catch {unset arg1}
  1261.     list [binary scan abcdef x*@0a1 arg1] $arg1
  1262. } {1 a}
  1263. test binary-36.1 {Tcl_BinaryObjCmd: scan} {
  1264.     list [catch {binary scan abcdef u0a3} msg] $msg
  1265. } {1 {bad field specifier "u"}}
  1266. # GetFormatSpec is pretty thoroughly tested above, but there are a few
  1267. # cases we should text explicitly
  1268. test binary-37.1 {GetFormatSpec: whitespace} {
  1269.     binary format "a3 a5     a3" foo barblat baz
  1270. } foobarblbaz
  1271. test binary-37.2 {GetFormatSpec: whitespace} {
  1272.     binary format "      " foo
  1273. } {}
  1274. test binary-37.3 {GetFormatSpec: whitespace} {
  1275.     binary format "     a3" foo
  1276. } foo
  1277. test binary-37.4 {GetFormatSpec: whitespace} {
  1278.     binary format "" foo
  1279. } {}
  1280. test binary-37.5 {GetFormatSpec: whitespace} {
  1281.     binary format "" foo
  1282. } {}
  1283. test binary-37.6 {GetFormatSpec: whitespace} {
  1284.     binary format "     a3   " foo
  1285. } foo
  1286. test binary-37.7 {GetFormatSpec: numbers} {
  1287.     list [catch {binary scan abcdef "x-1" foo} msg] $msg
  1288. } {1 {bad field specifier "-"}}
  1289. test binary-37.8 {GetFormatSpec: numbers} {
  1290.     catch {unset arg1}
  1291.     set arg1 foo
  1292.     list [binary scan abcdef "a0x3" arg1] $arg1
  1293. } {1 {}}
  1294. test binary-37.9 {GetFormatSpec: numbers} {
  1295.     # test format of neg numbers
  1296.     # bug report/fix provided by Harald Kirsch
  1297.     set x [binary format f* {1 -1 2 -2 0}]
  1298.     binary scan $x f* bla
  1299.     set bla
  1300. } {1.0 -1.0 2.0 -2.0 0.0}
  1301. test binary-38.1 {FormatNumber: word alignment} {
  1302.     set x [binary format c1s1 1 1]
  1303. } x01x01x00
  1304. test binary-38.2 {FormatNumber: word alignment} {
  1305.     set x [binary format c1S1 1 1]
  1306. } x01x00x01
  1307. test binary-38.3 {FormatNumber: word alignment} {
  1308.     set x [binary format c1i1 1 1]
  1309. } x01x01x00x00x00
  1310. test binary-38.4 {FormatNumber: word alignment} {
  1311.     set x [binary format c1I1 1 1]
  1312. } x01x00x00x00x01
  1313. test binary-38.5 {FormatNumber: word alignment} {nonPortable macOrUnix} {
  1314.     set x [binary format c1d1 1 1.6]
  1315. } x01x3fxf9x99x99x99x99x99x9a
  1316. test binary-38.6 {FormatNumber: word alignment} {nonPortable pcOnly} {
  1317.     set x [binary format c1d1 1 1.6]
  1318. } x01x9ax99x99x99x99x99xf9x3f
  1319. test binary-38.7 {FormatNumber: word alignment} {nonPortable macOrUnix} {
  1320.     set x [binary format c1f1 1 1.6]
  1321. } x01x3fxccxccxcd
  1322. test binary-38.8 {FormatNumber: word alignment} {nonPortable pcOnly} {
  1323.     set x [binary format c1f1 1 1.6]
  1324. } x01xcdxccxccx3f
  1325. test binary-39.1 {ScanNumber: sign extension} {
  1326.     catch {unset arg1}
  1327.     list [binary scan x52xa3 c2 arg1] $arg1
  1328. } {1 {82 -93}}
  1329. test binary-39.2 {ScanNumber: sign extension} {
  1330.     catch {unset arg1}
  1331.     list [binary scan x01x02x01x81x82x01x81x82 s4 arg1] $arg1
  1332. } {1 {513 -32511 386 -32127}}
  1333. test binary-39.3 {ScanNumber: sign extension} {
  1334.     catch {unset arg1}
  1335.     list [binary scan x01x02x01x81x82x01x81x82 S4 arg1] $arg1
  1336. } {1 {258 385 -32255 -32382}}
  1337. test binary-39.4 {ScanNumber: sign extension} {
  1338.     catch {unset arg1}
  1339.     list [binary scan x01x01x01x02x81x01x01x01x01x82x01x01x01x01x82x01x01x01x01x81 i5 arg1] $arg1
  1340. } {1 {33620225 16843137 16876033 25297153 -2130640639}}
  1341. test binary-39.5 {ScanNumber: sign extension} {
  1342.     catch {unset arg1}
  1343.     list [binary scan x01x01x01x02x81x01x01x01x01x82x01x01x01x01x82x01x01x01x01x81 I5 arg1] $arg1
  1344. } {1 {16843010 -2130640639 25297153 16876033 16843137}}
  1345. test binary-40.1 {ScanNumber: floating point overflow} {nonPortable unixOnly} {
  1346.     catch {unset arg1}
  1347.     list [binary scan xffxffxffxff f1 arg1] $arg1
  1348. } {1 -NaN}
  1349. test binary-40.2 {ScanNumber: floating point overflow} {nonPortable macOnly} {
  1350.     catch {unset arg1}
  1351.     list [binary scan xffxffxffxff f1 arg1] $arg1
  1352. } {1 -NAN(255)}
  1353. test binary-40.3 {ScanNumber: floating point overflow} {nonPortable pcOnly} {
  1354.     catch {unset arg1}
  1355.     set result [binary scan xffxffxffxff f1 arg1]
  1356.     if {([string compare $arg1 -1.#QNAN] == 0)
  1357. || ([string compare $arg1 -NAN] == 0)} {
  1358. lappend result success
  1359.     } else {
  1360. lappend result failure
  1361.     }
  1362. } {1 success}
  1363. test binary-40.4 {ScanNumber: floating point overflow} {nonPortable unixOnly} {
  1364.     catch {unset arg1}
  1365.     list [binary scan xffxffxffxffxffxffxffxff d1 arg1] $arg1
  1366. } {1 -NaN}
  1367. test binary-40.5 {ScanNumber: floating point overflow} {nonPortable macOnly} {
  1368.     catch {unset arg1}
  1369.     list [binary scan xffxffxffxffxffxffxffxff d1 arg1] $arg1
  1370. } {1 -NAN(255)}
  1371. test binary-40.6 {ScanNumber: floating point overflow} {nonPortable pcOnly} {
  1372.     catch {unset arg1}
  1373.     set result [binary scan xffxffxffxffxffxffxffxff d1 arg1]
  1374.     if {([string compare $arg1 -1.#QNAN] == 0)
  1375. || ([string compare $arg1 -NAN] == 0)} {
  1376. lappend result success
  1377.     } else {
  1378. lappend result failure
  1379.     }
  1380. } {1 success}
  1381. test binary-41.1 {ScanNumber: word alignment} {
  1382.     catch {unset arg1; unset arg2}
  1383.     list [binary scan x01x01x00 c1s1 arg1 arg2] $arg1 $arg2
  1384. } {2 1 1}
  1385. test binary-41.2 {ScanNumber: word alignment} {
  1386.     catch {unset arg1; unset arg2}
  1387.     list [binary scan x01x00x01 c1S1 arg1 arg2] $arg1 $arg2
  1388. } {2 1 1}
  1389. test binary-41.3 {ScanNumber: word alignment} {
  1390.     catch {unset arg1; unset arg2}
  1391.     list [binary scan x01x01x00x00x00 c1i1 arg1 arg2] $arg1 $arg2
  1392. } {2 1 1}
  1393. test binary-41.4 {ScanNumber: word alignment} {
  1394.     catch {unset arg1; unset arg2}
  1395.     list [binary scan x01x00x00x00x01 c1I1 arg1 arg2] $arg1 $arg2
  1396. } {2 1 1}
  1397. test binary-41.5 {ScanNumber: word alignment} {nonPortable macOrUnix} {
  1398.     catch {unset arg1; unset arg2}
  1399.     list [binary scan x01x3fxccxccxcd c1f1 arg1 arg2] $arg1 $arg2
  1400. } {2 1 1.60000002384}
  1401. test binary-41.6 {ScanNumber: word alignment} {nonPortable pcOnly} {
  1402.     catch {unset arg1; unset arg2}
  1403.     list [binary scan x01xcdxccxccx3f c1f1 arg1 arg2] $arg1 $arg2
  1404. } {2 1 1.60000002384}
  1405. test binary-41.7 {ScanNumber: word alignment} {nonPortable macOrUnix} {
  1406.     catch {unset arg1; unset arg2}
  1407.     list [binary scan x01x3fxf9x99x99x99x99x99x9a c1d1 arg1 arg2] $arg1 $arg2
  1408. } {2 1 1.6}
  1409. test binary-41.8 {ScanNumber: word alignment} {nonPortable pcOnly} {
  1410.     catch {unset arg1; unset arg2}
  1411.     list [binary scan x01x9ax99x99x99x99x99xf9x3f c1d1 arg1 arg2] $arg1 $arg2
  1412. } {2 1 1.6}
  1413. test binary-42.1 {Tcl_BinaryObjCmd: bad arguments} {} {
  1414.     catch {binary ?} result
  1415.     set result
  1416. } {bad option "?": must be format or scan}
  1417. # Wide int (guaranteed at least 64-bit) handling
  1418. test binary-43.1 {Tcl_BinaryObjCmd: format wide int} {} {
  1419.     binary format w 7810179016327718216
  1420. } HelloTcl
  1421. test binary-43.2 {Tcl_BinaryObjCmd: format wide int} {} {
  1422.     binary format W 7810179016327718216
  1423. } lcTolleH
  1424. test binary-44.1 {Tcl_BinaryObjCmd: scan wide int} {} {
  1425.     binary scan HelloTcl W x
  1426.     set x
  1427. } 5216694956358656876
  1428. test binary-44.2 {Tcl_BinaryObjCmd: scan wide int} {} {
  1429.     binary scan lcTolleH w x
  1430.     set x
  1431. } 5216694956358656876
  1432. test binary-44.3 {Tcl_BinaryObjCmd: scan wide int with bit 31 set} {} {
  1433.     binary scan [binary format w [expr {wide(3) << 31}]] w x
  1434.     set x
  1435. } 6442450944
  1436. test binary-44.4 {Tcl_BinaryObjCmd: scan wide int with bit 31 set} {} {
  1437.     binary scan [binary format W [expr {wide(3) << 31}]] W x
  1438.     set x
  1439. } 6442450944
  1440. test binary-45.1 {Tcl_BinaryObjCmd: combined wide int handling} {
  1441.     binary scan [binary format sws 16450 -1 19521] c* x
  1442.     set x
  1443. } {66 64 -1 -1 -1 -1 -1 -1 -1 -1 65 76}
  1444. test binary-45.2 {Tcl_BinaryObjCmd: combined wide int handling} {
  1445.     binary scan [binary format sWs 16450 0x7fffffff 19521] c* x
  1446.     set x
  1447. } {66 64 0 0 0 0 127 -1 -1 -1 65 76}
  1448. test binary-46.1 {Tcl_BinaryObjCmd: handling of non-ISO8859-1 chars} {
  1449.     binary format a* u20ac
  1450. } u00ac
  1451. test binary-46.2 {Tcl_BinaryObjCmd: handling of non-ISO8859-1 chars} {
  1452.     list [binary scan [binary format a* u20acu20bd] s x] $x
  1453. } {1 -16980}
  1454. test binary-46.3 {Tcl_BinaryObjCmd: handling of non-ISO8859-1 chars} {
  1455.     set x {}
  1456.     set y {}
  1457.     set z {}
  1458.     list [binary scan [binary format a* u20acu20bd] aaa x y z] $x $y $z
  1459. } "2 u00ac u00bd {}"
  1460. test binary-46.4 {Tcl_BinaryObjCmd: handling of non-ISO8859-1 chars} {
  1461.     set x [encoding convertto iso8859-15 u20ac]
  1462.     set y [binary format a* $x]
  1463.     list $x $y
  1464. } "u00a4 u00a4"
  1465. test binary-46.5 {Tcl_BinaryObjCmd: handling of non-ISO8859-1 chars} {
  1466.     set x [binary scan u00a4 a* y]
  1467.     list $x $y [encoding convertfrom iso8859-15 $y]
  1468. } "1 u00a4 u20ac"
  1469. test binary-47.1 {Tcl_BinaryObjCmd: number cache reference count handling} {
  1470.     # This test is only reliable when memory debugging is turned on,
  1471.     # but without even memory debugging it should still generate the
  1472.     # expected answers and might therefore still pick up memory corruption
  1473.     # caused by [Bug 851747].
  1474.     list [binary scan aba ccc x x x] $x
  1475. } {3 97}
  1476. # cleanup
  1477. ::tcltest::cleanupTests
  1478. return