1# Functionality covered: this file contains a collection of tests for the 2# procedures in tclObj.c that implement Tcl's basic type support and the 3# type managers for the types boolean, double, and integer. 4# 5# Sourcing this file into Tcl runs the tests and generates output for 6# errors. No output means no errors were found. 7# 8# Copyright © 1995-1996 Sun Microsystems, Inc. 9# Copyright © 1998-1999 Scriptics Corporation. 10# 11# See the file "license.terms" for information on usage and redistribution 12# of this file, and for a DISCLAIMER OF ALL WARRANTIES. 13 14if {"::tcltest" ni [namespace children]} { 15 package require tcltest 2.5 16 namespace import -force ::tcltest::* 17} 18 19::tcltest::loadTestedCommands 20catch [list package require -exact tcl::test [info patchlevel]] 21 22testConstraint testobj [llength [info commands testobj]] 23testConstraint longIs32bit [expr {$tcl_platform(wordSize) == 4}] 24testConstraint wideIs64bit [expr {wide(0x8000000000000000) < 0}] 25 26test obj-1.1 {Tcl_AppendAllObjTypes, and InitTypeTable, Tcl_RegisterObjType} testobj { 27 set r 1 28 foreach {t} { 29 bytearray 30 bytecode 31 cmdName 32 dict 33 regexp 34 string 35 } { 36 set first [string first $t [testobj types]] 37 set r [expr {$r && ($first >= 0)}] 38 } 39 set result $r 40} {1} 41 42test obj-2.1 {Tcl_GetObjType error} testobj { 43 list [testintobj set 1 0] [catch {testobj convert 1 foo} msg] $msg 44} {0 1 {no type foo found}} 45test obj-2.2 {Tcl_GetObjType and Tcl_ConvertToType} testobj { 46 set result "" 47 lappend result [testobj freeallvars] 48 lappend result [testintobj set 1 12] 49 lappend result [testobj convert 1 bytearray] 50 lappend result [testobj type 1] 51 lappend result [testobj refcount 1] 52} {{} 12 12 bytearray 3} 53 54test obj-4.1 {Tcl_NewObj and AllocateFreeObjects} testobj { 55 set result "" 56 lappend result [testobj freeallvars] 57 lappend result [testobj newobj 1] 58 lappend result [testobj type 1] 59 lappend result [testobj refcount 1] 60} {{} {} string 2} 61 62test obj-5.1 {Tcl_FreeObj} testobj { 63 set result "" 64 lappend result [testintobj set 1 12345] 65 lappend result [testobj freeallvars] 66 lappend result [catch {testintobj get 1} msg] 67 lappend result $msg 68} {12345 {} 1 {variable 1 is unset (NULL)}} 69 70test obj-6.1 {Tcl_DuplicateObj, object has internal rep} testobj { 71 set result "" 72 lappend result [testobj freeallvars] 73 lappend result [testintobj set 1 47] 74 lappend result [testobj duplicate 1 2] 75 lappend result [testintobj get 2] 76 lappend result [testobj refcount 1] 77 lappend result [testobj refcount 2] 78} {{} 47 47 47 2 3} 79test obj-6.2 {Tcl_DuplicateObj, "empty string" object} testobj { 80 set result "" 81 lappend result [testobj freeallvars] 82 lappend result [testobj newobj 1] 83 lappend result [testobj duplicate 1 2] 84 lappend result [testintobj get 2] 85 lappend result [testobj refcount 1] 86 lappend result [testobj refcount 2] 87} {{} {} {} {} 2 3} 88 89# We assume that testobj is an indicator for test*obj as well 90 91test obj-7.1 {Tcl_GetString, return existing string rep} testobj { 92 set result "" 93 lappend result [testintobj set 1 47] 94 lappend result [testintobj get2 1] 95} {47 47} 96test obj-7.2 {Tcl_GetString, "empty string" object} testobj { 97 set result "" 98 lappend result [testobj newobj 1] 99 lappend result [teststringobj append 1 abc -1] 100 lappend result [teststringobj get2 1] 101} {{} abc abc} 102test obj-7.3 {Tcl_GetString, returns string internal rep (DString)} testobj { 103 set result "" 104 lappend result [teststringobj set 1 xyz] 105 lappend result [teststringobj append 1 abc -1] 106 lappend result [teststringobj get2 1] 107} {xyz xyzabc xyzabc} 108test obj-7.4 {Tcl_GetString, recompute string rep from internal rep} testobj { 109 set result "" 110 lappend result [testintobj set 1 77] 111 lappend result [testintobj mult10 1] 112 lappend result [teststringobj get2 1] 113} {77 770 770} 114 115test obj-8.1 {Tcl_GetStringFromObj, return existing string rep} testobj { 116 set result "" 117 lappend result [testintobj set 1 47] 118 lappend result [testintobj get 1] 119} {47 47} 120test obj-8.2 {Tcl_GetStringFromObj, "empty string" object} testobj { 121 set result "" 122 lappend result [testobj newobj 1] 123 lappend result [teststringobj append 1 abc -1] 124 lappend result [teststringobj get 1] 125} {{} abc abc} 126test obj-8.3 {Tcl_GetStringFromObj, returns string internal rep (DString)} testobj { 127 set result "" 128 lappend result [teststringobj set 1 xyz] 129 lappend result [teststringobj append 1 abc -1] 130 lappend result [teststringobj get 1] 131} {xyz xyzabc xyzabc} 132test obj-8.4 {Tcl_GetStringFromObj, recompute string rep from internal rep} testobj { 133 set result "" 134 lappend result [testintobj set 1 77] 135 lappend result [testintobj mult10 1] 136 lappend result [teststringobj get 1] 137} {77 770 770} 138 139test obj-9.1 {Tcl_NewBooleanObj} testobj { 140 set result "" 141 lappend result [testobj freeallvars] 142 lappend result [testbooleanobj set 1 0] 143 lappend result [testobj type 1] 144 lappend result [testobj refcount 1] 145} {{} 0 int 2} 146 147test obj-10.1 {Tcl_SetBooleanObj, existing "empty string" object} testobj { 148 set result "" 149 lappend result [testobj freeallvars] 150 lappend result [testobj newobj 1] 151 lappend result [testbooleanobj set 1 0] ;# makes existing obj boolean 152 lappend result [testobj type 1] 153 lappend result [testobj refcount 1] 154} {{} {} 0 int 2} 155test obj-10.2 {Tcl_SetBooleanObj, existing non-"empty string" object} testobj { 156 set result "" 157 lappend result [testobj freeallvars] 158 lappend result [testintobj set 1 98765] 159 lappend result [testbooleanobj set 1 1] ;# makes existing obj boolean 160 lappend result [testobj type 1] 161 lappend result [testobj refcount 1] 162} {{} 98765 1 int 2} 163 164test obj-11.1 {Tcl_GetBooleanFromObj, existing boolean object} testobj { 165 set result "" 166 lappend result [testbooleanobj set 1 1] 167 lappend result [testbooleanobj not 1] ;# gets existing boolean rep 168} {1 0} 169test obj-11.2 {Tcl_GetBooleanFromObj, convert to boolean} testobj { 170 set result "" 171 lappend result [testintobj set 1 47] 172 lappend result [testbooleanobj not 1] ;# must convert to bool 173 lappend result [testobj type 1] 174} {47 0 int} 175test obj-11.3 {Tcl_GetBooleanFromObj, error converting to boolean} testobj { 176 set result "" 177 lappend result [teststringobj set 1 abc] 178 lappend result [catch {testbooleanobj not 1} msg] 179 lappend result $msg 180} {abc 1 {expected boolean value but got "abc"}} 181test obj-11.4 {Tcl_GetBooleanFromObj, error converting from "empty string"} testobj { 182 set result "" 183 lappend result [testobj newobj 1] 184 lappend result [catch {testbooleanobj not 1} msg] 185 lappend result $msg 186} {{} 1 {expected boolean value but got ""}} 187test obj-11.5 {Tcl_GetBooleanFromObj, convert hex to boolean} testobj { 188 set result "" 189 lappend result [teststringobj set 1 0xac] 190 lappend result [testbooleanobj not 1] 191 lappend result [testobj type 1] 192} {0xac 0 int} 193test obj-11.6 {Tcl_GetBooleanFromObj, convert float to boolean} testobj { 194 set result "" 195 lappend result [teststringobj set 1 5.42] 196 lappend result [testbooleanobj not 1] 197 lappend result [testobj type 1] 198} {5.42 0 int} 199 200test obj-12.1 {DupBooleanInternalRep} testobj { 201 set result "" 202 lappend result [testbooleanobj set 1 1] 203 lappend result [testobj duplicate 1 2] ;# uses DupBooleanInternalRep 204 lappend result [testbooleanobj get 2] 205} {1 1 1} 206 207test obj-13.1 {SetBooleanFromAny, int to boolean special case} testobj { 208 set result "" 209 lappend result [testintobj set 1 1234] 210 lappend result [testbooleanobj not 1] ;# converts with SetBooleanFromAny 211 lappend result [testobj type 1] 212} {1234 0 int} 213test obj-13.2 {SetBooleanFromAny, double to boolean special case} testobj { 214 set result "" 215 lappend result [testdoubleobj set 1 3.14159] 216 lappend result [testbooleanobj not 1] ;# converts with SetBooleanFromAny 217 lappend result [testobj type 1] 218} {3.14159 0 int} 219test obj-13.3 {SetBooleanFromAny, special case strings representing booleans} testobj { 220 set result "" 221 foreach s {yes no true false on off} { 222 teststringobj set 1 $s 223 lappend result [testbooleanobj not 1] 224 } 225 lappend result [testobj type 1] 226} {0 1 0 1 0 1 int} 227test obj-13.4 {SetBooleanFromAny, recompute string rep then parse it} testobj { 228 set result "" 229 lappend result [testintobj set 1 456] 230 lappend result [testintobj div10 1] 231 lappend result [testbooleanobj not 1] ;# converts with SetBooleanFromAny 232 lappend result [testobj type 1] 233} {456 45 0 int} 234test obj-13.5 {SetBooleanFromAny, error parsing string} testobj { 235 set result "" 236 lappend result [teststringobj set 1 abc] 237 lappend result [catch {testbooleanobj not 1} msg] 238 lappend result $msg 239} {abc 1 {expected boolean value but got "abc"}} 240test obj-13.6 {SetBooleanFromAny, error parsing string} testobj { 241 set result "" 242 lappend result [teststringobj set 1 x1.0] 243 lappend result [catch {testbooleanobj not 1} msg] 244 lappend result $msg 245} {x1.0 1 {expected boolean value but got "x1.0"}} 246test obj-13.7 {SetBooleanFromAny, error converting from "empty string"} testobj { 247 set result "" 248 lappend result [testobj newobj 1] 249 lappend result [catch {testbooleanobj not 1} msg] 250 lappend result $msg 251} {{} 1 {expected boolean value but got ""}} 252test obj-13.8 {SetBooleanFromAny, unicode strings} testobj { 253 set result "" 254 lappend result [teststringobj set 1 1睷] 255 lappend result [catch {testbooleanobj not 1} msg] 256 lappend result $msg 257} "1睷 1 {expected boolean value but got \"1睷\"}" 258 259test obj-14.1 {UpdateStringOfBoolean} testobj { 260 set result "" 261 lappend result [testbooleanobj set 1 0] 262 lappend result [testbooleanobj not 1] 263 lappend result [testbooleanobj get 1] ;# must update string rep 264} {0 1 1} 265 266test obj-15.1 {Tcl_NewDoubleObj} testobj { 267 set result "" 268 lappend result [testobj freeallvars] 269 lappend result [testdoubleobj set 1 3.1459] 270 lappend result [testobj type 1] 271 lappend result [testobj refcount 1] 272} {{} 3.1459 double 2} 273 274test obj-16.1 {Tcl_SetDoubleObj, existing "empty string" object} testobj { 275 set result "" 276 lappend result [testobj freeallvars] 277 lappend result [testobj newobj 1] 278 lappend result [testdoubleobj set 1 0.123] ;# makes existing obj boolean 279 lappend result [testobj type 1] 280 lappend result [testobj refcount 1] 281} {{} {} 0.123 double 2} 282test obj-16.2 {Tcl_SetDoubleObj, existing non-"empty string" object} testobj { 283 set result "" 284 lappend result [testobj freeallvars] 285 lappend result [testintobj set 1 98765] 286 lappend result [testdoubleobj set 1 27.56] ;# makes existing obj double 287 lappend result [testobj type 1] 288 lappend result [testobj refcount 1] 289} {{} 98765 27.56 double 2} 290 291test obj-17.1 {Tcl_GetDoubleFromObj, existing double object} testobj { 292 set result "" 293 lappend result [testdoubleobj set 1 16.1] 294 lappend result [testdoubleobj mult10 1] ;# gets existing double rep 295} {16.1 161.0} 296test obj-17.2 {Tcl_GetDoubleFromObj, convert to double} testobj { 297 set result "" 298 lappend result [testintobj set 1 477] 299 lappend result [testdoubleobj div10 1] ;# must convert to bool 300 lappend result [testobj type 1] 301} {477 47.7 double} 302test obj-17.3 {Tcl_GetDoubleFromObj, error converting to double} testobj { 303 set result "" 304 lappend result [teststringobj set 1 abc] 305 lappend result [catch {testdoubleobj mult10 1} msg] 306 lappend result $msg 307} {abc 1 {expected floating-point number but got "abc"}} 308test obj-17.4 {Tcl_GetDoubleFromObj, error converting from "empty string"} testobj { 309 set result "" 310 lappend result [testobj newobj 1] 311 lappend result [catch {testdoubleobj div10 1} msg] 312 lappend result $msg 313} {{} 1 {expected floating-point number but got ""}} 314 315test obj-18.1 {DupDoubleInternalRep} testobj { 316 set result "" 317 lappend result [testdoubleobj set 1 17.1] 318 lappend result [testobj duplicate 1 2] ;# uses DupDoubleInternalRep 319 lappend result [testdoubleobj get 2] 320} {17.1 17.1 17.1} 321 322test obj-19.1 {SetDoubleFromAny, int to double special case} testobj { 323 set result "" 324 lappend result [testintobj set 1 1234] 325 lappend result [testdoubleobj mult10 1] ;# converts with SetDoubleFromAny 326 lappend result [testobj type 1] 327} {1234 12340.0 double} 328test obj-19.2 {SetDoubleFromAny, boolean to double special case} testobj { 329 set result "" 330 lappend result [testbooleanobj set 1 1] 331 lappend result [testdoubleobj mult10 1] ;# converts with SetDoubleFromAny 332 lappend result [testobj type 1] 333} {1 10.0 double} 334test obj-19.3 {SetDoubleFromAny, recompute string rep then parse it} testobj { 335 set result "" 336 lappend result [testintobj set 1 456] 337 lappend result [testintobj div10 1] 338 lappend result [testdoubleobj mult10 1] ;# converts with SetDoubleFromAny 339 lappend result [testobj type 1] 340} {456 45 450.0 double} 341test obj-19.4 {SetDoubleFromAny, error parsing string} testobj { 342 set result "" 343 lappend result [teststringobj set 1 abc] 344 lappend result [catch {testdoubleobj mult10 1} msg] 345 lappend result $msg 346} {abc 1 {expected floating-point number but got "abc"}} 347test obj-19.5 {SetDoubleFromAny, error parsing string} testobj { 348 set result "" 349 lappend result [teststringobj set 1 x1.0] 350 lappend result [catch {testdoubleobj mult10 1} msg] 351 lappend result $msg 352} {x1.0 1 {expected floating-point number but got "x1.0"}} 353test obj-19.6 {SetDoubleFromAny, error converting from "empty string"} testobj { 354 set result "" 355 lappend result [testobj newobj 1] 356 lappend result [catch {testdoubleobj div10 1} msg] 357 lappend result $msg 358} {{} 1 {expected floating-point number but got ""}} 359 360test obj-20.1 {UpdateStringOfDouble} testobj { 361 set result "" 362 lappend result [testdoubleobj set 1 3.14159] 363 lappend result [testdoubleobj mult10 1] 364 lappend result [testdoubleobj get 1] ;# must update string rep 365} {3.14159 31.4159 31.4159} 366 367test obj-21.1 {Tcl_NewIntObj} testobj { 368 set result "" 369 lappend result [testobj freeallvars] 370 lappend result [testintobj set 1 55] 371 lappend result [testobj type 1] 372 lappend result [testobj refcount 1] 373} {{} 55 int 2} 374 375test obj-22.1 {Tcl_SetIntObj, existing "empty string" object} testobj { 376 set result "" 377 lappend result [testobj freeallvars] 378 lappend result [testobj newobj 1] 379 lappend result [testintobj set 1 77] ;# makes existing obj int 380 lappend result [testobj type 1] 381 lappend result [testobj refcount 1] 382} {{} {} 77 int 2} 383test obj-22.2 {Tcl_SetIntObj, existing non-"empty string" object} testobj { 384 set result "" 385 lappend result [testobj freeallvars] 386 lappend result [testdoubleobj set 1 12.34] 387 lappend result [testintobj set 1 77] ;# makes existing obj int 388 lappend result [testobj type 1] 389 lappend result [testobj refcount 1] 390} {{} 12.34 77 int 2} 391 392test obj-23.1 {Tcl_GetIntFromObj, existing int object} testobj { 393 set result "" 394 lappend result [testintobj set 1 22] 395 lappend result [testintobj mult10 1] ;# gets existing int rep 396} {22 220} 397test obj-23.2 {Tcl_GetIntFromObj, convert to int} testobj { 398 set result "" 399 lappend result [testintobj set 1 477] 400 lappend result [testintobj div10 1] ;# must convert to bool 401 lappend result [testobj type 1] 402} {477 47 int} 403test obj-23.3 {Tcl_GetIntFromObj, error converting to int} testobj { 404 set result "" 405 lappend result [teststringobj set 1 abc] 406 lappend result [catch {testintobj mult10 1} msg] 407 lappend result $msg 408} {abc 1 {expected integer but got "abc"}} 409test obj-23.4 {Tcl_GetIntFromObj, error converting from "empty string"} testobj { 410 set result "" 411 lappend result [testobj newobj 1] 412 lappend result [catch {testintobj div10 1} msg] 413 lappend result $msg 414} {{} 1 {expected integer but got ""}} 415test obj-23.5 {Tcl_GetIntFromObj, integer too large to represent as non-long error} {testobj} { 416 set result "" 417 lappend result [testobj newobj 1] 418 lappend result [testintobj inttoobigtest 1] 419} {{} 1} 420 421test obj-24.1 {DupIntInternalRep} testobj { 422 set result "" 423 lappend result [testintobj set 1 23] 424 lappend result [testobj duplicate 1 2] ;# uses DupIntInternalRep 425 lappend result [testintobj get 2] 426} {23 23 23} 427 428test obj-25.1 {SetIntFromAny, int to int special case} testobj { 429 set result "" 430 lappend result [testintobj set 1 1234] 431 lappend result [testintobj mult10 1] ;# converts with SetIntFromAny 432 lappend result [testobj type 1] 433} {1234 12340 int} 434test obj-25.2 {SetIntFromAny, boolean to int special case} testobj { 435 set result "" 436 lappend result [testbooleanobj set 1 1] 437 lappend result [testintobj mult10 1] ;# converts with SetIntFromAny 438 lappend result [testobj type 1] 439} {1 10 int} 440test obj-25.3 {SetIntFromAny, recompute string rep then parse it} testobj { 441 set result "" 442 lappend result [testintobj set 1 456] 443 lappend result [testintobj div10 1] 444 lappend result [testintobj mult10 1] ;# converts with SetIntFromAny 445 lappend result [testobj type 1] 446} {456 45 450 int} 447test obj-25.4 {SetIntFromAny, error parsing string} testobj { 448 set result "" 449 lappend result [teststringobj set 1 abc] 450 lappend result [catch {testintobj mult10 1} msg] 451 lappend result $msg 452} {abc 1 {expected integer but got "abc"}} 453test obj-25.5 {SetIntFromAny, error parsing string} testobj { 454 set result "" 455 lappend result [teststringobj set 1 x17] 456 lappend result [catch {testintobj mult10 1} msg] 457 lappend result $msg 458} {x17 1 {expected integer but got "x17"}} 459test obj-25.6 {SetIntFromAny, integer too large} {testobj} { 460 set result "" 461 lappend result [teststringobj set 1 123456789012345678901] 462 lappend result [catch {testintobj mult10 1} msg] 463 lappend result $msg 464} {123456789012345678901 1 {integer value too large to represent}} 465test obj-25.7 {SetIntFromAny, error converting from "empty string"} testobj { 466 set result "" 467 lappend result [testobj newobj 1] 468 lappend result [catch {testintobj div10 1} msg] 469 lappend result $msg 470} {{} 1 {expected integer but got ""}} 471 472test obj-26.1 {UpdateStringOfInt} testobj { 473 set result "" 474 lappend result [testintobj set 1 512] 475 lappend result [testintobj mult10 1] 476 lappend result [testintobj get 1] ;# must update string rep 477} {512 5120 5120} 478 479test obj-27.1 {Tcl_NewWideObj} testobj { 480 set result "" 481 lappend result [testobj freeallvars] 482 testintobj setmax 1 483 lappend result [testintobj ismax 1] 484 lappend result [testobj type 1] 485 lappend result [testobj refcount 1] 486} {{} 1 int 1} 487 488test obj-28.1 {Tcl_SetLongObj, existing "empty string" object} testobj { 489 set result "" 490 lappend result [testobj freeallvars] 491 lappend result [testobj newobj 1] 492 lappend result [testintobj setint 1 77] ;# makes existing obj int 493 lappend result [testobj type 1] 494 lappend result [testobj refcount 1] 495} {{} {} 77 int 2} 496test obj-28.2 {Tcl_SetLongObj, existing non-"empty string" object} testobj { 497 set result "" 498 lappend result [testobj freeallvars] 499 lappend result [testdoubleobj set 1 12.34] 500 lappend result [testintobj setint 1 77] ;# makes existing obj int 501 lappend result [testobj type 1] 502 lappend result [testobj refcount 1] 503} {{} 12.34 77 int 2} 504 505test obj-29.1 {Tcl_GetWideIntFromObj, existing int object} testobj { 506 set result "" 507 lappend result [testintobj setint 1 22] 508 lappend result [testintobj mult10 1] ;# gets existingint rep 509} {22 220} 510test obj-29.2 {Tcl_GetWideIntFromObj, convert to int} testobj { 511 set result "" 512 lappend result [testintobj setint 1 477] 513 lappend result [testintobj div10 1] ;# must convert to bool 514 lappend result [testobj type 1] 515} {477 47 int} 516test obj-29.3 {Tcl_GetWideIntFromObj, error converting to int} testobj { 517 set result "" 518 lappend result [teststringobj set 1 abc] 519 lappend result [catch {testintobj ismax 1} msg] ;# cvts to long int 520 lappend result $msg 521} {abc 1 {expected integer but got "abc"}} 522test obj-29.4 {Tcl_GetWideIntFromObj, error converting from "empty string"} testobj { 523 set result "" 524 lappend result [testobj newobj 1] 525 lappend result [catch {testintobj ismax 1} msg] ;# cvts to long int 526 lappend result $msg 527} {{} 1 {expected integer but got ""}} 528 529test obj-30.1 {Ref counting and object deletion, simple types} testobj { 530 set result "" 531 lappend result [testobj freeallvars] 532 lappend result [testintobj set 1 1024] 533 lappend result [testobj assign 1 2] ;# vars 1 and 2 share the int obj 534 lappend result [testobj type 2] 535 lappend result [testobj refcount 1] 536 lappend result [testobj refcount 2] 537 lappend result [testbooleanobj set 2 0] ;# must copy on write, now 2 objs 538 lappend result [testobj type 2] 539 lappend result [testobj refcount 1] 540 lappend result [testobj refcount 2] 541} {{} 1024 1024 int 4 4 0 int 3 2} 542 543test obj-32.1 {freeing very large object trees} { 544 set x {} 545 for {set i 0} {$i<100000} {incr i} { 546 set x [list $x {}] 547 } 548 unset x 549} {} 550 551test obj-33.1 {integer overflow on input} {longIs32bit wideIs64bit} { 552 set x 0x8000; append x 0000 553 list [string is integer $x] [expr { wide($x) }] 554} {1 2147483648} 555test obj-33.2 {integer overflow on input} {longIs32bit wideIs64bit} { 556 set x 0xffff; append x ffff 557 list [string is integer $x] [expr { wide($x) }] 558} {1 4294967295} 559test obj-33.3 {integer overflow on input} { 560 set x 0x10000; append x 0000 561 list [string is integer $x] [expr { wide($x) }] 562} {1 4294967296} 563test obj-33.4 {integer overflow on input} {longIs32bit wideIs64bit} { 564 set x -0x8000; append x 0000 565 list [string is integer $x] [expr { wide($x) }] 566} {1 -2147483648} 567test obj-33.5 {integer overflow on input} {longIs32bit wideIs64bit} { 568 set x -0x8000; append x 0001 569 list [string is integer $x] [expr { wide($x) }] 570} {1 -2147483649} 571test obj-33.6 {integer overflow on input} {longIs32bit wideIs64bit} { 572 set x -0xffff; append x ffff 573 list [string is integer $x] [expr { wide($x) }] 574} {1 -4294967295} 575test obj-33.7 {integer overflow on input} { 576 set x -0x10000; append x 0000 577 list [string is integer $x] [expr { wide($x) }] 578} {1 -4294967296} 579 580test obj-34.1 {mp_iseven} testobj { 581 set result "" 582 lappend result [testbignumobj set 1 0] 583 lappend result [testbignumobj iseven 1] ; 584 lappend result [testobj type 1] 585} {0 1 int} 586test obj-34.2 {mp_radix_size} testobj { 587 set result "" 588 lappend result [testbignumobj set 1 9] 589 lappend result [testbignumobj radixsize 1] ; 590 lappend result [testobj type 1] 591} {9 2 int} 592 593if {[testConstraint testobj]} { 594 testobj freeallvars 595} 596 597# cleanup 598::tcltest::cleanupTests 599return 600