diff options
Diffstat (limited to 'tests')
136 files changed, 79612 insertions, 9746 deletions
diff --git a/tests/all.tcl b/tests/all.tcl index d8129f7..d01a54d 100644 --- a/tests/all.tcl +++ b/tests/all.tcl @@ -10,10 +10,8 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. -set tcltestVersion [package require tcltest] -namespace import -force tcltest::* - -tcltest::testsDirectory [file dir [info script]] -tcltest::runAllTests - -return +package require Tcl 8.5 +package require tcltest 2.2 +namespace import tcltest::* +configure {*}$argv -testdir [file dir [info script]] +runAllTests diff --git a/tests/append.test b/tests/append.test index 6e70f8c..caf6210 100644 --- a/tests/append.test +++ b/tests/append.test @@ -141,7 +141,7 @@ test append-4.20 {lappend command} { catch {unset x} lappend x(0) abc } {abc} -unset x +unset -nocomplain x test append-4.21 {lappend command} { set x \" list [catch {lappend x} msg] $msg @@ -229,8 +229,6 @@ test append-7.5 {append var does not trigger read trace} { info exists ::result } {0} - - # New tests for bug 3057639 to show off the more consistent behaviour # of lappend in both direct-eval and bytecompiled code paths (see # appendComp.test for the compiled variants). lappend now behaves like @@ -281,6 +279,7 @@ test append-9.3 {bug 3057639, append direct eval, read trace on non-existing env } {0 {new value}} + catch {unset i x result y} catch {rename foo ""} catch {rename check ""} diff --git a/tests/appendComp.test b/tests/appendComp.test index f2a9ebf..14e9567 100644 --- a/tests/appendComp.test +++ b/tests/appendComp.test @@ -12,7 +12,7 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } catch {unset x} @@ -349,6 +349,21 @@ test appendComp-7.9 {append var does not trigger read trace} { bar } {0} +test appendComp-8.1 {defer error to runtime} -setup { + interp create slave +} -body { + slave eval { + proc foo {} { + proc append args {} + append + } + foo + } +} -cleanup { + interp delete slave +} -result {} + + # New tests for bug 3057639 to show off the more consistent behaviour # of lappend in both direct-eval and bytecompiled code paths (see # append.test for the direct-eval variants). lappend now behaves like @@ -416,6 +431,10 @@ test appendComp-9.3 {bug 3057639, append direct eval, read trace on non-existing list [catch { foo } msg] $msg } {0 {new value}} + + + + catch {unset i x result y} catch {rename foo ""} catch {rename bar ""} diff --git a/tests/apply.test b/tests/apply.test new file mode 100644 index 0000000..31fe918 --- /dev/null +++ b/tests/apply.test @@ -0,0 +1,324 @@ +# Commands covered: apply +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. +# +# Copyright (c) 1991-1993 The Regents of the University of California. +# Copyright (c) 1994-1996 Sun Microsystems, Inc. +# Copyright (c) 1998-1999 by Scriptics Corporation. +# Copyright (c) 2005-2006 Miguel Sofer +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest 2.2 + namespace import -force ::tcltest::* +} + +if {[info commands ::apply] eq {}} { + return +} + +testConstraint memory [llength [info commands memory]] + +# Tests for wrong number of arguments + +test apply-1.1 {too few arguments} { + set res [catch apply msg] + list $res $msg +} {1 {wrong # args: should be "apply lambdaExpr ?arg1 arg2 ...?"}} + +# Tests for malformed lambda + +test apply-2.0 {malformed lambda} { + set lambda a + set res [catch {apply $lambda} msg] + list $res $msg +} {1 {can't interpret "a" as a lambda expression}} +test apply-2.1 {malformed lambda} { + set lambda [list a b c d] + set res [catch {apply $lambda} msg] + list $res $msg +} {1 {can't interpret "a b c d" as a lambda expression}} +test apply-2.2 {malformed lambda} { + set lambda [list {{}} boo] + set res [catch {apply $lambda} msg] + list $res $msg $::errorInfo +} {1 {argument with no name} {argument with no name + (parsing lambda expression "{{}} boo") + invoked from within +"apply $lambda"}} +test apply-2.3 {malformed lambda} { + set lambda [list {{a b c}} boo] + set res [catch {apply $lambda} msg] + list $res $msg $::errorInfo +} {1 {too many fields in argument specifier "a b c"} {too many fields in argument specifier "a b c" + (parsing lambda expression "{{a b c}} boo") + invoked from within +"apply $lambda"}} +test apply-2.4 {malformed lambda} { + set lambda [list a(1) boo] + set res [catch {apply $lambda} msg] + list $res $msg $::errorInfo +} {1 {formal parameter "a(1)" is an array element} {formal parameter "a(1)" is an array element + (parsing lambda expression "a(1) boo") + invoked from within +"apply $lambda"}} +test apply-2.5 {malformed lambda} { + set lambda [list a::b boo] + set res [catch {apply $lambda} msg] + list $res $msg $::errorInfo +} {1 {formal parameter "a::b" is not a simple name} {formal parameter "a::b" is not a simple name + (parsing lambda expression "a::b boo") + invoked from within +"apply $lambda"}} + +# Tests for runtime errors in the lambda expression + +test apply-3.1 {non-existing namespace} -body { + apply [list x {set x 1} ::NONEXIST::FOR::SURE] x +} -returnCodes error -result {namespace "::NONEXIST::FOR::SURE" not found} +test apply-3.2 {non-existing namespace} -body { + namespace eval ::NONEXIST::FOR::SURE {} + set lambda [list x {set x 1} ::NONEXIST::FOR::SURE] + apply $lambda x + namespace delete ::NONEXIST + apply $lambda x +} -returnCodes error -result {namespace "::NONEXIST::FOR::SURE" not found} +test apply-3.3 {non-existing namespace} -body { + apply [list x {set x 1} NONEXIST::FOR::SURE] x +} -returnCodes error -result {namespace "::NONEXIST::FOR::SURE" not found} +test apply-3.4 {non-existing namespace} -body { + namespace eval ::NONEXIST::FOR::SURE {} + set lambda [list x {set x 1} NONEXIST::FOR::SURE] + apply $lambda x + namespace delete ::NONEXIST + apply $lambda x +} -returnCodes error -result {namespace "::NONEXIST::FOR::SURE" not found} + +test apply-4.1 {error in arguments to lambda expression} { + set lambda [list x {set x 1}] + set res [catch {apply $lambda} msg] + list $res $msg +} {1 {wrong # args: should be "apply lambdaExpr x"}} +test apply-4.2 {error in arguments to lambda expression} { + set lambda [list x {set x 1}] + set res [catch {apply $lambda a b} msg] + list $res $msg +} {1 {wrong # args: should be "apply lambdaExpr x"}} +test apply-4.3 {error in arguments to lambda expression} { + set lambda [list x {set x 1}] + interp alias {} foo {} ::apply $lambda + set res [catch {foo a b} msg] + list $res $msg [rename foo {}] +} {1 {wrong # args: should be "foo x"} {}} +test apply-4.4 {error in arguments to lambda expression} { + set lambda [list x {set x 1}] + interp alias {} foo {} ::apply $lambda a + set res [catch {foo b} msg] + list $res $msg [rename foo {}] +} {1 {wrong # args: should be "foo"} {}} +test apply-4.5 {error in arguments to lambda expression} { + set lambda [list x {set x 1}] + namespace eval a { + namespace ensemble create -command ::bar -map {id {::a::const foo}} + proc const val { return $val } + proc alias {object slot = command args} { + set map [namespace ensemble configure $object -map] + dict set map $slot [linsert $args 0 $command] + namespace ensemble configure $object -map $map + } + proc method {object name params body} { + set params [linsert $params 0 self] + alias $object $name = ::apply [list $params $body] $object + } + method ::bar boo x {return "[expr {$x*$x}] - $self"} + } + set res [catch {bar boo} msg] + list $res $msg [namespace delete ::a] +} {1 {wrong # args: should be "bar boo x"} {}} + +test apply-5.1 {runtime error in lambda expression} { + set lambda [list {} {error foo}] + set res [catch {apply $lambda}] + list $res $::errorInfo +} {1 {foo + while executing +"error foo" + (lambda term "{} {error foo}" line 1) + invoked from within +"apply $lambda"}} + +# Tests for correct execution; as the implementation is the same as that for +# procs, the general functionality is mostly tested elsewhere + +test apply-6.1 {info level} { + set lev [info level] + set lambda [list {} {info level}] + expr {[apply $lambda] - $lev} +} 1 +test apply-6.2 {info level} { + set lambda [list {} {info level 0}] + apply $lambda +} {apply {{} {info level 0}}} +test apply-6.3 {info level} { + set lambda [list args {info level 0}] + apply $lambda x y +} {apply {args {info level 0}} x y} + +# Tests for correct namespace scope + +namespace eval ::testApply { + proc testApply args {return testApply} +} + +test apply-7.1 {namespace access} { + set ::testApply::x 0 + set body {set x 1; set x} + list [apply [list args $body ::testApply]] $::testApply::x +} {1 0} +test apply-7.2 {namespace access} { + set ::testApply::x 0 + set body {variable x; set x} + list [apply [list args $body ::testApply]] $::testApply::x +} {0 0} +test apply-7.3 {namespace access} { + set ::testApply::x 0 + set body {variable x; set x 1} + list [apply [list args $body ::testApply]] $::testApply::x +} {1 1} +test apply-7.4 {namespace access} { + set ::testApply::x 0 + set body {testApply} + apply [list args $body ::testApply] +} testApply +test apply-7.5 {namespace access} { + set ::testApply::x 0 + set body {set x 1; set x} + list [apply [list args $body testApply]] $::testApply::x +} {1 0} +test apply-7.6 {namespace access} { + set ::testApply::x 0 + set body {variable x; set x} + list [apply [list args $body testApply]] $::testApply::x +} {0 0} +test apply-7.7 {namespace access} { + set ::testApply::x 0 + set body {variable x; set x 1} + list [apply [list args $body testApply]] $::testApply::x +} {1 1} +test apply-7.8 {namespace access} { + set ::testApply::x 0 + set body {testApply} + apply [list args $body testApply] +} testApply + +# Tests for correct argument treatment + +set applyBody { + set res {} + foreach v [info locals] { + if {$v eq "res"} continue + lappend res [list $v [set $v]] + } + set res +} + +test apply-8.1 {args treatment} { + apply [list args $applyBody] 1 2 3 +} {{args {1 2 3}}} +test apply-8.2 {args treatment} { + apply [list {x args} $applyBody] 1 2 +} {{x 1} {args 2}} +test apply-8.3 {args treatment} { + apply [list {x args} $applyBody] 1 2 3 +} {{x 1} {args {2 3}}} +test apply-8.4 {default values} { + apply [list {{x 1} {y 2}} $applyBody] +} {{x 1} {y 2}} +test apply-8.5 {default values} { + apply [list {{x 1} {y 2}} $applyBody] 3 4 +} {{x 3} {y 4}} +test apply-8.6 {default values} { + apply [list {{x 1} {y 2}} $applyBody] 3 +} {{x 3} {y 2}} +test apply-8.7 {default values} { + apply [list {x {y 2}} $applyBody] 1 +} {{x 1} {y 2}} +test apply-8.8 {default values} { + apply [list {x {y 2}} $applyBody] 1 3 +} {{x 1} {y 3}} +test apply-8.9 {default values} { + apply [list {x {y 2} args} $applyBody] 1 +} {{x 1} {y 2} {args {}}} +test apply-8.10 {default values} { + apply [list {x {y 2} args} $applyBody] 1 3 +} {{x 1} {y 3} {args {}}} + +# Tests for leaks + +test apply-9.1 {leaking internal rep} -setup { + proc getbytes {} { + set lines [split [memory info] "\n"] + lindex $lines 3 3 + } + set lam [list {} {set a 1}] +} -constraints memory -body { + set end [getbytes] + for {set i 0} {$i < 5} {incr i} { + ::apply [lrange $lam 0 end] + set tmp $end + set end [getbytes] + } + set leakedBytes [expr {$end - $tmp}] +} -cleanup { + rename getbytes {} + unset -nocomplain lam end i tmp leakedBytes +} -result 0 +test apply-9.2 {leaking internal rep} -setup { + proc getbytes {} { + set lines [split [memory info] "\n"] + lindex $lines 3 3 + } +} -constraints memory -body { + set end [getbytes] + for {set i 0} {$i < 5} {incr i} { + ::apply [list {} {set a 1}] + set tmp $end + set end [getbytes] + } + set leakedBytes [expr {$end - $tmp}] +} -cleanup { + rename getbytes {} + unset -nocomplain end i tmp leakedBytes +} -result 0 +test apply-9.3 {leaking internal rep} -setup { + proc getbytes {} { + set lines [split [memory info] "\n"] + lindex $lines 3 3 + } +} -constraints memory -body { + set end [getbytes] + for {set i 0} {$i < 5} {incr i} { + set x [list {} {set a 1} ::NS::THAT::DOES::NOT::EXIST] + catch {::apply $x} + set x {} + set tmp $end + set end [getbytes] + } + set leakedBytes [expr {$end - $tmp}] +} -cleanup { + rename getbytes {} + unset -nocomplain end i x tmp leakedBytes +} -result 0 + +# Tests for the avoidance of recompilation + +# cleanup + +namespace delete testApply + +::tcltest::cleanupTests +return diff --git a/tests/assocd.test b/tests/assocd.test index 7bcf601..1ca1c9b 100644 --- a/tests/assocd.test +++ b/tests/assocd.test @@ -16,61 +16,46 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -if {[string compare testsetassocdata [info commands testsetassocdata]] != 0} { - puts "This application hasn't been compiled with the tests for assocData," - puts "therefore I am skipping all of these tests." - ::tcltest::cleanupTests - return -} +testConstraint testgetassocdata [llength [info commands testgetassocdata]] +testConstraint testsetassocdata [llength [info commands testsetassocdata]] +testConstraint testdelassocdata [llength [info commands testdelassocdata]] -test assocd-1.1 {testing setting assoc data} { +test assocd-1.1 {testing setting assoc data} testsetassocdata { testsetassocdata a 1 } "" -test assocd-1.2 {testing setting assoc data} { +test assocd-1.2 {testing setting assoc data} testsetassocdata { testsetassocdata a 2 } "" -test assocd-1.3 {testing setting assoc data} { +test assocd-1.3 {testing setting assoc data} testsetassocdata { testsetassocdata 123 456 } "" -test assocd-1.4 {testing setting assoc data} { +test assocd-1.4 {testing setting assoc data} testsetassocdata { testsetassocdata abc "abc d e f" } "" -test assocd-2.1 {testing getting assoc data} { +test assocd-2.1 {testing getting assoc data} testgetassocdata { testgetassocdata a } 2 -test assocd-2.2 {testing getting assoc data} { +test assocd-2.2 {testing getting assoc data} testgetassocdata { testgetassocdata 123 } 456 -test assocd-2.3 {testing getting assoc data} { +test assocd-2.3 {testing getting assoc data} testgetassocdata { testgetassocdata abc } {abc d e f} -test assocd-2.4 {testing getting assoc data} { +test assocd-2.4 {testing getting assoc data} testgetassocdata { testgetassocdata xxx } "" -test assocd-3.1 {testing deleting assoc data} { +test assocd-3.1 {testing deleting assoc data} testdelassocdata { testdelassocdata a } "" -test assocd-3.2 {testing deleting assoc data} { +test assocd-3.2 {testing deleting assoc data} testdelassocdata { testdelassocdata 123 } "" -test assocd-3.3 {testing deleting assoc data} { +test assocd-3.3 {testing deleting assoc data} testdelassocdata { list [catch {testdelassocdata nonexistent} msg] $msg } {0 {}} # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/async.test b/tests/async.test index b0582fc..b369839 100644 --- a/tests/async.test +++ b/tests/async.test @@ -16,12 +16,10 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -if {[info commands testasync] == {}} { - puts "This application hasn't been compiled with the \"testasync\"" - puts "command, so I can't test Tcl_AsyncCreate et al." - ::tcltest::cleanupTests - return -} +testConstraint testasync [llength [info commands testasync]] +testConstraint threaded [expr { + [info exists ::tcl_platform(threaded)] && $::tcl_platform(threaded) +}] proc async1 {result code} { global aresult acode @@ -40,55 +38,68 @@ proc async3 {result code} { set aresult "test pattern" return -code $code $result } +proc \# {result code} { + global aresult acode + set aresult $result + set acode $code + return "comment quoting" +} -set handler1 [testasync create async1] -set handler2 [testasync create async2] -set handler3 [testasync create async3] -test async-1.1 {basic async handlers} { +if {[testConstraint testasync]} { + set handler1 [testasync create async1] + set handler2 [testasync create async2] + set handler3 [testasync create async3] + set handler4 [testasync create \#] +} +test async-1.1 {basic async handlers} testasync { set aresult xxx set acode yyy list [catch {testasync mark $handler1 "original" 0} msg] $msg \ $acode $aresult } {0 {new result} 0 original} -test async-1.2 {basic async handlers} { +test async-1.2 {basic async handlers} testasync { set aresult xxx set acode yyy list [catch {testasync mark $handler1 "original" 1} msg] $msg \ $acode $aresult } {0 {new result} 1 original} -test async-1.3 {basic async handlers} { +test async-1.3 {basic async handlers} testasync { set aresult xxx set acode yyy list [catch {testasync mark $handler2 "old" 0} msg] $msg \ $acode $aresult } {1 xyzzy 0 old} -test async-1.4 {basic async handlers} { +test async-1.4 {basic async handlers} testasync { set aresult xxx set acode yyy list [catch {testasync mark $handler2 "old" 3} msg] $msg \ $acode $aresult } {1 xyzzy 3 old} -test async-1.5 {basic async handlers} { +test async-1.5 {basic async handlers} testasync { set aresult xxx list [catch {testasync mark $handler3 "foobar" 0} msg] $msg $aresult } {0 foobar {test pattern}} -test async-1.6 {basic async handlers} { +test async-1.6 {basic async handlers} testasync { set aresult xxx list [catch {testasync mark $handler3 "foobar" 1} msg] $msg $aresult } {1 foobar {test pattern}} +test async-1.7 {basic async handlers} testasync { + set aresult xxx + set acode yyy + list [catch {testasync mark $handler4 "original" 0} msg] $msg \ + $acode $aresult +} {0 {comment quoting} 0 original} proc mult1 {result code} { global x lappend x mult1 return -code 7 mult1 } -set hm1 [testasync create mult1] proc mult2 {result code} { global x lappend x mult2 return -code 9 mult2 } -set hm2 [testasync create mult2] proc mult3 {result code} { global x hm1 hm2 lappend x [catch {testasync mark $hm2 serial2 0}] @@ -96,9 +107,12 @@ proc mult3 {result code} { lappend x mult3 return -code 11 mult3 } -set hm3 [testasync create mult3] - -test async-2.1 {multiple handlers} { +if {[testConstraint testasync]} { + set hm1 [testasync create mult1] + set hm2 [testasync create mult2] + set hm3 [testasync create mult3] +} +test async-2.1 {multiple handlers} testasync { set x {} list [catch {testasync mark $hm3 "foobar" 5} msg] $msg $x } {9 mult2 {0 0 mult3 mult1 mult2}} @@ -119,31 +133,87 @@ proc del2 {result code} { lappend x del2 return -code 3 del2 } -testasync delete $handler1 -testasync delete $hm2 -testasync delete $hm3 -set hm2 [testasync create del1] -set hm3 [testasync create mult2] -set hm4 [testasync create del2] +if {[testConstraint testasync]} { + testasync delete $handler1 + testasync delete $hm2 + testasync delete $hm3 + set hm2 [testasync create del1] + set hm3 [testasync create mult2] + set hm4 [testasync create del2] +} -test async-3.1 {deleting handlers} { +test async-3.1 {deleting handlers} testasync { set x {} list [catch {testasync mark $hm2 "foobar" 5} msg] $msg $x } {3 del2 {0 0 0 del1 del2}} +proc nothing {} { + # empty proc +} +proc hang1 {handle} { + global aresult + set aresult {Async event not delivered} + testasync marklater $handle + for {set i 0} { + $i < 2500000 && $aresult eq "Async event not delivered" + } {incr i} { + nothing + } + return $aresult +} +proc hang2 {handle} { + global aresult + set aresult {Async event not delivered} + testasync marklater $handle + for {set i 0} { + $i < 2500000 && $aresult eq "Async event not delivered" + } {incr i} {} + return $aresult +} +proc hang3 {handle} [concat { + global aresult + set aresult {Async event not delivered} + testasync marklater $handle + set i 0 +} "[string repeat {;incr i;} 1500000]after 10;" { + return $aresult +}] + +test async-4.1 {async interrupting bytecode sequence} -constraints { + testasync threaded +} -setup { + set hm [testasync create async3] +} -body { + hang1 $hm +} -result {test pattern} -cleanup { + testasync delete $hm +} +test async-4.2 {async interrupting straight bytecode sequence} -constraints { + testasync threaded +} -setup { + set hm [testasync create async3] +} -body { + hang2 $hm +} -result {test pattern} -cleanup { + testasync delete $hm +} +test async-4.3 {async interrupting loop-less bytecode sequence} -constraints { + testasync threaded +} -setup { + set hm [testasync create async3] +} -body { + hang3 $hm +} -result {test pattern} -cleanup { + testasync delete $hm +} + # cleanup -testasync delete +if {[testConstraint testasync]} { + testasync delete +} ::tcltest::cleanupTests return - - - - - - - - - - - +# Local Variables: +# mode: tcl +# End: diff --git a/tests/basic.test b/tests/basic.test index e769a00..318e5c4 100644 --- a/tests/basic.test +++ b/tests/basic.test @@ -18,16 +18,11 @@ package require tcltest 2 namespace import -force ::tcltest::* +testConstraint testevalex [llength [info commands testevalex]] testConstraint testcmdtoken [llength [info commands testcmdtoken]] -testConstraint testcmdtrace [llength [info commands testcmdtrace]] testConstraint testcreatecommand [llength [info commands testcreatecommand]] -testConstraint testevalex [llength [info commands testevalex]] testConstraint exec [llength [info commands exec]] -# This variable needs to be changed when the major or minor version number for -# Tcl changes. -set tclvers 8.4 - catch {namespace delete test_ns_basic} catch {interp delete test_interp} catch {rename p ""} @@ -157,7 +152,7 @@ test basic-12.2 {Tcl_HideCommand, a hidden cmd remembers its containing namespac [namespace delete test_ns_basic] } {:: {} 1 {invalid command name "cmd"} {} :: {}} -test basic-13.1 {Tcl_ExposeCommand, a command stays in the global namespace and can not go to another namespace} { +test basic-13.1 {Tcl_ExposeCommand, a command stays in the global namespace and cannot go to another namespace} { catch {namespace delete test_ns_basic} catch {rename cmd ""} proc cmd {} { ;# note that this is global @@ -184,7 +179,7 @@ test basic-13.1 {Tcl_ExposeCommand, a command stays in the global namespace and [test_ns_basic::exposeCmdWorkAround] \ [test_ns_basic::newCmd] \ [namespace delete test_ns_basic] -} {:: {} 1 {can not expose to a namespace (use expose to toplevel, then rename)} {} ::test_ns_basic {}} +} {:: {} 1 {cannot expose to a namespace (use expose to toplevel, then rename)} {} ::test_ns_basic {}} test basic-13.2 {Tcl_ExposeCommand, invalidate cached refs to cmd now being exposed} { catch {rename p ""} catch {rename cmd ""} @@ -204,13 +199,13 @@ test basic-13.2 {Tcl_ExposeCommand, invalidate cached refs to cmd now being expo } {42 {} {} Hello {} {} 42} test basic-14.1 {Tcl_CreateCommand, new cmd goes into a namespace specified in its name, if any} {testcreatecommand} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [testcreatecommand create] \ [test_ns_basic::createdcommand] \ [testcreatecommand delete] } {{} {CreatedCommandProc in ::test_ns_basic} {}} test basic-14.2 {Tcl_CreateCommand, namespace code ignore single ":"s in middle or end of names} {testcreatecommand} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename value:at: ""} list [testcreatecommand create2] \ [value:at:] \ @@ -218,7 +213,7 @@ test basic-14.2 {Tcl_CreateCommand, namespace code ignore single ":"s in middle } {{} {CreatedCommandProc2 in ::} {}} test basic-15.1 {Tcl_CreateObjCommand, new cmd goes into a namespace specified in its name, if any} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_basic {} proc test_ns_basic::cmd {} { ;# proc requires that ns already exist return [namespace current] @@ -234,7 +229,7 @@ test basic-17.1 {TclInvokeObjCommand} {emptyTest} { } {} test basic-18.1 {TclRenameCommand, name of existing cmd can have namespace qualifiers} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename cmd ""} namespace eval test_ns_basic { proc p {} { @@ -246,11 +241,11 @@ test basic-18.1 {TclRenameCommand, name of existing cmd can have namespace quali [test_ns_basic::q] } {{p in ::test_ns_basic} {} {p in ::test_ns_basic}} test basic-18.2 {TclRenameCommand, existing cmd must be found} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {rename test_ns_basic::p test_ns_basic::q} msg] $msg } {1 {can't rename "test_ns_basic::p": command doesn't exist}} test basic-18.3 {TclRenameCommand, delete cmd if new name is empty} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_basic { proc p {} { return "p in [namespace current]" @@ -261,7 +256,7 @@ test basic-18.3 {TclRenameCommand, delete cmd if new name is empty} { [info commands test_ns_basic::*] } {::test_ns_basic::p {} {}} test basic-18.4 {TclRenameCommand, bad new name} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_basic { proc p {} { return "p in [namespace current]" @@ -278,7 +273,7 @@ test basic-18.5 {TclRenameCommand, new name must not already exist} { list [catch {rename test_ns_basic::q :::george::martha} msg] $msg } {1 {can't rename to ":::george::martha": command already exists}} test basic-18.6 {TclRenameCommand, check for command shadowing by newly renamed cmd} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename p ""} catch {rename q ""} proc p {} { @@ -301,7 +296,7 @@ test basic-19.1 {Tcl_SetCommandInfo} {emptyTest} { } {} test basic-20.1 {Tcl_GetCommandInfo, names for commands created inside namespaces} {testcmdtoken} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename p ""} catch {rename q ""} catch {unset x} @@ -320,12 +315,17 @@ test basic-20.2 {Tcl_GetCommandInfo, names for commands created outside namespac [rename test_ns_basic::test_ns_basic2::p q] \ [testcmdtoken name $x] } {{p ::test_ns_basic::test_ns_basic2::p} {} {q ::q}} +test basic-20.3 {Tcl_GetCommandInfo, #-quoting} testcmdtoken { + catch {rename \# ""} + set x [testcmdtoken create \#] + testcmdtoken name $x +} {{#} ::#} test basic-21.1 {Tcl_GetCommandName} {emptyTest} { } {} test basic-22.1 {Tcl_GetCommandFullName} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_basic1 { namespace export cmd* proc cmd1 {} {} @@ -371,7 +371,7 @@ test basic-24.1 {Tcl_DeleteCommandFromToken, invalidate all compiled code if cmd [interp delete test_interp] } {123 {set called with a 123} {}} test basic-24.2 {Tcl_DeleteCommandFromToken, deleting commands changes command epoch} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename p ""} proc p {} { return "global p" @@ -389,7 +389,7 @@ test basic-24.2 {Tcl_DeleteCommandFromToken, deleting commands changes command e [test_ns_basic::callP] } {{namespace p} {} {global p}} test basic-24.3 {Tcl_DeleteCommandFromToken, delete imported cmds that refer to a deleted cmd} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename p ""} namespace eval test_ns_basic { namespace export p @@ -411,31 +411,38 @@ test basic-24.3 {Tcl_DeleteCommandFromToken, delete imported cmds that refer to test basic-25.1 {TclCleanupCommand} {emptyTest} { } {} -test basic-26.1 {Tcl_EvalObj: preserve object while evaling it} { +test basic-26.1 {Tcl_EvalObj: preserve object while evaling it} -setup { + proc myHandler {msg options} { + set ::x [dict get $options -errorinfo] + } + set handler [interp bgerror {}] + interp bgerror {} [namespace which myHandler] + set fName [makeFile {} test1] +} -body { # If object isn't preserved, errorInfo would be set to # "foo\n while executing\n\"garbage bytes\"" because the object's # string would have been freed, leaving garbage bytes for the error # message. - - proc bgerror {args} {set ::x $::errorInfo} - set fName [makeFile {} test1] set f [open $fName w] fileevent $f writable "fileevent $f writable {}; error foo" set x {} vwait x close $f - removeFile test1 - rename bgerror {} set x -} "foo\n while executing\n\"error foo\"" +} -cleanup { + removeFile test1 + interp bgerror {} $handler + rename myHandler {} +} -result "foo\n while executing\n\"error foo\"" -test basic-26.2 {Tcl_EvalObjEx, pure-list branch: preserve "objv"} { +test basic-26.2 {Tcl_EvalObjEx, pure-list branch: preserve "objv"} -body { # # Follow the pure-list branch in a manner that # a - the pure-list internal rep is destroyed by shimmering # b - the command returns an error # As the error code in Tcl_EvalObjv accesses the list elements, this will - # cause a segfault if [Bug 1119369] has not been fixed. + # cause a segfault if [Bug 1119369] has not been fixed. + # NOTE: a MEM_DEBUG build may be necessary to guarantee the segfault. # set SRC [list foo 1] ;# pure-list command @@ -445,7 +452,33 @@ test basic-26.2 {Tcl_EvalObjEx, pure-list branch: preserve "objv"} { error "BAD CALL" } catch {eval $SRC} -} 1 +} -result 1 -cleanup { + rename foo {} + rename $::SRC {} + unset ::SRC +} + +test basic-26.3 {Tcl_EvalObjEx, pure-list branch: preserve "objv"} -body { + # + # Follow the pure-list branch in a manner that + # a - the pure-list internal rep is destroyed by shimmering + # b - the command accesses its command line + # This will cause a segfault if [Bug 1119369] has not been fixed. + # NOTE: a MEM_DEBUG build may be necessary to guarantee the segfault. + # + + set SRC [list foo 1] ;# pure-list command + proc foo str { + # Shimmer pure-list to cmdName, cleanup and error + proc $::SRC {} {}; $::SRC + info level 0 + } + catch {eval $SRC} +} -result 0 -cleanup { + rename foo {} + rename $::SRC {} + unset ::SRC +} test basic-27.1 {Tcl_ExprLong} {emptyTest} { } {} @@ -465,17 +498,8 @@ test basic-31.1 {Tcl_ExprDoubleObj} {emptyTest} { test basic-32.1 {Tcl_ExprBooleanObj} {emptyTest} { } {} -test basic-33.1 {TclInvoke} {emptyTest} { -} {} - -test basic-34.1 {TclGlobalInvoke} {emptyTest} { -} {} - -test basic-35.1 {TclObjInvokeGlobal} {emptyTest} { -} {} - -test basic-36.1 {TclObjInvoke, lookup of "unknown" command} { - catch {eval namespace delete [namespace children :: test_ns_*]} +test basic-36.1 {Tcl_EvalObjv, lookup of "unknown" command} { + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {interp delete test_interp} interp create test_interp interp eval test_interp { @@ -499,75 +523,7 @@ test basic-37.1 {Tcl_ExprString: see expr.test} {emptyTest} { test basic-38.1 {Tcl_ExprObj} {emptyTest} { } {} -test basic-39.1 {Tcl_CreateTrace, correct command and argc/argv arguments of trace proc} {testcmdtrace} { - testcmdtrace tracetest {set stuff [expr 14 + 16]} -} {{expr 14 + 16} {expr 14 + 16} {set stuff [expr 14 + 16]} {set stuff 30}} -test basic-39.2 {Tcl_CreateTrace, correct command and argc/argv arguments of trace proc} {testcmdtrace} { - testcmdtrace tracetest {set stuff [info tclversion]} -} [list {info tclversion} {info tclversion} {set stuff [info tclversion]} "set stuff $tclvers"] -test basic-39.3 {Tcl_CreateTrace, correct command and argc/argv arguments of trace proc} {testcmdtrace} { - testcmdtrace deletetest {set stuff [info tclversion]} -} $tclvers -test basic-39.4 {Tcl_CreateTrace, check that tracing doesn't cause memory faults} {testcmdtrace} { - # Note that the proc call is the same as the variable name, and that - # the call can be direct or indirect by way of another procedure - proc tracer {args} {} - proc tracedLoop {level} { - incr level - tracer - foreach tracer [expr {$level==1 ? {1 2} : {}}] {tracedLoop $level} - } - testcmdtrace tracetest {tracedLoop 0} -} {{tracedLoop 0} {tracedLoop 0} {incr level} {incr level} tracer {tracer} {expr {$level==1 ? {1 2} : {}}} {expr {$level==1 ? {1 2} : {}}} {foreach tracer [expr {$level==1 ? {1 2} : {}}] {tracedLoop $level}} {foreach tracer {1 2} {tracedLoop $level}} {tracedLoop $level} {tracedLoop 1} {incr level} {incr level} tracer {tracer} {expr {$level==1 ? {1 2} : {}}} {expr {$level==1 ? {1 2} : {}}} {foreach tracer [expr {$level==1 ? {1 2} : {}}] {tracedLoop $level}} {foreach tracer {} {tracedLoop $level}} {tracedLoop $level} {tracedLoop 1} {incr level} {incr level} tracer {tracer} {expr {$level==1 ? {1 2} : {}}} {expr {$level==1 ? {1 2} : {}}} {foreach tracer [expr {$level==1 ? {1 2} : {}}] {tracedLoop $level}} {foreach tracer {} {tracedLoop $level}}} -catch {rename tracer {}} -catch {rename tracedLoop {}} - -test basic-39.5 {Tcl_CreateObjTrace, status return TCL_ERROR} {testcmdtrace} { - proc Error { args } { error "Shouldn't get here" } - set x 1; - list [catch {testcmdtrace resulttest {Error $x}} result] [set result] -} {1 {Error $x}} - -test basic-39.6 {Tcl_CreateObjTrace, status return TCL_RETURN} {testcmdtrace} { - proc Return { args } { error "Shouldn't get here" } - set x 1; - list [catch {testcmdtrace resulttest {Return $x}} result] [set result] -} {2 {}} - -test basic-39.7 {Tcl_CreateObjTrace, status return TCL_BREAK} {testcmdtrace} { - proc Break { args } { error "Shouldn't get here" } - set x 1; - list [catch {testcmdtrace resulttest {Break $x}} result] [set result] -} {3 {}} - -test basic-39.8 {Tcl_CreateObjTrace, status return TCL_CONTINUE} {testcmdtrace} { - proc Continue { args } { error "Shouldn't get here" } - set x 1; - list [catch {testcmdtrace resulttest {Continue $x}} result] [set result] -} {4 {}} - -test basic-39.9 {Tcl_CreateObjTrace, status return unknown} {testcmdtrace} { - proc OtherStatus { args } { error "Shouldn't get here" } - set x 1; - list [catch {testcmdtrace resulttest {OtherStatus $x}} result] [set result] -} {6 {}} - -test basic-39.10 {Tcl_CreateTrace, correct level interpretation} {testcmdtrace} { - proc foo {} {uplevel 1 bar} - proc bar {} {uplevel 1 grok} - proc grok {} {uplevel 1 spock} - proc spock {} {uplevel 1 fascinating} - proc fascinating {} {} - testcmdtrace leveltest {foo} -} {foo {foo} {uplevel 1 bar} {uplevel 1 bar} bar {bar} {uplevel 1 grok} {uplevel 1 grok}} - -test basic-39.11 {Tcl_CreateTrace, multiple traces} {testcmdtrace} { - testcmdtrace doubletest {format xx} -} {{format xx} {format xx}} - -test basic-40.1 {Tcl_DeleteTrace} {emptyTest} { - # the above tests have tested Tcl_DeleteTrace -} {} +# Tests basic-39.* and basic-40.* refactored into trace.test test basic-41.1 {Tcl_AddErrorInfo} {emptyTest} { } {} @@ -591,7 +547,7 @@ test basic-46.1 {Tcl_AllowExceptions: exception return not allowed} {stdio} { fconfigure $f -buffering line puts $f {fconfigure stdout -buffering line} puts $f continue - puts $f {puts $errorInfo} + puts $f {puts $::errorInfo} puts $f {puts DONE} set newMsg {} set msg {} @@ -676,28 +632,335 @@ test basic-47.1 {Tcl_EvalEx: check for missing close-bracket} -body { subst {a[set b [format cd]} } -returnCodes error -result {missing close-bracket} +# Some lists for expansion tests to work with +set l1 [list a {b b} c d] +set l2 [list e f {g g} h] +proc l3 {} { + list i j k {l l} +} + +# Do all tests once byte compiled and once with direct string evaluation +for {set noComp 0} {$noComp <= 1} {incr noComp} { + +if $noComp { + interp alias {} run {} testevalex + set constraints testevalex +} else { + interp alias {} run {} if 1 + set constraints {} +} + +test basic-47.2.$noComp {Tcl_EvalEx: error during word expansion} -body { + run {{*}\{} +} -constraints $constraints -returnCodes error -result {unmatched open brace in list} + +test basic-47.3.$noComp {Tcl_EvalEx, error during substitution} -body { + run {{*}[error foo]} +} -constraints $constraints -returnCodes error -result foo + +test basic-47.4.$noComp {Tcl_EvalEx: no expansion} $constraints { + run {list {*} {*} {*}} +} {* * *} + +test basic-47.5.$noComp {Tcl_EvalEx: expansion} $constraints { + run {list {*}{} {*} {*}x {*}"y z"} +} {* x y z} + +test basic-47.6.$noComp {Tcl_EvalEx: expansion to zero args} $constraints { + run {list {*}{}} +} {} + +test basic-47.7.$noComp {Tcl_EvalEx: expansion to one arg} $constraints { + run {list {*}x} +} x + +test basic-47.8.$noComp {Tcl_EvalEx: expansion to many args} $constraints { + run {list {*}"y z"} +} {y z} + +test basic-47.9.$noComp {Tcl_EvalEx: expansion and subst order} $constraints { + set x 0 + run {list [incr x] {*}[incr x] [incr x] \ + {*}[list [incr x] [incr x]] [incr x]} +} {1 2 3 4 5 6} + +test basic-47.10.$noComp {Tcl_EvalEx: expand and memory management} $constraints { + run {concat {*}{} a b c d e f g h i j k l m n o p q r} +} {a b c d e f g h i j k l m n o p q r} + +test basic-47.11.$noComp {Tcl_EvalEx: expand and memory management} $constraints { + run {concat {*}1 a b c d e f g h i j k l m n o p q r} +} {1 a b c d e f g h i j k l m n o p q r} + +test basic-47.12.$noComp {Tcl_EvalEx: expand and memory management} $constraints { + run {concat {*}{1 2} a b c d e f g h i j k l m n o p q r} +} {1 2 a b c d e f g h i j k l m n o p q r} + +test basic-47.13.$noComp {Tcl_EvalEx: expand and memory management} $constraints { + run {concat {*}{} {*}{1 2} a b c d e f g h i j k l m n o p q} +} {1 2 a b c d e f g h i j k l m n o p q} + +test basic-47.14.$noComp {Tcl_EvalEx: expand and memory management} $constraints { + run {concat {*}{} a b c d e f g h i j k l m n o p q r s} +} {a b c d e f g h i j k l m n o p q r s} + +test basic-47.15.$noComp {Tcl_EvalEx: expand and memory management} $constraints { + run {concat {*}1 a b c d e f g h i j k l m n o p q r s} +} {1 a b c d e f g h i j k l m n o p q r s} + +test basic-47.16.$noComp {Tcl_EvalEx: expand and memory management} $constraints { + run {concat {*}{1 2} a b c d e f g h i j k l m n o p q r s} +} {1 2 a b c d e f g h i j k l m n o p q r s} + +test basic-47.17.$noComp {Tcl_EvalEx: expand and memory management} $constraints { + run {concat {*}{} {*}{1 2} a b c d e f g h i j k l m n o p q r} +} {1 2 a b c d e f g h i j k l m n o p q r} + +test basic-48.1.$noComp {expansion: parsing} $constraints { + run { # A comment + + # Another comment + list 1 2\ + 3 {*}$::l1 + + # Comment again + } +} {1 2 3 a {b b} c d} + +test basic-48.2.$noComp {no expansion} $constraints { + run {list $::l1 $::l2 [l3]} +} {{a {b b} c d} {e f {g g} h} {i j k {l l}}} + +test basic-48.3.$noComp {expansion} $constraints { + run {list {*}$::l1 $::l2 {*}[l3]} +} {a {b b} c d {e f {g g} h} i j k {l l}} + +test basic-48.4.$noComp {expansion: really long cmd} $constraints { + set cmd [list list] + for {set t 0} {$t < 500} {incr t} { + lappend cmd {{*}$::l1} + } + llength [run [join $cmd]] +} 2000 + +test basic-48.5.$noComp {expansion: error detection} -setup { + set l "a {a b}x y" +} -constraints $constraints -body { + run {list $::l1 {*}$l} +} -cleanup { + unset l +} -returnCodes 1 -result {list element in braces followed by "x" instead of space} + +test basic-48.6.$noComp {expansion: odd usage} $constraints { + run {list {*}$::l1$::l2} +} {a {b b} c de f {g g} h} + +test basic-48.7.$noComp {expansion: odd usage} -constraints $constraints -body { + run {list {*}[l3]$::l1} +} -returnCodes 1 -result {list element in braces followed by "a" instead of space} + +test basic-48.8.$noComp {expansion: odd usage} $constraints { + run {list {*}hej$::l1} +} {heja {b b} c d} + +test basic-48.9.$noComp {expansion: Not all {*} should trigger} $constraints { + run {list {*}$::l1 \{*\}$::l2 "{*}$::l1" {{*} i j k}} +} {a {b b} c d {{*}e f {g g} h} {{*}a {b b} c d} {{*} i j k}} + +test basic-48.10.$noComp {expansion: expansion of command word} -setup { + set cmd [list string range jultomte] +} -constraints $constraints -body { + run {{*}$cmd 2 6} +} -cleanup { + unset cmd +} -result ltomt + +test basic-48.11.$noComp {expansion: expansion into nothing} -setup { + set cmd {} + set bar {} +} -constraints $constraints -body { + run {{*}$cmd {*}$bar} +} -cleanup { + unset cmd bar +} -result {} + +test basic-48.12.$noComp {expansion: odd usage} $constraints { + run {list {*}$::l1 {*}"hej hopp" {*}$::l2} +} {a {b b} c d hej hopp e f {g g} h} + +test basic-48.13.$noComp {expansion: odd usage} $constraints { + run {list {*}$::l1 {*}{hej hopp} {*}$::l2} +} {a {b b} c d hej hopp e f {g g} h} + +test basic-48.14.$noComp {expansion: hash command} -setup { + catch {rename \# ""} + set cmd "#" + } -constraints $constraints -body { + run { {*}$cmd apa bepa } + } -cleanup { + unset cmd +} -returnCodes 1 -result {invalid command name "#"} + +test basic-48.15.$noComp {expansion: complex words} -setup { + set a(x) [list a {b c} d e] + set b x + set c [list {f\ g h\ i j k} x y] + set d {0\ 1 2 3} + } -constraints $constraints -body { + run { lappend d {*}$a($b) {*}[lindex $c 0] } + } -cleanup { + unset a b c d +} -result {{0 1} 2 3 a {b c} d e {f g} {h i} j k} + +testConstraint memory [llength [info commands memory]] +test basic-48.16.$noComp {expansion: testing for leaks} -setup { + proc getbytes {} { + set lines [split [memory info] "\n"] + lindex [lindex $lines 3] 3 + } + # This test is made to stress the allocation, reallocation and + # object reference management in Tcl_EvalEx. + proc stress {} { + set a x + # Create free objects that should disappear + set l [list 1$a 2$a 3$a 4$a 5$a 6$a 7$a] + # A short number of words and a short result (8) + set l [run {list {*}$l $a$a}] + # A short number of words and a longer result (27) + set l [run {list {*}$l $a$a {*}$l $a$a {*}$l $a$a}] + # A short number of words and a longer result, with an error + # This is to stress the cleanup in the error case + if {![catch {run {_moo_ {*}$l $a$a {*}$l $a$a {*}$l}}]} { + error "An error was expected in the previous statement" + } + # Many words + set l [run {list {*}$l $a$a {*}$l $a$a \ + {*}$l $a$a {*}$l $a$a \ + {*}$l $a$a {*}$l $a$a \ + {*}$l $a$a {*}$l $a$a \ + {*}$l $a$a {*}$l $a$a \ + {*}$l $a$a {*}$l $a$a \ + {*}$l $a$a {*}$l $a$a \ + {*}$l $a$a {*}$l $a$a \ + {*}$l $a$a {*}$l $a$a \ + {*}$l $a$a}] + + if {[llength $l] != 19*28} { + error "Bad Length: [llength $l] should be [expr {19*28}]" + } + } + } -constraints [linsert $constraints 0 memory] -body { + set end [getbytes] + for {set i 0} {$i < 5} {incr i} { + stress + set tmp $end + set end [getbytes] + } + set leak [expr {$end - $tmp}] + } -cleanup { + unset end i tmp + rename getbytes {} + rename stress {} +} -result 0 + +test basic-48.17.$noComp {expansion: object safety} -setup { + set old_precision $::tcl_precision + set ::tcl_precision 4 + } -constraints $constraints -body { + set third [expr {1.0/3.0}] + set l [list $third $third] + set x [run {list $third {*}$l $third}] + set res [list] + foreach t $x { + lappend res [expr {$t * 3.0}] + } + set res + } -cleanup { + set ::tcl_precision $old_precision + unset old_precision res t l x third +} -result {1.0 1.0 1.0 1.0} + +test basic-48.18.$noComp {expansion: list semantics} -constraints $constraints -body { + set badcmd { + list a b + set apa 10 + } + set apa 0 + list [llength [run { {*}$badcmd }]] $apa + } -cleanup { + unset apa badcmd +} -result {5 0} + +test basic-48.19.$noComp {expansion: error checking order} -body { + set badlist "a {}x y" + set a 0 + set b 0 + catch {run {list [incr a] {*}$badlist [incr b]}} + list $a $b + } -constraints $constraints -cleanup { + unset badlist a b +} -result {1 0} + +test basic-48.20.$noComp {expansion: odd case with word boundaries} $constraints { + run {list {*}$::l1 {*}"hej hopp" {*}$::l2} +} {a {b b} c d hej hopp e f {g g} h} + +test basic-48.21.$noComp {expansion: odd case with word boundaries} $constraints { + run {list {*}$::l1 {*}{hej hopp} {*}$::l2} +} {a {b b} c d hej hopp e f {g g} h} + +test basic-48.22.$noComp {expansion: odd case with word boundaries} -body { + run {list {*}$::l1 {*}"hej hopp {*}$::l2} +} -constraints $constraints -returnCodes error -result {missing "} + +test basic-48.23.$noComp {expansion: handle return codes} -constraints $constraints -body { + set res {} + for {set t 0} {$t < 10} {incr t} { + run { {*}break } + } + lappend res $t + + for {set t 0} {$t < 10} {incr t} { + run { {*}continue } + set t 20 + } + lappend res $t + + lappend res [catch { run { {*}{error Hejsan} } } err] + lappend res $err + } -cleanup { + unset res t +} -result {0 10 1 Hejsan} + +} ;# End of noComp loop + test basic-49.1 {Tcl_EvalEx: verify TCL_EVAL_GLOBAL operation} testevalex { set ::x global namespace eval ns { - variable x namespace - testevalex {set x changed} global - set ::result [list $::x $x] - } + variable x namespace + testevalex {set x changed} global + set ::result [list $::x $x] + } namespace delete ns set ::result } {changed namespace} test basic-49.2 {Tcl_EvalEx: verify TCL_EVAL_GLOBAL operation} testevalex { set ::x global namespace eval ns { - variable x namespace - testevalex {set ::context $x} global + variable x namespace + testevalex {set ::context $x} global } namespace delete ns set ::context } {global} -# cleanup -catch {eval namespace delete [namespace children :: test_ns_*]} +# Clean up after expand tests +unset noComp l1 l2 constraints +rename l3 {} +rename run {} + + #cleanup +catch {namespace delete {*}[namespace children :: test_ns_*]} catch {namespace delete george} catch {interp delete test_interp} catch {rename p ""} diff --git a/tests/binary.test b/tests/binary.test index d2cbb1f..e43b9f4 100644 --- a/tests/binary.test +++ b/tests/binary.test @@ -14,6 +14,8 @@ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } +testConstraint bigEndian [expr {$tcl_platform(byteOrder) eq "bigEndian"}] +testConstraint littleEndian [expr {$tcl_platform(byteOrder) eq "littleEndian"}] test binary-0.1 {DupByteArrayInternalRep} { set hdr [binary format cc 0 0316] @@ -424,40 +426,40 @@ test binary-13.2 {Tcl_BinaryObjCmd: format} { test binary-13.3 {Tcl_BinaryObjCmd: format} { binary format f0 1.6 } {} -test binary-13.4 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} { +test binary-13.4 {Tcl_BinaryObjCmd: format} bigEndian { binary format f 1.6 } \x3f\xcc\xcc\xcd -test binary-13.5 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} { +test binary-13.5 {Tcl_BinaryObjCmd: format} littleEndian { binary format f 1.6 } \xcd\xcc\xcc\x3f -test binary-13.6 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} { +test binary-13.6 {Tcl_BinaryObjCmd: format} bigEndian { binary format f* {1.6 3.4} } \x3f\xcc\xcc\xcd\x40\x59\x99\x9a -test binary-13.7 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} { +test binary-13.7 {Tcl_BinaryObjCmd: format} littleEndian { binary format f* {1.6 3.4} } \xcd\xcc\xcc\x3f\x9a\x99\x59\x40 -test binary-13.8 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} { +test binary-13.8 {Tcl_BinaryObjCmd: format} bigEndian { binary format f2 {1.6 3.4} } \x3f\xcc\xcc\xcd\x40\x59\x99\x9a -test binary-13.9 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} { +test binary-13.9 {Tcl_BinaryObjCmd: format} littleEndian { binary format f2 {1.6 3.4} } \xcd\xcc\xcc\x3f\x9a\x99\x59\x40 -test binary-13.10 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} { +test binary-13.10 {Tcl_BinaryObjCmd: format} bigEndian { binary format f2 {1.6 3.4 5.6} } \x3f\xcc\xcc\xcd\x40\x59\x99\x9a -test binary-13.11 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} { +test binary-13.11 {Tcl_BinaryObjCmd: format} littleEndian { binary format f2 {1.6 3.4 5.6} } \xcd\xcc\xcc\x3f\x9a\x99\x59\x40 -test binary-13.12 {Tcl_BinaryObjCmd: float overflow} {nonPortable macOrUnix} { +test binary-13.12 {Tcl_BinaryObjCmd: float overflow} bigEndian { binary format f -3.402825e+38 } \xff\x7f\xff\xff -test binary-13.13 {Tcl_BinaryObjCmd: float overflow} {nonPortable pcOnly} { +test binary-13.13 {Tcl_BinaryObjCmd: float overflow} littleEndian { binary format f -3.402825e+38 } \xff\xff\x7f\xff -test binary-13.14 {Tcl_BinaryObjCmd: float underflow} {nonPortable macOrUnix} { +test binary-13.14 {Tcl_BinaryObjCmd: float underflow} bigEndian { binary format f -3.402825e-100 } \x80\x00\x00\x00 -test binary-13.15 {Tcl_BinaryObjCmd: float underflow} {nonPortable pcOnly} { +test binary-13.15 {Tcl_BinaryObjCmd: float underflow} littleEndian { binary format f -3.402825e-100 } \x00\x00\x00\x80 test binary-13.16 {Tcl_BinaryObjCmd: format} { @@ -467,11 +469,11 @@ test binary-13.17 {Tcl_BinaryObjCmd: format} { set a {1.6 3.4} list [catch {binary format f $a} msg] $msg } [list 1 "expected floating-point number but got \"1.6 3.4\""] -test binary-13.18 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} { +test binary-13.18 {Tcl_BinaryObjCmd: format} bigEndian { set a {1.6 3.4} binary format f1 $a } \x3f\xcc\xcc\xcd -test binary-13.19 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} { +test binary-13.19 {Tcl_BinaryObjCmd: format} littleEndian { set a {1.6 3.4} binary format f1 $a } \xcd\xcc\xcc\x3f @@ -485,33 +487,30 @@ test binary-14.2 {Tcl_BinaryObjCmd: format} { test binary-14.3 {Tcl_BinaryObjCmd: format} { binary format d0 1.6 } {} -test binary-14.4 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} { +test binary-14.4 {Tcl_BinaryObjCmd: format} bigEndian { binary format d 1.6 } \x3f\xf9\x99\x99\x99\x99\x99\x9a -test binary-14.5 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} { +test binary-14.5 {Tcl_BinaryObjCmd: format} littleEndian { binary format d 1.6 } \x9a\x99\x99\x99\x99\x99\xf9\x3f -test binary-14.6 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} { +test binary-14.6 {Tcl_BinaryObjCmd: format} bigEndian { binary format d* {1.6 3.4} } \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33 -test binary-14.7 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} { +test binary-14.7 {Tcl_BinaryObjCmd: format} littleEndian { binary format d* {1.6 3.4} } \x9a\x99\x99\x99\x99\x99\xf9\x3f\x33\x33\x33\x33\x33\x33\x0b\x40 -test binary-14.8 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} { +test binary-14.8 {Tcl_BinaryObjCmd: format} bigEndian { binary format d2 {1.6 3.4} } \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33 -test binary-14.9 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} { +test binary-14.9 {Tcl_BinaryObjCmd: format} littleEndian { binary format d2 {1.6 3.4} } \x9a\x99\x99\x99\x99\x99\xf9\x3f\x33\x33\x33\x33\x33\x33\x0b\x40 -test binary-14.10 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} { +test binary-14.10 {Tcl_BinaryObjCmd: format} bigEndian { binary format d2 {1.6 3.4 5.6} } \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33 -test binary-14.11 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} { +test binary-14.11 {Tcl_BinaryObjCmd: format} littleEndian { binary format d2 {1.6 3.4 5.6} } \x9a\x99\x99\x99\x99\x99\xf9\x3f\x33\x33\x33\x33\x33\x33\x0b\x40 -test binary-14.12 {Tcl_BinaryObjCmd: float overflow} {nonPortable unixOnly} { - binary format d NaN -} \x7f\xff\xff\xff\xff\xff\xff\xff test binary-14.14 {Tcl_BinaryObjCmd: format} { list [catch {binary format d2 {1.6}} msg] $msg } {1 {number of elements in list does not match count}} @@ -519,11 +518,11 @@ test binary-14.15 {Tcl_BinaryObjCmd: format} { set a {1.6 3.4} list [catch {binary format d $a} msg] $msg } [list 1 "expected floating-point number but got \"1.6 3.4\""] -test binary-14.16 {Tcl_BinaryObjCmd: format} {nonPortable macOrUnix} { +test binary-14.16 {Tcl_BinaryObjCmd: format} bigEndian { set a {1.6 3.4} binary format d1 $a } \x3f\xf9\x99\x99\x99\x99\x99\x9a -test binary-14.17 {Tcl_BinaryObjCmd: format} {nonPortable pcOnly} { +test binary-14.17 {Tcl_BinaryObjCmd: format} littleEndian { set a {1.6 3.4} binary format d1 $a } \x9a\x99\x99\x99\x99\x99\xf9\x3f @@ -916,6 +915,30 @@ test binary-26.10 {Tcl_BinaryObjCmd: scan} { set arg2 bar list [binary scan \x70\x87\x05 c2c* arg1 arg2] $arg1 $arg2 } {2 {112 -121} 5} +test binary-26.11 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1} + list [binary scan \x52\xa3 cu* arg1] $arg1 +} {1 {82 163}} +test binary-26.12 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1} + list [binary scan \x52\xa3 cu arg1] $arg1 +} {1 82} +test binary-26.13 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1} + list [binary scan \xff cu arg1] $arg1 +} {1 255} +test binary-26.14 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x80\x80 cuc arg1 arg2] $arg1 $arg2 +} {2 128 -128} +test binary-26.15 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x80\x80 ccu arg1 arg2] $arg1 $arg2 +} {2 -128 128} test binary-27.1 {Tcl_BinaryObjCmd: scan} { list [catch {binary scan abc s} msg] $msg @@ -956,6 +979,22 @@ test binary-27.9 {Tcl_BinaryObjCmd: scan} { set arg2 bar list [binary scan \x52\xa3\x53\x54\x05 s2c* arg1 arg2] $arg1 $arg2 } {2 {-23726 21587} 5} +test binary-27.10 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54 su* arg1] $arg1 +} {1 {41810 21587}} +test binary-27.11 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \xff\xff\xff\xff sus arg1 arg2] $arg1 $arg2 +} {2 65535 -1} +test binary-27.12 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \xff\xff\xff\xff ssu arg1 arg2] $arg1 $arg2 +} {2 -1 65535} test binary-28.1 {Tcl_BinaryObjCmd: scan} { list [catch {binary scan abc S} msg] $msg @@ -996,6 +1035,14 @@ test binary-28.9 {Tcl_BinaryObjCmd: scan} { set arg2 bar list [binary scan \x52\xa3\x53\x54\x05 S2c* arg1 arg2] $arg1 $arg2 } {2 {21155 21332} 5} +test binary-28.10 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54 Su* arg1] $arg1 +} {1 {21155 21332}} +test binary-28.11 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1} + list [binary scan \xa3\x52\x54\x53 Su* arg1] $arg1 +} {1 {41810 21587}} test binary-29.1 {Tcl_BinaryObjCmd: scan} { list [catch {binary scan abc i} msg] $msg @@ -1036,6 +1083,18 @@ test binary-29.9 {Tcl_BinaryObjCmd: scan} { set arg2 bar list [binary scan \x52\xa3\x53\x54\x01\x02\x03\x04\x05 i2c* arg1 arg2] $arg1 $arg2 } {2 {1414767442 67305985} 5} +test binary-29.10 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1 arg2} + list [binary scan \xff\xff\xff\xff\xff\xff\xff\xff iui arg1 arg2] $arg1 $arg2 +} {2 4294967295 -1} +test binary-29.11 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1 arg2} + list [binary scan \xff\xff\xff\xff\xff\xff\xff\xff iiu arg1 arg2] $arg1 $arg2 +} {2 -1 4294967295} +test binary-29.12 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1 arg2} + list [binary scan \x80\x00\x00\x00\x00\x00\x00\x80 iuiu arg1 arg2] $arg1 $arg2 +} {2 128 2147483648} test binary-30.1 {Tcl_BinaryObjCmd: scan} { list [catch {binary scan abc I} msg] $msg @@ -1076,50 +1135,62 @@ test binary-30.9 {Tcl_BinaryObjCmd: scan} { set arg2 bar list [binary scan \x52\xa3\x53\x54\x01\x02\x03\x04\x05 I2c* arg1 arg2] $arg1 $arg2 } {2 {1386435412 16909060} 5} +test binary-30.10 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1 arg2} + list [binary scan \xff\xff\xff\xff\xff\xff\xff\xff IuI arg1 arg2] $arg1 $arg2 +} {2 4294967295 -1} +test binary-30.11 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1 arg2} + list [binary scan \xff\xff\xff\xff\xff\xff\xff\xff IIu arg1 arg2] $arg1 $arg2 +} {2 -1 4294967295} +test binary-30.12 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1 arg2} + list [binary scan \x80\x00\x00\x00\x00\x00\x00\x80 IuIu arg1 arg2] $arg1 $arg2 +} {2 2147483648 128} test binary-31.1 {Tcl_BinaryObjCmd: scan} { list [catch {binary scan abc f} msg] $msg } {1 {not enough arguments for all format specifiers}} -test binary-31.2 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} { +test binary-31.2 {Tcl_BinaryObjCmd: scan} bigEndian { catch {unset arg1} list [binary scan \x3f\xcc\xcc\xcd\x40\x59\x99\x9a f* arg1] $arg1 -} {1 {1.60000002384 3.40000009537}} -test binary-31.3 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} { +} {1 {1.600000023841858 3.4000000953674316}} +test binary-31.3 {Tcl_BinaryObjCmd: scan} littleEndian { catch {unset arg1} list [binary scan \xcd\xcc\xcc\x3f\x9a\x99\x59\x40 f* arg1] $arg1 -} {1 {1.60000002384 3.40000009537}} -test binary-31.4 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} { +} {1 {1.600000023841858 3.4000000953674316}} +test binary-31.4 {Tcl_BinaryObjCmd: scan} bigEndian { catch {unset arg1} list [binary scan \x3f\xcc\xcc\xcd\x40\x59\x99\x9a f arg1] $arg1 -} {1 1.60000002384} -test binary-31.5 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} { +} {1 1.600000023841858} +test binary-31.5 {Tcl_BinaryObjCmd: scan} littleEndian { catch {unset arg1} list [binary scan \xcd\xcc\xcc\x3f\x9a\x99\x59\x40 f arg1] $arg1 -} {1 1.60000002384} -test binary-31.6 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} { +} {1 1.600000023841858} +test binary-31.6 {Tcl_BinaryObjCmd: scan} bigEndian { catch {unset arg1} list [binary scan \x3f\xcc\xcc\xcd f1 arg1] $arg1 -} {1 1.60000002384} -test binary-31.7 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} { +} {1 1.600000023841858} +test binary-31.7 {Tcl_BinaryObjCmd: scan} littleEndian { catch {unset arg1} list [binary scan \xcd\xcc\xcc\x3f f1 arg1] $arg1 -} {1 1.60000002384} -test binary-31.8 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} { +} {1 1.600000023841858} +test binary-31.8 {Tcl_BinaryObjCmd: scan} bigEndian { catch {unset arg1} list [binary scan \x3f\xcc\xcc\xcd f0 arg1] $arg1 } {1 {}} -test binary-31.9 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} { +test binary-31.9 {Tcl_BinaryObjCmd: scan} littleEndian { catch {unset arg1} list [binary scan \xcd\xcc\xcc\x3f f0 arg1] $arg1 } {1 {}} -test binary-31.10 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} { +test binary-31.10 {Tcl_BinaryObjCmd: scan} bigEndian { catch {unset arg1} list [binary scan \x3f\xcc\xcc\xcd\x40\x59\x99\x9a f2 arg1] $arg1 -} {1 {1.60000002384 3.40000009537}} -test binary-31.11 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} { +} {1 {1.600000023841858 3.4000000953674316}} +test binary-31.11 {Tcl_BinaryObjCmd: scan} littleEndian { catch {unset arg1} list [binary scan \xcd\xcc\xcc\x3f\x9a\x99\x59\x40 f2 arg1] $arg1 -} {1 {1.60000002384 3.40000009537}} +} {1 {1.600000023841858 3.4000000953674316}} test binary-31.12 {Tcl_BinaryObjCmd: scan} { catch {unset arg1} set arg1 foo @@ -1130,59 +1201,59 @@ test binary-31.13 {Tcl_BinaryObjCmd: scan} { set arg1 1 list [catch {binary scan \x3f\xcc\xcc\xcd f1 arg1(a)} msg] $msg } {1 {can't set "arg1(a)": variable isn't array}} -test binary-31.14 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} { +test binary-31.14 {Tcl_BinaryObjCmd: scan} bigEndian { catch {unset arg1 arg2} set arg1 foo set arg2 bar list [binary scan \x3f\xcc\xcc\xcd\x40\x59\x99\x9a\x05 f2c* arg1 arg2] $arg1 $arg2 -} {2 {1.60000002384 3.40000009537} 5} -test binary-31.15 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} { +} {2 {1.600000023841858 3.4000000953674316} 5} +test binary-31.15 {Tcl_BinaryObjCmd: scan} littleEndian { catch {unset arg1 arg2} set arg1 foo set arg2 bar list [binary scan \xcd\xcc\xcc\x3f\x9a\x99\x59\x40\x05 f2c* arg1 arg2] $arg1 $arg2 -} {2 {1.60000002384 3.40000009537} 5} +} {2 {1.600000023841858 3.4000000953674316} 5} test binary-32.1 {Tcl_BinaryObjCmd: scan} { list [catch {binary scan abc d} msg] $msg } {1 {not enough arguments for all format specifiers}} -test binary-32.2 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} { +test binary-32.2 {Tcl_BinaryObjCmd: scan} bigEndian { catch {unset arg1} list [binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33 d* arg1] $arg1 } {1 {1.6 3.4}} -test binary-32.3 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} { +test binary-32.3 {Tcl_BinaryObjCmd: scan} littleEndian { catch {unset arg1} list [binary scan \x9a\x99\x99\x99\x99\x99\xf9\x3f\x33\x33\x33\x33\x33\x33\x0b\x40 d* arg1] $arg1 } {1 {1.6 3.4}} -test binary-32.4 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} { +test binary-32.4 {Tcl_BinaryObjCmd: scan} bigEndian { catch {unset arg1} list [binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33 d arg1] $arg1 } {1 1.6} -test binary-32.5 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} { +test binary-32.5 {Tcl_BinaryObjCmd: scan} littleEndian { catch {unset arg1} list [binary scan \x9a\x99\x99\x99\x99\x99\xf9\x3f\x33\x33\x33\x33\x33\x33\x0b\x40 d arg1] $arg1 } {1 1.6} -test binary-32.6 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} { +test binary-32.6 {Tcl_BinaryObjCmd: scan} bigEndian { catch {unset arg1} list [binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a d1 arg1] $arg1 } {1 1.6} -test binary-32.7 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} { +test binary-32.7 {Tcl_BinaryObjCmd: scan} littleEndian { catch {unset arg1} list [binary scan \x9a\x99\x99\x99\x99\x99\xf9\x3f d1 arg1] $arg1 } {1 1.6} -test binary-32.8 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} { +test binary-32.8 {Tcl_BinaryObjCmd: scan} bigEndian { catch {unset arg1} list [binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a d0 arg1] $arg1 } {1 {}} -test binary-32.9 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} { +test binary-32.9 {Tcl_BinaryObjCmd: scan} littleEndian { catch {unset arg1} list [binary scan \x9a\x99\x99\x99\x99\x99\xf9\x3f d0 arg1] $arg1 } {1 {}} -test binary-32.10 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} { +test binary-32.10 {Tcl_BinaryObjCmd: scan} bigEndian { catch {unset arg1} list [binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33 d2 arg1] $arg1 } {1 {1.6 3.4}} -test binary-32.11 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} { +test binary-32.11 {Tcl_BinaryObjCmd: scan} littleEndian { catch {unset arg1} list [binary scan \x9a\x99\x99\x99\x99\x99\xf9\x3f\x33\x33\x33\x33\x33\x33\x0b\x40 d2 arg1] $arg1 } {1 {1.6 3.4}} @@ -1196,13 +1267,13 @@ test binary-32.13 {Tcl_BinaryObjCmd: scan} { set arg1 1 list [catch {binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a d1 arg1(a)} msg] $msg } {1 {can't set "arg1(a)": variable isn't array}} -test binary-32.14 {Tcl_BinaryObjCmd: scan} {nonPortable macOrUnix} { +test binary-32.14 {Tcl_BinaryObjCmd: scan} bigEndian { catch {unset arg1 arg2} set arg1 foo set arg2 bar list [binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33\x05 d2c* arg1 arg2] $arg1 $arg2 } {2 {1.6 3.4} 5} -test binary-32.15 {Tcl_BinaryObjCmd: scan} {nonPortable pcOnly} { +test binary-32.15 {Tcl_BinaryObjCmd: scan} littleEndian { catch {unset arg1 arg2} set arg1 foo set arg2 bar @@ -1362,16 +1433,16 @@ test binary-38.3 {FormatNumber: word alignment} { test binary-38.4 {FormatNumber: word alignment} { set x [binary format c1I1 1 1] } \x01\x00\x00\x00\x01 -test binary-38.5 {FormatNumber: word alignment} {nonPortable macOrUnix} { +test binary-38.5 {FormatNumber: word alignment} bigEndian { set x [binary format c1d1 1 1.6] } \x01\x3f\xf9\x99\x99\x99\x99\x99\x9a -test binary-38.6 {FormatNumber: word alignment} {nonPortable pcOnly} { +test binary-38.6 {FormatNumber: word alignment} littleEndian { set x [binary format c1d1 1 1.6] } \x01\x9a\x99\x99\x99\x99\x99\xf9\x3f -test binary-38.7 {FormatNumber: word alignment} {nonPortable macOrUnix} { +test binary-38.7 {FormatNumber: word alignment} bigEndian { set x [binary format c1f1 1 1.6] } \x01\x3f\xcc\xcc\xcd -test binary-38.8 {FormatNumber: word alignment} {nonPortable pcOnly} { +test binary-38.8 {FormatNumber: word alignment} littleEndian { set x [binary format c1f1 1 1.6] } \x01\xcd\xcc\xcc\x3f @@ -1395,35 +1466,42 @@ test binary-39.5 {ScanNumber: sign extension} { catch {unset arg1} list [binary scan \x01\x01\x01\x02\x81\x01\x01\x01\x01\x82\x01\x01\x01\x01\x82\x01\x01\x01\x01\x81 I5 arg1] $arg1 } {1 {16843010 -2130640639 25297153 16876033 16843137}} - -test binary-40.1 {ScanNumber: floating point overflow} {nonPortable unixOnly} { +test binary-39.6 {ScanNumber: no sign extension} { catch {unset arg1} - list [binary scan \xff\xff\xff\xff f1 arg1] $arg1 -} {1 -NaN} -test binary-40.3 {ScanNumber: floating point overflow} {nonPortable pcOnly} { + list [binary scan \x52\xa3 cu2 arg1] $arg1 +} {1 {82 163}} +test binary-39.7 {ScanNumber: no sign extension} { catch {unset arg1} - set result [binary scan \xff\xff\xff\xff f1 arg1] - if {([string compare $arg1 -1.\#QNAN] == 0) - || ([string compare $arg1 -NAN] == 0)} { - lappend result success - } else { - lappend result failure - } -} {1 success} -test binary-40.4 {ScanNumber: floating point overflow} {nonPortable unixOnly} { - catch {unset arg1} - list [binary scan \xff\xff\xff\xff\xff\xff\xff\xff d1 arg1] $arg1 -} {1 -NaN} -test binary-40.6 {ScanNumber: floating point overflow} {nonPortable pcOnly} { - catch {unset arg1} - set result [binary scan \xff\xff\xff\xff\xff\xff\xff\xff d1 arg1] - if {([string compare $arg1 -1.\#QNAN] == 0) - || ([string compare $arg1 -NAN] == 0)} { - lappend result success - } else { - lappend result failure - } -} {1 success} + list [binary scan \x01\x02\x01\x81\x82\x01\x81\x82 su4 arg1] $arg1 +} {1 {513 33025 386 33409}} +test binary-39.8 {ScanNumber: no sign extension} { + catch {unset arg1} + list [binary scan \x01\x02\x01\x81\x82\x01\x81\x82 Su4 arg1] $arg1 +} {1 {258 385 33281 33154}} +test binary-39.9 {ScanNumber: no sign extension} { + catch {unset arg1} + list [binary scan \x01\x01\x01\x02\x81\x01\x01\x01\x01\x82\x01\x01\x01\x01\x82\x01\x01\x01\x01\x81 iu5 arg1] $arg1 +} {1 {33620225 16843137 16876033 25297153 2164326657}} +test binary-39.10 {ScanNumber: no sign extension} { + catch {unset arg1} + list [binary scan \x01\x01\x01\x02\x81\x01\x01\x01\x01\x82\x01\x01\x01\x01\x82\x01\x01\x01\x01\x81 Iu5 arg1] $arg1 +} {1 {16843010 2164326657 25297153 16876033 16843137}} + +test binary-40.3 {ScanNumber: NaN} \ + -body { + catch {unset arg1} + list [binary scan \xff\xff\xff\xff f1 arg1] $arg1 + } \ + -match glob \ + -result {1 -NaN*} + +test binary-40.4 {ScanNumber: NaN} \ + -body { + catch {unset arg1} + list [binary scan \xff\xff\xff\xff\xff\xff\xff\xff d arg1] $arg1 + } \ + -match glob \ + -result {1 -NaN*} test binary-41.1 {ScanNumber: word alignment} { catch {unset arg1; unset arg2} @@ -1441,19 +1519,19 @@ test binary-41.4 {ScanNumber: word alignment} { catch {unset arg1; unset arg2} list [binary scan \x01\x00\x00\x00\x01 c1I1 arg1 arg2] $arg1 $arg2 } {2 1 1} -test binary-41.5 {ScanNumber: word alignment} {nonPortable macOrUnix} { +test binary-41.5 {ScanNumber: word alignment} bigEndian { catch {unset arg1; unset arg2} list [binary scan \x01\x3f\xcc\xcc\xcd c1f1 arg1 arg2] $arg1 $arg2 -} {2 1 1.60000002384} -test binary-41.6 {ScanNumber: word alignment} {nonPortable pcOnly} { +} {2 1 1.600000023841858} +test binary-41.6 {ScanNumber: word alignment} littleEndian { catch {unset arg1; unset arg2} list [binary scan \x01\xcd\xcc\xcc\x3f c1f1 arg1 arg2] $arg1 $arg2 -} {2 1 1.60000002384} -test binary-41.7 {ScanNumber: word alignment} {nonPortable macOrUnix} { +} {2 1 1.600000023841858} +test binary-41.7 {ScanNumber: word alignment} bigEndian { catch {unset arg1; unset arg2} list [binary scan \x01\x3f\xf9\x99\x99\x99\x99\x99\x9a c1d1 arg1 arg2] $arg1 $arg2 } {2 1 1.6} -test binary-41.8 {ScanNumber: word alignment} {nonPortable pcOnly} { +test binary-41.8 {ScanNumber: word alignment} littleEndian { catch {unset arg1; unset arg2} list [binary scan \x01\x9a\x99\x99\x99\x99\x99\xf9\x3f c1d1 arg1 arg2] $arg1 $arg2 } {2 1 1.6} @@ -1487,6 +1565,26 @@ test binary-44.4 {Tcl_BinaryObjCmd: scan wide int with bit 31 set} {} { binary scan [binary format W [expr {wide(3) << 31}]] W x set x } 6442450944 +test binary-43.5 {Tcl_BinaryObjCmd: scan wide int} {} { + catch {unset arg1} + list [binary scan \x80[string repeat \x00 7] W arg1] $arg1 +} {1 -9223372036854775808} +test binary-43.6 {Tcl_BinaryObjCmd: scan unsigned wide int} {} { + catch {unset arg1} + list [binary scan \x80[string repeat \x00 7] Wu arg1] $arg1 +} {1 9223372036854775808} +test binary-43.7 {Tcl_BinaryObjCmd: scan unsigned wide int} {} { + catch {unset arg1} + list [binary scan [string repeat \x00 7]\x80 wu arg1] $arg1 +} {1 9223372036854775808} +test binary-43.8 {Tcl_BinaryObjCmd: scan unsigned wide int} {} { + catch {unset arg1 arg2} + list [binary scan \x80[string repeat \x00 7]\x80[string repeat \x00 7] WuW arg1 arg2] $arg1 $arg2 +} {2 9223372036854775808 -9223372036854775808} +test binary-43.9 {Tcl_BinaryObjCmd: scan unsigned wide int} {} { + catch {unset arg1 arg2} + list [binary scan [string repeat \x00 7]\x80[string repeat \x00 7]\x80 wuw arg1 arg2] $arg1 $arg2 +} {2 9223372036854775808 -9223372036854775808} test binary-45.1 {Tcl_BinaryObjCmd: combined wide int handling} { binary scan [binary format sws 16450 -1 19521] c* x @@ -1527,6 +1625,811 @@ test binary-47.1 {Tcl_BinaryObjCmd: number cache reference count handling} { list [binary scan aba ccc x x x] $x } {3 97} +### TIP#129: endian specifiers ---- + +# format t +test binary-48.1 {Tcl_BinaryObjCmd: format} { + list [catch {binary format t} msg] $msg +} {1 {not enough arguments for all format specifiers}} +test binary-48.2 {Tcl_BinaryObjCmd: format} { + list [catch {binary format t blat} msg] $msg +} {1 {expected integer but got "blat"}} +test binary-48.3 {Tcl_BinaryObjCmd: format} { + binary format S0 0x50 +} {} +test binary-48.4 {Tcl_BinaryObjCmd: format} bigEndian { + binary format t 0x50 +} \x00P +test binary-48.5 {Tcl_BinaryObjCmd: format} littleEndian { + binary format t 0x50 +} P\x00 +test binary-48.6 {Tcl_BinaryObjCmd: format} bigEndian { + binary format t 0x5052 +} PR +test binary-48.7 {Tcl_BinaryObjCmd: format} littleEndian { + binary format t 0x5052 +} RP +test binary-48.8 {Tcl_BinaryObjCmd: format} bigEndian { + binary format t 0x505251 0x53 +} RQ +test binary-48.9 {Tcl_BinaryObjCmd: format} littleEndian { + binary format t 0x505251 0x53 +} QR +test binary-48.10 {Tcl_BinaryObjCmd: format} bigEndian { + binary format t2 {0x50 0x52} +} \x00P\x00R +test binary-48.11 {Tcl_BinaryObjCmd: format} littleEndian { + binary format t2 {0x50 0x52} +} P\x00R\x00 +test binary-48.12 {Tcl_BinaryObjCmd: format} bigEndian { + binary format t* {0x5051 0x52} +} PQ\x00R +test binary-48.13 {Tcl_BinaryObjCmd: format} littleEndian { + binary format t* {0x5051 0x52} +} QPR\x00 +test binary-48.14 {Tcl_BinaryObjCmd: format} bigEndian { + binary format t2 {0x50 0x52 0x53} 0x54 +} \x00P\x00R +test binary-48.15 {Tcl_BinaryObjCmd: format} littleEndian { + binary format t2 {0x50 0x52 0x53} 0x54 +} P\x00R\x00 +test binary-48.16 {Tcl_BinaryObjCmd: format} { + list [catch {binary format t2 {0x50}} msg] $msg +} {1 {number of elements in list does not match count}} +test binary-48.17 {Tcl_BinaryObjCmd: format} { + set a {0x50 0x51} + list [catch {binary format t $a} msg] $msg +} [list 1 "expected integer but got \"0x50 0x51\""] +test binary-48.18 {Tcl_BinaryObjCmd: format} bigEndian { + set a {0x50 0x51} + binary format t1 $a +} \x00P +test binary-48.19 {Tcl_BinaryObjCmd: format} littleEndian { + set a {0x50 0x51} + binary format t1 $a +} P\x00 + +# format n +test binary-49.1 {Tcl_BinaryObjCmd: format} { + list [catch {binary format n} msg] $msg +} {1 {not enough arguments for all format specifiers}} +test binary-49.2 {Tcl_BinaryObjCmd: format} { + list [catch {binary format n blat} msg] $msg +} {1 {expected integer but got "blat"}} +test binary-49.3 {Tcl_BinaryObjCmd: format} { + binary format n0 0x50 +} {} +test binary-49.4 {Tcl_BinaryObjCmd: format} littleEndian { + binary format n 0x50 +} P\x00\x00\x00 +test binary-49.5 {Tcl_BinaryObjCmd: format} littleEndian { + binary format n 0x5052 +} RP\x00\x00 +test binary-49.6 {Tcl_BinaryObjCmd: format} littleEndian { + binary format n 0x505251 0x53 +} QRP\x00 +test binary-49.7 {Tcl_BinaryObjCmd: format} littleEndian { + binary format i1 {0x505251 0x53} +} QRP\x00 +test binary-49.8 {Tcl_BinaryObjCmd: format} littleEndian { + binary format n 0x53525150 +} PQRS +test binary-49.9 {Tcl_BinaryObjCmd: format} littleEndian { + binary format n2 {0x50 0x52} +} P\x00\x00\x00R\x00\x00\x00 +test binary-49.10 {Tcl_BinaryObjCmd: format} littleEndian { + binary format n* {0x50515253 0x52} +} SRQPR\x00\x00\x00 +test binary-49.11 {Tcl_BinaryObjCmd: format} { + list [catch {binary format n2 {0x50}} msg] $msg +} {1 {number of elements in list does not match count}} +test binary-49.12 {Tcl_BinaryObjCmd: format} { + set a {0x50 0x51} + list [catch {binary format n $a} msg] $msg +} [list 1 "expected integer but got \"0x50 0x51\""] +test binary-49.13 {Tcl_BinaryObjCmd: format} littleEndian { + set a {0x50 0x51} + binary format n1 $a +} P\x00\x00\x00 +test binary-49.14 {Tcl_BinaryObjCmd: format} bigEndian { + binary format n 0x50 +} \x00\x00\x00P +test binary-49.15 {Tcl_BinaryObjCmd: format} bigEndian { + binary format n 0x5052 +} \x00\x00PR +test binary-49.16 {Tcl_BinaryObjCmd: format} bigEndian { + binary format n 0x505251 0x53 +} \x00PRQ +test binary-49.17 {Tcl_BinaryObjCmd: format} bigEndian { + binary format i1 {0x505251 0x53} +} QRP\x00 +test binary-49.18 {Tcl_BinaryObjCmd: format} bigEndian { + binary format n 0x53525150 +} SRQP +test binary-49.19 {Tcl_BinaryObjCmd: format} bigEndian { + binary format n2 {0x50 0x52} +} \x00\x00\x00P\x00\x00\x00R +test binary-49.20 {Tcl_BinaryObjCmd: format} bigEndian { + binary format n* {0x50515253 0x52} +} PQRS\x00\x00\x00R + +# format m +test binary-50.1 {Tcl_BinaryObjCmd: format wide int} littleEndian { + binary format m 7810179016327718216 +} HelloTcl +test binary-50.2 {Tcl_BinaryObjCmd: format wide int} bigEndian { + binary format m 7810179016327718216 +} lcTolleH +test binary-50.3 {Tcl_BinaryObjCmd: scan wide int with bit 31 set} littleEndian { + binary scan [binary format m [expr {wide(3) << 31}]] w x + set x +} 6442450944 +test binary-50.4 {Tcl_BinaryObjCmd: scan wide int with bit 31 set} bigEndian { + binary scan [binary format m [expr {wide(3) << 31}]] W x + set x +} 6442450944 + + +# format Q/q +test binary-51.1 {Tcl_BinaryObjCmd: format} { + list [catch {binary format Q} msg] $msg +} {1 {not enough arguments for all format specifiers}} +test binary-51.2 {Tcl_BinaryObjCmd: format} { + list [catch {binary format q blat} msg] $msg +} {1 {expected floating-point number but got "blat"}} +test binary-51.3 {Tcl_BinaryObjCmd: format} { + binary format q0 1.6 +} {} +test binary-51.4 {Tcl_BinaryObjCmd: format} {} { + binary format Q 1.6 +} \x3f\xf9\x99\x99\x99\x99\x99\x9a +test binary-51.5 {Tcl_BinaryObjCmd: format} {} { + binary format q 1.6 +} \x9a\x99\x99\x99\x99\x99\xf9\x3f +test binary-51.6 {Tcl_BinaryObjCmd: format} {} { + binary format Q* {1.6 3.4} +} \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33 +test binary-51.7 {Tcl_BinaryObjCmd: format} {} { + binary format q* {1.6 3.4} +} \x9a\x99\x99\x99\x99\x99\xf9\x3f\x33\x33\x33\x33\x33\x33\x0b\x40 +test binary-51.8 {Tcl_BinaryObjCmd: format} {} { + binary format Q2 {1.6 3.4} +} \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33 +test binary-51.9 {Tcl_BinaryObjCmd: format} {} { + binary format q2 {1.6 3.4} +} \x9a\x99\x99\x99\x99\x99\xf9\x3f\x33\x33\x33\x33\x33\x33\x0b\x40 +test binary-51.10 {Tcl_BinaryObjCmd: format} {} { + binary format Q2 {1.6 3.4 5.6} +} \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33 +test binary-51.11 {Tcl_BinaryObjCmd: format} {} { + binary format q2 {1.6 3.4 5.6} +} \x9a\x99\x99\x99\x99\x99\xf9\x3f\x33\x33\x33\x33\x33\x33\x0b\x40 +test binary-51.14 {Tcl_BinaryObjCmd: format} { + list [catch {binary format q2 {1.6}} msg] $msg +} {1 {number of elements in list does not match count}} +test binary-51.15 {Tcl_BinaryObjCmd: format} { + set a {1.6 3.4} + list [catch {binary format q $a} msg] $msg +} [list 1 "expected floating-point number but got \"1.6 3.4\""] +test binary-51.16 {Tcl_BinaryObjCmd: format} {} { + set a {1.6 3.4} + binary format Q1 $a +} \x3f\xf9\x99\x99\x99\x99\x99\x9a +test binary-51.17 {Tcl_BinaryObjCmd: format} {} { + set a {1.6 3.4} + binary format q1 $a +} \x9a\x99\x99\x99\x99\x99\xf9\x3f + +# format R/r +test binary-53.1 {Tcl_BinaryObjCmd: format} { + list [catch {binary format r} msg] $msg +} {1 {not enough arguments for all format specifiers}} +test binary-53.2 {Tcl_BinaryObjCmd: format} { + list [catch {binary format r blat} msg] $msg +} {1 {expected floating-point number but got "blat"}} +test binary-53.3 {Tcl_BinaryObjCmd: format} { + binary format f0 1.6 +} {} +test binary-53.4 {Tcl_BinaryObjCmd: format} {} { + binary format R 1.6 +} \x3f\xcc\xcc\xcd +test binary-53.5 {Tcl_BinaryObjCmd: format} {} { + binary format r 1.6 +} \xcd\xcc\xcc\x3f +test binary-53.6 {Tcl_BinaryObjCmd: format} {} { + binary format R* {1.6 3.4} +} \x3f\xcc\xcc\xcd\x40\x59\x99\x9a +test binary-53.7 {Tcl_BinaryObjCmd: format} {} { + binary format r* {1.6 3.4} +} \xcd\xcc\xcc\x3f\x9a\x99\x59\x40 +test binary-53.8 {Tcl_BinaryObjCmd: format} {} { + binary format R2 {1.6 3.4} +} \x3f\xcc\xcc\xcd\x40\x59\x99\x9a +test binary-53.9 {Tcl_BinaryObjCmd: format} {} { + binary format r2 {1.6 3.4} +} \xcd\xcc\xcc\x3f\x9a\x99\x59\x40 +test binary-53.10 {Tcl_BinaryObjCmd: format} {} { + binary format R2 {1.6 3.4 5.6} +} \x3f\xcc\xcc\xcd\x40\x59\x99\x9a +test binary-53.11 {Tcl_BinaryObjCmd: format} {} { + binary format r2 {1.6 3.4 5.6} +} \xcd\xcc\xcc\x3f\x9a\x99\x59\x40 +test binary-53.12 {Tcl_BinaryObjCmd: float overflow} {} { + binary format R -3.402825e+38 +} \xff\x7f\xff\xff +test binary-53.13 {Tcl_BinaryObjCmd: float overflow} {} { + binary format r -3.402825e+38 +} \xff\xff\x7f\xff +test binary-53.14 {Tcl_BinaryObjCmd: float underflow} {} { + binary format R -3.402825e-100 +} \x80\x00\x00\x00 +test binary-53.15 {Tcl_BinaryObjCmd: float underflow} {} { + binary format r -3.402825e-100 +} \x00\x00\x00\x80 +test binary-53.16 {Tcl_BinaryObjCmd: format} { + list [catch {binary format r2 {1.6}} msg] $msg +} {1 {number of elements in list does not match count}} +test binary-53.17 {Tcl_BinaryObjCmd: format} { + set a {1.6 3.4} + list [catch {binary format r $a} msg] $msg +} [list 1 "expected floating-point number but got \"1.6 3.4\""] +test binary-53.18 {Tcl_BinaryObjCmd: format} {} { + set a {1.6 3.4} + binary format R1 $a +} \x3f\xcc\xcc\xcd +test binary-53.19 {Tcl_BinaryObjCmd: format} {} { + set a {1.6 3.4} + binary format r1 $a +} \xcd\xcc\xcc\x3f + +# scan t (s) +test binary-54.1 {Tcl_BinaryObjCmd: scan} { + list [catch {binary scan abc t} msg] $msg +} {1 {not enough arguments for all format specifiers}} +test binary-54.2 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54 t* arg1] $arg1 +} {1 {-23726 21587}} +test binary-54.3 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54 t arg1] $arg1 +} {1 -23726} +test binary-54.4 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x52\xa3 t1 arg1] $arg1 +} {1 -23726} +test binary-54.5 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x52\xa3 t0 arg1] $arg1 +} {1 {}} +test binary-54.6 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54 t2 arg1] $arg1 +} {1 {-23726 21587}} +test binary-54.7 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + set arg1 foo + list [binary scan \x52 t1 arg1] $arg1 +} {0 foo} +test binary-54.8 {Tcl_BinaryObjCmd: scan} {} { + catch {unset arg1} + set arg1 1 + list [catch {binary scan \x52\x53 t1 arg1(a)} msg] $msg +} {1 {can't set "arg1(a)": variable isn't array}} +test binary-54.9 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x52\xa3\x53\x54\x05 t2c* arg1 arg2] $arg1 $arg2 +} {2 {-23726 21587} 5} +test binary-54.10 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x00\x80\x00\x80 tut arg1 arg2] $arg1 $arg2 +} {2 32768 -32768} +test binary-54.11 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x00\x80\x00\x80 ttu arg1 arg2] $arg1 $arg2 +} {2 -32768 32768} + +# scan t (b) +test binary-55.1 {Tcl_BinaryObjCmd: scan} { + list [catch {binary scan abc t} msg] $msg +} {1 {not enough arguments for all format specifiers}} +test binary-55.2 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54 t* arg1] $arg1 +} {1 {21155 21332}} +test binary-55.3 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54 t arg1] $arg1 +} {1 21155} +test binary-55.4 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x52\xa3 t1 arg1] $arg1 +} {1 21155} +test binary-55.5 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x52\xa3 t0 arg1] $arg1 +} {1 {}} +test binary-55.6 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54 t2 arg1] $arg1 +} {1 {21155 21332}} +test binary-55.7 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + set arg1 foo + list [binary scan \x52 t1 arg1] $arg1 +} {0 foo} +test binary-55.8 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1} + set arg1 1 + list [catch {binary scan \x52\x53 t1 arg1(a)} msg] $msg +} {1 {can't set "arg1(a)": variable isn't array}} +test binary-55.9 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x52\xa3\x53\x54\x05 t2c* arg1 arg2] $arg1 $arg2 +} {2 {21155 21332} 5} +test binary-55.10 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x80\x00\x80\x00 tut arg1 arg2] $arg1 $arg2 +} {2 32768 -32768} +test binary-55.11 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x80\x00\x80\x00 ttu arg1 arg2] $arg1 $arg2 +} {2 -32768 32768} + +# scan n (s) +test binary-56.1 {Tcl_BinaryObjCmd: scan} { + list [catch {binary scan abc n} msg] $msg +} {1 {not enough arguments for all format specifiers}} +test binary-56.2 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54\x01\x02\x03\x04 n* arg1] $arg1 +} {1 {1414767442 67305985}} +test binary-56.3 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54\x01\x02\x03\x04 n arg1] $arg1 +} {1 1414767442} +test binary-56.4 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54 n1 arg1] $arg1 +} {1 1414767442} +test binary-56.5 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53 n0 arg1] $arg1 +} {1 {}} +test binary-56.6 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54\x01\x02\x03\x04 n2 arg1] $arg1 +} {1 {1414767442 67305985}} +test binary-56.7 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + set arg1 foo + list [binary scan \x52 n1 arg1] $arg1 +} {0 foo} +test binary-56.8 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1} + set arg1 1 + list [catch {binary scan \x52\x53\x53\x54 n1 arg1(a)} msg] $msg +} {1 {can't set "arg1(a)": variable isn't array}} +test binary-56.9 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x52\xa3\x53\x54\x01\x02\x03\x04\x05 n2c* arg1 arg2] $arg1 $arg2 +} {2 {1414767442 67305985} 5} +test binary-56.10 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x80\x00\x00\x00\x80\x00\x00\x00 nun arg1 arg2] $arg1 $arg2 +} {2 128 128} +test binary-56.11 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x00\x00\x00\x80\x00\x00\x00\x80 nun arg1 arg2] $arg1 $arg2 +} {2 2147483648 -2147483648} + +# scan n (b) +test binary-57.1 {Tcl_BinaryObjCmd: scan} { + list [catch {binary scan abc n} msg] $msg +} {1 {not enough arguments for all format specifiers}} +test binary-57.2 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54\x01\x02\x03\x04 n* arg1] $arg1 +} {1 {1386435412 16909060}} +test binary-57.3 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54\x01\x02\x03\x04 n arg1] $arg1 +} {1 1386435412} +test binary-57.4 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54 n1 arg1] $arg1 +} {1 1386435412} +test binary-57.5 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53 n0 arg1] $arg1 +} {1 {}} +test binary-57.6 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x52\xa3\x53\x54\x01\x02\x03\x04 n2 arg1] $arg1 +} {1 {1386435412 16909060}} +test binary-57.7 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + set arg1 foo + list [binary scan \x52 n1 arg1] $arg1 +} {0 foo} +test binary-57.8 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1} + set arg1 1 + list [catch {binary scan \x52\x53\x53\x54 n1 arg1(a)} msg] $msg +} {1 {can't set "arg1(a)": variable isn't array}} +test binary-57.9 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x52\xa3\x53\x54\x01\x02\x03\x04\x05 n2c* arg1 arg2] $arg1 $arg2 +} {2 {1386435412 16909060} 5} +test binary-57.10 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x80\x00\x00\x00\x80\x00\x00\x00 nun arg1 arg2] $arg1 $arg2 +} {2 2147483648 -2147483648} +test binary-57.11 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x00\x00\x00\x80\x00\x00\x00\x80 nun arg1 arg2] $arg1 $arg2 +} {2 128 128} + +# scan Q/q +test binary-58.1 {Tcl_BinaryObjCmd: scan} { + list [catch {binary scan abc q} msg] $msg +} {1 {not enough arguments for all format specifiers}} +test binary-58.2 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33 Q* arg1] $arg1 +} {1 {1.6 3.4}} +test binary-58.3 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x9a\x99\x99\x99\x99\x99\xf9\x3f\x33\x33\x33\x33\x33\x33\x0b\x40 q* arg1] $arg1 +} {1 {1.6 3.4}} +test binary-58.4 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33 Q arg1] $arg1 +} {1 1.6} +test binary-58.5 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x9a\x99\x99\x99\x99\x99\xf9\x3f\x33\x33\x33\x33\x33\x33\x0b\x40 q arg1] $arg1 +} {1 1.6} +test binary-58.6 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a Q1 arg1] $arg1 +} {1 1.6} +test binary-58.7 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x9a\x99\x99\x99\x99\x99\xf9\x3f q1 arg1] $arg1 +} {1 1.6} +test binary-58.8 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a Q0 arg1] $arg1 +} {1 {}} +test binary-58.9 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x9a\x99\x99\x99\x99\x99\xf9\x3f q0 arg1] $arg1 +} {1 {}} +test binary-58.10 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33 Q2 arg1] $arg1 +} {1 {1.6 3.4}} +test binary-58.11 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \x9a\x99\x99\x99\x99\x99\xf9\x3f\x33\x33\x33\x33\x33\x33\x0b\x40 q2 arg1] $arg1 +} {1 {1.6 3.4}} +test binary-58.12 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1} + set arg1 foo + list [binary scan \x52 q1 arg1] $arg1 +} {0 foo} +test binary-58.13 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1} + set arg1 1 + list [catch {binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a q1 arg1(a)} msg] $msg +} {1 {can't set "arg1(a)": variable isn't array}} +test binary-58.14 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x3f\xf9\x99\x99\x99\x99\x99\x9a\x40\x0b\x33\x33\x33\x33\x33\x33\x05 Q2c* arg1 arg2] $arg1 $arg2 +} {2 {1.6 3.4} 5} +test binary-58.15 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x9a\x99\x99\x99\x99\x99\xf9\x3f\x33\x33\x33\x33\x33\x33\x0b\x40\x05 q2c* arg1 arg2] $arg1 $arg2 +} {2 {1.6 3.4} 5} + +# scan R/r +test binary-59.1 {Tcl_BinaryObjCmd: scan} { + list [catch {binary scan abc r} msg] $msg +} {1 {not enough arguments for all format specifiers}} +test binary-59.2 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x3f\xcc\xcc\xcd\x40\x59\x99\x9a R* arg1] $arg1 +} {1 {1.600000023841858 3.4000000953674316}} +test binary-59.3 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \xcd\xcc\xcc\x3f\x9a\x99\x59\x40 r* arg1] $arg1 +} {1 {1.600000023841858 3.4000000953674316}} +test binary-59.4 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x3f\xcc\xcc\xcd\x40\x59\x99\x9a R arg1] $arg1 +} {1 1.600000023841858} +test binary-59.5 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \xcd\xcc\xcc\x3f\x9a\x99\x59\x40 r arg1] $arg1 +} {1 1.600000023841858} +test binary-59.6 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x3f\xcc\xcc\xcd R1 arg1] $arg1 +} {1 1.600000023841858} +test binary-59.7 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \xcd\xcc\xcc\x3f r1 arg1] $arg1 +} {1 1.600000023841858} +test binary-59.8 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x3f\xcc\xcc\xcd R0 arg1] $arg1 +} {1 {}} +test binary-59.9 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \xcd\xcc\xcc\x3f r0 arg1] $arg1 +} {1 {}} +test binary-59.10 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1} + list [binary scan \x3f\xcc\xcc\xcd\x40\x59\x99\x9a R2 arg1] $arg1 +} {1 {1.600000023841858 3.4000000953674316}} +test binary-59.11 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1} + list [binary scan \xcd\xcc\xcc\x3f\x9a\x99\x59\x40 r2 arg1] $arg1 +} {1 {1.600000023841858 3.4000000953674316}} +test binary-59.12 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1} + set arg1 foo + list [binary scan \x52 r1 arg1] $arg1 +} {0 foo} +test binary-59.13 {Tcl_BinaryObjCmd: scan} { + catch {unset arg1} + set arg1 1 + list [catch {binary scan \x3f\xcc\xcc\xcd r1 arg1(a)} msg] $msg +} {1 {can't set "arg1(a)": variable isn't array}} +test binary-59.14 {Tcl_BinaryObjCmd: scan} bigEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \x3f\xcc\xcc\xcd\x40\x59\x99\x9a\x05 R2c* arg1 arg2] $arg1 $arg2 +} {2 {1.600000023841858 3.4000000953674316} 5} +test binary-59.15 {Tcl_BinaryObjCmd: scan} littleEndian { + catch {unset arg1 arg2} + set arg1 foo + set arg2 bar + list [binary scan \xcd\xcc\xcc\x3f\x9a\x99\x59\x40\x05 r2c* arg1 arg2] $arg1 $arg2 +} {2 {1.600000023841858 3.4000000953674316} 5} + +test binary-60.1 {[binary format] with NaN} -body { + binary scan [binary format dqQfrR NaN NaN NaN NaN NaN NaN] dqQfrR \ + v1 v2 v3 v4 v5 v6 + list $v1 $v2 $v3 $v4 $v5 $v6 +} -match regexp -result {NaN(\([[:xdigit:]]+\))? NaN(\([[:xdigit:]]+\))? NaN(\([[:xdigit:]]+\))? NaN(\([[:xdigit:]]+\))? NaN(\([[:xdigit:]]+\))? NaN(\([[:xdigit:]]+\))?} + +# scan m +test binary-61.1 {Tcl_BinaryObjCmd: scan wide int} bigEndian { + binary scan HelloTcl m x + set x +} 5216694956358656876 +test binary-61.2 {Tcl_BinaryObjCmd: scan wide int} littleEndian { + binary scan lcTolleH m x + set x +} 5216694956358656876 +test binary-61.3 {Tcl_BinaryObjCmd: scan wide int with bit 31 set} littleEndian { + binary scan [binary format w [expr {wide(3) << 31}]] m x + set x +} 6442450944 +test binary-61.4 {Tcl_BinaryObjCmd: scan wide int with bit 31 set} bigEndian { + binary scan [binary format W [expr {wide(3) << 31}]] m x + set x +} 6442450944 + +# Big test for correct ordering of data in [expr] + +proc testIEEE {} { + variable ieeeValues + binary scan [binary format dd -1.0 1.0] c* c + switch -exact -- $c { + {0 0 0 0 0 0 -16 -65 0 0 0 0 0 0 -16 63} { + # little endian + binary scan \x00\x00\x00\x00\x00\x00\xf0\xff d \ + ieeeValues(-Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf0\xbf d \ + ieeeValues(-Normal) + binary scan \x00\x00\x00\x00\x00\x00\x08\x80 d \ + ieeeValues(-Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\x00\x80 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x00\x00\x00\x00\x00\x08\x00 d \ + ieeeValues(+Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x3f d \ + ieeeValues(+Normal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x7f d \ + ieeeValues(+Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf8\x7f d \ + ieeeValues(NaN) + set ieeeValues(littleEndian) 1 + return 1 + } + {-65 -16 0 0 0 0 0 0 63 -16 0 0 0 0 0 0} { + binary scan \xff\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Infinity) + binary scan \xbf\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Normal) + binary scan \x80\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Subnormal) + binary scan \x80\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Subnormal) + binary scan \x3f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Normal) + binary scan \x7f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Infinity) + binary scan \x7f\xf8\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(NaN) + set ieeeValues(littleEndian) 0 + return 1 + } + default { + return 0 + } + } +} + +testConstraint ieeeFloatingPoint [testIEEE] + +# scan/format infinities + +test binary-62.1 {infinity} ieeeFloatingPoint { + binary scan [binary format q Infinity] w w + format 0x%016lx $w +} 0x7ff0000000000000 +test binary-62.2 {infinity} ieeeFloatingPoint { + binary scan [binary format q -Infinity] w w + format 0x%016lx $w +} 0xfff0000000000000 +test binary-62.3 {infinity} ieeeFloatingPoint { + binary scan [binary format q Inf] w w + format 0x%016lx $w +} 0x7ff0000000000000 +test binary-62.4 {infinity} ieeeFloatingPoint { + binary scan [binary format q -Infinity] w w + format 0x%016lx $w +} 0xfff0000000000000 +test binary-62.5 {infinity} ieeeFloatingPoint { + binary scan [binary format w 0x7ff0000000000000] q d + set d +} Inf +test binary-62.6 {infinity} ieeeFloatingPoint { + binary scan [binary format w 0xfff0000000000000] q d + set d +} -Inf + +# scan/format Not-a-Number + +test binary-63.1 {NaN} ieeeFloatingPoint { + binary scan [binary format q NaN] w w + format 0x%016lx [expr {$w & 0xfff3ffffffffffff}] +} 0x7ff0000000000000 +test binary-63.2 {NaN} ieeeFloatingPoint { + binary scan [binary format q -NaN] w w + format 0x%016lx [expr {$w & 0xfff3ffffffffffff}] +} 0xfff0000000000000 +test binary-63.3 {NaN} ieeeFloatingPoint { + binary scan [binary format q NaN(3123456789aBc)] w w + format 0x%016lx [expr {$w & 0xfff3ffffffffffff}] +} 0x7ff3123456789abc +test binary-63.4 {NaN} ieeeFloatingPoint { + binary scan [binary format q {NaN( 3123456789aBc)}] w w + format 0x%016lx [expr {$w & 0xfff3ffffffffffff}] +} 0x7ff3123456789abc + +# Make sure TclParseNumber() rejects invalid nan-hex formats [Bug 3402540] +test binary-63.5 {NaN} -constraints ieeeFloatingPoint -body { + binary format q Nan( +} -returnCodes error -match glob -result {expected floating-point number*} +test binary-63.6 {NaN} -constraints ieeeFloatingPoint -body { + binary format q Nan() +} -returnCodes error -match glob -result {expected floating-point number*} +test binary-63.7 {NaN} -constraints ieeeFloatingPoint -body { + binary format q Nan(g) +} -returnCodes error -match glob -result {expected floating-point number*} +test binary-63.8 {NaN} -constraints ieeeFloatingPoint -body { + binary format q Nan(1,2) +} -returnCodes error -match glob -result {expected floating-point number*} +test binary-63.9 {NaN} -constraints ieeeFloatingPoint -body { + binary format q Nan(1234567890abcd) +} -returnCodes error -match glob -result {expected floating-point number*} + +test binary-64.1 {NaN} \ + -constraints ieeeFloatingPoint \ + -body { + binary scan [binary format w 0x7ff8000000000000] q d + set d + } \ + -match glob -result NaN* +test binary-64.2 {NaN} \ + -constraints ieeeFloatingPoint \ + -body { + binary scan [binary format w 0x7ff0123456789aBc] q d + set d + } \ + -match glob -result NaN(*123456789abc) + +test binary-65.1 {largest significand} ieeeFloatingPoint { + binary scan [binary format w 0x3fcfffffffffffff] q d + set d +} 0.24999999999999997 +test binary-65.2 {smallest significand} ieeeFloatingPoint { + binary scan [binary format w 0x3fd0000000000000] q d + set d +} 0.25 +test binary-65.3 {largest significand} ieeeFloatingPoint { + binary scan [binary format w 0x3fdfffffffffffff] q d + set d +} 0.49999999999999994 +test binary-65.4 {smallest significand} ieeeFloatingPoint { + binary scan [binary format w 0x3fe0000000000000] q d + set d +} 0.5 +test binary-65.5 {largest significand} ieeeFloatingPoint { + binary scan [binary format w 0x3fffffffffffffff] q d + set d +} 1.9999999999999998 +test binary-65.6 {smallest significand} ieeeFloatingPoint { + binary scan [binary format w 0x4000000000000000] q d + set d +} 2.0 +test binary-65.7 {smallest significand} ieeeFloatingPoint { + binary scan [binary format w 0x434fffffffffffff] q d + set d +} 18014398509481982.0 +test binary-65.8 {largest significand} ieeeFloatingPoint { + binary scan [binary format w 0x4350000000000000] q d + set d +} 18014398509481984.0 +test binary-65.9 {largest significand} ieeeFloatingPoint { + binary scan [binary format w 0x4350000000000001] q d + set d +} 18014398509481988.0 + # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/case.test b/tests/case.test index f310113..2960c9d 100644 --- a/tests/case.test +++ b/tests/case.test @@ -40,7 +40,7 @@ test case-1.7 {list of patterns} { test case-2.1 {error in executed command} { list [catch {case a in a {error "Just a test"} default {format 1}} msg] \ - $msg $errorInfo + $msg $::errorInfo } {1 {Just a test} {Just a test while executing "error "Just a test"" @@ -58,7 +58,7 @@ test case-2.4 {error: pattern with no body} { } {1 {extra case pattern with no body}} test case-2.5 {error in default command} { list [catch {case foo in a {error case1} default {error case2} \ - b {error case 3}} msg] $msg $errorInfo + b {error case 3}} msg] $msg $::errorInfo } {1 case2 {case2 while executing "error case2" @@ -87,15 +87,3 @@ test case-3.3 {single-argument form for pattern/command pairs} { # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/chan.test b/tests/chan.test new file mode 100644 index 0000000..f5e35bc --- /dev/null +++ b/tests/chan.test @@ -0,0 +1,229 @@ +# This file contains a collection of tests for the Tcl built-in 'chan' +# command. Sourcing this file into Tcl runs the tests and generates +# output for errors. No output means no errors were found. +# +# Copyright (c) 2005 Donal K. Fellows +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest 2 + namespace import -force ::tcltest::* +} + +# +# Note: The tests for the chan methods "create" and "postevent" +# currently reside in the file "ioCmd.test". +# + +test chan-1.1 {chan command general syntax} -body { + chan +} -returnCodes error -result "wrong # args: should be \"chan subcommand ?argument ...?\"" +test chan-1.2 {chan command general syntax} -body { + chan FOOBAR +} -returnCodes error -result "unknown or ambiguous subcommand \"FOOBAR\": must be blocked, close, configure, copy, create, eof, event, flush, gets, names, pending, postevent, puts, read, seek, tell, or truncate" + +test chan-2.1 {chan command: blocked subcommand} -body { + chan blocked foo bar +} -returnCodes error -result "wrong # args: should be \"chan blocked channelId\"" + +test chan-3.1 {chan command: close subcommand} -body { + chan close foo bar +} -returnCodes error -result "wrong # args: should be \"chan close channelId\"" + +test chan-4.1 {chan command: configure subcommand} -body { + chan configure +} -returnCodes error -result "wrong # args: should be \"chan configure channelId ?optionName? ?value? ?optionName value?...\"" +test chan-4.2 {chan command: [Bug 800753]} -body { + chan configure stdout -eofchar \u0100 +} -returnCodes error -match glob -result {bad value*} +test chan-4.3 {chan command: [Bug 800753]} -body { + chan configure stdout -eofchar \u0000 +} -returnCodes error -match glob -result {bad value*} +test chan-4.4 {chan command: check valid inValue, no outValue} -body { + chan configure stdout -eofchar [list \x27 {}] +} -returnCodes ok -result {} +test chan-4.5 {chan command: check valid inValue, invalid outValue} -body { + chan configure stdout -eofchar [list \x27 \x80] +} -returnCodes error -match glob -result {bad value for -eofchar:*} +test chan-4.6 {chan command: check no inValue, valid outValue} -body { + chan configure stdout -eofchar [list {} \x27] +} -returnCodes ok -result {} + +test chan-5.1 {chan command: copy subcommand} -body { + chan copy foo +} -returnCodes error -result "wrong # args: should be \"chan copy input output ?-size size? ?-command callback?\"" + +test chan-6.1 {chan command: eof subcommand} -body { + chan eof foo bar +} -returnCodes error -result "wrong # args: should be \"chan eof channelId\"" + +test chan-7.1 {chan command: event subcommand} -body { + chan event foo +} -returnCodes error -result "wrong # args: should be \"chan event channelId event ?script?\"" + +test chan-8.1 {chan command: flush subcommand} -body { + chan flush foo bar +} -returnCodes error -result "wrong # args: should be \"chan flush channelId\"" + +test chan-9.1 {chan command: gets subcommand} -body { + chan gets +} -returnCodes error -result "wrong # args: should be \"chan gets channelId ?varName?\"" + +test chan-10.1 {chan command: names subcommand} -body { + chan names foo bar +} -returnCodes error -result "wrong # args: should be \"chan names ?pattern?\"" + +test chan-11.1 {chan command: puts subcommand} -body { + chan puts foo bar foo bar +} -returnCodes error -result "wrong # args: should be \"chan puts ?-nonewline? ?channelId? string\"" + +test chan-12.1 {chan command: read subcommand} -body { + chan read +} -returnCodes error -result "wrong # args: should be \"chan read channelId ?numChars?\" or \"chan read ?-nonewline? channelId\"" + +test chan-13.1 {chan command: seek subcommand} -body { + chan seek foo bar foo bar +} -returnCodes error -result "wrong # args: should be \"chan seek channelId offset ?origin?\"" + +test chan-14.1 {chan command: tell subcommand} -body { + chan tell foo bar +} -returnCodes error -result "wrong # args: should be \"chan tell channelId\"" + +test chan-15.1 {chan command: truncate subcommand} -body { + chan truncate foo bar foo bar +} -returnCodes error -result "wrong \# args: should be \"chan truncate channelId ?length?\"" +test chan-15.2 {chan command: truncate subcommand} -setup { + set file [makeFile {} testTruncate] + set f [open $file w+] + fconfigure $f -translation binary +} -body { + seek $f 0 + puts -nonewline $f 12345 + seek $f 0 + chan truncate $f 2 + read $f +} -result 12 -cleanup { + catch {close $f} + catch {removeFile $file} +} + +# TIP 287: chan pending +test chan-16.1 {chan command: pending subcommand} -body { + chan pending +} -returnCodes error -result "wrong # args: should be \"chan pending mode channelId\"" +test chan-16.2 {chan command: pending subcommand} -body { + chan pending stdin +} -returnCodes error -result "wrong # args: should be \"chan pending mode channelId\"" +test chan-16.3 {chan command: pending subcommand} -body { + chan pending stdin stdout stderr +} -returnCodes error -result "wrong # args: should be \"chan pending mode channelId\"" +test chan-16.4 {chan command: pending subcommand} -body { + chan pending {input output} stdout +} -returnCodes error -result "bad mode \"input output\": must be input or output" +test chan-16.5 {chan command: pending input subcommand} -body { + chan pending input stdout +} -result -1 +test chan-16.6 {chan command: pending input subcommand} -body { + chan pending input stdin +} -result 0 +test chan-16.7 {chan command: pending input subcommand} -body { + chan pending input FOOBAR +} -returnCodes error -result "can not find channel named \"FOOBAR\"" +test chan-16.8 {chan command: pending input subcommand} -setup { + set file [makeFile {} testAvailable] + set f [open $file w+] + chan configure $f -translation lf -buffering line +} -body { + chan puts $f foo + chan puts $f bar + chan puts $f baz + chan seek $f 0 + chan gets $f + chan pending input $f +} -result 8 -cleanup { + catch {chan close $f} + catch {removeFile $file} +} +test chan-16.9 {chan command: pending input subcommand} -setup { + proc chan-16.9-accept {sock addr port} { + chan configure $sock -blocking 0 -buffering line -buffersize 32 + chan event $sock readable [list chan-16.9-readable $sock] + } + + proc chan-16.9-readable {sock} { + set r [chan gets $sock line] + set l [string length $line] + set e [chan eof $sock] + set b [chan blocked $sock] + set i [chan pending input $sock] + + lappend ::chan-16.9-data $r $l $e $b $i + + if {$r != -1 || $e || $l || !$b || $i > 128} { + set data [read $sock $i] + lappend ::chan-16.9-data [string range $data 0 2] + lappend ::chan-16.9-data [string range $data end-2 end] + set ::chan-16.9-done 1 + chan event $sock readable {} + } else { + after idle chan-16.9-client + } + } + + proc chan-16.9-client {} { + chan puts -nonewline $::client ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 + chan flush $::client + } + + set ::server [socket -server chan-16.9-accept -myaddr 127.0.0.1 0] + set ::client [socket 127.0.0.1 [lindex [fconfigure $::server -sockname] 2]] + set ::chan-16.9-data [list] + set ::chan-16.9-done 0 +} -body { + after idle chan-16.9-client + vwait ::chan-16.9-done + set ::chan-16.9-data +} -result {-1 0 0 1 36 -1 0 0 1 72 -1 0 0 1 108 -1 0 0 1 144 ABC 890} -cleanup { + catch {chan close $client} + catch {chan close $server} + rename chan-16.9-accept {} + rename chan-16.9-readable {} + rename chan-16.9-client {} + unset -nocomplain ::chan-16.9-data + unset -nocomplain ::chan-16.9-done + unset -nocomplain ::server + unset -nocomplain ::client +} +test chan-16.10 {chan command: pending output subcommand} -body { + chan pending output stdin +} -result -1 +test chan-16.11 {chan command: pending output subcommand} -body { + chan pending output stdout +} -result 0 +test chan-16.12 {chan command: pending output subcommand} -body { + chan pending output FOOBAR +} -returnCodes error -result "can not find channel named \"FOOBAR\"" +test chan-16.13 {chan command: pending output subcommand} -setup { + set file [makeFile {} testPendingOutput] + set f [open $file w+] + chan configure $f -translation lf -buffering full -buffersize 1024 +} -body { + set result [list] + chan puts $f [string repeat x 512] + lappend result [chan pending output $f] + chan flush $f + lappend result [chan pending output $f] +} -result [list 513 0] -cleanup { + unset -nocomplain result + catch {chan close $f} + catch {removeFile $file} +} + +cleanupTests +return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/chanio.test b/tests/chanio.test new file mode 100644 index 0000000..b195f7b --- /dev/null +++ b/tests/chanio.test @@ -0,0 +1,7705 @@ +# -*- tcl -*- +# Functionality covered: operation of all IO commands, and all procedures +# defined in generic/tclIO.c. +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. +# +# Copyright (c) 1991-1994 The Regents of the University of California. +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# Copyright (c) 1998-1999 by Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +if {[catch {package require tcltest 2}]} { + chan puts stderr "Skipping tests in [info script]. tcltest 2 required." + return +} +namespace eval ::tcl::test::io { + namespace import ::tcltest::* + + variable umaskValue + variable path + variable f + variable i + variable n + variable v + variable msg + variable expected + + testConstraint testchannel [llength [info commands testchannel]] + testConstraint exec [llength [info commands exec]] + testConstraint openpipe 1 + testConstraint fileevent [llength [info commands fileevent]] + testConstraint fcopy [llength [info commands fcopy]] + testConstraint testfevent [llength [info commands testfevent]] + testConstraint testchannelevent [llength [info commands testchannelevent]] + testConstraint testmainthread [llength [info commands testmainthread]] + testConstraint testthread [llength [info commands testthread]] + + # You need a *very* special environment to do some tests. In + # particular, many file systems do not support large-files... + testConstraint largefileSupport 0 + + # some tests can only be run is umask is 2 + # if "umask" cannot be run, the tests will be skipped. + set umaskValue 0 + testConstraint umask [expr {![catch {set umaskValue [scan [exec /bin/sh -c umask] %o]}]}] + + testConstraint makeFileInHome [expr {![file exists ~/_test_] && [file writable ~]}] + + # set up a long data file for some of the following tests + + set path(longfile) [makeFile {} longfile] + set f [open $path(longfile) w] + chan configure $f -eofchar {} -translation lf + for { set i 0 } { $i < 100 } { incr i} { + chan puts $f "#123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef +\#123456789abcdef01 +\#" + } + chan close $f + + set path(cat) [makeFile { + set f stdin + if {$argv != ""} { + set f [open [lindex $argv 0]] + } + chan configure $f -encoding binary -translation lf -blocking 0 -eofchar \x1a + chan configure stdout -encoding binary -translation lf -buffering none + chan event $f readable "foo $f" + proc foo {f} { + set x [chan read $f] + catch {chan puts -nonewline $x} + if {[chan eof $f]} { + chan close $f + exit 0 + } + } + vwait forever + } cat] + + set thisScript [file join [pwd] [info script]] + + proc contents {file} { + set f [open $file] + chan configure $f -translation binary + set a [chan read $f] + chan close $f + return $a + } + +test chan-io-1.5 {Tcl_WriteChars: CheckChannelErrors} {emptyTest} { + # no test, need to cause an async error. +} {} +set path(test1) [makeFile {} test1] +test chan-io-1.6 {Tcl_WriteChars: WriteBytes} { + set f [open $path(test1) w] + chan configure $f -encoding binary + chan puts -nonewline $f "a\u4e4d\0" + chan close $f + contents $path(test1) +} "a\x4d\x00" +test chan-io-1.7 {Tcl_WriteChars: WriteChars} { + set f [open $path(test1) w] + chan configure $f -encoding shiftjis + chan puts -nonewline $f "a\u4e4d\0" + chan close $f + contents $path(test1) +} "a\x93\xe1\x00" +set path(test2) [makeFile {} test2] +test chan-io-1.8 {Tcl_WriteChars: WriteChars} { + # This test written for SF bug #506297. + # + # Executing this test without the fix for the referenced bug + # applied to tcl will cause tcl, more specifically WriteChars, to + # go into an infinite loop. + + set f [open $path(test2) w] + chan configure $f -encoding iso2022-jp + chan puts -nonewline $f [format %s%c [string repeat " " 4] 12399] + chan close $f + contents $path(test2) +} " \x1b\$B\$O\x1b(B" + +test chan-io-1.9 {Tcl_WriteChars: WriteChars} { + # When closing a channel with an encoding that appends + # escape bytes, check for the case where the escape + # bytes overflow the current IO buffer. The bytes + # should be moved into a new buffer. + + set data "1234567890 [format %c 12399]" + + set sizes [list] + + # With default buffer size + set f [open $path(test2) w] + chan configure $f -encoding iso2022-jp + chan puts -nonewline $f $data + chan close $f + lappend sizes [file size $path(test2)] + + # With buffer size equal to the length + # of the data, the escape bytes would + # go into the next buffer. + + set f [open $path(test2) w] + chan configure $f -encoding iso2022-jp -buffersize 16 + chan puts -nonewline $f $data + chan close $f + lappend sizes [file size $path(test2)] + + # With buffer size that is large enough + # to hold 1 byte of escaped data, but + # not all 3. This should not write + # the escape bytes to the first buffer + # and then again to the second buffer. + + set f [open $path(test2) w] + chan configure $f -encoding iso2022-jp -buffersize 17 + chan puts -nonewline $f $data + chan close $f + lappend sizes [file size $path(test2)] + + # With buffer size that can hold 2 out of + # 3 bytes of escaped data. + + set f [open $path(test2) w] + chan configure $f -encoding iso2022-jp -buffersize 18 + chan puts -nonewline $f $data + chan close $f + lappend sizes [file size $path(test2)] + + # With buffer size that can hold all the + # data and escape bytes. + + set f [open $path(test2) w] + chan configure $f -encoding iso2022-jp -buffersize 19 + chan puts -nonewline $f $data + chan close $f + lappend sizes [file size $path(test2)] + + set sizes +} {19 19 19 19 19} + +test chan-io-2.1 {WriteBytes} { + # loop until all bytes are written + + set f [open $path(test1) w] + chan configure $f -encoding binary -buffersize 16 -translation crlf + chan puts $f "abcdefghijklmnopqrstuvwxyz" + chan close $f + contents $path(test1) +} "abcdefghijklmnopqrstuvwxyz\r\n" +test chan-io-2.2 {WriteBytes: savedLF > 0} { + # After flushing buffer, there was a \n left over from the last + # \n -> \r\n expansion. It gets stuck at beginning of this buffer. + + set f [open $path(test1) w] + chan configure $f -encoding binary -buffersize 16 -translation crlf + chan puts -nonewline $f "123456789012345\n12" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "123456789012345\r" "123456789012345\r\n12"] +test chan-io-2.3 {WriteBytes: flush on line} { + # Tcl "line" buffering has weird behavior: if current buffer contains + # a \n, entire buffer gets flushed. Logical behavior would be to flush + # only up to the \n. + + set f [open $path(test1) w] + chan configure $f -encoding binary -buffering line -translation crlf + chan puts -nonewline $f "\n12" + set x [contents $path(test1)] + chan close $f + set x +} "\r\n12" +test chan-io-2.4 {WriteBytes: reset sawLF after each buffer} { + set f [open $path(test1) w] + chan configure $f -encoding binary -buffering line -translation lf \ + -buffersize 16 + chan puts -nonewline $f "abcdefg\nhijklmnopqrstuvwxyz" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "abcdefg\nhijklmno" "abcdefg\nhijklmnopqrstuvwxyz"] + +test chan-io-3.1 {WriteChars: compatibility with WriteBytes} { + # loop until all bytes are written + + set f [open $path(test1) w] + chan configure $f -encoding ascii -buffersize 16 -translation crlf + chan puts $f "abcdefghijklmnopqrstuvwxyz" + chan close $f + contents $path(test1) +} "abcdefghijklmnopqrstuvwxyz\r\n" +test chan-io-3.2 {WriteChars: compatibility with WriteBytes: savedLF > 0} { + # After flushing buffer, there was a \n left over from the last + # \n -> \r\n expansion. It gets stuck at beginning of this buffer. + + set f [open $path(test1) w] + chan configure $f -encoding ascii -buffersize 16 -translation crlf + chan puts -nonewline $f "123456789012345\n12" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "123456789012345\r" "123456789012345\r\n12"] +test chan-io-3.3 {WriteChars: compatibility with WriteBytes: flush on line} { + # Tcl "line" buffering has weird behavior: if current buffer contains + # a \n, entire buffer gets flushed. Logical behavior would be to flush + # only up to the \n. + + set f [open $path(test1) w] + chan configure $f -encoding ascii -buffering line -translation crlf + chan puts -nonewline $f "\n12" + set x [contents $path(test1)] + chan close $f + set x +} "\r\n12" +test chan-io-3.4 {WriteChars: loop over stage buffer} { + # stage buffer maps to more than can be queued at once. + + set f [open $path(test1) w] + chan configure $f -encoding jis0208 -buffersize 16 + chan puts -nonewline $f "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "!)!)!)!)!)!)!)!)" "!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)"] +test chan-io-3.5 {WriteChars: saved != 0} { + # Bytes produced by UtfToExternal from end of last channel buffer + # had to be moved to beginning of next channel buffer to preserve + # requested buffersize. + + set f [open $path(test1) w] + chan configure $f -encoding jis0208 -buffersize 17 + chan puts -nonewline $f "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "!)!)!)!)!)!)!)!)!" "!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)"] +test chan-io-3.6 {WriteChars: (stageRead + dstWrote == 0)} { + # One incomplete UTF-8 character at end of staging buffer. Backup + # in src to the beginning of that UTF-8 character and try again. + # + # Translate the first 16 bytes, produce 14 bytes of output, 2 left over + # (first two bytes of \uff21 in UTF-8). Given those two bytes try + # translating them again, find that no bytes are read produced, and break + # to outer loop where those two bytes will have the remaining 4 bytes + # (the last byte of \uff21 plus the all of \uff22) appended. + + set f [open $path(test1) w] + chan configure $f -encoding shiftjis -buffersize 16 + chan puts -nonewline $f "12345678901234\uff21\uff22" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "12345678901234\x82\x60" "12345678901234\x82\x60\x82\x61"] +test chan-io-3.7 {WriteChars: (bufPtr->nextAdded > bufPtr->length)} { + # When translating UTF-8 to external, the produced bytes went past end + # of the channel buffer. This is done purpose -- we then truncate the + # bytes at the end of the partial character to preserve the requested + # blocksize on flush. The truncated bytes are moved to the beginning + # of the next channel buffer. + + set f [open $path(test1) w] + chan configure $f -encoding jis0208 -buffersize 17 + chan puts -nonewline $f "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "!)!)!)!)!)!)!)!)!" "!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)"] +test chan-io-3.8 {WriteChars: reset sawLF after each buffer} { + set f [open $path(test1) w] + chan configure $f -encoding ascii -buffering line -translation lf \ + -buffersize 16 + chan puts -nonewline $f "abcdefg\nhijklmnopqrstuvwxyz" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "abcdefg\nhijklmno" "abcdefg\nhijklmnopqrstuvwxyz"] + +test chan-io-4.1 {TranslateOutputEOL: lf} { + # search for \n + + set f [open $path(test1) w] + chan configure $f -buffering line -translation lf + chan puts $f "abcde" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "abcde\n" "abcde\n"] +test chan-io-4.2 {TranslateOutputEOL: cr} { + # search for \n, replace with \r + + set f [open $path(test1) w] + chan configure $f -buffering line -translation cr + chan puts $f "abcde" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "abcde\r" "abcde\r"] +test chan-io-4.3 {TranslateOutputEOL: crlf} { + # simple case: search for \n, replace with \r + + set f [open $path(test1) w] + chan configure $f -buffering line -translation crlf + chan puts $f "abcde" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "abcde\r\n" "abcde\r\n"] +test chan-io-4.4 {TranslateOutputEOL: crlf} { + # keep storing more bytes in output buffer until output buffer is full. + # We have 13 bytes initially that would turn into 18 bytes. Fill + # dest buffer while (dstEnd < dstMax). + + set f [open $path(test1) w] + chan configure $f -translation crlf -buffersize 16 + chan puts -nonewline $f "1234567\n\n\n\n\nA" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "1234567\r\n\r\n\r\n\r\n\r" "1234567\r\n\r\n\r\n\r\n\r\nA"] +test chan-io-4.5 {TranslateOutputEOL: crlf} { + # Check for overflow of the destination buffer + + set f [open $path(test1) w] + chan configure $f -translation crlf -buffersize 12 + chan puts -nonewline $f "12345678901\n456789012345678901234" + chan close $f + set x [contents $path(test1)] +} "12345678901\r\n456789012345678901234" + +test chan-io-5.1 {CheckFlush: not full} { + set f [open $path(test1) w] + chan configure $f + chan puts -nonewline $f "12345678901234567890" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "" "12345678901234567890"] +test chan-io-5.2 {CheckFlush: full} { + set f [open $path(test1) w] + chan configure $f -buffersize 16 + chan puts -nonewline $f "12345678901234567890" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "1234567890123456" "12345678901234567890"] +test chan-io-5.3 {CheckFlush: not line} { + set f [open $path(test1) w] + chan configure $f -buffering line + chan puts -nonewline $f "12345678901234567890" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "" "12345678901234567890"] +test chan-io-5.4 {CheckFlush: line} { + set f [open $path(test1) w] + chan configure $f -buffering line -translation lf -encoding ascii + chan puts -nonewline $f "1234567890\n1234567890" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "1234567890\n1234567890" "1234567890\n1234567890"] +test chan-io-5.5 {CheckFlush: none} { + set f [open $path(test1) w] + chan configure $f -buffering none + chan puts -nonewline $f "1234567890" + set x [list [contents $path(test1)]] + chan close $f + lappend x [contents $path(test1)] +} [list "1234567890" "1234567890"] + +test chan-io-6.1 {Tcl_GetsObj: working} { + set f [open $path(test1) w] + chan puts $f "foo\nboo" + chan close $f + set f [open $path(test1)] + set x [chan gets $f] + chan close $f + set x +} {foo} +test chan-io-6.2 {Tcl_GetsObj: CheckChannelErrors() != 0} emptyTest { + # no test, need to cause an async error. +} {} +test chan-io-6.3 {Tcl_GetsObj: how many have we used?} { + # if (bufPtr != NULL) {oldRemoved = bufPtr->nextRemoved} + + set f [open $path(test1) w] + chan configure $f -translation crlf + chan puts $f "abc\ndefg" + chan close $f + set f [open $path(test1)] + set x [list [chan tell $f] [chan gets $f line] [chan tell $f] [chan gets $f line] $line] + chan close $f + set x +} {0 3 5 4 defg} +test chan-io-6.4 {Tcl_GetsObj: encoding == NULL} { + set f [open $path(test1) w] + chan configure $f -translation binary + chan puts $f "\x81\u1234\0" + chan close $f + set f [open $path(test1)] + chan configure $f -translation binary + set x [list [chan gets $f line] $line] + chan close $f + set x +} [list 3 "\x81\x34\x00"] +test chan-io-6.5 {Tcl_GetsObj: encoding != NULL} { + set f [open $path(test1) w] + chan configure $f -translation binary + chan puts $f "\x88\xea\x92\x9a" + chan close $f + set f [open $path(test1)] + chan configure $f -encoding shiftjis + set x [list [chan gets $f line] $line] + chan close $f + set x +} [list 2 "\u4e00\u4e01"] +set a "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" +append a $a +append a $a +test chan-io-6.6 {Tcl_GetsObj: loop test} { + # if (dst >= dstEnd) + + set f [open $path(test1) w] + chan puts $f $a + chan puts $f hi + chan close $f + set f [open $path(test1)] + set x [list [chan gets $f line] $line] + chan close $f + set x +} [list 256 $a] +test chan-io-6.7 {Tcl_GetsObj: error in input} {stdio openpipe} { + # if (FilterInputBytes(chanPtr, &gs) != 0) + + set f [open "|[list [interpreter] $path(cat)]" w+] + chan puts -nonewline $f "hi\nwould" + chan flush $f + chan gets $f + chan configure $f -blocking 0 + set x [chan gets $f line] + chan close $f + set x +} {-1} +test chan-io-6.8 {Tcl_GetsObj: remember if EOF is seen} { + set f [open $path(test1) w] + chan puts $f "abcdef\x1aghijk\nwombat" + chan close $f + set f [open $path(test1)] + chan configure $f -eofchar \x1a + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} {6 abcdef -1 {}} +test chan-io-6.9 {Tcl_GetsObj: remember if EOF is seen} { + set f [open $path(test1) w] + chan puts $f "abcdefghijk\nwom\u001abat" + chan close $f + set f [open $path(test1)] + chan configure $f -eofchar \x1a + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} {11 abcdefghijk 3 wom} +# Comprehensive tests +test chan-io-6.10 {Tcl_GetsObj: lf mode: no chars} { + set f [open $path(test1) w] + chan close $f + set f [open $path(test1)] + chan configure $f -translation lf + set x [list [chan gets $f line] $line] + chan close $f + set x +} {-1 {}} +test chan-io-6.11 {Tcl_GetsObj: lf mode: lone \n} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "\n" + chan close $f + set f [open $path(test1)] + chan configure $f -translation lf + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} {0 {} -1 {}} +test chan-io-6.12 {Tcl_GetsObj: lf mode: lone \r} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "\r" + chan close $f + set f [open $path(test1)] + chan configure $f -translation lf + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 1 "\r" -1 ""] +test chan-io-6.13 {Tcl_GetsObj: lf mode: 1 char} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f a + chan close $f + set f [open $path(test1)] + chan configure $f -translation lf + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} {1 a -1 {}} +test chan-io-6.14 {Tcl_GetsObj: lf mode: 1 char followed by EOL} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "a\n" + chan close $f + set f [open $path(test1)] + chan configure $f -translation lf + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} {1 a -1 {}} +test chan-io-6.15 {Tcl_GetsObj: lf mode: several chars} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\nefgh\rijkl\r\nmnop" + chan close $f + set f [open $path(test1)] + chan configure $f -translation lf + set x [list [chan gets $f line] $line [chan gets $f line] $line [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 4 "abcd" 10 "efgh\rijkl\r" 4 "mnop" -1 ""] +test chan-io-6.16 {Tcl_GetsObj: cr mode: no chars} { + set f [open $path(test1) w] + chan close $f + set f [open $path(test1)] + chan configure $f -translation cr + set x [list [chan gets $f line] $line] + chan close $f + set x +} {-1 {}} +test chan-io-6.17 {Tcl_GetsObj: cr mode: lone \n} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "\n" + chan close $f + set f [open $path(test1)] + chan configure $f -translation cr + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 1 "\n" -1 ""] +test chan-io-6.18 {Tcl_GetsObj: cr mode: lone \r} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "\r" + chan close $f + set f [open $path(test1)] + chan configure $f -translation cr + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} {0 {} -1 {}} +test chan-io-6.19 {Tcl_GetsObj: cr mode: 1 char} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f a + chan close $f + set f [open $path(test1)] + chan configure $f -translation cr + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} {1 a -1 {}} +test chan-io-6.20 {Tcl_GetsObj: cr mode: 1 char followed by EOL} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "a\r" + chan close $f + set f [open $path(test1)] + chan configure $f -translation cr + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} {1 a -1 {}} +test chan-io-6.21 {Tcl_GetsObj: cr mode: several chars} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\nefgh\rijkl\r\nmnop" + chan close $f + set f [open $path(test1)] + chan configure $f -translation cr + set x [list [chan gets $f line] $line [chan gets $f line] $line [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 9 "abcd\nefgh" 4 "ijkl" 5 "\nmnop" -1 ""] +test chan-io-6.22 {Tcl_GetsObj: crlf mode: no chars} { + set f [open $path(test1) w] + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf + set x [list [chan gets $f line] $line] + chan close $f + set x +} {-1 {}} +test chan-io-6.23 {Tcl_GetsObj: crlf mode: lone \n} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "\n" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 1 "\n" -1 ""] +test chan-io-6.24 {Tcl_GetsObj: crlf mode: lone \r} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "\r" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 1 "\r" -1 ""] +test chan-io-6.25 {Tcl_GetsObj: crlf mode: \r\r} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "\r\r" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 2 "\r\r" -1 ""] +test chan-io-6.26 {Tcl_GetsObj: crlf mode: \r\n} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "\r\n" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 0 "" -1 ""] +test chan-io-6.27 {Tcl_GetsObj: crlf mode: 1 char} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f a + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} {1 a -1 {}} +test chan-io-6.28 {Tcl_GetsObj: crlf mode: 1 char followed by EOL} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "a\r\n" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} {1 a -1 {}} +test chan-io-6.29 {Tcl_GetsObj: crlf mode: several chars} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\nefgh\rijkl\r\nmnop" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf + set x [list [chan gets $f line] $line [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 14 "abcd\nefgh\rijkl" 4 "mnop" -1 ""] +test chan-io-6.30 {Tcl_GetsObj: crlf mode: buffer exhausted} {testchannel} { + # if (eol >= dstEnd) + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "123456789012345\r\nabcdefghijklmnoprstuvwxyz" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf -buffersize 16 + set x [list [chan gets $f line] $line [testchannel inputbuffered $f]] + chan close $f + set x +} [list 15 "123456789012345" 15] +test chan-io-6.31 {Tcl_GetsObj: crlf mode: buffer exhausted, blocked} {stdio testchannel openpipe fileevent} { + # (FilterInputBytes() != 0) + + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -translation {crlf lf} -buffering none + chan puts -nonewline $f "bbbbbbbbbbbbbb\r\n123456789012345\r" + chan configure $f -buffersize 16 + set x [chan gets $f] + chan configure $f -blocking 0 + lappend x [chan gets $f line] $line [chan blocked $f] [testchannel inputbuffered $f] + chan close $f + set x +} [list "bbbbbbbbbbbbbb" -1 "" 1 16] +test chan-io-6.32 {Tcl_GetsObj: crlf mode: buffer exhausted, more data} {testchannel} { + # not (FilterInputBytes() != 0) + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "123456789012345\r\n123" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf -buffersize 16 + set x [list [chan gets $f line] $line [chan tell $f] [testchannel inputbuffered $f]] + chan close $f + set x +} [list 15 "123456789012345" 17 3] +test chan-io-6.33 {Tcl_GetsObj: crlf mode: buffer exhausted, at eof} { + # eol still equals dstEnd + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "123456789012345\r" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf -buffersize 16 + set x [list [chan gets $f line] $line [chan eof $f]] + chan close $f + set x +} [list 16 "123456789012345\r" 1] +test chan-io-6.34 {Tcl_GetsObj: crlf mode: buffer exhausted, not followed by \n} { + # not (*eol == '\n') + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "123456789012345\rabcd\r\nefg" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf -buffersize 16 + set x [list [chan gets $f line] $line [chan tell $f]] + chan close $f + set x +} [list 20 "123456789012345\rabcd" 22] +test chan-io-6.35 {Tcl_GetsObj: auto mode: no chars} { + set f [open $path(test1) w] + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto + set x [list [chan gets $f line] $line] + chan close $f + set x +} {-1 {}} +test chan-io-6.36 {Tcl_GetsObj: auto mode: lone \n} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "\n" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 0 "" -1 ""] +test chan-io-6.37 {Tcl_GetsObj: auto mode: lone \r} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "\r" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 0 "" -1 ""] +test chan-io-6.38 {Tcl_GetsObj: auto mode: \r\r} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "\r\r" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto + set x [list [chan gets $f line] $line [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 0 "" 0 "" -1 ""] +test chan-io-6.39 {Tcl_GetsObj: auto mode: \r\n} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "\r\n" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 0 "" -1 ""] +test chan-io-6.40 {Tcl_GetsObj: auto mode: 1 char} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f a + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} {1 a -1 {}} +test chan-io-6.41 {Tcl_GetsObj: auto mode: 1 char followed by EOL} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "a\r\n" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto + set x [list [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} {1 a -1 {}} +test chan-io-6.42 {Tcl_GetsObj: auto mode: several chars} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\nefgh\rijkl\r\nmnop" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto + set x [list [chan gets $f line] $line [chan gets $f line] $line] + lappend x [chan gets $f line] $line [chan gets $f line] $line [chan gets $f line] $line + chan close $f + set x +} [list 4 "abcd" 4 "efgh" 4 "ijkl" 4 "mnop" -1 ""] +test chan-io-6.43 {Tcl_GetsObj: input saw cr} {stdio testchannel openpipe fileevent} { + # if (chanPtr->flags & INPUT_SAW_CR) + + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -translation {auto lf} -buffering none + chan puts -nonewline $f "bbbbbbbbbbbbbbb\n123456789abcdef\r" + chan configure $f -buffersize 16 + set x [list [chan gets $f]] + chan configure $f -blocking 0 + lappend x [chan gets $f line] $line [testchannel queuedcr $f] + chan configure $f -blocking 1 + chan puts -nonewline $f "\nabcd\refg\x1a" + lappend x [chan gets $f line] $line [testchannel queuedcr $f] + lappend x [chan gets $f line] $line + chan close $f + set x +} [list "bbbbbbbbbbbbbbb" 15 "123456789abcdef" 1 4 "abcd" 0 3 "efg"] +test chan-io-6.44 {Tcl_GetsObj: input saw cr, not followed by cr} {stdio testchannel openpipe fileevent} { + # not (*eol == '\n') + + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -translation {auto lf} -buffering none + chan puts -nonewline $f "bbbbbbbbbbbbbbb\n123456789abcdef\r" + chan configure $f -buffersize 16 + set x [list [chan gets $f]] + chan configure $f -blocking 0 + lappend x [chan gets $f line] $line [testchannel queuedcr $f] + chan configure $f -blocking 1 + chan puts -nonewline $f "abcd\refg\x1a" + lappend x [chan gets $f line] $line [testchannel queuedcr $f] + lappend x [chan gets $f line] $line + chan close $f + set x +} [list "bbbbbbbbbbbbbbb" 15 "123456789abcdef" 1 4 "abcd" 0 3 "efg"] +test chan-io-6.45 {Tcl_GetsObj: input saw cr, skip right number of bytes} {stdio testchannel openpipe fileevent} { + # Tcl_ExternalToUtf() + + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -translation {auto lf} -buffering none + chan configure $f -encoding unicode + chan puts -nonewline $f "bbbbbbbbbbbbbbb\n123456789abcdef\r" + chan configure $f -buffersize 16 + chan gets $f + chan configure $f -blocking 0 + set x [list [chan gets $f line] $line [testchannel queuedcr $f]] + chan configure $f -blocking 1 + chan puts -nonewline $f "\nabcd\refg" + lappend x [chan gets $f line] $line [testchannel queuedcr $f] + chan close $f + set x +} [list 15 "123456789abcdef" 1 4 "abcd" 0] +test chan-io-6.46 {Tcl_GetsObj: input saw cr, followed by just \n should give eof} {stdio testchannel openpipe fileevent} { + # memmove() + + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -translation {auto lf} -buffering none + chan puts -nonewline $f "bbbbbbbbbbbbbbb\n123456789abcdef\r" + chan configure $f -buffersize 16 + chan gets $f + chan configure $f -blocking 0 + set x [list [chan gets $f line] $line [testchannel queuedcr $f]] + chan configure $f -blocking 1 + chan puts -nonewline $f "\n\x1a" + lappend x [chan gets $f line] $line [testchannel queuedcr $f] + chan close $f + set x +} [list 15 "123456789abcdef" 1 -1 "" 0] +test chan-io-6.47 {Tcl_GetsObj: auto mode: \r at end of buffer, peek for \n} {testchannel} { + # (eol == dstEnd) + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "123456789012345\r\nabcdefghijklmnopq" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto -buffersize 16 + set x [list [chan gets $f] [testchannel inputbuffered $f]] + chan close $f + set x +} [list "123456789012345" 15] +test chan-io-6.48 {Tcl_GetsObj: auto mode: \r at end of buffer, no more avail} {testchannel} { + # PeekAhead() did not get any, so (eol >= dstEnd) + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "123456789012345\r" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto -buffersize 16 + set x [list [chan gets $f] [testchannel queuedcr $f]] + chan close $f + set x +} [list "123456789012345" 1] +test chan-io-6.49 {Tcl_GetsObj: auto mode: \r followed by \n} {testchannel} { + # if (*eol == '\n') {skip++} + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "123456\r\n78901" + chan close $f + set f [open $path(test1)] + set x [list [chan gets $f] [testchannel queuedcr $f] [chan tell $f] [chan gets $f]] + chan close $f + set x +} [list "123456" 0 8 "78901"] +test chan-io-6.50 {Tcl_GetsObj: auto mode: \r not followed by \n} {testchannel} { + # not (*eol == '\n') + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "123456\r78901" + chan close $f + set f [open $path(test1)] + set x [list [chan gets $f] [testchannel queuedcr $f] [chan tell $f] [chan gets $f]] + chan close $f + set x +} [list "123456" 0 7 "78901"] +test chan-io-6.51 {Tcl_GetsObj: auto mode: \n} { + # else if (*eol == '\n') {goto gotoeol;} + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "123456\n78901" + chan close $f + set f [open $path(test1)] + set x [list [chan gets $f] [chan tell $f] [chan gets $f]] + chan close $f + set x +} [list "123456" 7 "78901"] +test chan-io-6.52 {Tcl_GetsObj: saw EOF character} {testchannel} { + # if (eof != NULL) + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "123456\x1ak9012345\r" + chan close $f + set f [open $path(test1)] + chan configure $f -eofchar \x1a + set x [list [chan gets $f] [testchannel queuedcr $f] [chan tell $f] [chan gets $f]] + chan close $f + set x +} [list "123456" 0 6 ""] +test chan-io-6.53 {Tcl_GetsObj: device EOF} { + # didn't produce any bytes + + set f [open $path(test1) w] + chan close $f + set f [open $path(test1)] + set x [list [chan gets $f line] $line [chan eof $f]] + chan close $f + set x +} {-1 {} 1} +test chan-io-6.54 {Tcl_GetsObj: device EOF} { + # got some bytes before EOF. + + set f [open $path(test1) w] + chan puts -nonewline $f abc + chan close $f + set f [open $path(test1)] + set x [list [chan gets $f line] $line [chan eof $f]] + chan close $f + set x +} {3 abc 1} +test chan-io-6.55 {Tcl_GetsObj: overconverted} { + # Tcl_ExternalToUtf(), make sure state updated + + set f [open $path(test1) w] + chan configure $f -encoding iso2022-jp + chan puts $f "there\u4e00ok\n\u4e01more bytes\nhere" + chan close $f + set f [open $path(test1)] + chan configure $f -encoding iso2022-jp + set x [list [chan gets $f line] $line [chan gets $f line] $line [chan gets $f line] $line] + chan close $f + set x +} [list 8 "there\u4e00ok" 11 "\u4e01more bytes" 4 "here"] +test chan-io-6.56 {Tcl_GetsObj: incomplete lines should disable file events} {stdio openpipe fileevent} { + update + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -buffering none + chan puts -nonewline $f "foobar" + chan configure $f -blocking 0 + variable x {} + after 500 [namespace code { lappend x timeout }] + chan event $f readable [namespace code { lappend x [chan gets $f] }] + vwait [namespace which -variable x] + vwait [namespace which -variable x] + chan configure $f -blocking 1 + chan puts -nonewline $f "baz\n" + after 500 [namespace code { lappend x timeout }] + chan configure $f -blocking 0 + vwait [namespace which -variable x] + vwait [namespace which -variable x] + chan close $f + set x +} {{} timeout foobarbaz timeout} + +test chan-io-7.1 {FilterInputBytes: split up character at end of buffer} { + # (result == TCL_CONVERT_MULTIBYTE) + + set f [open $path(test1) w] + chan configure $f -encoding shiftjis + chan puts $f "1234567890123\uff10\uff11\uff12\uff13\uff14\nend" + chan close $f + set f [open $path(test1)] + chan configure $f -encoding shiftjis -buffersize 16 + set x [chan gets $f] + chan close $f + set x +} "1234567890123\uff10\uff11\uff12\uff13\uff14" +test chan-io-7.2 {FilterInputBytes: split up character in middle of buffer} { + # (bufPtr->nextAdded < bufPtr->bufLength) + + set f [open $path(test1) w] + chan configure $f -encoding binary + chan puts -nonewline $f "1234567890\n123\x82\x4f\x82\x50\x82" + chan close $f + set f [open $path(test1)] + chan configure $f -encoding shiftjis + set x [list [chan gets $f line] $line [chan eof $f]] + chan close $f + set x +} [list 10 "1234567890" 0] +test chan-io-7.3 {FilterInputBytes: split up character at EOF} {testchannel} { + set f [open $path(test1) w] + chan configure $f -encoding binary + chan puts -nonewline $f "1234567890123\x82\x4f\x82\x50\x82" + chan close $f + set f [open $path(test1)] + chan configure $f -encoding shiftjis + set x [list [chan gets $f line] $line] + lappend x [chan tell $f] [testchannel inputbuffered $f] [chan eof $f] + lappend x [chan gets $f line] $line + chan close $f + set x +} [list 15 "1234567890123\uff10\uff11" 18 0 1 -1 ""] +test chan-io-7.4 {FilterInputBytes: recover from split up character} {stdio openpipe fileevent} { + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -encoding binary -buffering none + chan puts -nonewline $f "1234567890123\x82\x4f\x82\x50\x82" + chan configure $f -encoding shiftjis -blocking 0 + chan event $f read [namespace code "ready $f"] + variable x {} + proc ready {f} { + variable x + lappend x [chan gets $f line] $line [chan blocked $f] + } + vwait [namespace which -variable x] + chan configure $f -encoding binary -blocking 1 + chan puts $f "\x51\x82\x52" + chan configure $f -encoding shiftjis + vwait [namespace which -variable x] + chan close $f + set x +} [list -1 "" 1 17 "1234567890123\uff10\uff11\uff12\uff13" 0] + +test chan-io-8.1 {PeekAhead: only go to device if no more cached data} {testchannel} { + # (bufPtr->nextPtr == NULL) + + set f [open $path(test1) w] + chan configure $f -encoding ascii -translation lf + chan puts -nonewline $f "123456789012345\r\n2345678" + chan close $f + set f [open $path(test1)] + chan configure $f -encoding ascii -translation auto -buffersize 16 + # here + chan gets $f + set x [testchannel inputbuffered $f] + chan close $f + set x +} "7" +test chan-io-8.2 {PeekAhead: only go to device if no more cached data} {stdio testchannel openpipe fileevent} { + # not (bufPtr->nextPtr == NULL) + + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -translation lf -encoding ascii -buffering none + chan puts -nonewline $f "123456789012345\r\nbcdefghijklmnopqrstuvwxyz" + variable x {} + chan event $f read [namespace code "ready $f"] + proc ready {f} { + variable x + lappend x [chan gets $f line] $line [testchannel inputbuffered $f] + } + chan configure $f -encoding unicode -buffersize 16 -blocking 0 + vwait [namespace which -variable x] + chan configure $f -translation auto -encoding ascii -blocking 1 + # here + vwait [namespace which -variable x] + chan close $f + set x +} [list -1 "" 42 15 "123456789012345" 25] +test chan-io-8.3 {PeekAhead: no cached data available} {stdio testchannel openpipe fileevent} { + # (bytesLeft == 0) + + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -translation {auto binary} + chan puts -nonewline $f "abcdefghijklmno\r" + chan flush $f + set x [list [chan gets $f line] $line [testchannel queuedcr $f]] + chan close $f + set x +} [list 15 "abcdefghijklmno" 1] +set a "123456789012345678901234567890" +append a "123456789012345678901234567890" +append a "1234567890123456789012345678901" +test chan-io-8.4 {PeekAhead: cached data available in this buffer} { + # not (bytesLeft == 0) + + set f [open $path(test1) w+] + chan configure $f -translation binary + chan puts $f "${a}\r\nabcdef" + chan close $f + set f [open $path(test1)] + chan configure $f -encoding binary -translation auto + + # "${a}\r" was converted in one operation (because ENCODING_LINESIZE + # is 30). To check if "\n" follows, calls PeekAhead and determines + # that cached data is available in buffer w/o having to call driver. + + set x [chan gets $f] + chan close $f + set x +} $a +unset a +test chan-io-8.5 {PeekAhead: don't peek if last read was short} {stdio testchannel openpipe fileevent} { + # (bufPtr->nextAdded < bufPtr->length) + + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -translation {auto binary} + chan puts -nonewline $f "abcdefghijklmno\r" + chan flush $f + # here + set x [list [chan gets $f line] $line [testchannel queuedcr $f]] + chan close $f + set x +} {15 abcdefghijklmno 1} +test chan-io-8.6 {PeekAhead: change to non-blocking mode} {stdio testchannel openpipe fileevent} { + # ((chanPtr->flags & CHANNEL_NONBLOCKING) == 0) + + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -translation {auto binary} -buffersize 16 + chan puts -nonewline $f "abcdefghijklmno\r" + chan flush $f + # here + set x [list [chan gets $f line] $line [testchannel queuedcr $f]] + chan close $f + set x +} {15 abcdefghijklmno 1} +test chan-io-8.7 {PeekAhead: cleanup} {stdio testchannel openpipe fileevent} { + # Make sure bytes are removed from buffer. + + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -translation {auto binary} -buffering none + chan puts -nonewline $f "abcdefghijklmno\r" + # here + set x [list [chan gets $f line] $line [testchannel queuedcr $f]] + chan puts -nonewline $f "\x1a" + lappend x [chan gets $f line] $line + chan close $f + set x +} {15 abcdefghijklmno 1 -1 {}} + +test chan-io-9.1 {CommonGetsCleanup} emptyTest { +} {} + +test chan-io-10.1 {Tcl_ReadChars: CheckChannelErrors} emptyTest { + # no test, need to cause an async error. +} {} +test chan-io-10.2 {Tcl_ReadChars: loop until enough copied} { + # one time + # for (copied = 0; (unsigned) toRead > 0; ) + + set f [open $path(test1) w] + chan puts $f abcdefghijklmnop + chan close $f + + set f [open $path(test1)] + set x [chan read $f 5] + chan close $f + set x +} {abcde} +test chan-io-10.3 {Tcl_ReadChars: loop until enough copied} { + # multiple times + # for (copied = 0; (unsigned) toRead > 0; ) + + set f [open $path(test1) w] + chan puts $f abcdefghijklmnopqrstuvwxyz + chan close $f + + set f [open $path(test1)] + chan configure $f -buffersize 16 + # here + set x [chan read $f 19] + chan close $f + set x +} {abcdefghijklmnopqrs} +test chan-io-10.4 {Tcl_ReadChars: no more in channel buffer} { + # (copiedNow < 0) + + set f [open $path(test1) w] + chan puts -nonewline $f abcdefghijkl + chan close $f + + set f [open $path(test1)] + # here + set x [chan read $f 1000] + chan close $f + set x +} {abcdefghijkl} +test chan-io-10.5 {Tcl_ReadChars: stop on EOF} { + # (chanPtr->flags & CHANNEL_EOF) + + set f [open $path(test1) w] + chan puts -nonewline $f abcdefghijkl + chan close $f + + set f [open $path(test1)] + # here + set x [chan read $f 1000] + chan close $f + set x +} {abcdefghijkl} + +test chan-io-11.1 {ReadBytes: want to read a lot} { + # ((unsigned) toRead > (unsigned) srcLen) + + set f [open $path(test1) w] + chan puts -nonewline $f abcdefghijkl + chan close $f + set f [open $path(test1)] + chan configure $f -encoding binary + # here + set x [chan read $f 1000] + chan close $f + set x +} {abcdefghijkl} +test chan-io-11.2 {ReadBytes: want to read all} { + # ((unsigned) toRead > (unsigned) srcLen) + + set f [open $path(test1) w] + chan puts -nonewline $f abcdefghijkl + chan close $f + set f [open $path(test1)] + chan configure $f -encoding binary + # here + set x [chan read $f] + chan close $f + set x +} {abcdefghijkl} +test chan-io-11.3 {ReadBytes: allocate more space} { + # (toRead > length - offset - 1) + + set f [open $path(test1) w] + chan puts -nonewline $f abcdefghijklmnopqrstuvwxyz + chan close $f + set f [open $path(test1)] + chan configure $f -buffersize 16 -encoding binary + # here + set x [chan read $f] + chan close $f + set x +} {abcdefghijklmnopqrstuvwxyz} +test chan-io-11.4 {ReadBytes: EOF char found} { + # (TranslateInputEOL() != 0) + + set f [open $path(test1) w] + chan puts $f abcdefghijklmnopqrstuvwxyz + chan close $f + set f [open $path(test1)] + chan configure $f -eofchar m -encoding binary + # here + set x [list [chan read $f] [chan eof $f] [chan read $f] [chan eof $f]] + chan close $f + set x +} [list "abcdefghijkl" 1 "" 1] + +test chan-io-12.1 {ReadChars: want to read a lot} { + # ((unsigned) toRead > (unsigned) srcLen) + + set f [open $path(test1) w] + chan puts -nonewline $f abcdefghijkl + chan close $f + set f [open $path(test1)] + # here + set x [chan read $f 1000] + chan close $f + set x +} {abcdefghijkl} +test chan-io-12.2 {ReadChars: want to read all} { + # ((unsigned) toRead > (unsigned) srcLen) + + set f [open $path(test1) w] + chan puts -nonewline $f abcdefghijkl + chan close $f + set f [open $path(test1)] + # here + set x [chan read $f] + chan close $f + set x +} {abcdefghijkl} +test chan-io-12.3 {ReadChars: allocate more space} { + # (toRead > length - offset - 1) + + set f [open $path(test1) w] + chan puts -nonewline $f abcdefghijklmnopqrstuvwxyz + chan close $f + set f [open $path(test1)] + chan configure $f -buffersize 16 + # here + set x [chan read $f] + chan close $f + set x +} {abcdefghijklmnopqrstuvwxyz} +test chan-io-12.4 {ReadChars: split-up char} {stdio testchannel openpipe fileevent} { + # (srcRead == 0) + + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -encoding binary -buffering none -buffersize 16 + chan puts -nonewline $f "123456789012345\x96" + chan configure $f -encoding shiftjis -blocking 0 + + chan event $f read [namespace code "ready $f"] + proc ready {f} { + variable x + lappend x [chan read $f] [testchannel inputbuffered $f] + } + variable x {} + + chan configure $f -encoding shiftjis + vwait [namespace which -variable x] + chan configure $f -encoding binary -blocking 1 + chan puts -nonewline $f "\x7b" + after 500 ;# Give the cat process time to catch up + chan configure $f -encoding shiftjis -blocking 0 + vwait [namespace which -variable x] + chan close $f + set x +} [list "123456789012345" 1 "\u672c" 0] +test chan-io-12.5 {ReadChars: chan events on partial characters} {stdio openpipe fileevent} { + set path(test1) [makeFile { + chan configure stdout -encoding binary -buffering none + chan gets stdin; chan puts -nonewline "\xe7" + chan gets stdin; chan puts -nonewline "\x89" + chan gets stdin; chan puts -nonewline "\xa6" + } test1] + set f [open "|[list [interpreter] $path(test1)]" r+] + chan event $f readable [namespace code { + lappend x [chan read $f] + if {[chan eof $f]} { + lappend x eof + } + }] + chan puts $f "go1" + chan flush $f + chan configure $f -blocking 0 -encoding utf-8 + variable x {} + vwait [namespace which -variable x] + after 500 [namespace code { lappend x timeout }] + vwait [namespace which -variable x] + chan puts $f "go2" + chan flush $f + vwait [namespace which -variable x] + after 500 [namespace code { lappend x timeout }] + vwait [namespace which -variable x] + chan puts $f "go3" + chan flush $f + vwait [namespace which -variable x] + vwait [namespace which -variable x] + lappend x [catch {chan close $f} msg] $msg + set x +} "{} timeout {} timeout \u7266 {} eof 0 {}" + +test chan-io-13.1 {TranslateInputEOL: cr mode} {} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\rdef\r" + chan close $f + set f [open $path(test1)] + chan configure $f -translation cr + set x [chan read $f] + chan close $f + set x +} "abcd\ndef\n" +test chan-io-13.2 {TranslateInputEOL: crlf mode} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\r\ndef\r\n" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf + set x [chan read $f] + chan close $f + set x +} "abcd\ndef\n" +test chan-io-13.3 {TranslateInputEOL: crlf mode: naked cr} { + # (src >= srcMax) + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\r\ndef\r" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf + set x [chan read $f] + chan close $f + set x +} "abcd\ndef\r" +test chan-io-13.4 {TranslateInputEOL: crlf mode: cr followed by not \n} { + # (src >= srcMax) + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\r\ndef\rfgh" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf + set x [chan read $f] + chan close $f + set x +} "abcd\ndef\rfgh" +test chan-io-13.5 {TranslateInputEOL: crlf mode: naked lf} { + # (src >= srcMax) + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\r\ndef\nfgh" + chan close $f + set f [open $path(test1)] + chan configure $f -translation crlf + set x [chan read $f] + chan close $f + set x +} "abcd\ndef\nfgh" +test chan-io-13.6 {TranslateInputEOL: auto mode: saw cr in last segment} {stdio testchannel openpipe fileevent} { + # (chanPtr->flags & INPUT_SAW_CR) + # This test may fail on slower machines. + + set f [open "|[list [interpreter] $path(cat)]" w+] + chan configure $f -blocking 0 -buffering none -translation {auto lf} + + chan event $f read [namespace code "ready $f"] + proc ready {f} { + variable x + lappend x [chan read $f] [testchannel queuedcr $f] + } + variable x {} + variable y {} + + chan puts -nonewline $f "abcdefghj\r" + after 500 [namespace code {set y ok}] + vwait [namespace which -variable y] + + chan puts -nonewline $f "\n01234" + after 500 [namespace code {set y ok}] + vwait [namespace which -variable y] + + chan close $f + set x +} [list "abcdefghj\n" 1 "01234" 0] +test chan-io-13.7 {TranslateInputEOL: auto mode: naked \r} {testchannel openpipe} { + # (src >= srcMax) + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\r" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto + set x [list [chan read $f] [testchannel queuedcr $f]] + chan close $f + set x +} [list "abcd\n" 1] +test chan-io-13.8 {TranslateInputEOL: auto mode: \r\n} { + # (*src == '\n') + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\r\ndef" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto + set x [chan read $f] + chan close $f + set x +} "abcd\ndef" +test chan-io-13.9 {TranslateInputEOL: auto mode: \r followed by not \n} { + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\rdef" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto + set x [chan read $f] + chan close $f + set x +} "abcd\ndef" +test chan-io-13.10 {TranslateInputEOL: auto mode: \n} { + # not (*src == '\r') + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\ndef" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto + set x [chan read $f] + chan close $f + set x +} "abcd\ndef" +test chan-io-13.11 {TranslateInputEOL: EOF char} { + # (*chanPtr->inEofChar != '\0') + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "abcd\ndefgh" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto -eofchar e + set x [chan read $f] + chan close $f + set x +} "abcd\nd" +test chan-io-13.12 {TranslateInputEOL: find EOF char in src} { + # (*chanPtr->inEofChar != '\0') + + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "\r\n\r\n\r\nab\r\n\r\ndef\r\n\r\n\r\n" + chan close $f + set f [open $path(test1)] + chan configure $f -translation auto -eofchar e + set x [chan read $f] + chan close $f + set x +} "\n\n\nab\n\nd" + +# Test standard handle management. The functions tested are +# Tcl_SetStdChannel and Tcl_GetStdChannel. Incidentally we are +# also testing channel table management. + +if {[info commands testchannel] != ""} { + set consoleFileNames [lsort [testchannel open]] +} else { + # just to avoid an error + set consoleFileNames [list] +} + +test chan-io-14.1 {Tcl_SetStdChannel and Tcl_GetStdChannel} {testchannel} { + set l "" + lappend l [chan configure stdin -buffering] + lappend l [chan configure stdout -buffering] + lappend l [chan configure stderr -buffering] + lappend l [lsort [testchannel open]] + set l +} [list line line none $consoleFileNames] +test chan-io-14.2 {Tcl_SetStdChannel and Tcl_GetStdChannel} { + interp create x + set l "" + lappend l [x eval {chan configure stdin -buffering}] + lappend l [x eval {chan configure stdout -buffering}] + lappend l [x eval {chan configure stderr -buffering}] + interp delete x + set l +} {line line none} +set path(test3) [makeFile {} test3] +test chan-io-14.3 {Tcl_SetStdChannel & Tcl_GetStdChannel} {exec openpipe} { + set f [open $path(test1) w] + chan puts -nonewline $f { + chan close stdin + chan close stdout + chan close stderr + set f [} + chan puts $f [list open $path(test1) r]] + chan puts $f "set f2 \[[list open $path(test2) w]]" + chan puts $f "set f3 \[[list open $path(test3) w]]" + chan puts $f { chan puts stdout [chan gets stdin] + chan puts stdout out + chan puts stderr err + chan close $f + chan close $f2 + chan close $f3 + } + chan close $f + set result [exec [interpreter] $path(test1)] + set f [open $path(test2) r] + set f2 [open $path(test3) r] + lappend result [chan read $f] [chan read $f2] + chan close $f + chan close $f2 + set result +} {{ +out +} {err +}} +# This test relies on the fact that the smallest available fd is used first. +test chan-io-14.4 {Tcl_SetStdChannel & Tcl_GetStdChannel} {exec unix} { + set f [open $path(test1) w] + chan puts -nonewline $f { chan close stdin + chan close stdout + chan close stderr + set f [} + chan puts $f [list open $path(test1) r]] + chan puts $f "set f2 \[[list open $path(test2) w]]" + chan puts $f "set f3 \[[list open $path(test3) w]]" + chan puts $f { chan puts stdout [chan gets stdin] + chan puts stdout $f2 + chan puts stderr $f3 + chan close $f + chan close $f2 + chan close $f3 + } + chan close $f + set result [exec [interpreter] $path(test1)] + set f [open $path(test2) r] + set f2 [open $path(test3) r] + lappend result [chan read $f] [chan read $f2] + chan close $f + chan close $f2 + set result +} {{ chan close stdin +file1 +} {file2 +}} +catch {interp delete z} +test chan-io-14.5 {Tcl_GetChannel: stdio name translation} { + interp create z + chan eof stdin + catch {z eval chan flush stdin} msg1 + catch {z eval chan close stdin} msg2 + catch {z eval chan flush stdin} msg3 + set result [list $msg1 $msg2 $msg3] + interp delete z + set result +} {{channel "stdin" wasn't opened for writing} {} {can not find channel named "stdin"}} +test chan-io-14.6 {Tcl_GetChannel: stdio name translation} { + interp create z + chan eof stdout + catch {z eval chan flush stdout} msg1 + catch {z eval chan close stdout} msg2 + catch {z eval chan flush stdout} msg3 + set result [list $msg1 $msg2 $msg3] + interp delete z + set result +} {{} {} {can not find channel named "stdout"}} +test chan-io-14.7 {Tcl_GetChannel: stdio name translation} { + interp create z + chan eof stderr + catch {z eval chan flush stderr} msg1 + catch {z eval chan close stderr} msg2 + catch {z eval chan flush stderr} msg3 + set result [list $msg1 $msg2 $msg3] + interp delete z + set result +} {{} {} {can not find channel named "stderr"}} +set path(script) [makeFile {} script] +test chan-io-14.8 {reuse of stdio special channels} {stdio openpipe} { + file delete $path(script) + file delete $path(test1) + set f [open $path(script) w] + chan puts -nonewline $f { + chan close stderr + set f [} + chan puts $f [list open $path(test1) w]] + chan puts -nonewline $f { + chan puts stderr hello + chan close $f + set f [} + chan puts $f [list open $path(test1) r]] + chan puts $f { + chan puts [chan gets $f] + } + chan close $f + set f [open "|[list [interpreter] $path(script)]" r] + set c [chan gets $f] + chan close $f + set c +} hello +test chan-io-14.9 {reuse of stdio special channels} {stdio openpipe fileevent} { + file delete $path(script) + file delete $path(test1) + set f [open $path(script) w] + chan puts $f { + array set path [lindex $argv 0] + set f [open $path(test1) w] + chan puts $f hello + chan close $f + chan close stderr + set f [open "|[list [info nameofexecutable] $path(cat) $path(test1)]" r] + chan puts [chan gets $f] + } + chan close $f + set f [open "|[list [interpreter] $path(script) [array get path]]" r] + set c [chan gets $f] + chan close $f + # Added delay to give Windows time to stop the spawned process and clean + # up its grip on the file test1. Added delete as proper test cleanup. + # The failing tests were 18.1 and 18.2 as first re-users of file "test1". + after 10000 + file delete $path(script) + file delete $path(test1) + set c +} hello + +test chan-io-15.1 {Tcl_CreateChan CloseHandler} emptyTest { +} {} + +test chan-io-16.1 {Tcl_DeleteChan CloseHandler} emptyTest { +} {} + +# Test channel table management. The functions tested are +# GetChannelTable, DeleteChannelTable, Tcl_RegisterChannel, +# Tcl_UnregisterChannel, Tcl_GetChannel and Tcl_CreateChannel. +# +# These functions use "eof stdin" to ensure that the standard +# channels are added to the channel table of the interpreter. + +test chan-io-17.1 {GetChannelTable, DeleteChannelTable on std handles} {testchannel} { + set l1 [testchannel refcount stdin] + chan eof stdin + interp create x + set l "" + lappend l [expr [testchannel refcount stdin] - $l1] + x eval {chan eof stdin} + lappend l [expr [testchannel refcount stdin] - $l1] + interp delete x + lappend l [expr [testchannel refcount stdin] - $l1] + set l +} {0 1 0} +test chan-io-17.2 {GetChannelTable, DeleteChannelTable on std handles} {testchannel} { + set l1 [testchannel refcount stdout] + chan eof stdin + interp create x + set l "" + lappend l [expr [testchannel refcount stdout] - $l1] + x eval {chan eof stdout} + lappend l [expr [testchannel refcount stdout] - $l1] + interp delete x + lappend l [expr [testchannel refcount stdout] - $l1] + set l +} {0 1 0} +test chan-io-17.3 {GetChannelTable, DeleteChannelTable on std handles} {testchannel} { + set l1 [testchannel refcount stderr] + chan eof stdin + interp create x + set l "" + lappend l [expr [testchannel refcount stderr] - $l1] + x eval {chan eof stderr} + lappend l [expr [testchannel refcount stderr] - $l1] + interp delete x + lappend l [expr [testchannel refcount stderr] - $l1] + set l +} {0 1 0} + +test chan-io-18.1 {Tcl_RegisterChannel, Tcl_UnregisterChannel} {testchannel} { + file delete -force $path(test1) + set l "" + set f [open $path(test1) w] + lappend l [lindex [testchannel info $f] 15] + chan close $f + if {[catch {lindex [testchannel info $f] 15} msg]} { + lappend l $msg + } else { + lappend l "very broken: $f found after being chan closed" + } + string compare [string tolower $l] \ + [list 1 [format "can not find channel named \"%s\"" $f]] +} 0 +test chan-io-18.2 {Tcl_RegisterChannel, Tcl_UnregisterChannel} {testchannel} { + file delete -force $path(test1) + set l "" + set f [open $path(test1) w] + lappend l [lindex [testchannel info $f] 15] + interp create x + interp share "" $f x + lappend l [lindex [testchannel info $f] 15] + x eval chan close $f + lappend l [lindex [testchannel info $f] 15] + interp delete x + lappend l [lindex [testchannel info $f] 15] + chan close $f + if {[catch {lindex [testchannel info $f] 15} msg]} { + lappend l $msg + } else { + lappend l "very broken: $f found after being chan closed" + } + string compare [string tolower $l] \ + [list 1 2 1 1 [format "can not find channel named \"%s\"" $f]] +} 0 +test chan-io-18.3 {Tcl_RegisterChannel, Tcl_UnregisterChannel} {testchannel} { + file delete $path(test1) + set l "" + set f [open $path(test1) w] + lappend l [lindex [testchannel info $f] 15] + interp create x + interp share "" $f x + lappend l [lindex [testchannel info $f] 15] + interp delete x + lappend l [lindex [testchannel info $f] 15] + chan close $f + if {[catch {lindex [testchannel info $f] 15} msg]} { + lappend l $msg + } else { + lappend l "very broken: $f found after being chan closed" + } + string compare [string tolower $l] \ + [list 1 2 1 [format "can not find channel named \"%s\"" $f]] +} 0 + +test chan-io-19.1 {Tcl_GetChannel->Tcl_GetStdChannel, standard handles} { + chan eof stdin +} 0 +test chan-io-19.2 {testing Tcl_GetChannel, user opened handle} { + file delete $path(test1) + set f [open $path(test1) w] + set x [chan eof $f] + chan close $f + set x +} 0 +test chan-io-19.3 {Tcl_GetChannel, channel not found} { + list [catch {chan eof file34} msg] $msg +} {1 {can not find channel named "file34"}} +test chan-io-19.4 {Tcl_CreateChannel, insertion into channel table} {testchannel} { + file delete $path(test1) + set f [open $path(test1) w] + set l "" + lappend l [chan eof $f] + chan close $f + if {[catch {lindex [testchannel info $f] 15} msg]} { + lappend l $msg + } else { + lappend l "very broken: $f found after being chan closed" + } + string compare [string tolower $l] \ + [list 0 [format "can not find channel named \"%s\"" $f]] +} 0 + +test chan-io-20.1 {Tcl_CreateChannel: initial settings} { + set a [open $path(test2) w] + set old [encoding system] + encoding system ascii + set f [open $path(test1) w] + set x [chan configure $f -encoding] + chan close $f + encoding system $old + chan close $a + set x +} {ascii} +test chan-io-20.2 {Tcl_CreateChannel: initial settings} {win} { + set f [open $path(test1) w+] + set x [list [chan configure $f -eofchar] [chan configure $f -translation]] + chan close $f + set x +} [list [list \x1a ""] {auto crlf}] +test chan-io-20.3 {Tcl_CreateChannel: initial settings} {unix} { + set f [open $path(test1) w+] + set x [list [chan configure $f -eofchar] [chan configure $f -translation]] + chan close $f + set x +} {{{} {}} {auto lf}} +set path(stdout) [makeFile {} stdout] +test chan-io-20.5 {Tcl_CreateChannel: install channel in empty slot} {stdio openpipe} { + set f [open $path(script) w] + chan puts -nonewline $f { + chan close stdout + set f1 [} + chan puts $f [list open $path(stdout) w]] + chan puts $f { + chan configure $f1 -buffersize 777 + chan puts stderr [chan configure stdout -buffersize] + } + chan close $f + set f [open "|[list [interpreter] $path(script)]"] + catch {chan close $f} msg + set msg +} {777} + +test chan-io-21.1 {Chan CloseChannelsOnExit} emptyTest { +} {} + +# Test management of attributes associated with a channel, such as +# its default translation, its name and type, etc. The functions +# tested in this group are Tcl_GetChannelName, +# Tcl_GetChannelType and Tcl_GetChannelFile. Tcl_GetChannelInstanceData +# not tested because files do not use the instance data. + +test chan-io-22.1 {Tcl_GetChannelMode} emptyTest { + # Not used anywhere in Tcl. +} {} + +test chan-io-23.1 {Tcl_GetChannelName} {testchannel} { + file delete $path(test1) + set f [open $path(test1) w] + set n [testchannel name $f] + chan close $f + string compare $n $f +} 0 + +test chan-io-24.1 {Tcl_GetChannelType} {testchannel} { + file delete $path(test1) + set f [open $path(test1) w] + set t [testchannel type $f] + chan close $f + string compare $t file +} 0 + +test chan-io-25.1 {Tcl_GetChannelHandle, input} {testchannel} { + set f [open $path(test1) w] + chan configure $f -translation lf -eofchar {} + chan puts $f "1234567890\n098765432" + chan close $f + set f [open $path(test1) r] + chan gets $f + set l "" + lappend l [testchannel inputbuffered $f] + lappend l [chan tell $f] + chan close $f + set l +} {10 11} +test chan-io-25.2 {Tcl_GetChannelHandle, output} {testchannel} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts $f hello + set l "" + lappend l [testchannel outputbuffered $f] + lappend l [chan tell $f] + chan flush $f + lappend l [testchannel outputbuffered $f] + lappend l [chan tell $f] + chan close $f + file delete $path(test1) + set l +} {6 6 0 6} + +test chan-io-26.1 {Tcl_GetChannelInstanceData} {stdio openpipe} { + # "pid" command uses Tcl_GetChannelInstanceData + # Don't care what pid is (but must be a number), just want to exercise it. + + set f [open "|[list [interpreter] << exit]"] + expr [pid $f] + chan close $f +} {} + +# Test flushing. The functions tested here are FlushChannel. + +test chan-io-27.1 {FlushChannel, no output buffered} { + file delete $path(test1) + set f [open $path(test1) w] + chan flush $f + set s [file size $path(test1)] + chan close $f + set s +} 0 +test chan-io-27.2 {FlushChannel, some output buffered} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -eofchar {} + set l "" + chan puts $f hello + lappend l [file size $path(test1)] + chan flush $f + lappend l [file size $path(test1)] + chan close $f + lappend l [file size $path(test1)] + set l +} {0 6 6} +test chan-io-27.3 {FlushChannel, implicit flush on chan close} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -eofchar {} + set l "" + chan puts $f hello + lappend l [file size $path(test1)] + chan close $f + lappend l [file size $path(test1)] + set l +} {0 6} +test chan-io-27.4 {FlushChannel, implicit flush when buffer fills} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -eofchar {} + chan configure $f -buffersize 60 + set l "" + lappend l [file size $path(test1)] + for {set i 0} {$i < 12} {incr i} { + chan puts $f hello + } + lappend l [file size $path(test1)] + chan flush $f + lappend l [file size $path(test1)] + chan close $f + set l +} {0 60 72} +test chan-io-27.5 {FlushChannel, implicit flush when buffer fills and on chan close} \ + {unixOrPc} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -buffersize 60 -eofchar {} + set l "" + lappend l [file size $path(test1)] + for {set i 0} {$i < 12} {incr i} { + chan puts $f hello + } + lappend l [file size $path(test1)] + chan close $f + lappend l [file size $path(test1)] + set l +} {0 60 72} +set path(pipe) [makeFile {} pipe] +set path(output) [makeFile {} output] +test chan-io-27.6 {FlushChannel, async flushing, async chan close} \ + {stdio asyncPipeChan Close openpipe} { + file delete $path(pipe) + file delete $path(output) + set f [open $path(pipe) w] + chan puts $f "set f \[[list open $path(output) w]]" + chan puts $f { + chan configure $f -translation lf -buffering none -eofchar {} + while {![chan eof stdin]} { + after 20 + chan puts -nonewline $f [chan read stdin 1024] + } + chan close $f + } + chan close $f + set x 01234567890123456789012345678901 + for {set i 0} {$i < 11} {incr i} { + set x "$x$x" + } + set f [open $path(output) w] + chan close $f + set f [open "|[list [interpreter] $path(pipe)]" w] + chan configure $f -blocking off + chan puts -nonewline $f $x + chan close $f + set counter 0 + while {([file size $path(output)] < 65536) && ($counter < 1000)} { + after 20 [list incr [namespace which -variable counter]] + vwait [namespace which -variable counter] + } + if {$counter == 1000} { + set result "file size only [file size $path(output)]" + } else { + set result ok + } +} ok + +# Tests closing a channel. The functions tested are Chan CloseChannel and Tcl_Chan Close. + +test chan-io-28.1 {Chan CloseChannel called when all references are dropped} {testchannel} { + file delete $path(test1) + set f [open $path(test1) w] + interp create x + interp share "" $f x + set l "" + lappend l [testchannel refcount $f] + x eval chan close $f + interp delete x + lappend l [testchannel refcount $f] + chan close $f + set l +} {2 1} +test chan-io-28.2 {Chan CloseChannel called when all references are dropped} { + file delete $path(test1) + set f [open $path(test1) w] + interp create x + interp share "" $f x + chan puts -nonewline $f abc + chan close $f + x eval chan puts $f def + x eval chan close $f + interp delete x + set f [open $path(test1) r] + set l [chan gets $f] + chan close $f + set l +} abcdef +test chan-io-28.3 {Chan CloseChannel, not called before output queue is empty} \ + {stdio asyncPipeChan Close nonPortable openpipe} { + file delete $path(pipe) + file delete $path(output) + set f [open $path(pipe) w] + chan puts $f { + + # Need to not have eof char appended on chan close, because the other + # side of the pipe already chan closed, so that writing would cause an + # error "invalid file". + + chan configure stdout -eofchar {} + chan configure stderr -eofchar {} + + set f [open $path(output) w] + chan configure $f -translation lf -buffering none + for {set x 0} {$x < 20} {incr x} { + after 20 + chan puts -nonewline $f [chan read stdin 1024] + } + chan close $f + } + chan close $f + set x 01234567890123456789012345678901 + for {set i 0} {$i < 11} {incr i} { + set x "$x$x" + } + set f [open $path(output) w] + chan close $f + set f [open "|[list [interpreter] pipe]" r+] + chan configure $f -blocking off -eofchar {} + + chan puts -nonewline $f $x + chan close $f + set counter 0 + while {([file size $path(output)] < 20480) && ($counter < 1000)} { + after 20 [list incr [namespace which -variable counter]] + vwait [namespace which -variable counter] + } + if {$counter == 1000} { + set result probably_broken + } else { + set result ok + } +} ok +test chan-io-28.4 {Tcl_Chan Close} {testchannel} { + file delete $path(test1) + set l "" + lappend l [lsort [testchannel open]] + set f [open $path(test1) w] + lappend l [lsort [testchannel open]] + chan close $f + lappend l [lsort [testchannel open]] + set x [list $consoleFileNames \ + [lsort [list {*}$consoleFileNames $f]] \ + $consoleFileNames] + string compare $l $x +} 0 +test chan-io-28.5 {Tcl_Chan Close vs standard handles} {stdio unix testchannel openpipe} { + file delete $path(script) + set f [open $path(script) w] + chan puts $f { + chan close stdin + chan puts [testchannel open] + } + chan close $f + set f [open "|[list [interpreter] $path(script)]" r] + set l [chan gets $f] + chan close $f + set l +} {file1 file2} + +test chan-io-29.1 {Tcl_WriteChars, channel not writable} { + list [catch {chan puts stdin hello} msg] $msg +} {1 {channel "stdin" wasn't opened for writing}} +test chan-io-29.2 {Tcl_WriteChars, empty string} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -eofchar {} + chan puts -nonewline $f "" + chan close $f + file size $path(test1) +} 0 +test chan-io-29.3 {Tcl_WriteChars, nonempty string} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -eofchar {} + chan puts -nonewline $f hello + chan close $f + file size $path(test1) +} 5 +test chan-io-29.4 {Tcl_WriteChars, buffering in full buffering mode} {testchannel} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -buffering full -eofchar {} + chan puts $f hello + set l "" + lappend l [testchannel outputbuffered $f] + lappend l [file size $path(test1)] + chan flush $f + lappend l [testchannel outputbuffered $f] + lappend l [file size $path(test1)] + chan close $f + set l +} {6 0 0 6} +test chan-io-29.5 {Tcl_WriteChars, buffering in line buffering mode} {testchannel} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -buffering line -eofchar {} + chan puts -nonewline $f hello + set l "" + lappend l [testchannel outputbuffered $f] + lappend l [file size $path(test1)] + chan puts $f hello + lappend l [testchannel outputbuffered $f] + lappend l [file size $path(test1)] + chan close $f + set l +} {5 0 0 11} +test chan-io-29.6 {Tcl_WriteChars, buffering in no buffering mode} {testchannel} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -buffering none -eofchar {} + chan puts -nonewline $f hello + set l "" + lappend l [testchannel outputbuffered $f] + lappend l [file size $path(test1)] + chan puts $f hello + lappend l [testchannel outputbuffered $f] + lappend l [file size $path(test1)] + chan close $f + set l +} {0 5 0 11} +test chan-io-29.7 {Tcl_Flush, full buffering} {testchannel} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -buffering full -eofchar {} + chan puts -nonewline $f hello + set l "" + lappend l [testchannel outputbuffered $f] + lappend l [file size $path(test1)] + chan puts $f hello + lappend l [testchannel outputbuffered $f] + lappend l [file size $path(test1)] + chan flush $f + lappend l [testchannel outputbuffered $f] + lappend l [file size $path(test1)] + chan close $f + set l +} {5 0 11 0 0 11} +test chan-io-29.8 {Tcl_Flush, full buffering} {testchannel} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -buffering line + chan puts -nonewline $f hello + set l "" + lappend l [testchannel outputbuffered $f] + lappend l [file size $path(test1)] + chan flush $f + lappend l [testchannel outputbuffered $f] + lappend l [file size $path(test1)] + chan puts $f hello + lappend l [testchannel outputbuffered $f] + lappend l [file size $path(test1)] + chan flush $f + lappend l [testchannel outputbuffered $f] + lappend l [file size $path(test1)] + chan close $f + set l +} {5 0 0 5 0 11 0 11} +test chan-io-29.9 {Tcl_Flush, channel not writable} { + list [catch {chan flush stdin} msg] $msg +} {1 {channel "stdin" wasn't opened for writing}} +test chan-io-29.10 {Tcl_WriteChars, looping and buffering} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf -eofchar {} + set f2 [open $path(longfile) r] + for {set x 0} {$x < 10} {incr x} { + chan puts $f1 [chan gets $f2] + } + chan close $f2 + chan close $f1 + file size $path(test1) +} 387 +test chan-io-29.11 {Tcl_WriteChars, no newline, implicit flush} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -eofchar {} + set f2 [open $path(longfile) r] + for {set x 0} {$x < 10} {incr x} { + chan puts -nonewline $f1 [chan gets $f2] + } + chan close $f1 + chan close $f2 + file size $path(test1) +} 377 +test chan-io-29.12 {Tcl_WriteChars on a pipe} {stdio openpipe} { + file delete $path(test1) + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan puts $f1 "set f1 \[[list open $path(longfile) r]]" + chan puts $f1 { + for {set x 0} {$x < 10} {incr x} { + chan puts [chan gets $f1] + } + } + chan close $f1 + set f1 [open "|[list [interpreter] $path(pipe)]" r] + set f2 [open $path(longfile) r] + set y ok + for {set x 0} {$x < 10} {incr x} { + set l1 [chan gets $f1] + set l2 [chan gets $f2] + if {"$l1" != "$l2"} { + set y broken + } + } + chan close $f1 + chan close $f2 + set y +} ok +test chan-io-29.13 {Tcl_WriteChars to a pipe, line buffered} {stdio openpipe} { + file delete $path(test1) + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan puts $f1 { + chan puts [chan gets stdin] + chan puts [chan gets stdin] + } + chan close $f1 + set y ok + set f1 [open "|[list [interpreter] $path(pipe)]" r+] + chan configure $f1 -buffering line + set f2 [open $path(longfile) r] + set line [chan gets $f2] + chan puts $f1 $line + set backline [chan gets $f1] + if {"$line" != "$backline"} { + set y broken + } + set line [chan gets $f2] + chan puts $f1 $line + set backline [chan gets $f1] + if {"$line" != "$backline"} { + set y broken + } + chan close $f1 + chan close $f2 + set y +} ok +test chan-io-29.14 {Tcl_WriteChars, buffering and implicit flush at chan close} { + file delete $path(test3) + set f [open $path(test3) w] + chan puts -nonewline $f "Text1" + chan puts -nonewline $f " Text 2" + chan puts $f " Text 3" + chan close $f + set f [open $path(test3) r] + set x [chan gets $f] + chan close $f + set x +} {Text1 Text 2 Text 3} +test chan-io-29.15 {Tcl_Flush, channel not open for writing} { + file delete $path(test1) + set fd [open $path(test1) w] + chan close $fd + set fd [open $path(test1) r] + set x [list [catch {chan flush $fd} msg] $msg] + chan close $fd + string compare $x \ + [list 1 "channel \"$fd\" wasn't opened for writing"] +} 0 +test chan-io-29.16 {Tcl_Flush on pipe opened only for reading} {stdio openpipe} { + set fd [open "|[list [interpreter] cat longfile]" r] + set x [list [catch {chan flush $fd} msg] $msg] + catch {chan close $fd} + string compare $x \ + [list 1 "channel \"$fd\" wasn't opened for writing"] +} 0 +test chan-io-29.17 {Tcl_WriteChars buffers, then Tcl_Flush flushes} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf + chan puts $f1 hello + chan puts $f1 hello + chan puts $f1 hello + chan flush $f1 + set x [file size $path(test1)] + chan close $f1 + set x +} 18 +test chan-io-29.18 {Tcl_WriteChars and Tcl_Flush intermixed} { + file delete $path(test1) + set x "" + set f1 [open $path(test1) w] + chan configure $f1 -translation lf + chan puts $f1 hello + chan puts $f1 hello + chan puts $f1 hello + chan flush $f1 + lappend x [file size $path(test1)] + chan puts $f1 hello + chan flush $f1 + lappend x [file size $path(test1)] + chan puts $f1 hello + chan flush $f1 + lappend x [file size $path(test1)] + chan close $f1 + set x +} {18 24 30} +test chan-io-29.19 {Explicit and implicit flushes} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf -eofchar {} + set x "" + chan puts $f1 hello + chan puts $f1 hello + chan puts $f1 hello + chan flush $f1 + lappend x [file size $path(test1)] + chan puts $f1 hello + chan flush $f1 + lappend x [file size $path(test1)] + chan puts $f1 hello + chan close $f1 + lappend x [file size $path(test1)] + set x +} {18 24 30} +test chan-io-29.20 {Implicit flush when buffer is full} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf -eofchar {} + set line "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + for {set x 0} {$x < 100} {incr x} { + chan puts $f1 $line + } + set z "" + lappend z [file size $path(test1)] + for {set x 0} {$x < 100} {incr x} { + chan puts $f1 $line + } + lappend z [file size $path(test1)] + chan close $f1 + lappend z [file size $path(test1)] + set z +} {4096 12288 12600} +test chan-io-29.21 {Tcl_Flush to pipe} {stdio openpipe} { + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan puts $f1 {set x [chan read stdin 6]} + chan puts $f1 {set cnt [string length $x]} + chan puts $f1 {chan puts "read $cnt characters"} + chan close $f1 + set f1 [open "|[list [interpreter] $path(pipe)]" r+] + chan puts $f1 hello + chan flush $f1 + set x [chan gets $f1] + catch {chan close $f1} + set x +} "read 6 characters" +test chan-io-29.22 {Tcl_Flush called at other end of pipe} {stdio openpipe} { + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan puts $f1 { + chan configure stdout -buffering full + chan puts hello + chan puts hello + chan flush stdout + chan gets stdin + chan puts bye + chan flush stdout + } + chan close $f1 + set f1 [open "|[list [interpreter] $path(pipe)]" r+] + set x "" + lappend x [chan gets $f1] + lappend x [chan gets $f1] + chan puts $f1 hello + chan flush $f1 + lappend x [chan gets $f1] + chan close $f1 + set x +} {hello hello bye} +test chan-io-29.23 {Tcl_Flush and line buffering at end of pipe} {stdio openpipe} { + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan puts $f1 { + chan puts hello + chan puts hello + chan gets stdin + chan puts bye + } + chan close $f1 + set f1 [open "|[list [interpreter] $path(pipe)]" r+] + set x "" + lappend x [chan gets $f1] + lappend x [chan gets $f1] + chan puts $f1 hello + chan flush $f1 + lappend x [chan gets $f1] + chan close $f1 + set x +} {hello hello bye} +test chan-io-29.24 {Tcl_WriteChars and Tcl_Flush move end of file} { + set f [open $path(test3) w] + chan puts $f "Line 1" + chan puts $f "Line 2" + set f2 [open $path(test3)] + set x {} + lappend x [chan read -nonewline $f2] + chan close $f2 + chan flush $f + set f2 [open $path(test3)] + lappend x [chan read -nonewline $f2] + chan close $f2 + chan close $f + set x +} "{} {Line 1\nLine 2}" +test chan-io-29.25 {Implicit flush with Tcl_Flush to command pipelines} {stdio openpipe fileevent} { + file delete $path(test3) + set f [open "|[list [interpreter] $path(cat) | [interpreter] $path(cat) > $path(test3)]" w] + chan puts $f "Line 1" + chan puts $f "Line 2" + chan close $f + after 100 + set f [open $path(test3) r] + set x [chan read $f] + chan close $f + set x +} "Line 1\nLine 2\n" +test chan-io-29.26 {Tcl_Flush, Tcl_Write on bidirectional pipelines} {stdio unixExecs openpipe} { + set f [open "|[list cat -u]" r+] + chan puts $f "Line1" + chan flush $f + set x [chan gets $f] + chan close $f + set x +} {Line1} +test chan-io-29.27 {Tcl_Flush on chan closed pipeline} {stdio openpipe} { + file delete $path(pipe) + set f [open $path(pipe) w] + chan puts $f {exit} + chan close $f + set f [open "|[list [interpreter] $path(pipe)]" r+] + chan gets $f + chan puts $f output + after 50 + # + # The flush below will get a SIGPIPE. This is an expected part of + # test and indicates that the test operates correctly. If you run + # this test under a debugger, the signal will by intercepted unless + # you disable the debugger's signal interception. + # + if {[catch {chan flush $f} msg]} { + set x [list 1 $msg $::errorCode] + catch {chan close $f} + } else { + if {[catch {chan close $f} msg]} { + set x [list 1 $msg $::errorCode] + } else { + set x {this was supposed to fail and did not} + } + } + regsub {".*":} $x {"":} x + string tolower $x +} {1 {error flushing "": broken pipe} {posix epipe {broken pipe}}} +test chan-io-29.28 {Tcl_WriteChars, lf mode} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -eofchar {} + chan puts $f hello\nthere\nand\nhere + chan flush $f + set s [file size $path(test1)] + chan close $f + set s +} 21 +test chan-io-29.29 {Tcl_WriteChars, cr mode} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr -eofchar {} + chan puts $f hello\nthere\nand\nhere + chan close $f + file size $path(test1) +} 21 +test chan-io-29.30 {Tcl_WriteChars, crlf mode} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf -eofchar {} + chan puts $f hello\nthere\nand\nhere + chan close $f + file size $path(test1) +} 25 +test chan-io-29.31 {Tcl_WriteChars, background flush} {stdio openpipe} { + file delete $path(pipe) + file delete $path(output) + set f [open $path(pipe) w] + chan puts $f "set f \[[list open $path(output) w]]" + chan puts $f {chan configure $f -translation lf} + set x [list while {![chan eof stdin]}] + set x "$x {" + chan puts $f $x + chan puts $f { chan puts -nonewline $f [chan read stdin 4096]} + chan puts $f { chan flush $f} + chan puts $f "}" + chan puts $f {chan close $f} + chan close $f + set x 01234567890123456789012345678901 + for {set i 0} {$i < 11} {incr i} { + set x "$x$x" + } + set f [open $path(output) w] + chan close $f + set f [open "|[list [interpreter] $path(pipe)]" r+] + chan configure $f -blocking off + chan puts -nonewline $f $x + chan close $f + set counter 0 + while {([file size $path(output)] < 65536) && ($counter < 1000)} { + after 10 [list incr [namespace which -variable counter]] + vwait [namespace which -variable counter] + } + if {$counter == 1000} { + set result "file size only [file size $path(output)]" + } else { + set result ok + } + # allow a little time for the background process to chan close. + # otherwise, the following test fails on the [file delete $path(output) + # on Windows because a process still has the file open. + after 100 set v 1; vwait v + set result +} ok +test chan-io-29.32 {Tcl_WriteChars, background flush to slow reader} \ + {stdio asyncPipeChan Close openpipe} { + file delete $path(pipe) + file delete $path(output) + set f [open $path(pipe) w] + chan puts $f "set f \[[list open $path(output) w]]" + chan puts $f {chan configure $f -translation lf} + set x [list while {![chan eof stdin]}] + set x "$x \{" + chan puts $f $x + chan puts $f { after 20} + chan puts $f { chan puts -nonewline $f [chan read stdin 1024]} + chan puts $f { chan flush $f} + chan puts $f "\}" + chan puts $f {chan close $f} + chan close $f + set x 01234567890123456789012345678901 + for {set i 0} {$i < 11} {incr i} { + set x "$x$x" + } + set f [open $path(output) w] + chan close $f + set f [open "|[list [interpreter] $path(pipe)]" r+] + chan configure $f -blocking off + chan puts -nonewline $f $x + chan close $f + set counter 0 + while {([file size $path(output)] < 65536) && ($counter < 1000)} { + after 20 [list incr [namespace which -variable counter]] + vwait [namespace which -variable counter] + } + if {$counter == 1000} { + set result "file size only [file size $path(output)]" + } else { + set result ok + } +} ok +test chan-io-29.33 {Tcl_Flush, implicit flush on exit} {exec} { + set f [open $path(script) w] + chan puts $f "set f \[[list open $path(test1) w]]" + chan puts $f {chan configure $f -translation lf + chan puts $f hello + chan puts $f bye + chan puts $f strange + } + chan close $f + exec [interpreter] $path(script) + set f [open $path(test1) r] + set r [chan read $f] + chan close $f + set r +} "hello\nbye\nstrange\n" +test chan-io-29.34 {Tcl_Chan Close, async flush on chan close, using sockets} {socket tempNotMac fileevent} { + variable c 0 + variable x running + set l abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + proc writelots {s l} { + for {set i 0} {$i < 2000} {incr i} { + chan puts $s $l + } + } + proc accept {s a p} { + variable x + chan event $s readable [namespace code [list readit $s]] + chan configure $s -blocking off + set x accepted + } + proc readit {s} { + variable c + variable x + set l [chan gets $s] + + if {[chan eof $s]} { + chan close $s + set x done + } elseif {([string length $l] > 0) || ![chan blocked $s]} { + incr c + } + } + set ss [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + set cs [socket 127.0.0.1 [lindex [chan configure $ss -sockname] 2]] + vwait [namespace which -variable x] + chan configure $cs -blocking off + writelots $cs $l + chan close $cs + chan close $ss + vwait [namespace which -variable x] + set c +} 2000 +test chan-io-29.35 {Tcl_Chan Close vs chan event vs multiple interpreters} {socket tempNotMac fileevent} { + # On Mac, this test screws up sockets such that subsequent tests using port 2828 + # either cause errors or panic(). + + catch {interp delete x} + catch {interp delete y} + interp create x + interp create y + set s [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + proc accept {s a p} { + chan puts $s hello + chan close $s + } + set c [socket 127.0.0.1 [lindex [chan configure $s -sockname] 2]] + interp share {} $c x + interp share {} $c y + chan close $c + x eval { + proc readit {s} { + chan gets $s + if {[chan eof $s]} { + chan close $s + } + } + } + y eval { + proc readit {s} { + chan gets $s + if {[chan eof $s]} { + chan close $s + } + } + } + x eval "chan event $c readable \{readit $c\}" + y eval "chan event $c readable \{readit $c\}" + y eval [list chan close $c] + update + chan close $s + interp delete x + interp delete y +} "" + +# Test end of line translations. Procedures tested are Tcl_Write, Tcl_Read. + +test chan-io-30.1 {Tcl_Write lf, Tcl_Read lf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation lf + set x [chan read $f] + chan close $f + set x +} "hello\nthere\nand\nhere\n" +test chan-io-30.2 {Tcl_Write lf, Tcl_Read cr} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation cr + set x [chan read $f] + chan close $f + set x +} "hello\nthere\nand\nhere\n" +test chan-io-30.3 {Tcl_Write lf, Tcl_Read crlf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation crlf + set x [chan read $f] + chan close $f + set x +} "hello\nthere\nand\nhere\n" +test chan-io-30.4 {Tcl_Write cr, Tcl_Read cr} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation cr + set x [chan read $f] + chan close $f + set x +} "hello\nthere\nand\nhere\n" +test chan-io-30.5 {Tcl_Write cr, Tcl_Read lf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation lf + set x [chan read $f] + chan close $f + set x +} "hello\rthere\rand\rhere\r" +test chan-io-30.6 {Tcl_Write cr, Tcl_Read crlf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation crlf + set x [chan read $f] + chan close $f + set x +} "hello\rthere\rand\rhere\r" +test chan-io-30.7 {Tcl_Write crlf, Tcl_Read crlf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation crlf + set x [chan read $f] + chan close $f + set x +} "hello\nthere\nand\nhere\n" +test chan-io-30.8 {Tcl_Write crlf, Tcl_Read lf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation lf + set x [chan read $f] + chan close $f + set x +} "hello\r\nthere\r\nand\r\nhere\r\n" +test chan-io-30.9 {Tcl_Write crlf, Tcl_Read cr} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation cr + set x [chan read $f] + chan close $f + set x +} "hello\n\nthere\n\nand\n\nhere\n\n" +test chan-io-30.10 {Tcl_Write lf, Tcl_Read auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + set c [chan read $f] + set x [chan configure $f -translation] + chan close $f + list $c $x +} {{hello +there +and +here +} auto} +test chan-io-30.11 {Tcl_Write cr, Tcl_Read auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + set c [chan read $f] + set x [chan configure $f -translation] + chan close $f + list $c $x +} {{hello +there +and +here +} auto} +test chan-io-30.12 {Tcl_Write crlf, Tcl_Read auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + set c [chan read $f] + set x [chan configure $f -translation] + chan close $f + list $c $x +} {{hello +there +and +here +} auto} +test chan-io-30.13 {Tcl_Write crlf on block boundary, Tcl_Read auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + set line "123456789ABCDE" ;# 14 char plus crlf + chan puts -nonewline $f x ;# shift crlf across block boundary + for {set i 0} {$i < 700} {incr i} { + chan puts $f $line + } + chan close $f + set f [open $path(test1) r] + chan configure $f -translation auto + set c [chan read $f] + chan close $f + string length $c +} [expr 700*15+1] +test chan-io-30.14 {Tcl_Write crlf on block boundary, Tcl_Read crlf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + set line "123456789ABCDE" ;# 14 char plus crlf + chan puts -nonewline $f x ;# shift crlf across block boundary + for {set i 0} {$i < 700} {incr i} { + chan puts $f $line + } + chan close $f + set f [open $path(test1) r] + chan configure $f -translation crlf + set c [chan read $f] + chan close $f + string length $c +} [expr 700*15+1] +test chan-io-30.15 {Tcl_Write mixed, Tcl_Read auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts $f hello\nthere\nand\rhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation auto + set c [chan read $f] + chan close $f + set c +} {hello +there +and +here +} +test chan-io-30.16 {Tcl_Write ^Z at end, Tcl_Read auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f hello\nthere\nand\rhere\n\x1a + chan close $f + set f [open $path(test1) r] + chan configure $f -eofchar \x1a -translation auto + set c [chan read $f] + chan close $f + set c +} {hello +there +and +here +} +test chan-io-30.17 {Tcl_Write, implicit ^Z at end, Tcl_Read auto} {win} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -eofchar \x1a -translation lf + chan puts $f hello\nthere\nand\rhere + chan close $f + set f [open $path(test1) r] + chan configure $f -eofchar \x1a -translation auto + set c [chan read $f] + chan close $f + set c +} {hello +there +and +here +} +test chan-io-30.18 {Tcl_Write, ^Z in middle, Tcl_Read auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + set s [format "abc\ndef\n%cghi\nqrs" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -eofchar \x1a -translation auto + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {abc def 0 {} 1 {} 1} +test chan-io-30.19 {Tcl_Write, ^Z no newline in middle, Tcl_Read auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + set s [format "abc\ndef\n%cghi\nqrs" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -eofchar \x1a -translation auto + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {abc def 0 {} 1 {} 1} +test chan-io-30.20 {Tcl_Write, ^Z in middle ignored, Tcl_Read lf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -eofchar {} + set s [format "abc\ndef\n%cghi\nqrs" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -translation lf -eofchar {} + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} "abc def 0 \x1aghi 0 qrs 0 {} 1" +test chan-io-30.21 {Tcl_Write, ^Z in middle ignored, Tcl_Read cr} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -eofchar {} + set s [format "abc\ndef\n%cghi\nqrs" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -translation cr -eofchar {} + set l "" + set x [chan gets $f] + lappend l [string compare $x "abc\ndef\n\x1aghi\nqrs\n"] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {0 1 {} 1} +test chan-io-30.22 {Tcl_Write, ^Z in middle ignored, Tcl_Read crlf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -eofchar {} + set s [format "abc\ndef\n%cghi\nqrs" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -translation crlf -eofchar {} + set l "" + set x [chan gets $f] + lappend l [string compare $x "abc\ndef\n\x1aghi\nqrs\n"] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {0 1 {} 1} +test chan-io-30.23 {Tcl_Write lf, ^Z in middle, Tcl_Read auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + set c [format abc\ndef\n%cqrs\ntuv 26] + chan puts $f $c + chan close $f + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + set c [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $c $e +} {8 1} +test chan-io-30.24 {Tcl_Write lf, ^Z in middle, Tcl_Read lf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + set c [format abc\ndef\n%cqrs\ntuv 26] + chan puts $f $c + chan close $f + set f [open $path(test1) r] + chan configure $f -translation lf -eofchar \x1a + set c [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $c $e +} {8 1} +test chan-io-30.25 {Tcl_Write cr, ^Z in middle, Tcl_Read auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + set c [format abc\ndef\n%cqrs\ntuv 26] + chan puts $f $c + chan close $f + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + set c [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $c $e +} {8 1} +test chan-io-30.26 {Tcl_Write cr, ^Z in middle, Tcl_Read cr} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + set c [format abc\ndef\n%cqrs\ntuv 26] + chan puts $f $c + chan close $f + set f [open $path(test1) r] + chan configure $f -translation cr -eofchar \x1a + set c [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $c $e +} {8 1} +test chan-io-30.27 {Tcl_Write crlf, ^Z in middle, Tcl_Read auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + set c [format abc\ndef\n%cqrs\ntuv 26] + chan puts $f $c + chan close $f + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + set c [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $c $e +} {8 1} +test chan-io-30.28 {Tcl_Write crlf, ^Z in middle, Tcl_Read crlf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + set c [format abc\ndef\n%cqrs\ntuv 26] + chan puts $f $c + chan close $f + set f [open $path(test1) r] + chan configure $f -translation crlf -eofchar \x1a + set c [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $c $e +} {8 1} + +# Test end of line translations. Functions tested are Tcl_Write and Tcl_Gets. + +test chan-io-31.1 {Tcl_Write lf, Tcl_Gets auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + set l "" + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + chan close $f + set l +} {hello 6 auto there 12 auto} +test chan-io-31.2 {Tcl_Write cr, Tcl_Gets auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + set l "" + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + chan close $f + set l +} {hello 6 auto there 12 auto} +test chan-io-31.3 {Tcl_Write crlf, Tcl_Gets auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + set l "" + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + chan close $f + set l +} {hello 7 auto there 14 auto} +test chan-io-31.4 {Tcl_Write lf, Tcl_Gets lf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation lf + set l "" + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + chan close $f + set l +} {hello 6 lf there 12 lf} +test chan-io-31.5 {Tcl_Write lf, Tcl_Gets cr} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation cr + set l "" + lappend l [string length [chan gets $f]] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + chan close $f + set l +} {21 21 cr 1 {} 21 cr 1} +test chan-io-31.6 {Tcl_Write lf, Tcl_Gets crlf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation crlf + set l "" + lappend l [string length [chan gets $f]] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + chan close $f + set l +} {21 21 crlf 1 {} 21 crlf 1} +test chan-io-31.7 {Tcl_Write cr, Tcl_Gets cr} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation cr + set l "" + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + chan close $f + set l +} {hello 6 cr 0 there 12 cr 0} +test chan-io-31.8 {Tcl_Write cr, Tcl_Gets lf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation lf + set l "" + lappend l [string length [chan gets $f]] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + chan close $f + set l +} {21 21 lf 1 {} 21 lf 1} +test chan-io-31.9 {Tcl_Write cr, Tcl_Gets crlf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation crlf + set l "" + lappend l [string length [chan gets $f]] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + chan close $f + set l +} {21 21 crlf 1 {} 21 crlf 1} +test chan-io-31.10 {Tcl_Write crlf, Tcl_Gets crlf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation crlf + set l "" + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + chan close $f + set l +} {hello 7 crlf 0 there 14 crlf 0} +test chan-io-31.11 {Tcl_Write crlf, Tcl_Gets cr} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation cr + set l "" + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + lappend l [string length [chan gets $f]] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + chan close $f + set l +} {hello 6 cr 0 6 13 cr 0} +test chan-io-31.12 {Tcl_Write crlf, Tcl_Gets lf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + chan puts $f hello\nthere\nand\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation lf + set l "" + lappend l [string length [chan gets $f]] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + lappend l [string length [chan gets $f]] + lappend l [chan tell $f] + lappend l [chan configure $f -translation] + lappend l [chan eof $f] + chan close $f + set l +} {6 7 lf 0 6 14 lf 0} +test chan-io-31.13 {binary mode is synonym of lf mode} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation binary + set x [chan configure $f -translation] + chan close $f + set x +} lf +# +# Test chan-io-9.14 has been removed because "auto" output translation mode is +# not supoprted. +# +test chan-io-31.14 {Tcl_Write mixed, Tcl_Gets auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts $f hello\nthere\rand\r\nhere + chan close $f + set f [open $path(test1) r] + chan configure $f -translation auto + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {hello there and here 0 {} 1} +test chan-io-31.15 {Tcl_Write mixed, Tcl_Gets auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f hello\nthere\rand\r\nhere\r + chan close $f + set f [open $path(test1) r] + chan configure $f -translation auto + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {hello there and here 0 {} 1} +test chan-io-31.16 {Tcl_Write mixed, Tcl_Gets auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f hello\nthere\rand\r\nhere\n + chan close $f + set f [open $path(test1) r] + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {hello there and here 0 {} 1} +test chan-io-31.17 {Tcl_Write mixed, Tcl_Gets auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f hello\nthere\rand\r\nhere\r\n + chan close $f + set f [open $path(test1) r] + chan configure $f -translation auto + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {hello there and here 0 {} 1} +test chan-io-31.18 {Tcl_Write ^Z at end, Tcl_Gets auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + set s [format "hello\nthere\nand\rhere\n\%c" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -eofchar \x1a -translation auto + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {hello there and here 0 {} 1} +test chan-io-31.19 {Tcl_Write, implicit ^Z at end, Tcl_Gets auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -eofchar \x1a -translation lf + chan puts $f hello\nthere\nand\rhere + chan close $f + set f [open $path(test1) r] + chan configure $f -eofchar \x1a -translation auto + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {hello there and here 0 {} 1} +test chan-io-31.20 {Tcl_Write, ^Z in middle, Tcl_Gets auto, eofChar} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + set s [format "abc\ndef\n%cqrs\ntuv" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -eofchar \x1a + chan configure $f -translation auto + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {abc def 0 {} 1} +test chan-io-31.21 {Tcl_Write, no newline ^Z in middle, Tcl_Gets auto, eofChar} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + set s [format "abc\ndef\n%cqrs\ntuv" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -eofchar \x1a -translation auto + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {abc def 0 {} 1} +test chan-io-31.22 {Tcl_Write, ^Z in middle ignored, Tcl_Gets lf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -eofchar {} + set s [format "abc\ndef\n%cqrs\ntuv" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -translation lf -eofchar {} + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} "abc def 0 \x1aqrs 0 tuv 0 {} 1" +test chan-io-31.23 {Tcl_Write, ^Z in middle ignored, Tcl_Gets cr} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr -eofchar {} + set s [format "abc\ndef\n%cqrs\ntuv" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -translation cr -eofchar {} + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} "abc def 0 \x1aqrs 0 tuv 0 {} 1" +test chan-io-31.24 {Tcl_Write, ^Z in middle ignored, Tcl_Gets crlf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf -eofchar {} + set s [format "abc\ndef\n%cqrs\ntuv" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -translation crlf -eofchar {} + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} "abc def 0 \x1aqrs 0 tuv 0 {} 1" +test chan-io-31.25 {Tcl_Write lf, ^Z in middle, Tcl_Gets auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + set s [format "abc\ndef\n%cqrs\ntuv" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {abc def 0 {} 1} +test chan-io-31.26 {Tcl_Write lf, ^Z in middle, Tcl_Gets lf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + set s [format "abc\ndef\n%cqrs\ntuv" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -translation lf -eofchar \x1a + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {abc def 0 {} 1} +test chan-io-31.27 {Tcl_Write cr, ^Z in middle, Tcl_Gets auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr -eofchar {} + set s [format "abc\ndef\n%cqrs\ntuv" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {abc def 0 {} 1} +test chan-io-31.28 {Tcl_Write cr, ^Z in middle, Tcl_Gets cr} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr -eofchar {} + set s [format "abc\ndef\n%cqrs\ntuv" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -translation cr -eofchar \x1a + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {abc def 0 {} 1} +test chan-io-31.29 {Tcl_Write crlf, ^Z in middle, Tcl_Gets auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf -eofchar {} + set s [format "abc\ndef\n%cqrs\ntuv" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {abc def 0 {} 1} +test chan-io-31.30 {Tcl_Write crlf, ^Z in middle, Tcl_Gets crlf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf -eofchar {} + set s [format "abc\ndef\n%cqrs\ntuv" 26] + chan puts $f $s + chan close $f + set f [open $path(test1) r] + chan configure $f -translation crlf -eofchar \x1a + set l "" + lappend l [chan gets $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {abc def 0 {} 1} +test chan-io-31.31 {Tcl_Write crlf on block boundary, Tcl_Gets crlf} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + set line "123456789ABCDE" ;# 14 char plus crlf + chan puts -nonewline $f x ;# shift crlf across block boundary + for {set i 0} {$i < 700} {incr i} { + chan puts $f $line + } + chan close $f + set f [open $path(test1) r] + chan configure $f -translation crlf + set c "" + while {[chan gets $f line] >= 0} { + append c $line\n + } + chan close $f + string length $c +} [expr 700*15+1] +test chan-io-31.32 {Tcl_Write crlf on block boundary, Tcl_Gets auto} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + set line "123456789ABCDE" ;# 14 char plus crlf + chan puts -nonewline $f x ;# shift crlf across block boundary + for {set i 0} {$i < 700} {incr i} { + chan puts $f $line + } + chan close $f + set f [open $path(test1) r] + chan configure $f -translation auto + set c "" + while {[chan gets $f line] >= 0} { + append c $line\n + } + chan close $f + string length $c +} [expr 700*15+1] + +# Test Tcl_Read and buffering. + +test chan-io-32.1 {Tcl_Read, channel not readable} { + list [catch {read stdout} msg] $msg +} {1 {channel "stdout" wasn't opened for reading}} +test chan-io-32.2 {Tcl_Read, zero byte count} { + chan read stdin 0 +} "" +test chan-io-32.3 {Tcl_Read, negative byte count} { + set f [open $path(longfile) r] + set l [list [catch {chan read $f -1} msg] $msg] + chan close $f + set l +} {1 {expected non-negative integer but got "-1"}} +test chan-io-32.4 {Tcl_Read, positive byte count} { + set f [open $path(longfile) r] + set x [chan read $f 1024] + set s [string length $x] + unset x + chan close $f + set s +} 1024 +test chan-io-32.5 {Tcl_Read, multiple buffers} { + set f [open $path(longfile) r] + chan configure $f -buffersize 100 + set x [chan read $f 1024] + set s [string length $x] + unset x + chan close $f + set s +} 1024 +test chan-io-32.6 {Tcl_Read, very large read} { + set f1 [open $path(longfile) r] + set z [chan read $f1 1000000] + chan close $f1 + set l [string length $z] + set x ok + set z [file size $path(longfile)] + if {$z != $l} { + set x broken + } + set x +} ok +test chan-io-32.7 {Tcl_Read, nonblocking, file} {nonBlockFiles} { + set f1 [open $path(longfile) r] + chan configure $f1 -blocking off + set z [chan read $f1 20] + chan close $f1 + set l [string length $z] + set x ok + if {$l != 20} { + set x broken + } + set x +} ok +test chan-io-32.8 {Tcl_Read, nonblocking, file} {nonBlockFiles} { + set f1 [open $path(longfile) r] + chan configure $f1 -blocking off + set z [chan read $f1 1000000] + chan close $f1 + set x ok + set l [string length $z] + set z [file size $path(longfile)] + if {$z != $l} { + set x broken + } + set x +} ok +test chan-io-32.9 {Tcl_Read, read to end of file} { + set f1 [open $path(longfile) r] + set z [chan read $f1] + chan close $f1 + set l [string length $z] + set x ok + set z [file size $path(longfile)] + if {$z != $l} { + set x broken + } + set x +} ok +test chan-io-32.10 {Tcl_Read from a pipe} {stdio openpipe} { + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan puts $f1 {chan puts [chan gets stdin]} + chan close $f1 + set f1 [open "|[list [interpreter] $path(pipe)]" r+] + chan puts $f1 hello + chan flush $f1 + set x [chan read $f1] + chan close $f1 + set x +} "hello\n" +test chan-io-32.11 {Tcl_Read from a pipe} {stdio openpipe} { + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan puts $f1 {chan puts [chan gets stdin]} + chan puts $f1 {chan puts [chan gets stdin]} + chan close $f1 + set f1 [open "|[list [interpreter] $path(pipe)]" r+] + chan puts $f1 hello + chan flush $f1 + set x "" + lappend x [chan read $f1 6] + chan puts $f1 hello + chan flush $f1 + lappend x [chan read $f1] + chan close $f1 + set x +} {{hello +} {hello +}} +test chan-io-32.12 {Tcl_Read, -nonewline} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan puts $f1 hello + chan puts $f1 bye + chan close $f1 + set f1 [open $path(test1) r] + set c [chan read -nonewline $f1] + chan close $f1 + set c +} {hello +bye} +test chan-io-32.13 {Tcl_Read, -nonewline} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan puts $f1 hello + chan puts $f1 bye + chan close $f1 + set f1 [open $path(test1) r] + set c [chan read -nonewline $f1] + chan close $f1 + list [string length $c] $c +} {9 {hello +bye}} +test chan-io-32.14 {Tcl_Read, reading in small chunks} { + file delete $path(test1) + set f [open $path(test1) w] + chan puts $f "Two lines: this one" + chan puts $f "and this one" + chan close $f + set f [open $path(test1)] + set x [list [chan read $f 1] [chan read $f 2] [chan read $f]] + chan close $f + set x +} {T wo { lines: this one +and this one +}} +test chan-io-32.15 {Tcl_Read, asking for more input than available} { + file delete $path(test1) + set f [open $path(test1) w] + chan puts $f "Two lines: this one" + chan puts $f "and this one" + chan close $f + set f [open $path(test1)] + set x [chan read $f 100] + chan close $f + set x +} {Two lines: this one +and this one +} +test chan-io-32.16 {Tcl_Read, read to end of file with -nonewline} { + file delete $path(test1) + set f [open $path(test1) w] + chan puts $f "Two lines: this one" + chan puts $f "and this one" + chan close $f + set f [open $path(test1)] + set x [chan read -nonewline $f] + chan close $f + set x +} {Two lines: this one +and this one} + +# Test Tcl_Gets. + +test chan-io-33.1 {Tcl_Gets, reading what was written} { + file delete $path(test1) + set f1 [open $path(test1) w] + set y "first line" + chan puts $f1 $y + chan close $f1 + set f1 [open $path(test1) r] + set x [chan gets $f1] + set z ok + if {"$x" != "$y"} { + set z broken + } + chan close $f1 + set z +} ok +test chan-io-33.2 {Tcl_Gets into variable} { + set f1 [open $path(longfile) r] + set c [chan gets $f1 x] + set l [string length x] + set z ok + if {$l != $l} { + set z broken + } + chan close $f1 + set z +} ok +test chan-io-33.3 {Tcl_Gets from pipe} {stdio openpipe} { + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan puts $f1 {chan puts [chan gets stdin]} + chan close $f1 + set f1 [open "|[list [interpreter] $path(pipe)]" r+] + chan puts $f1 hello + chan flush $f1 + set x [chan gets $f1] + chan close $f1 + set z ok + if {"$x" != "hello"} { + set z broken + } + set z +} ok +test chan-io-33.4 {Tcl_Gets with long line} { + file delete $path(test3) + set f [open $path(test3) w] + chan puts -nonewline $f "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + chan puts -nonewline $f "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + chan puts -nonewline $f "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + chan puts -nonewline $f "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + chan puts $f "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + chan close $f + set f [open $path(test3)] + set x [chan gets $f] + chan close $f + set x +} {abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ} +test chan-io-33.5 {Tcl_Gets with long line} { + set f [open $path(test3)] + set x [chan gets $f y] + chan close $f + list $x $y +} {260 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ} +test chan-io-33.6 {Tcl_Gets and end of file} { + file delete $path(test3) + set f [open $path(test3) w] + chan puts -nonewline $f "Test1\nTest2" + chan close $f + set f [open $path(test3)] + set x {} + set y {} + lappend x [chan gets $f y] $y + set y {} + lappend x [chan gets $f y] $y + set y {} + lappend x [chan gets $f y] $y + chan close $f + set x +} {5 Test1 5 Test2 -1 {}} +test chan-io-33.7 {Tcl_Gets and bad variable} { + set f [open $path(test3) w] + chan puts $f "Line 1" + chan puts $f "Line 2" + chan close $f + catch {unset x} + set x 24 + set f [open $path(test3) r] + set result [list [catch {chan gets $f x(0)} msg] $msg] + chan close $f + set result +} {1 {can't set "x(0)": variable isn't array}} +test chan-io-33.8 {Tcl_Gets, exercising double buffering} { + set f [open $path(test3) w] + chan configure $f -translation lf -eofchar {} + set x "" + for {set y 0} {$y < 99} {incr y} {set x "a$x"} + for {set y 0} {$y < 100} {incr y} {chan puts $f $x} + chan close $f + set f [open $path(test3) r] + chan configure $f -translation lf + for {set y 0} {$y < 100} {incr y} {chan gets $f} + chan close $f + set y +} 100 +test chan-io-33.9 {Tcl_Gets, exercising double buffering} { + set f [open $path(test3) w] + chan configure $f -translation lf -eofchar {} + set x "" + for {set y 0} {$y < 99} {incr y} {set x "a$x"} + for {set y 0} {$y < 200} {incr y} {chan puts $f $x} + chan close $f + set f [open $path(test3) r] + chan configure $f -translation lf + for {set y 0} {$y < 200} {incr y} {chan gets $f} + chan close $f + set y +} 200 +test chan-io-33.10 {Tcl_Gets, exercising double buffering} { + set f [open $path(test3) w] + chan configure $f -translation lf -eofchar {} + set x "" + for {set y 0} {$y < 99} {incr y} {set x "a$x"} + for {set y 0} {$y < 300} {incr y} {chan puts $f $x} + chan close $f + set f [open $path(test3) r] + chan configure $f -translation lf + for {set y 0} {$y < 300} {incr y} {chan gets $f} + chan close $f + set y +} 300 + +# Test Tcl_Seek and Tcl_Tell. + +test chan-io-34.1 {Tcl_Seek to current position at start of file} { + set f1 [open $path(longfile) r] + chan seek $f1 0 current + set c [chan tell $f1] + chan close $f1 + set c +} 0 +test chan-io-34.2 {Tcl_Seek to offset from start} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf -eofchar {} + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan close $f1 + set f1 [open $path(test1) r] + chan seek $f1 10 start + set c [chan tell $f1] + chan close $f1 + set c +} 10 +test chan-io-34.3 {Tcl_Seek to end of file} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf -eofchar {} + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan close $f1 + set f1 [open $path(test1) r] + chan seek $f1 0 end + set c [chan tell $f1] + chan close $f1 + set c +} 54 +test chan-io-34.4 {Tcl_Seek to offset from end of file} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf -eofchar {} + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan close $f1 + set f1 [open $path(test1) r] + chan seek $f1 -10 end + set c [chan tell $f1] + chan close $f1 + set c +} 44 +test chan-io-34.5 {Tcl_Seek to offset from current position} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf -eofchar {} + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan close $f1 + set f1 [open $path(test1) r] + chan seek $f1 10 current + chan seek $f1 10 current + set c [chan tell $f1] + chan close $f1 + set c +} 20 +test chan-io-34.6 {Tcl_Seek to offset from end of file} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf -eofchar {} + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan close $f1 + set f1 [open $path(test1) r] + chan seek $f1 -10 end + set c [chan tell $f1] + set r [chan read $f1] + chan close $f1 + list $c $r +} {44 {rstuvwxyz +}} +test chan-io-34.7 {Tcl_Seek to offset from end of file, then to current position} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf -eofchar {} + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan close $f1 + set f1 [open $path(test1) r] + chan seek $f1 -10 end + set c1 [chan tell $f1] + set r1 [chan read $f1 5] + chan seek $f1 0 current + set c2 [chan tell $f1] + chan close $f1 + list $c1 $r1 $c2 +} {44 rstuv 49} +test chan-io-34.8 {Tcl_Seek on pipes: not supported} {stdio openpipe} { + set f1 [open "|[list [interpreter]]" r+] + set x [list [catch {chan seek $f1 0 current} msg] $msg] + chan close $f1 + regsub {".*":} $x {"":} x + string tolower $x +} {1 {error during seek on "": invalid argument}} +test chan-io-34.9 {Tcl_Seek, testing buffered input flushing} { + file delete $path(test3) + set f [open $path(test3) w] + chan configure $f -eofchar {} + chan puts -nonewline $f "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + chan close $f + set f [open $path(test3) RDWR] + set x [chan read $f 1] + chan seek $f 3 + lappend x [chan read $f 1] + chan seek $f 0 start + lappend x [chan read $f 1] + chan seek $f 10 current + lappend x [chan read $f 1] + chan seek $f -2 end + lappend x [chan read $f 1] + chan seek $f 50 end + lappend x [chan read $f 1] + chan seek $f 1 + lappend x [chan read $f 1] + chan close $f + set x +} {a d a l Y {} b} +set path(test3) [makeFile {} test3] +test chan-io-34.10 {Tcl_Seek testing flushing of buffered input} { + set f [open $path(test3) w] + chan configure $f -translation lf + chan puts $f xyz\n123 + chan close $f + set f [open $path(test3) r+] + chan configure $f -translation lf + set x [chan gets $f] + chan seek $f 0 current + chan puts $f 456 + chan close $f + list $x [viewFile test3] +} "xyz {xyz +456}" +test chan-io-34.11 {Tcl_Seek testing flushing of buffered output} { + set f [open $path(test3) w] + chan puts $f xyz\n123 + chan close $f + set f [open $path(test3) w+] + chan puts $f xyzzy + chan seek $f 2 + set x [chan gets $f] + chan close $f + list $x [viewFile test3] +} "zzy xyzzy" +test chan-io-34.12 {Tcl_Seek testing combination of write, seek back and read} { + set f [open $path(test3) w] + chan configure $f -translation lf -eofchar {} + chan puts $f xyz\n123 + chan close $f + set f [open $path(test3) a+] + chan configure $f -translation lf -eofchar {} + chan puts $f xyzzy + chan flush $f + set x [chan tell $f] + chan seek $f -4 cur + set y [chan gets $f] + chan close $f + list $x [viewFile test3] $y +} {14 {xyz +123 +xyzzy} zzy} +test chan-io-34.13 {Tcl_Tell at start of file} { + file delete $path(test1) + set f1 [open $path(test1) w] + set p [chan tell $f1] + chan close $f1 + set p +} 0 +test chan-io-34.14 {Tcl_Tell after seek to end of file} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf -eofchar {} + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan close $f1 + set f1 [open $path(test1) r] + chan seek $f1 0 end + set c1 [chan tell $f1] + chan close $f1 + set c1 +} 54 +test chan-io-34.15 {Tcl_Tell combined with seeking} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf -eofchar {} + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan puts $f1 "abcdefghijklmnopqrstuvwxyz" + chan close $f1 + set f1 [open $path(test1) r] + chan seek $f1 10 start + set c1 [chan tell $f1] + chan seek $f1 10 current + set c2 [chan tell $f1] + chan close $f1 + list $c1 $c2 +} {10 20} +test chan-io-34.16 {Tcl_Tell on pipe: always -1} {stdio openpipe} { + set f1 [open "|[list [interpreter]]" r+] + set c [chan tell $f1] + chan close $f1 + set c +} -1 +test chan-io-34.17 {Tcl_Tell on pipe: always -1} {stdio openpipe} { + set f1 [open "|[list [interpreter]]" r+] + chan puts $f1 {chan puts hello} + chan flush $f1 + set c [chan tell $f1] + chan gets $f1 + chan close $f1 + set c +} -1 +test chan-io-34.18 {Tcl_Tell combined with seeking and reading} { + file delete $path(test2) + set f [open $path(test2) w] + chan configure $f -translation lf -eofchar {} + chan puts -nonewline $f "line1\nline2\nline3\nline4\nline5\n" + chan close $f + set f [open $path(test2)] + chan configure $f -translation lf + set x [chan tell $f] + chan read $f 3 + lappend x [chan tell $f] + chan seek $f 2 + lappend x [chan tell $f] + chan seek $f 10 current + lappend x [chan tell $f] + chan seek $f 0 end + lappend x [chan tell $f] + chan close $f + set x +} {0 3 2 12 30} +test chan-io-34.19 {Tcl_Tell combined with opening in append mode} { + set f [open $path(test3) w] + chan configure $f -translation lf -eofchar {} + chan puts $f "abcdefghijklmnopqrstuvwxyz" + chan puts $f "abcdefghijklmnopqrstuvwxyz" + chan close $f + set f [open $path(test3) a] + set c [chan tell $f] + chan close $f + set c +} 54 +test chan-io-34.20 {Tcl_Tell combined with writing} { + set f [open $path(test3) w] + set l "" + chan seek $f 29 start + lappend l [chan tell $f] + chan puts -nonewline $f a + chan seek $f 39 start + lappend l [chan tell $f] + chan puts -nonewline $f a + lappend l [chan tell $f] + chan seek $f 407 end + lappend l [chan tell $f] + chan close $f + set l +} {29 39 40 447} +test chan-io-34.21 {Tcl_Seek and Tcl_Tell on large files} {largefileSupport} { + file delete $path(test3) + set f [open $path(test3) w] + chan configure $f -encoding binary + set l "" + lappend l [chan tell $f] + chan puts -nonewline $f abcdef + lappend l [chan tell $f] + chan flush $f + lappend l [chan tell $f] + # 4GB offset! + chan seek $f 0x100000000 + lappend l [chan tell $f] + chan puts -nonewline $f abcdef + lappend l [chan tell $f] + chan close $f + lappend l [file size $f] + # truncate... + chan close [open $path(test3) w] + lappend l [file size $f] + set l +} {0 6 6 4294967296 4294967302 4294967302 0} + +# Test Tcl_Eof + +test chan-io-35.1 {Tcl_Eof} { + file delete $path(test1) + set f [open $path(test1) w] + chan puts $f hello + chan puts $f hello + chan close $f + set f [open $path(test1)] + set x [chan eof $f] + lappend x [chan eof $f] + chan gets $f + lappend x [chan eof $f] + chan gets $f + lappend x [chan eof $f] + chan gets $f + lappend x [chan eof $f] + lappend x [chan eof $f] + chan close $f + set x +} {0 0 0 0 1 1} +test chan-io-35.2 {Tcl_Eof with pipe} {stdio openpipe} { + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan puts $f1 {chan gets stdin} + chan puts $f1 {chan puts hello} + chan close $f1 + set f1 [open "|[list [interpreter] $path(pipe)]" r+] + chan puts $f1 hello + set x [chan eof $f1] + chan flush $f1 + lappend x [chan eof $f1] + chan gets $f1 + lappend x [chan eof $f1] + chan gets $f1 + lappend x [chan eof $f1] + chan close $f1 + set x +} {0 0 0 1} +test chan-io-35.3 {Tcl_Eof with pipe} {stdio openpipe} { + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan puts $f1 {chan gets stdin} + chan puts $f1 {chan puts hello} + chan close $f1 + set f1 [open "|[list [interpreter] $path(pipe)]" r+] + chan puts $f1 hello + set x [chan eof $f1] + chan flush $f1 + lappend x [chan eof $f1] + chan gets $f1 + lappend x [chan eof $f1] + chan gets $f1 + lappend x [chan eof $f1] + chan gets $f1 + lappend x [chan eof $f1] + chan gets $f1 + lappend x [chan eof $f1] + chan close $f1 + set x +} {0 0 0 1 1 1} +test chan-io-35.4 {Tcl_Eof, eof detection on nonblocking file} {nonBlockFiles} { + file delete $path(test1) + set f [open $path(test1) w] + chan close $f + set f [open $path(test1) r] + chan configure $f -blocking off + set l "" + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {{} 1} +test chan-io-35.5 {Tcl_Eof, eof detection on nonblocking pipe} {stdio openpipe} { + file delete $path(pipe) + set f [open $path(pipe) w] + chan puts $f { + exit + } + chan close $f + set f [open "|[list [interpreter] $path(pipe)]" r] + set l "" + lappend l [chan gets $f] + lappend l [chan eof $f] + chan close $f + set l +} {{} 1} +test chan-io-35.6 {Tcl_Eof, eof char, lf write, auto read} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -eofchar \x1a + chan puts $f abc\ndef + chan close $f + set s [file size $path(test1)] + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + set l [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $s $l $e +} {9 8 1} +test chan-io-35.7 {Tcl_Eof, eof char, lf write, lf read} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -eofchar \x1a + chan puts $f abc\ndef + chan close $f + set s [file size $path(test1)] + set f [open $path(test1) r] + chan configure $f -translation lf -eofchar \x1a + set l [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $s $l $e +} {9 8 1} +test chan-io-35.8 {Tcl_Eof, eof char, cr write, auto read} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr -eofchar \x1a + chan puts $f abc\ndef + chan close $f + set s [file size $path(test1)] + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + set l [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $s $l $e +} {9 8 1} +test chan-io-35.9 {Tcl_Eof, eof char, cr write, cr read} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr -eofchar \x1a + chan puts $f abc\ndef + chan close $f + set s [file size $path(test1)] + set f [open $path(test1) r] + chan configure $f -translation cr -eofchar \x1a + set l [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $s $l $e +} {9 8 1} +test chan-io-35.10 {Tcl_Eof, eof char, crlf write, auto read} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf -eofchar \x1a + chan puts $f abc\ndef + chan close $f + set s [file size $path(test1)] + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + set l [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $s $l $e +} {11 8 1} +test chan-io-35.11 {Tcl_Eof, eof char, crlf write, crlf read} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf -eofchar \x1a + chan puts $f abc\ndef + chan close $f + set s [file size $path(test1)] + set f [open $path(test1) r] + chan configure $f -translation crlf -eofchar \x1a + set l [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $s $l $e +} {11 8 1} +test chan-io-35.12 {Tcl_Eof, eof char in middle, lf write, auto read} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -eofchar {} + set i [format abc\ndef\n%cqrs\nuvw 26] + chan puts $f $i + chan close $f + set c [file size $path(test1)] + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + set l [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $c $l $e +} {17 8 1} +test chan-io-35.13 {Tcl_Eof, eof char in middle, lf write, lf read} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf -eofchar {} + set i [format abc\ndef\n%cqrs\nuvw 26] + chan puts $f $i + chan close $f + set c [file size $path(test1)] + set f [open $path(test1) r] + chan configure $f -translation lf -eofchar \x1a + set l [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $c $l $e +} {17 8 1} +test chan-io-35.14 {Tcl_Eof, eof char in middle, cr write, auto read} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr -eofchar {} + set i [format abc\ndef\n%cqrs\nuvw 26] + chan puts $f $i + chan close $f + set c [file size $path(test1)] + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + set l [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $c $l $e +} {17 8 1} +test chan-io-35.15 {Tcl_Eof, eof char in middle, cr write, cr read} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr -eofchar {} + set i [format abc\ndef\n%cqrs\nuvw 26] + chan puts $f $i + chan close $f + set c [file size $path(test1)] + set f [open $path(test1) r] + chan configure $f -translation cr -eofchar \x1a + set l [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $c $l $e +} {17 8 1} +test chan-io-35.16 {Tcl_Eof, eof char in middle, crlf write, auto read} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf -eofchar {} + set i [format abc\ndef\n%cqrs\nuvw 26] + chan puts $f $i + chan close $f + set c [file size $path(test1)] + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + set l [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $c $l $e +} {21 8 1} +test chan-io-35.17 {Tcl_Eof, eof char in middle, crlf write, crlf read} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf -eofchar {} + set i [format abc\ndef\n%cqrs\nuvw 26] + chan puts $f $i + chan close $f + set c [file size $path(test1)] + set f [open $path(test1) r] + chan configure $f -translation crlf -eofchar \x1a + set l [string length [chan read $f]] + set e [chan eof $f] + chan close $f + list $c $l $e +} {21 8 1} + +# Test Tcl_InputBlocked + +test chan-io-36.1 {Tcl_InputBlocked on nonblocking pipe} {stdio openpipe} { + set f1 [open "|[list [interpreter]]" r+] + chan puts $f1 {chan puts hello_from_pipe} + chan flush $f1 + chan gets $f1 + chan configure $f1 -blocking off -buffering full + chan puts $f1 {chan puts hello} + set x "" + lappend x [chan gets $f1] + lappend x [chan blocked $f1] + chan flush $f1 + after 200 + lappend x [chan gets $f1] + lappend x [chan blocked $f1] + lappend x [chan gets $f1] + lappend x [chan blocked $f1] + chan close $f1 + set x +} {{} 1 hello 0 {} 1} +test chan-io-36.2 {Tcl_InputBlocked on blocking pipe} {stdio openpipe} { + set f1 [open "|[list [interpreter]]" r+] + chan configure $f1 -buffering line + chan puts $f1 {chan puts hello_from_pipe} + set x "" + lappend x [chan gets $f1] + lappend x [chan blocked $f1] + chan puts $f1 {exit} + lappend x [chan gets $f1] + lappend x [chan blocked $f1] + lappend x [chan eof $f1] + chan close $f1 + set x +} {hello_from_pipe 0 {} 0 1} +test chan-io-36.3 {Tcl_InputBlocked vs files, short read} { + file delete $path(test1) + set f [open $path(test1) w] + chan puts $f abcdefghijklmnop + chan close $f + set f [open $path(test1) r] + set l "" + lappend l [chan blocked $f] + lappend l [chan read $f 3] + lappend l [chan blocked $f] + lappend l [chan read -nonewline $f] + lappend l [chan blocked $f] + lappend l [chan eof $f] + chan close $f + set l +} {0 abc 0 defghijklmnop 0 1} +test chan-io-36.4 {Tcl_InputBlocked vs files, event driven read} {fileevent} { + proc in {f} { + variable l + variable x + lappend l [chan read $f 3] + if {[chan eof $f]} {lappend l eof; chan close $f; set x done} + } + file delete $path(test1) + set f [open $path(test1) w] + chan puts $f abcdefghijklmnop + chan close $f + set f [open $path(test1) r] + set l "" + chan event $f readable [namespace code [list in $f]] + variable x + vwait [namespace which -variable x] + set l +} {abc def ghi jkl mno {p +} eof} +test chan-io-36.5 {Tcl_InputBlocked vs files, short read, nonblocking} {nonBlockFiles} { + file delete $path(test1) + set f [open $path(test1) w] + chan puts $f abcdefghijklmnop + chan close $f + set f [open $path(test1) r] + chan configure $f -blocking off + set l "" + lappend l [chan blocked $f] + lappend l [chan read $f 3] + lappend l [chan blocked $f] + lappend l [chan read -nonewline $f] + lappend l [chan blocked $f] + lappend l [chan eof $f] + chan close $f + set l +} {0 abc 0 defghijklmnop 0 1} +test chan-io-36.6 {Tcl_InputBlocked vs files, event driven read} {nonBlockFiles fileevent} { + proc in {f} { + variable l + variable x + lappend l [chan read $f 3] + if {[chan eof $f]} {lappend l eof; chan close $f; set x done} + } + file delete $path(test1) + set f [open $path(test1) w] + chan puts $f abcdefghijklmnop + chan close $f + set f [open $path(test1) r] + chan configure $f -blocking off + set l "" + chan event $f readable [namespace code [list in $f]] + variable x + vwait [namespace which -variable x] + set l +} {abc def ghi jkl mno {p +} eof} + +# Test Tcl_InputBuffered + +test chan-io-37.1 {Tcl_InputBuffered} {testchannel} { + set f [open $path(longfile) r] + chan configure $f -buffersize 4096 + chan read $f 3 + set l "" + lappend l [testchannel inputbuffered $f] + lappend l [chan tell $f] + chan close $f + set l +} {4093 3} +test chan-io-37.2 {Tcl_InputBuffered, test input flushing on seek} {testchannel} { + set f [open $path(longfile) r] + chan configure $f -buffersize 4096 + chan read $f 3 + set l "" + lappend l [testchannel inputbuffered $f] + lappend l [chan tell $f] + chan seek $f 0 current + lappend l [testchannel inputbuffered $f] + lappend l [chan tell $f] + chan close $f + set l +} {4093 3 0 3} + +# Test Tcl_SetChannelBufferSize, Tcl_GetChannelBufferSize + +test chan-io-38.1 {Tcl_GetChannelBufferSize, default buffer size} { + set f [open $path(longfile) r] + set s [chan configure $f -buffersize] + chan close $f + set s +} 4096 +test chan-io-38.2 {Tcl_SetChannelBufferSize, Tcl_GetChannelBufferSize} { + set f [open $path(longfile) r] + set l "" + lappend l [chan configure $f -buffersize] + chan configure $f -buffersize 10000 + lappend l [chan configure $f -buffersize] + chan configure $f -buffersize 1 + lappend l [chan configure $f -buffersize] + chan configure $f -buffersize -1 + lappend l [chan configure $f -buffersize] + chan configure $f -buffersize 0 + lappend l [chan configure $f -buffersize] + chan configure $f -buffersize 100000 + lappend l [chan configure $f -buffersize] + chan configure $f -buffersize 10000000 + lappend l [chan configure $f -buffersize] + chan close $f + set l +} {4096 10000 1 1 1 100000 1048576} +test chan-io-38.3 {Tcl_SetChannelBufferSize, changing buffersize between reads} { + # This test crashes the interp if Bug #427196 is not fixed + + set chan [open [info script] r] + chan configure $chan -buffersize 10 + set var [chan read $chan 2] + chan configure $chan -buffersize 32 + append var [chan read $chan] + chan close $chan +} {} + +# Test Tcl_SetChannelOption, Tcl_GetChannelOption + +test chan-io-39.1 {Tcl_GetChannelOption} { + file delete $path(test1) + set f1 [open $path(test1) w] + set x [chan configure $f1 -blocking] + chan close $f1 + set x +} 1 +# +# Test 17.2 was removed. +# +test chan-io-39.2 {Tcl_GetChannelOption} { + file delete $path(test1) + set f1 [open $path(test1) w] + set x [chan configure $f1 -buffering] + chan close $f1 + set x +} full +test chan-io-39.3 {Tcl_GetChannelOption} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -buffering line + set x [chan configure $f1 -buffering] + chan close $f1 + set x +} line +test chan-io-39.4 {Tcl_GetChannelOption, Tcl_SetChannelOption} { + file delete $path(test1) + set f1 [open $path(test1) w] + set l "" + lappend l [chan configure $f1 -buffering] + chan configure $f1 -buffering line + lappend l [chan configure $f1 -buffering] + chan configure $f1 -buffering none + lappend l [chan configure $f1 -buffering] + chan configure $f1 -buffering line + lappend l [chan configure $f1 -buffering] + chan configure $f1 -buffering full + lappend l [chan configure $f1 -buffering] + chan close $f1 + set l +} {full line none line full} +test chan-io-39.5 {Tcl_GetChannelOption, invariance} { + file delete $path(test1) + set f1 [open $path(test1) w] + set l "" + lappend l [chan configure $f1 -buffering] + lappend l [list [catch {chan configure $f1 -buffering green} msg] $msg] + lappend l [chan configure $f1 -buffering] + chan close $f1 + set l +} {full {1 {bad value for -buffering: must be one of full, line, or none}} full} +test chan-io-39.6 {Tcl_SetChannelOption, multiple options} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf -buffering line + chan puts $f1 hello + chan puts $f1 bye + set x [file size $path(test1)] + chan close $f1 + set x +} 10 +test chan-io-39.7 {Tcl_SetChannelOption, buffering, translation} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan configure $f1 -translation lf + chan puts $f1 hello + chan puts $f1 bye + set x "" + chan configure $f1 -buffering line + lappend x [file size $path(test1)] + chan puts $f1 really_bye + lappend x [file size $path(test1)] + chan close $f1 + set x +} {0 21} +test chan-io-39.8 {Tcl_SetChannelOption, different buffering options} { + file delete $path(test1) + set f1 [open $path(test1) w] + set l "" + chan configure $f1 -translation lf -buffering none -eofchar {} + chan puts -nonewline $f1 hello + lappend l [file size $path(test1)] + chan puts -nonewline $f1 hello + lappend l [file size $path(test1)] + chan configure $f1 -buffering full + chan puts -nonewline $f1 hello + lappend l [file size $path(test1)] + chan configure $f1 -buffering none + lappend l [file size $path(test1)] + chan puts -nonewline $f1 hello + lappend l [file size $path(test1)] + chan close $f1 + lappend l [file size $path(test1)] + set l +} {5 10 10 10 20 20} +test chan-io-39.9 {Tcl_SetChannelOption, blocking mode} {nonBlockFiles} { + file delete $path(test1) + set f1 [open $path(test1) w] + chan close $f1 + set f1 [open $path(test1) r] + set x "" + lappend x [chan configure $f1 -blocking] + chan configure $f1 -blocking off + lappend x [chan configure $f1 -blocking] + lappend x [chan gets $f1] + lappend x [chan read $f1 1000] + lappend x [chan blocked $f1] + lappend x [chan eof $f1] + chan close $f1 + set x +} {1 0 {} {} 0 1} +test chan-io-39.10 {Tcl_SetChannelOption, blocking mode} {stdio openpipe} { + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan puts $f1 { + chan gets stdin + after 100 + chan puts hi + chan gets stdin + } + chan close $f1 + set x "" + set f1 [open "|[list [interpreter] $path(pipe)]" r+] + chan configure $f1 -blocking off -buffering line + lappend x [chan configure $f1 -blocking] + lappend x [chan gets $f1] + lappend x [chan blocked $f1] + chan configure $f1 -blocking on + chan puts $f1 hello + chan configure $f1 -blocking off + lappend x [chan gets $f1] + lappend x [chan blocked $f1] + chan configure $f1 -blocking on + chan puts $f1 bye + chan configure $f1 -blocking off + lappend x [chan gets $f1] + lappend x [chan blocked $f1] + chan configure $f1 -blocking on + lappend x [chan configure $f1 -blocking] + lappend x [chan gets $f1] + lappend x [chan blocked $f1] + lappend x [chan eof $f1] + lappend x [chan gets $f1] + lappend x [chan eof $f1] + chan close $f1 + set x +} {0 {} 1 {} 1 {} 1 1 hi 0 0 {} 1} +test chan-io-39.11 {Tcl_SetChannelOption, Tcl_GetChannelOption, buffer size clipped to lower bound} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -buffersize -10 + set x [chan configure $f -buffersize] + chan close $f + set x +} 1 +test chan-io-39.12 {Tcl_SetChannelOption, Tcl_GetChannelOption buffer size clipped to upper bound} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -buffersize 10000000 + set x [chan configure $f -buffersize] + chan close $f + set x +} 1048576 +test chan-io-39.13 {Tcl_SetChannelOption, Tcl_GetChannelOption, buffer size} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -buffersize 40000 + set x [chan configure $f -buffersize] + chan close $f + set x +} 40000 +test chan-io-39.14 {Tcl_SetChannelOption: -encoding, binary & utf-8} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -encoding {} + chan puts -nonewline $f \xe7\x89\xa6 + chan close $f + set f [open $path(test1) r] + chan configure $f -encoding utf-8 + set x [chan read $f] + chan close $f + set x +} \u7266 +test chan-io-39.15 {Tcl_SetChannelOption: -encoding, binary & utf-8} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -encoding binary + chan puts -nonewline $f \xe7\x89\xa6 + chan close $f + set f [open $path(test1) r] + chan configure $f -encoding utf-8 + set x [chan read $f] + chan close $f + set x +} \u7266 +test chan-io-39.16 {Tcl_SetChannelOption: -encoding, errors} { + file delete $path(test1) + set f [open $path(test1) w] + set result [list [catch {chan configure $f -encoding foobar} msg] $msg] + chan close $f + set result +} {1 {unknown encoding "foobar"}} +test chan-io-39.17 {Tcl_SetChannelOption: -encoding, clearing CHANNEL_NEED_MORE_DATA} {stdio openpipe fileevent} { + set f [open "|[list [interpreter] $path(cat)]" r+] + chan configure $f -encoding binary + chan puts -nonewline $f "\xe7" + chan flush $f + chan configure $f -encoding utf-8 -blocking 0 + variable x {} + chan event $f readable [namespace code { lappend x [chan read $f] }] + vwait [namespace which -variable x] + after 300 [namespace code { lappend x timeout }] + vwait [namespace which -variable x] + chan configure $f -encoding utf-8 + vwait [namespace which -variable x] + after 300 [namespace code { lappend x timeout }] + vwait [namespace which -variable x] + chan configure $f -encoding binary + vwait [namespace which -variable x] + after 300 [namespace code { lappend x timeout }] + vwait [namespace which -variable x] + chan close $f + set x +} "{} timeout {} timeout \xe7 timeout" +test chan-io-39.18 {Tcl_SetChannelOption, setting read mode independently} \ + {socket} { + proc accept {s a p} {chan close $s} + set s1 [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + set port [lindex [chan configure $s1 -sockname] 2] + set s2 [socket 127.0.0.1 $port] + update + chan configure $s2 -translation {auto lf} + set modes [chan configure $s2 -translation] + chan close $s1 + chan close $s2 + set modes +} {auto lf} +test chan-io-39.19 {Tcl_SetChannelOption, setting read mode independently} \ + {socket} { + proc accept {s a p} {chan close $s} + set s1 [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + set port [lindex [chan configure $s1 -sockname] 2] + set s2 [socket 127.0.0.1 $port] + update + chan configure $s2 -translation {auto crlf} + set modes [chan configure $s2 -translation] + chan close $s1 + chan close $s2 + set modes +} {auto crlf} +test chan-io-39.20 {Tcl_SetChannelOption, setting read mode independently} \ + {socket} { + proc accept {s a p} {chan close $s} + set s1 [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + set port [lindex [chan configure $s1 -sockname] 2] + set s2 [socket 127.0.0.1 $port] + update + chan configure $s2 -translation {auto cr} + set modes [chan configure $s2 -translation] + chan close $s1 + chan close $s2 + set modes +} {auto cr} +test chan-io-39.21 {Tcl_SetChannelOption, setting read mode independently} \ + {socket} { + proc accept {s a p} {chan close $s} + set s1 [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + set port [lindex [chan configure $s1 -sockname] 2] + set s2 [socket 127.0.0.1 $port] + update + chan configure $s2 -translation {auto auto} + set modes [chan configure $s2 -translation] + chan close $s1 + chan close $s2 + set modes +} {auto crlf} +test chan-io-39.22 {Tcl_SetChannelOption, invariance} {unix} { + file delete $path(test1) + set f1 [open $path(test1) w+] + set l "" + lappend l [chan configure $f1 -eofchar] + chan configure $f1 -eofchar {ON GO} + lappend l [chan configure $f1 -eofchar] + chan configure $f1 -eofchar D + lappend l [chan configure $f1 -eofchar] + chan close $f1 + set l +} {{{} {}} {O G} {D D}} +test chan-io-39.22a {Tcl_SetChannelOption, invariance} { + file delete $path(test1) + set f1 [open $path(test1) w+] + set l [list] + chan configure $f1 -eofchar {ON GO} + lappend l [chan configure $f1 -eofchar] + chan configure $f1 -eofchar D + lappend l [chan configure $f1 -eofchar] + lappend l [list [catch {chan configure $f1 -eofchar {1 2 3}} msg] $msg] + chan close $f1 + set l +} {{O G} {D D} {1 {bad value for -eofchar: should be a list of zero, one, or two elements}}} +test chan-io-39.23 {Tcl_GetChannelOption, server socket is not readable or + writeable, it should still have valid -eofchar and -translation options } { + set l [list] + set sock [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + lappend l [chan configure $sock -eofchar] [chan configure $sock -translation] + chan close $sock + set l +} {{{}} auto} +test chan-io-39.24 {Tcl_SetChannelOption, server socket is not readable or + writable so we can't change -eofchar or -translation } { + set l [list] + set sock [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + chan configure $sock -eofchar D -translation lf + lappend l [chan configure $sock -eofchar] [chan configure $sock -translation] + chan close $sock + set l +} {{{}} auto} + +test chan-io-40.1 {POSIX open access modes: RDWR} { + file delete $path(test3) + set f [open $path(test3) w] + chan puts $f xyzzy + chan close $f + set f [open $path(test3) RDWR] + chan puts -nonewline $f "ab" + chan seek $f 0 current + set x [chan gets $f] + chan close $f + set f [open $path(test3) r] + lappend x [chan gets $f] + chan close $f + set x +} {zzy abzzy} +test chan-io-40.2 {POSIX open access modes: CREAT} {unix} { + file delete $path(test3) + set f [open $path(test3) {WRONLY CREAT} 0600] + file stat $path(test3) stats + set x [format "0%o" [expr $stats(mode)&0o777]] + chan puts $f "line 1" + chan close $f + set f [open $path(test3) r] + lappend x [chan gets $f] + chan close $f + set x +} {0600 {line 1}} +test chan-io-40.3 {POSIX open access modes: CREAT} {unix umask} { + # This test only works if your umask is 2, like ouster's. + file delete $path(test3) + set f [open $path(test3) {WRONLY CREAT}] + chan close $f + file stat $path(test3) stats + format "0%o" [expr $stats(mode)&0o777] +} [format %04o [expr {0o666 & ~ $umaskValue}]] +test chan-io-40.4 {POSIX open access modes: CREAT} { + file delete $path(test3) + set f [open $path(test3) w] + chan configure $f -eofchar {} + chan puts $f xyzzy + chan close $f + set f [open $path(test3) {WRONLY CREAT}] + chan configure $f -eofchar {} + chan puts -nonewline $f "ab" + chan close $f + set f [open $path(test3) r] + set x [chan gets $f] + chan close $f + set x +} abzzy +test chan-io-40.5 {POSIX open access modes: APPEND} { + file delete $path(test3) + set f [open $path(test3) w] + chan configure $f -translation lf -eofchar {} + chan puts $f xyzzy + chan close $f + set f [open $path(test3) {WRONLY APPEND}] + chan configure $f -translation lf + chan puts $f "new line" + chan seek $f 0 + chan puts $f "abc" + chan close $f + set f [open $path(test3) r] + chan configure $f -translation lf + set x "" + chan seek $f 6 current + lappend x [chan gets $f] + lappend x [chan gets $f] + chan close $f + set x +} {{new line} abc} +test chan-io-40.6 {POSIX open access modes: EXCL} -match regexp -body { + file delete $path(test3) + set f [open $path(test3) w] + chan puts $f xyzzy + chan close $f + open $path(test3) {WRONLY CREAT EXCL} +} -returnCodes error -result {(?i)couldn't open ".*test3": file (already )?exists} +test chan-io-40.7 {POSIX open access modes: EXCL} { + file delete $path(test3) + set f [open $path(test3) {WRONLY CREAT EXCL}] + chan configure $f -eofchar {} + chan puts $f "A test line" + chan close $f + viewFile test3 +} {A test line} +test chan-io-40.8 {POSIX open access modes: TRUNC} { + file delete $path(test3) + set f [open $path(test3) w] + chan puts $f xyzzy + chan close $f + set f [open $path(test3) {WRONLY TRUNC}] + chan puts $f abc + chan close $f + set f [open $path(test3) r] + set x [chan gets $f] + chan close $f + set x +} abc +test chan-io-40.9 {POSIX open access modes: NONBLOCK} {nonPortable unix} { + file delete $path(test3) + set f [open $path(test3) {WRONLY NONBLOCK CREAT}] + chan puts $f "NONBLOCK test" + chan close $f + set f [open $path(test3) r] + set x [chan gets $f] + chan close $f + set x +} {NONBLOCK test} +test chan-io-40.10 {POSIX open access modes: RDONLY} { + set f [open $path(test1) w] + chan puts $f "two lines: this one" + chan puts $f "and this" + chan close $f + set f [open $path(test1) RDONLY] + set x [list [chan gets $f] [catch {chan puts $f Test} msg] $msg] + chan close $f + string compare [string tolower $x] \ + [list {two lines: this one} 1 \ + [format "channel \"%s\" wasn't opened for writing" $f]] +} 0 +test chan-io-40.11 {POSIX open access modes: RDONLY} -match regexp -body { + file delete $path(test3) + open $path(test3) RDONLY +} -returnCodes error -result {(?i)couldn't open ".*test3": no such file or directory} +test chan-io-40.12 {POSIX open access modes: WRONLY} -match regexp -body { + file delete $path(test3) + open $path(test3) WRONLY +} -returnCodes error -result {(?i)couldn't open ".*test3": no such file or directory} +test chan-io-40.13 {POSIX open access modes: WRONLY} { + makeFile xyzzy test3 + set f [open $path(test3) WRONLY] + chan configure $f -eofchar {} + chan puts -nonewline $f "ab" + chan seek $f 0 current + set x [list [catch {chan gets $f} msg] $msg] + chan close $f + lappend x [viewFile test3] + string compare [string tolower $x] \ + [list 1 "channel \"$f\" wasn't opened for reading" abzzy] +} 0 +test chan-io-40.14 {POSIX open access modes: RDWR} -match regexp -body { + file delete $path(test3) + open $path(test3) RDWR +} -returnCodes error -result {(?i)couldn't open ".*test3": no such file or directory} +test chan-io-40.15 {POSIX open access modes: RDWR} { + makeFile xyzzy test3 + set f [open $path(test3) RDWR] + chan puts -nonewline $f "ab" + chan seek $f 0 current + set x [chan gets $f] + chan close $f + lappend x [viewFile test3] +} {zzy abzzy} +test chan-io-40.16 {tilde substitution in open} -constraints makeFileInHome -setup { + makeFile {Some text} _test_ ~ +} -body { + file exists [file join $::env(HOME) _test_] +} -cleanup { + removeFile _test_ ~ +} -result 1 +test chan-io-40.17 {tilde substitution in open} { + set home $::env(HOME) + unset ::env(HOME) + set x [list [catch {open ~/foo} msg] $msg] + set ::env(HOME) $home + set x +} {1 {couldn't find HOME environment variable to expand path}} + +test chan-io-41.1 {Tcl_FileeventCmd: errors} {fileevent} { + list [catch {chan event foo} msg] $msg +} {1 {wrong # args: should be "chan event channelId event ?script?"}} +test chan-io-41.2 {Tcl_FileeventCmd: errors} {fileevent} { + list [catch {chan event foo bar baz q} msg] $msg +} {1 {wrong # args: should be "chan event channelId event ?script?"}} +test chan-io-41.3 {Tcl_FileeventCmd: errors} {fileevent} { + list [catch {chan event gorp readable} msg] $msg +} {1 {can not find channel named "gorp"}} +test chan-io-41.4 {Tcl_FileeventCmd: errors} {fileevent} { + list [catch {chan event gorp writable} msg] $msg +} {1 {can not find channel named "gorp"}} +test chan-io-41.5 {Tcl_FileeventCmd: errors} {fileevent} { + list [catch {chan event gorp who-knows} msg] $msg +} {1 {bad event name "who-knows": must be readable or writable}} + +# +# Test chan event on a file +# + +set path(foo) [makeFile {} foo] +set f [open $path(foo) w+] + +test chan-io-42.1 {Tcl_FileeventCmd: creating, deleting, querying} {fileevent} { + list [chan event $f readable] [chan event $f writable] +} {{} {}} +test chan-io-42.2 {Tcl_FileeventCmd: replacing} {fileevent} { + set result {} + chan event $f r "first script" + lappend result [chan event $f readable] + chan event $f r "new script" + lappend result [chan event $f readable] + chan event $f r "yet another" + lappend result [chan event $f readable] + chan event $f r "" + lappend result [chan event $f readable] +} {{first script} {new script} {yet another} {}} +test chan-io-42.3 {Tcl_FileeventCmd: replacing, with NULL chars in script} {fileevent} { + set result {} + chan event $f r "first scr\0ipt" + lappend result [string length [chan event $f readable]] + chan event $f r "new scr\0ipt" + lappend result [string length [chan event $f readable]] + chan event $f r "yet ano\0ther" + lappend result [string length [chan event $f readable]] + chan event $f r "" + lappend result [chan event $f readable] +} {13 11 12 {}} + + +test chan-io-43.1 {Tcl_FileeventCmd: creating, deleting, querying} {stdio unixExecs fileevent} { + set result {} + chan event $f readable "script 1" + lappend result [chan event $f readable] [chan event $f writable] + chan event $f writable "write script" + lappend result [chan event $f readable] [chan event $f writable] + chan event $f readable {} + lappend result [chan event $f readable] [chan event $f writable] + chan event $f writable {} + lappend result [chan event $f readable] [chan event $f writable] +} {{script 1} {} {script 1} {write script} {} {write script} {} {}} +test chan-io-43.2 {Tcl_FileeventCmd: deleting when many present} -setup { + set f2 [open "|[list cat -u]" r+] + set f3 [open "|[list cat -u]" r+] +} -constraints {stdio unixExecs fileevent openpipe} -body { + set result {} + lappend result [chan event $f r] [chan event $f2 r] [chan event $f3 r] + chan event $f r "chan read f" + chan event $f2 r "chan read f2" + chan event $f3 r "chan read f3" + lappend result [chan event $f r] [chan event $f2 r] [chan event $f3 r] + chan event $f2 r {} + lappend result [chan event $f r] [chan event $f2 r] [chan event $f3 r] + chan event $f3 r {} + lappend result [chan event $f r] [chan event $f2 r] [chan event $f3 r] + chan event $f r {} + lappend result [chan event $f r] [chan event $f2 r] [chan event $f3 r] +} -cleanup { + catch {chan close $f2} + catch {chan close $f3} +} -result {{} {} {} {chan read f} {chan read f2} {chan read f3} {chan read f} {} {chan read f3} {chan read f} {} {} {} {} {}} + +test chan-io-44.1 {FileEventProc procedure: normal read event} -setup { + set f2 [open "|[list cat -u]" r+] + set f3 [open "|[list cat -u]" r+] +} -constraints {stdio unixExecs fileevent openpipe} -body { + chan event $f2 readable [namespace code { + set x [chan gets $f2]; chan event $f2 readable {} + }] + chan puts $f2 text; chan flush $f2 + variable x initial + vwait [namespace which -variable x] + set x +} -cleanup { + catch {chan close $f2} + catch {chan close $f3} +} -result {text} +test chan-io-44.2 {FileEventProc procedure: error in read event} -constraints { + stdio unixExecs fileevent openpipe +} -setup { + set f2 [open "|[list cat -u]" r+] + set f3 [open "|[list cat -u]" r+] + proc myHandler {msg options} { + variable x $msg + } + set handler [interp bgerror {}] + interp bgerror {} [namespace which myHandler] +} -body { + chan event $f2 readable {error bogus} + chan puts $f2 text; chan flush $f2 + variable x initial + vwait [namespace which -variable x] + list $x [chan event $f2 readable] +} -cleanup { + interp bgerror {} $handler + catch {chan close $f2} + catch {chan close $f3} +} -result {bogus {}} +test chan-io-44.3 {FileEventProc procedure: normal write event} -setup { + set f2 [open "|[list cat -u]" r+] + set f3 [open "|[list cat -u]" r+] +} -constraints {stdio unixExecs fileevent openpipe} -body { + chan event $f2 writable [namespace code { + lappend x "triggered" + incr count -1 + if {$count <= 0} { + chan event $f2 writable {} + } + }] + variable x initial + set count 3 + vwait [namespace which -variable x] + vwait [namespace which -variable x] + vwait [namespace which -variable x] + set x +} -cleanup { + catch {chan close $f2} + catch {chan close $f3} +} -result {initial triggered triggered triggered} +test chan-io-44.4 {FileEventProc procedure: eror in write event} -constraints { + stdio unixExecs fileevent openpipe +} -setup { + set f2 [open "|[list cat -u]" r+] + set f3 [open "|[list cat -u]" r+] + proc myHandler {msg options} { + variable x $msg + } + set handler [interp bgerror {}] + interp bgerror {} [namespace which myHandler] +} -body { + chan event $f2 writable {error bad-write} + variable x initial + vwait [namespace which -variable x] + list $x [chan event $f2 writable] +} -cleanup { + interp bgerror {} $handler + catch {chan close $f2} + catch {chan close $f3} +} -result {bad-write {}} +test chan-io-44.5 {FileEventProc procedure: end of file} {stdio unixExecs openpipe fileevent} { + set f4 [open "|[list [interpreter] $path(cat) << foo]" r] + chan event $f4 readable [namespace code { + if {[chan gets $f4 line] < 0} { + lappend x eof + chan event $f4 readable {} + } else { + lappend x $line + } + }] + variable x initial + vwait [namespace which -variable x] + vwait [namespace which -variable x] + chan close $f4 + set x +} {initial foo eof} + +chan close $f +makeFile "foo bar" foo + +test chan-io-45.1 {DeleteFileEvent, cleanup on chan close} {fileevent} { + set f [open $path(foo) r] + chan event $f readable [namespace code { + lappend x "binding triggered: \"[chan gets $f]\"" + chan event $f readable {} + }] + chan close $f + set x initial + after 100 [namespace code { set y done }] + variable y + vwait [namespace which -variable y] + set x +} {initial} +test chan-io-45.2 {DeleteFileEvent, cleanup on chan close} {fileevent} { + set f [open $path(foo) r] + set f2 [open $path(foo) r] + chan event $f readable [namespace code { + lappend x "f triggered: \"[chan gets $f]\"" + chan event $f readable {} + }] + chan event $f2 readable [namespace code { + lappend x "f2 triggered: \"[chan gets $f2]\"" + chan event $f2 readable {} + }] + chan close $f + variable x initial + vwait [namespace which -variable x] + chan close $f2 + set x +} {initial {f2 triggered: "foo bar"}} +test chan-io-45.3 {DeleteFileEvent, cleanup on chan close} {fileevent} { + set f [open $path(foo) r] + set f2 [open $path(foo) r] + set f3 [open $path(foo) r] + chan event $f readable {f script} + chan event $f2 readable {f2 script} + chan event $f3 readable {f3 script} + set x {} + chan close $f2 + lappend x [catch {chan event $f readable} msg] $msg \ + [catch {chan event $f2 readable}] \ + [catch {chan event $f3 readable} msg] $msg + chan close $f3 + lappend x [catch {chan event $f readable} msg] $msg \ + [catch {chan event $f2 readable}] \ + [catch {chan event $f3 readable}] + chan close $f + lappend x [catch {chan event $f readable}] \ + [catch {chan event $f2 readable}] \ + [catch {chan event $f3 readable}] +} {0 {f script} 1 0 {f3 script} 0 {f script} 1 1 1 1 1} + +# Execute these tests only if the "testfevent" command is present. + +test chan-io-46.1 {Tcl event loop vs multiple interpreters} {testfevent fileevent} { + testfevent create + set script "set f \[[list open $path(foo) r]]\n" + append script { + set x "no event" + chan event $f readable [namespace code { + set x "f triggered: [chan gets $f]" + chan event $f readable {} + }] + } + testfevent cmd $script + after 1 ;# We must delay because Windows takes a little time to notice + update + testfevent cmd {chan close $f} + list [testfevent cmd {set x}] [testfevent cmd {info commands after}] +} {{f triggered: foo bar} after} +test chan-io-46.2 {Tcl event loop vs multiple interpreters} testfevent { + testfevent create + testfevent cmd { + variable x 0 + after 100 {set x triggered} + vwait [namespace which -variable x] + set x + } +} {triggered} +test chan-io-46.3 {Tcl event loop vs multiple interpreters} testfevent { + testfevent create + testfevent cmd { + set x 0 + after 10 {lappend x timer} + after 30 + set result $x + update idletasks + lappend result $x + update + lappend result $x + } +} {0 0 {0 timer}} + +test chan-io-47.1 {chan event vs multiple interpreters} {testfevent fileevent} { + set f [open $path(foo) r] + set f2 [open $path(foo) r] + set f3 [open $path(foo) r] + chan event $f readable {script 1} + testfevent create + testfevent share $f2 + testfevent cmd "chan event $f2 readable {script 2}" + chan event $f3 readable {sript 3} + set x {} + lappend x [chan event $f2 readable] + testfevent delete + lappend x [chan event $f readable] [chan event $f2 readable] \ + [chan event $f3 readable] + chan close $f + chan close $f2 + chan close $f3 + set x +} {{} {script 1} {} {sript 3}} +test chan-io-47.2 {deleting chan event on interpreter delete} {testfevent fileevent} { + set f [open $path(foo) r] + set f2 [open $path(foo) r] + set f3 [open $path(foo) r] + set f4 [open $path(foo) r] + chan event $f readable {script 1} + testfevent create + testfevent share $f2 + testfevent share $f3 + testfevent cmd "chan event $f2 readable {script 2} + chan event $f3 readable {script 3}" + chan event $f4 readable {script 4} + testfevent delete + set x [list [chan event $f readable] [chan event $f2 readable] \ + [chan event $f3 readable] [chan event $f4 readable]] + chan close $f + chan close $f2 + chan close $f3 + chan close $f4 + set x +} {{script 1} {} {} {script 4}} +test chan-io-47.3 {deleting chan event on interpreter delete} {testfevent fileevent} { + set f [open $path(foo) r] + set f2 [open $path(foo) r] + set f3 [open $path(foo) r] + set f4 [open $path(foo) r] + testfevent create + testfevent share $f3 + testfevent share $f4 + chan event $f readable {script 1} + chan event $f2 readable {script 2} + testfevent cmd "chan event $f3 readable {script 3} + chan event $f4 readable {script 4}" + testfevent delete + set x [list [chan event $f readable] [chan event $f2 readable] \ + [chan event $f3 readable] [chan event $f4 readable]] + chan close $f + chan close $f2 + chan close $f3 + chan close $f4 + set x +} {{script 1} {script 2} {} {}} +test chan-io-47.4 {file events on shared files and multiple interpreters} {testfevent fileevent} { + set f [open $path(foo) r] + set f2 [open $path(foo) r] + testfevent create + testfevent share $f + testfevent cmd "chan event $f readable {script 1}" + chan event $f readable {script 2} + chan event $f2 readable {script 3} + set x [list [chan event $f2 readable] \ + [testfevent cmd "chan event $f readable"] \ + [chan event $f readable]] + testfevent delete + chan close $f + chan close $f2 + set x +} {{script 3} {script 1} {script 2}} +test chan-io-47.5 {file events on shared files, deleting file events} {testfevent fileevent} { + set f [open $path(foo) r] + testfevent create + testfevent share $f + testfevent cmd "chan event $f readable {script 1}" + chan event $f readable {script 2} + testfevent cmd "chan event $f readable {}" + set x [list [testfevent cmd "chan event $f readable"] \ + [chan event $f readable]] + testfevent delete + chan close $f + set x +} {{} {script 2}} +test chan-io-47.6 {file events on shared files, deleting file events} {testfevent fileevent} { + set f [open $path(foo) r] + testfevent create + testfevent share $f + testfevent cmd "chan event $f readable {script 1}" + chan event $f readable {script 2} + chan event $f readable {} + set x [list [testfevent cmd "chan event $f readable"] \ + [chan event $f readable]] + testfevent delete + chan close $f + set x +} {{script 1} {}} + +set path(bar) [makeFile {} bar] + +test chan-io-48.1 {testing readability conditions} {fileevent} { + set f [open $path(bar) w] + chan puts $f abcdefg + chan puts $f abcdefg + chan puts $f abcdefg + chan puts $f abcdefg + chan puts $f abcdefg + chan close $f + set f [open $path(bar) r] + chan event $f readable [namespace code [list consume $f]] + proc consume {f} { + variable l + variable x + lappend l called + if {[chan eof $f]} { + chan close $f + set x done + } else { + chan gets $f + } + } + set l "" + variable x not_done + vwait [namespace which -variable x] + list $x $l +} {done {called called called called called called called}} +test chan-io-48.2 {testing readability conditions} {nonBlockFiles fileevent} { + set f [open $path(bar) w] + chan puts $f abcdefg + chan puts $f abcdefg + chan puts $f abcdefg + chan puts $f abcdefg + chan puts $f abcdefg + chan close $f + set f [open $path(bar) r] + chan event $f readable [namespace code [list consume $f]] + chan configure $f -blocking off + proc consume {f} { + variable x + variable l + lappend l called + if {[chan eof $f]} { + chan close $f + set x done + } else { + chan gets $f + } + } + set l "" + variable x not_done + vwait [namespace which -variable x] + list $x $l +} {done {called called called called called called called}} +set path(my_script) [makeFile {} my_script] +test chan-io-48.3 {testing readability conditions} {stdio unix nonBlockFiles openpipe fileevent} { + set f [open $path(bar) w] + chan puts $f abcdefg + chan puts $f abcdefg + chan puts $f abcdefg + chan puts $f abcdefg + chan puts $f abcdefg + chan close $f + set f [open $path(my_script) w] + chan puts $f { + proc copy_slowly {f} { + while {![chan eof $f]} { + chan puts [chan gets $f] + after 200 + } + chan close $f + } + } + chan close $f + set f [open "|[list [interpreter]]" r+] + chan event $f readable [namespace code [list consume $f]] + chan configure $f -buffering line + chan configure $f -blocking off + proc consume {f} { + variable l + variable x + if {[chan eof $f]} { + set x done + } else { + chan gets $f + lappend l [chan blocked $f] + chan gets $f + lappend l [chan blocked $f] + } + } + set l "" + variable x not_done + chan puts $f [list source $path(my_script)] + chan puts $f "set f \[[list open $path(bar) r]]" + chan puts $f {copy_slowly $f} + chan puts $f {exit} + vwait [namespace which -variable x] + chan close $f + list $x $l +} {done {0 1 0 1 0 1 0 1 0 1 0 1 0 0}} +test chan-io-48.4 {lf write, testing readability, ^Z termination, auto read mode} {fileevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + variable c [format "abc\ndef\n%c" 26] + chan puts -nonewline $f $c + chan close $f + proc consume {f} { + variable l + variable c + variable x + if {[chan eof $f]} { + set x done + chan close $f + } else { + lappend l [chan gets $f] + incr c + } + } + set c 0 + set l "" + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + chan event $f readable [namespace code [list consume $f]] + variable x + vwait [namespace which -variable x] + list $c $l +} {3 {abc def {}}} +test chan-io-48.5 {lf write, testing readability, ^Z in middle, auto read mode} {fileevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + set c [format "abc\ndef\n%cfoo\nbar\n" 26] + chan puts -nonewline $f $c + chan close $f + proc consume {f} { + variable l + variable x + variable c + if {[chan eof $f]} { + set x done + chan close $f + } else { + lappend l [chan gets $f] + incr c + } + } + set c 0 + set l "" + set f [open $path(test1) r] + chan configure $f -eofchar \x1a -translation auto + chan event $f readable [namespace code [list consume $f]] + variable x + vwait [namespace which -variable x] + list $c $l +} {3 {abc def {}}} +test chan-io-48.6 {cr write, testing readability, ^Z termination, auto read mode} {fileevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + set c [format "abc\ndef\n%c" 26] + chan puts -nonewline $f $c + chan close $f + proc consume {f} { + variable l + variable x + variable c + if {[chan eof $f]} { + set x done + chan close $f + } else { + lappend l [chan gets $f] + incr c + } + } + set c 0 + set l "" + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + chan event $f readable [namespace code [list consume $f]] + variable x + vwait [namespace which -variable x] + list $c $l +} {3 {abc def {}}} +test chan-io-48.7 {cr write, testing readability, ^Z in middle, auto read mode} {fileevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + set c [format "abc\ndef\n%cfoo\nbar\n" 26] + chan puts -nonewline $f $c + chan close $f + proc consume {f} { + variable l + variable c + variable x + if {[chan eof $f]} { + set x done + chan close $f + } else { + lappend l [chan gets $f] + incr c + } + } + set c 0 + set l "" + set f [open $path(test1) r] + chan configure $f -eofchar \x1a -translation auto + chan event $f readable [namespace code [list consume $f]] + variable x + vwait [namespace which -variable x] + list $c $l +} {3 {abc def {}}} +test chan-io-48.8 {crlf write, testing readability, ^Z termination, auto read mode} {fileevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + set c [format "abc\ndef\n%c" 26] + chan puts -nonewline $f $c + chan close $f + proc consume {f} { + variable l + variable x + variable c + if {[chan eof $f]} { + set x done + chan close $f + } else { + lappend l [chan gets $f] + incr c + } + } + set c 0 + set l "" + set f [open $path(test1) r] + chan configure $f -translation auto -eofchar \x1a + chan event $f readable [namespace code [list consume $f]] + variable x + vwait [namespace which -variable x] + list $c $l +} {3 {abc def {}}} +test chan-io-48.9 {crlf write, testing readability, ^Z in middle, auto read mode} {fileevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + set c [format "abc\ndef\n%cfoo\nbar\n" 26] + chan puts -nonewline $f $c + chan close $f + proc consume {f} { + variable l + variable c + variable x + if {[chan eof $f]} { + set x done + chan close $f + } else { + lappend l [chan gets $f] + incr c + } + } + set c 0 + set l "" + set f [open $path(test1) r] + chan configure $f -eofchar \x1a -translation auto + chan event $f readable [namespace code [list consume $f]] + variable x + vwait [namespace which -variable x] + list $c $l +} {3 {abc def {}}} +test chan-io-48.10 {lf write, testing readability, ^Z in middle, lf read mode} {fileevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + set c [format "abc\ndef\n%cfoo\nbar\n" 26] + chan puts -nonewline $f $c + chan close $f + proc consume {f} { + variable l + variable c + variable x + if {[chan eof $f]} { + set x done + chan close $f + } else { + lappend l [chan gets $f] + incr c + } + } + set c 0 + set l "" + set f [open $path(test1) r] + chan configure $f -eofchar \x1a -translation lf + chan event $f readable [namespace code [list consume $f]] + variable x + vwait [namespace which -variable x] + list $c $l +} {3 {abc def {}}} +test chan-io-48.11 {lf write, testing readability, ^Z termination, lf read mode} {fileevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + set c [format "abc\ndef\n%c" 26] + chan puts -nonewline $f $c + chan close $f + proc consume {f} { + variable l + variable x + variable c + if {[chan eof $f]} { + set x done + chan close $f + } else { + lappend l [chan gets $f] + incr c + } + } + set c 0 + set l "" + set f [open $path(test1) r] + chan configure $f -translation lf -eofchar \x1a + chan event $f readable [namespace code [list consume $f]] + variable x + vwait [namespace which -variable x] + list $c $l +} {3 {abc def {}}} +test chan-io-48.12 {cr write, testing readability, ^Z in middle, cr read mode} {fileevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + set c [format "abc\ndef\n%cfoo\nbar\n" 26] + chan puts -nonewline $f $c + chan close $f + proc consume {f} { + variable l + variable x + variable c + if {[chan eof $f]} { + set x done + chan close $f + } else { + lappend l [chan gets $f] + incr c + } + } + set c 0 + set l "" + set f [open $path(test1) r] + chan configure $f -eofchar \x1a -translation cr + chan event $f readable [namespace code [list consume $f]] + variable x + vwait [namespace which -variable x] + list $c $l +} {3 {abc def {}}} +test chan-io-48.13 {cr write, testing readability, ^Z termination, cr read mode} {fileevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation cr + set c [format "abc\ndef\n%c" 26] + chan puts -nonewline $f $c + chan close $f + proc consume {f} { + variable c + variable x + variable l + if {[chan eof $f]} { + set x done + chan close $f + } else { + lappend l [chan gets $f] + incr c + } + } + set c 0 + set l "" + set f [open $path(test1) r] + chan configure $f -translation cr -eofchar \x1a + chan event $f readable [namespace code [list consume $f]] + variable x + vwait [namespace which -variable x] + list $c $l +} {3 {abc def {}}} +test chan-io-48.14 {crlf write, testing readability, ^Z in middle, crlf read mode} {fileevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + set c [format "abc\ndef\n%cfoo\nbar\n" 26] + chan puts -nonewline $f $c + chan close $f + proc consume {f} { + variable c + variable x + variable l + if {[chan eof $f]} { + set x done + chan close $f + } else { + lappend l [chan gets $f] + incr c + } + } + set c 0 + set l "" + set f [open $path(test1) r] + chan configure $f -eofchar \x1a -translation crlf + chan event $f readable [namespace code [list consume $f]] + variable x + vwait [namespace which -variable x] + list $c $l +} {3 {abc def {}}} +test chan-io-48.15 {crlf write, testing readability, ^Z termi, crlf read mode} {fileevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation crlf + set c [format "abc\ndef\n%c" 26] + chan puts -nonewline $f $c + chan close $f + proc consume {f} { + variable c + variable x + variable l + if {[chan eof $f]} { + set x done + chan close $f + } else { + lappend l [chan gets $f] + incr c + } + } + set c 0 + set l "" + set f [open $path(test1) r] + chan configure $f -translation crlf -eofchar \x1a + chan event $f readable [namespace code [list consume $f]] + variable x + vwait [namespace which -variable x] + list $c $l +} {3 {abc def {}}} + +test chan-io-49.1 {testing crlf reading, leftover cr disgorgment} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "a\rb\rc\r\n" + chan close $f + set f [open $path(test1) r] + set l "" + lappend l [file size $path(test1)] + chan configure $f -translation crlf + lappend l [chan read $f 1] + lappend l [chan tell $f] + lappend l [chan read $f 1] + lappend l [chan tell $f] + lappend l [chan read $f 1] + lappend l [chan tell $f] + lappend l [chan read $f 1] + lappend l [chan tell $f] + lappend l [chan read $f 1] + lappend l [chan tell $f] + lappend l [chan read $f 1] + lappend l [chan tell $f] + lappend l [chan eof $f] + lappend l [chan read $f 1] + lappend l [chan eof $f] + chan close $f + set l +} "7 a 1 [list \r] 2 b 3 [list \r] 4 c 5 { +} 7 0 {} 1" +test chan-io-49.2 {testing crlf reading, leftover cr disgorgment} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "a\rb\rc\r\n" + chan close $f + set f [open $path(test1) r] + set l "" + lappend l [file size $path(test1)] + chan configure $f -translation crlf + lappend l [chan read $f 2] + lappend l [chan tell $f] + lappend l [chan read $f 2] + lappend l [chan tell $f] + lappend l [chan read $f 2] + lappend l [chan tell $f] + lappend l [chan eof $f] + lappend l [chan read $f 2] + lappend l [chan tell $f] + lappend l [chan eof $f] + chan close $f + set l +} "7 [list a\r] 2 [list b\r] 4 [list c\n] 7 0 {} 7 1" +test chan-io-49.3 {testing crlf reading, leftover cr disgorgment} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "a\rb\rc\r\n" + chan close $f + set f [open $path(test1) r] + set l "" + lappend l [file size $path(test1)] + chan configure $f -translation crlf + lappend l [chan read $f 3] + lappend l [chan tell $f] + lappend l [chan read $f 3] + lappend l [chan tell $f] + lappend l [chan eof $f] + lappend l [chan read $f 3] + lappend l [chan tell $f] + lappend l [chan eof $f] + chan close $f + set l +} "7 [list a\rb] 3 [list \rc\n] 7 0 {} 7 1" +test chan-io-49.4 {testing crlf reading, leftover cr disgorgment} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "a\rb\rc\r\n" + chan close $f + set f [open $path(test1) r] + set l "" + lappend l [file size $path(test1)] + chan configure $f -translation crlf + lappend l [chan read $f 3] + lappend l [chan tell $f] + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan eof $f] + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan eof $f] + chan close $f + set l +} "7 [list a\rb] 3 [list \rc] 7 0 {} 7 1" +test chan-io-49.5 {testing crlf reading, leftover cr disgorgment} { + file delete $path(test1) + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts -nonewline $f "a\rb\rc\r\n" + chan close $f + set f [open $path(test1) r] + set l "" + lappend l [file size $path(test1)] + chan configure $f -translation crlf + lappend l [set x [chan gets $f]] + lappend l [chan tell $f] + lappend l [chan gets $f] + lappend l [chan tell $f] + lappend l [chan eof $f] + chan close $f + set l +} [list 7 a\rb\rc 7 {} 7 1] + +test chan-io-50.1 {testing handler deletion} {testchannelevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan close $f + set f [open $path(test1) r] + testchannelevent $f add readable [namespace code [list delhandler $f]] + proc delhandler {f} { + variable z + set z called + testchannelevent $f delete 0 + } + set z not_called + update + chan close $f + set z +} called +test chan-io-50.2 {testing handler deletion with multiple handlers} {testchannelevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan close $f + set f [open $path(test1) r] + testchannelevent $f add readable [namespace code [list delhandler $f 1]] + testchannelevent $f add readable [namespace code [list delhandler $f 0]] + proc delhandler {f i} { + variable z + lappend z "called delhandler $f $i" + testchannelevent $f delete 0 + } + set z "" + update + chan close $f + string compare [string tolower $z] \ + [list [list called delhandler $f 0] [list called delhandler $f 1]] +} 0 +test chan-io-50.3 {testing handler deletion with multiple handlers} {testchannelevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan close $f + set f [open $path(test1) r] + testchannelevent $f add readable [namespace code [list notcalled $f 1]] + testchannelevent $f add readable [namespace code [list delhandler $f 0]] + set z "" + proc notcalled {f i} { + variable z + lappend z "notcalled was called!! $f $i" + } + proc delhandler {f i} { + variable z + testchannelevent $f delete 1 + lappend z "delhandler $f $i called" + testchannelevent $f delete 0 + lappend z "delhandler $f $i deleted myself" + } + set z "" + update + chan close $f + string compare [string tolower $z] \ + [list [list delhandler $f 0 called] \ + [list delhandler $f 0 deleted myself]] +} 0 +test chan-io-50.4 {testing handler deletion vs reentrant calls} {testchannelevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan close $f + set f [open $path(test1) r] + testchannelevent $f add readable [namespace code [list delrecursive $f]] + proc delrecursive {f} { + variable z + variable u + if {"$u" == "recursive"} { + testchannelevent $f delete 0 + lappend z "delrecursive deleting recursive" + } else { + lappend z "delrecursive calling recursive" + set u recursive + update + } + } + variable u toplevel + variable z "" + update + chan close $f + string compare [string tolower $z] \ + {{delrecursive calling recursive} {delrecursive deleting recursive}} +} 0 +test chan-io-50.5 {testing handler deletion vs reentrant calls} {testchannelevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan close $f + set f [open $path(test1) r] + testchannelevent $f add readable [namespace code [list notcalled $f]] + testchannelevent $f add readable [namespace code [list del $f]] + proc notcalled {f} { + variable z + lappend z "notcalled was called!! $f" + } + proc del {f} { + variable u + variable z + if {"$u" == "recursive"} { + testchannelevent $f delete 1 + testchannelevent $f delete 0 + lappend z "del deleted notcalled" + lappend z "del deleted myself" + } else { + set u recursive + lappend z "del calling recursive" + update + lappend z "del after update" + } + } + set z "" + set u toplevel + update + chan close $f + string compare [string tolower $z] \ + [list {del calling recursive} {del deleted notcalled} \ + {del deleted myself} {del after update}] +} 0 +test chan-io-50.6 {testing handler deletion vs reentrant calls} {testchannelevent} { + file delete $path(test1) + set f [open $path(test1) w] + chan close $f + set f [open $path(test1) r] + testchannelevent $f add readable [namespace code [list second $f]] + testchannelevent $f add readable [namespace code [list first $f]] + proc first {f} { + variable u + variable z + if {"$u" == "toplevel"} { + lappend z "first called" + set u first + update + lappend z "first after update" + } else { + lappend z "first called not toplevel" + } + } + proc second {f} { + variable u + variable z + if {"$u" == "first"} { + lappend z "second called, first time" + set u second + testchannelevent $f delete 0 + } elseif {"$u" == "second"} { + lappend z "second called, second time" + testchannelevent $f delete 0 + } else { + lappend z "second called, cannot happen!" + testchannelevent $f removeall + } + } + set z "" + set u toplevel + update + chan close $f + string compare [string tolower $z] \ + [list {first called} {first called not toplevel} \ + {second called, first time} {second called, second time} \ + {first after update}] +} 0 + +test chan-io-51.1 {Test old socket deletion on Macintosh} {socket} { + set x 0 + set result "" + proc accept {s a p} { + variable x + variable wait + chan configure $s -blocking off + chan puts $s "sock[incr x]" + chan close $s + set wait done + } + set ss [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + set port [lindex [chan configure $ss -sockname] 2] + + variable wait "" + set cs [socket 127.0.0.1 $port] + vwait [namespace which -variable wait] + lappend result [chan gets $cs] + chan close $cs + + set wait "" + set cs [socket 127.0.0.1 $port] + vwait [namespace which -variable wait] + lappend result [chan gets $cs] + chan close $cs + + set wait "" + set cs [socket 127.0.0.1 $port] + vwait [namespace which -variable wait] + lappend result [chan gets $cs] + chan close $cs + + set wait "" + set cs [socket 127.0.0.1 $port] + vwait [namespace which -variable wait] + lappend result [chan gets $cs] + chan close $cs + chan close $ss + set result +} {sock1 sock2 sock3 sock4} + +test chan-io-52.1 {TclCopyChannel} {fcopy} { + file delete $path(test1) + set f1 [open $thisScript] + set f2 [open $path(test1) w] + chan copy $f1 $f2 -command { # } + catch { chan copy $f1 $f2 } msg + chan close $f1 + chan close $f2 + string compare $msg "channel \"$f1\" is busy" +} {0} +test chan-io-52.2 {TclCopyChannel} {fcopy} { + file delete $path(test1) + set f1 [open $thisScript] + set f2 [open $path(test1) w] + set f3 [open $thisScript] + chan copy $f1 $f2 -command { # } + catch { chan copy $f3 $f2 } msg + chan close $f1 + chan close $f2 + chan close $f3 + string compare $msg "channel \"$f2\" is busy" +} {0} +test chan-io-52.3 {TclCopyChannel} {fcopy} { + file delete $path(test1) + set f1 [open $thisScript] + set f2 [open $path(test1) w] + chan configure $f1 -translation lf -blocking 0 + chan configure $f2 -translation cr -blocking 0 + set s0 [chan copy $f1 $f2] + set result [list [chan configure $f1 -blocking] [chan configure $f2 -blocking]] + chan close $f1 + chan close $f2 + set s1 [file size $thisScript] + set s2 [file size $path(test1)] + if {("$s1" == "$s2") && ($s0 == $s1)} { + lappend result ok + } + set result +} {0 0 ok} +test chan-io-52.4 {TclCopyChannel} {fcopy} { + file delete $path(test1) + set f1 [open $thisScript] + set f2 [open $path(test1) w] + chan configure $f1 -translation lf -blocking 0 + chan configure $f2 -translation cr -blocking 0 + chan copy $f1 $f2 -size 40 + set result [list [chan configure $f1 -blocking] [chan configure $f2 -blocking]] + chan close $f1 + chan close $f2 + lappend result [file size $path(test1)] +} {0 0 40} +test chan-io-52.5 {TclCopyChannel, all} {fcopy} { + file delete $path(test1) + set f1 [open $thisScript] + set f2 [open $path(test1) w] + chan configure $f1 -translation lf -blocking 0 + chan configure $f2 -translation lf -blocking 0 + chan copy $f1 $f2 -size -1 ;# -1 means 'copy all', same as if no -size specified. + set result [list [chan configure $f1 -blocking] [chan configure $f2 -blocking]] + chan close $f1 + chan close $f2 + set s1 [file size $thisScript] + set s2 [file size $path(test1)] + if {"$s1" == "$s2"} { + lappend result ok + } + set result +} {0 0 ok} +test chan-io-52.5a {TclCopyChannel, all, other negative value} {fcopy} { + file delete $path(test1) + set f1 [open $thisScript] + set f2 [open $path(test1) w] + chan configure $f1 -translation lf -blocking 0 + chan configure $f2 -translation lf -blocking 0 + chan copy $f1 $f2 -size -2 ;# < 0 behaves like -1, copy all + set result [list [chan configure $f1 -blocking] [chan configure $f2 -blocking]] + chan close $f1 + chan close $f2 + set s1 [file size $thisScript] + set s2 [file size $path(test1)] + if {"$s1" == "$s2"} { + lappend result ok + } + set result +} {0 0 ok} +test chan-io-52.5b {TclCopyChannel, all, wrapped to ngative value} {fcopy} { + file delete $path(test1) + set f1 [open $thisScript] + set f2 [open $path(test1) w] + chan configure $f1 -translation lf -blocking 0 + chan configure $f2 -translation lf -blocking 0 + chan copy $f1 $f2 -size 3221176172 ;# Wrapped to < 0, behaves like -1, copy all + set result [list [chan configure $f1 -blocking] [chan configure $f2 -blocking]] + chan close $f1 + chan close $f2 + set s1 [file size $thisScript] + set s2 [file size $path(test1)] + if {"$s1" == "$s2"} { + lappend result ok + } + set result +} {0 0 ok} +test chan-io-52.6 {TclCopyChannel} {fcopy} { + file delete $path(test1) + set f1 [open $thisScript] + set f2 [open $path(test1) w] + chan configure $f1 -translation lf -blocking 0 + chan configure $f2 -translation lf -blocking 0 + set s0 [chan copy $f1 $f2 -size [expr [file size $thisScript] + 5]] + set result [list [chan configure $f1 -blocking] [chan configure $f2 -blocking]] + chan close $f1 + chan close $f2 + set s1 [file size $thisScript] + set s2 [file size $path(test1)] + if {("$s1" == "$s2") && ($s0 == $s1)} { + lappend result ok + } + set result +} {0 0 ok} +test chan-io-52.7 {TclCopyChannel} {fcopy} { + file delete $path(test1) + set f1 [open $thisScript] + set f2 [open $path(test1) w] + chan configure $f1 -translation lf -blocking 0 + chan configure $f2 -translation lf -blocking 0 + chan copy $f1 $f2 + set result [list [chan configure $f1 -blocking] [chan configure $f2 -blocking]] + set s1 [file size $thisScript] + set s2 [file size $path(test1)] + chan close $f1 + chan close $f2 + if {"$s1" == "$s2"} { + lappend result ok + } + set result +} {0 0 ok} +test chan-io-52.8 {TclCopyChannel} {stdio openpipe fcopy} { + file delete $path(test1) + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan configure $f1 -translation lf + chan puts $f1 " + chan puts ready + chan gets stdin + set f1 \[open [list $thisScript] r\] + chan configure \$f1 -translation lf + chan puts \[chan read \$f1 100\] + chan close \$f1 + " + chan close $f1 + set f1 [open "|[list [interpreter] $path(pipe)]" r+] + chan configure $f1 -translation lf + chan gets $f1 + chan puts $f1 ready + chan flush $f1 + set f2 [open $path(test1) w] + chan configure $f2 -translation lf + set s0 [chan copy $f1 $f2 -size 40] + catch {chan close $f1} + chan close $f2 + list $s0 [file size $path(test1)] +} {40 40} +# Empty files, to register them with the test facility +set path(kyrillic.txt) [makeFile {} kyrillic.txt] +set path(utf8-fcopy.txt) [makeFile {} utf8-fcopy.txt] +set path(utf8-rp.txt) [makeFile {} utf8-rp.txt] +# Create kyrillic file, use lf translation to avoid os eol issues +set out [open $path(kyrillic.txt) w] +chan configure $out -encoding koi8-r -translation lf +chan puts $out "\u0410\u0410" +chan close $out +test chan-io-52.9 {TclCopyChannel & encodings} {fcopy} { + # Copy kyrillic to UTF-8, using chan copy. + + set in [open $path(kyrillic.txt) r] + set out [open $path(utf8-fcopy.txt) w] + + chan configure $in -encoding koi8-r -translation lf + chan configure $out -encoding utf-8 -translation lf + + chan copy $in $out + chan close $in + chan close $out + + # Do the same again, but differently (read/chan puts). + + set in [open $path(kyrillic.txt) r] + set out [open $path(utf8-rp.txt) w] + + chan configure $in -encoding koi8-r -translation lf + chan configure $out -encoding utf-8 -translation lf + + chan puts -nonewline $out [chan read $in] + + chan close $in + chan close $out + + list [file size $path(kyrillic.txt)] \ + [file size $path(utf8-fcopy.txt)] \ + [file size $path(utf8-rp.txt)] +} {3 5 5} +test chan-io-52.10 {TclCopyChannel & encodings} {fcopy} { + # encoding to binary (=> implies that the + # internal utf-8 is written) + + set in [open $path(kyrillic.txt) r] + set out [open $path(utf8-fcopy.txt) w] + + chan configure $in -encoding koi8-r -translation lf + # -translation binary is also -encoding binary + chan configure $out -translation binary + + chan copy $in $out + chan close $in + chan close $out + + file size $path(utf8-fcopy.txt) +} 5 +test chan-io-52.11 {TclCopyChannel & encodings} {fcopy} { + # binary to encoding => the input has to be + # in utf-8 to make sense to the encoder + + set in [open $path(utf8-fcopy.txt) r] + set out [open $path(kyrillic.txt) w] + + # -translation binary is also -encoding binary + chan configure $in -translation binary + chan configure $out -encoding koi8-r -translation lf + + chan copy $in $out + chan close $in + chan close $out + + file size $path(kyrillic.txt) +} 3 + +test chan-io-53.1 {CopyData} {fcopy} { + file delete $path(test1) + set f1 [open $thisScript] + set f2 [open $path(test1) w] + chan configure $f1 -translation lf -blocking 0 + chan configure $f2 -translation cr -blocking 0 + chan copy $f1 $f2 -size 0 + set result [list [chan configure $f1 -blocking] [chan configure $f2 -blocking]] + chan close $f1 + chan close $f2 + lappend result [file size $path(test1)] +} {0 0 0} +test chan-io-53.2 {CopyData} {fcopy} { + file delete $path(test1) + set f1 [open $thisScript] + set f2 [open $path(test1) w] + chan configure $f1 -translation lf -blocking 0 + chan configure $f2 -translation cr -blocking 0 + chan copy $f1 $f2 -command [namespace code {set s0}] + set result [list [chan configure $f1 -blocking] [chan configure $f2 -blocking]] + variable s0 + vwait [namespace which -variable s0] + chan close $f1 + chan close $f2 + set s1 [file size $thisScript] + set s2 [file size $path(test1)] + if {("$s1" == "$s2") && ($s0 == $s1)} { + lappend result ok + } + set result +} {0 0 ok} +test chan-io-53.3 {CopyData: background read underflow} {stdio unix openpipe fcopy} { + file delete $path(test1) + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan puts -nonewline $f1 { + chan puts ready + chan flush stdout ;# Don't assume line buffered! + chan copy stdin stdout -command { set x } + vwait x + set f [} + chan puts $f1 [list open $path(test1) w]] + chan puts $f1 { + chan configure $f -translation lf + chan puts $f "done" + chan close $f + } + chan close $f1 + set f1 [open "|[list [interpreter] $path(pipe)]" r+] + set result [chan gets $f1] + chan puts $f1 line1 + chan flush $f1 + lappend result [chan gets $f1] + chan puts $f1 line2 + chan flush $f1 + lappend result [chan gets $f1] + chan close $f1 + after 500 + set f [open $path(test1)] + lappend result [chan read $f] + chan close $f + set result +} "ready line1 line2 {done\n}" +test chan-io-53.4 {CopyData: background write overflow} {stdio unix openpipe fileevent fcopy} { + set big bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n + variable x + for {set x 0} {$x < 12} {incr x} { + append big $big + } + file delete $path(test1) + file delete $path(pipe) + set f1 [open $path(pipe) w] + chan puts $f1 { + chan puts ready + chan copy stdin stdout -command { set x } + vwait x + set f [open $path(test1) w] + chan configure $f -translation lf + chan puts $f "done" + chan close $f + } + chan close $f1 + set f1 [open "|[list [interpreter] $path(pipe)]" r+] + set result [chan gets $f1] + chan configure $f1 -blocking 0 + chan puts $f1 $big + chan flush $f1 + after 500 + set result "" + chan event $f1 read [namespace code { + append result [chan read $f1 1024] + if {[string length $result] >= [string length $big]} { + set x done + } + }] + vwait [namespace which -variable x] + chan close $f1 + set big {} + set x +} done +set result {} +proc FcopyTestAccept {sock args} { + after 1000 "chan close $sock" +} +proc FcopyTestDone {bytes {error {}}} { + variable fcopyTestDone + if {[string length $error]} { + set fcopyTestDone 1 + } else { + set fcopyTestDone 0 + } +} +test chan-io-53.5 {CopyData: error during chan copy} {socket fcopy} { + variable fcopyTestDone + set listen [socket -server [namespace code FcopyTestAccept] -myaddr 127.0.0.1 0] + set in [open $thisScript] ;# 126 K + set out [socket 127.0.0.1 [lindex [chan configure $listen -sockname] 2]] + catch {unset fcopyTestDone} + chan close $listen ;# This means the socket open never really succeeds + chan copy $in $out -command [namespace code FcopyTestDone] + variable fcopyTestDone + if ![info exists fcopyTestDone] { + vwait [namespace which -variable fcopyTestDone] ;# The error occurs here in the b.g. + } + chan close $in + chan close $out + set fcopyTestDone ;# 1 for error condition +} 1 +test chan-io-53.6 {CopyData: error during chan copy} {stdio openpipe fcopy} { + variable fcopyTestDone + file delete $path(pipe) + file delete $path(test1) + catch {unset fcopyTestDone} + set f1 [open $path(pipe) w] + chan puts $f1 "exit 1" + chan close $f1 + set in [open "|[list [interpreter] $path(pipe)]" r+] + set out [open $path(test1) w] + chan copy $in $out -command [namespace code FcopyTestDone] + variable fcopyTestDone + if ![info exists fcopyTestDone] { + vwait [namespace which -variable fcopyTestDone] + } + catch {chan close $in} + chan close $out + set fcopyTestDone ;# 0 for plain end of file +} {0} +proc doFcopy {in out {bytes 0} {error {}}} { + variable fcopyTestDone + variable fcopyTestCount + incr fcopyTestCount $bytes + if {[string length $error]} { + set fcopyTestDone 1 + } elseif {[chan eof $in]} { + set fcopyTestDone 0 + } else { + # Delay next chan copy to wait for size>0 input bytes + after 100 [list chan copy $in $out -size 1000 \ + -command [namespace code [list doFcopy $in $out]]] + } +} +test chan-io-53.7 {CopyData: Flooding chan copy from pipe} {stdio openpipe fcopy} { + variable fcopyTestDone + file delete $path(pipe) + catch {unset fcopyTestDone} + set fcopyTestCount 0 + set f1 [open $path(pipe) w] + chan puts $f1 { + # Write 10 bytes / 10 msec + proc Write {count} { + chan puts -nonewline "1234567890" + if {[incr count -1]} { + after 10 [list Write $count] + } else { + set ::ready 1 + } + } + chan configure stdout -buffering none + Write 345 ;# 3450 bytes ~3.45 sec + vwait ready + exit 0 + } + chan close $f1 + set in [open "|[list [interpreter] $path(pipe) &]" r+] + set out [open $path(test1) w] + doFcopy $in $out + variable fcopyTestDone + if ![info exists fcopyTestDone] { + vwait [namespace which -variable fcopyTestDone] + } + catch {chan close $in} + chan close $out + # -1=error 0=script error N=number of bytes + expr ($fcopyTestDone == 0) ? $fcopyTestCount : -1 +} {3450} +test chan-io-53.8 {CopyData: async callback and error handling, Bug 1932639} -setup { + # copy progress callback. errors out intentionally + proc ::cmd args { + lappend ::RES "CMD $args" + error !STOP + } + # capture callback error here + proc ::bgerror args { + lappend ::RES "bgerror/OK $args" + set ::forever has-been-reached + return + } + # Files we use for our channels + set foo [makeFile ashgdfashdgfasdhgfasdhgf foo] + set bar [makeFile {} bar] + # Channels to copy between + set f [open $foo r] ; fconfigure $f -translation binary + set g [open $bar w] ; fconfigure $g -translation binary -buffering none +} -constraints {stdio openpipe fcopy} -body { + # Record input size, so that result is always defined + lappend ::RES [file size $bar] + # Run the copy. Should not invoke -command now. + chan copy $f $g -size 2 -command ::cmd + # Check that -command was not called synchronously + set sbs [file size $bar] + lappend ::RES [expr {($sbs > 0) ? "sync/FAIL" : "sync/OK"}] $sbs + # Now let the async part happen. Should capture the error in cmd + # via bgerror. If not break the event loop via timer. + set token [after 1000 { + lappend ::RES {bgerror/FAIL timeout} + set ::forever has-been-reached + }] + vwait ::forever + catch {after cancel $token} + # Report + set ::RES +} -cleanup { + chan close $f + chan close $g + catch {unset ::RES} + catch {unset ::forever} + rename ::cmd {} + rename ::bgerror {} + removeFile foo + removeFile bar +} -result {0 sync/OK 0 {CMD 2} {bgerror/OK !STOP}} +test chan-io-53.8a {CopyData: async callback and error handling, Bug 1932639, at eof} -setup { + # copy progress callback. errors out intentionally + proc ::cmd args { + lappend ::RES "CMD $args" + set ::forever has-been-reached + return + } + # Files we use for our channels + set foo [makeFile ashgdfashdgfasdhgfasdhgf foo] + set bar [makeFile {} bar] + # Channels to copy between + set f [open $foo r] ; chan configure $f -translation binary + set g [open $bar w] ; chan configure $g -translation binary -buffering none +} -constraints {stdio openpipe fcopy} -body { + # Initialize and force eof on the input. + chan seek $f 0 end ; chan read $f 1 + set ::RES [chan eof $f] + # Run the copy. Should not invoke -command now. + chan copy $f $g -size 2 -command ::cmd + # Check that -command was not called synchronously + lappend ::RES [expr {([llength $::RES] > 1) ? "sync/FAIL" : "sync/OK"}] + # Now let the async part happen. Should capture the eof in cmd + # If not break the event loop via timer. + set token [after 1000 { + lappend ::RES {cmd/FAIL timeout} + set ::forever has-been-reached + }] + vwait ::forever + catch {after cancel $token} + # Report + set ::RES +} -cleanup { + chan close $f + chan close $g + catch {unset ::RES} + catch {unset ::forever} + rename ::cmd {} + removeFile foo + removeFile bar +} -result {1 sync/OK {CMD 0}} +test chan-io-53.9 {CopyData: -size and event interaction, Bug 780533} -setup { + set out [makeFile {} out] + set err [makeFile {} err] + set pipe [open "|[list [info nameofexecutable] 2> $err]" r+] + chan configure $pipe -translation binary -buffering line + chan puts $pipe { + chan configure stdout -translation binary -buffering line + chan puts stderr Waiting... + after 1000 + foreach x {a b c} { + chan puts stderr Looping... + chan puts $x + after 500 + } + proc bye args { + if {[chan gets stdin line]<0} { + chan puts stderr "CHILD: EOF detected, exiting" + exit + } else { + chan puts stderr "CHILD: ignoring line: $line" + } + } + chan puts stderr Now-sleeping-forever + chan event stdin readable bye + vwait forever + } + proc ::done args { + set ::forever OK + return + } + set ::forever {} + set out [open $out w] +} -constraints {stdio openpipe fcopy} -body { + chan copy $pipe $out -size 6 -command ::done + set token [after 5000 { + set ::forever {fcopy hangs} + }] + vwait ::forever + catch {after cancel $token} + set ::forever +} -cleanup { + chan close $pipe + rename ::done {} + after 1000; # Allow Windows time to figure out that the + # process is gone + catch {removeFile out} + catch {removeFile err} + catch {unset ::forever} +} -result OK +test chan-io-53.10 {Bug 1350564, multi-directional fcopy} -setup { + set err [makeFile {} err] + set pipe [open "|[list [info nameofexecutable] 2> $err]" r+] + chan configure $pipe -translation binary -buffering line + chan puts $pipe { + chan configure stderr -buffering line + # Kill server when pipe closed by invoker. + proc bye args { + if {![chan eof stdin]} { chan gets stdin ; return } + chan puts stderr BYE + exit + } + # Server code. Bi-directional copy between 2 sockets. + proc geof {sok} { + chan puts stderr DONE/$sok + chan close $sok + } + proc new {sok args} { + chan puts stderr NEW/$sok + global l srv + chan configure $sok -translation binary -buffering none + lappend l $sok + if {[llength $l]==2} { + chan close $srv + foreach {a b} $l break + chan copy $a $b -command [list geof $a] + chan copy $b $a -command [list geof $b] + chan puts stderr 2COPY + } + chan puts stderr ... + } + chan puts stderr SRV + set l {} + set srv [socket -server new 9999] + chan puts stderr WAITING + chan event stdin readable bye + chan puts OK + vwait forever + } + # wait for OK from server. + chan gets $pipe + # Now the two clients. + proc ::done {sock} { + if {[chan eof $sock]} { chan close $sock ; return } + lappend ::forever [chan gets $sock] + return + } + set a [socket 127.0.0.1 9999] + set b [socket 127.0.0.1 9999] + chan configure $a -translation binary -buffering none + chan configure $b -translation binary -buffering none + chan event $a readable [list ::done $a] + chan event $b readable [list ::done $b] +} -constraints {stdio openpipe fcopy} -body { + # Now pass data through the server in both directions. + set ::forever {} + chan puts $a AB + vwait ::forever + chan puts $b BA + vwait ::forever + set ::forever +} -cleanup { + catch {chan close $a} + catch {chan close $b} + chan close $pipe + rename ::done {} + after 1000 ;# Give Windows time to kill the process + removeFile err + catch {unset ::forever} +} -result {AB BA} + +test chan-io-54.1 {Recursive channel events} {socket fileevent} { + # This test checks to see if file events are delivered during recursive + # event loops when there is buffered data on the channel. + + proc accept {s a p} { + variable as + chan configure $s -translation lf + chan puts $s "line 1\nline2\nline3" + chan flush $s + set as $s + } + proc readit {s next} { + variable x + variable result + lappend result $next + if {$next == 1} { + chan event $s readable [namespace code [list readit $s 2]] + vwait [namespace which -variable x] + } + incr x + } + set ss [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + + # We need to delay on some systems until the creation of the + # server socket completes. + + set done 0 + for {set i 0} {$i < 10} {incr i} { + if {![catch {set cs [socket 127.0.0.1 [lindex [chan configure $ss -sockname] 2]]}]} { + set done 1 + break + } + after 100 + } + if {$done == 0} { + chan close $ss + error "failed to connect to server" + } + variable result {} + variable x 0 + variable as + vwait [namespace which -variable as] + chan configure $cs -translation lf + lappend result [chan gets $cs] + chan configure $cs -blocking off + chan event $cs readable [namespace code [list readit $cs 1]] + set a [after 2000 [namespace code { set x failure }]] + vwait [namespace which -variable x] + after cancel $a + chan close $as + chan close $ss + chan close $cs + list $result $x +} {{{line 1} 1 2} 2} +test chan-io-54.2 {Testing for busy-wait in recursive channel events} {socket fileevent} { + set accept {} + set after {} + variable s [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + proc accept {s a p} { + variable counter + variable accept + + set accept $s + set counter 0 + chan configure $s -blocking off -buffering line -translation lf + chan event $s readable [namespace code "doit $s"] + } + proc doit {s} { + variable counter + variable after + + incr counter + set l [chan gets $s] + if {"$l" == ""} { + chan event $s readable [namespace code "doit1 $s"] + set after [after 1000 [namespace code newline]] + } + } + proc doit1 {s} { + variable counter + variable accept + + incr counter + set l [chan gets $s] + chan close $s + set accept {} + } + proc producer {} { + variable s + variable writer + + set writer [socket 127.0.0.1 [lindex [chan configure $s -sockname] 2]] + chan configure $writer -buffering line + chan puts -nonewline $writer hello + chan flush $writer + } + proc newline {} { + variable done + variable writer + + chan puts $writer hello + chan flush $writer + set done 1 + } + producer + variable done + vwait [namespace which -variable done] + chan close $writer + chan close $s + after cancel $after + if {$accept != {}} {chan close $accept} + set counter +} 1 + +set path(fooBar) [makeFile {} fooBar] + +test chan-io-55.1 {ChannelEventScriptInvoker: deletion} -constraints { + fileevent +} -setup { + variable x + proc eventScript {fd} { + variable x + chan close $fd + error "planned error" + set x whoops + } + proc myHandler args { + variable x got_error + } + set handler [interp bgerror {}] + interp bgerror {} [namespace which myHandler] +} -body { + set f [open $path(fooBar) w] + chan event $f writable [namespace code [list eventScript $f]] + variable x not_done + vwait [namespace which -variable x] + set x +} -cleanup { + interp bgerror {} $handler +} -result {got_error} + +test chan-io-56.1 {ChannelTimerProc} {testchannelevent} { + set f [open $path(fooBar) w] + chan puts $f "this is a test" + chan close $f + set f [open $path(fooBar) r] + testchannelevent $f add readable [namespace code { + chan read $f 1 + incr x + }] + variable x 0 + vwait [namespace which -variable x] + vwait [namespace which -variable x] + set result $x + testchannelevent $f set 0 none + after idle [namespace code {set y done}] + variable y + vwait [namespace which -variable y] + chan close $f + lappend result $y +} {2 done} + +test chan-io-57.1 {buffered data and file events, gets} {fileevent} { + proc accept {sock args} { + variable s2 + set s2 $sock + } + set server [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + set s [socket 127.0.0.1 [lindex [chan configure $server -sockname] 2]] + variable s2 + vwait [namespace which -variable s2] + update + chan event $s2 readable [namespace code {lappend result readable}] + chan puts $s "12\n34567890" + chan flush $s + variable result [chan gets $s2] + after 1000 [namespace code {lappend result timer}] + vwait [namespace which -variable result] + lappend result [chan gets $s2] + vwait [namespace which -variable result] + chan close $s + chan close $s2 + chan close $server + set result +} {12 readable 34567890 timer} +test chan-io-57.2 {buffered data and file events, read} {fileevent} { + proc accept {sock args} { + variable s2 + set s2 $sock + } + set server [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + set s [socket 127.0.0.1 [lindex [chan configure $server -sockname] 2]] + variable s2 + vwait [namespace which -variable s2] + update + chan event $s2 readable [namespace code {lappend result readable}] + chan puts -nonewline $s "1234567890" + chan flush $s + variable result [chan read $s2 1] + after 1000 [namespace code {lappend result timer}] + vwait [namespace which -variable result] + lappend result [chan read $s2 9] + vwait [namespace which -variable result] + chan close $s + chan close $s2 + chan close $server + set result +} {1 readable 234567890 timer} + +test chan-io-58.1 {Tcl_NotifyChannel and error when closing} {stdio unixOrPc openpipe fileevent} { + set out [open $path(script) w] + chan puts $out { + chan puts "normal message from pipe" + chan puts stderr "error message from pipe" + exit 1 + } + proc readit {pipe} { + variable x + variable result + if {[chan eof $pipe]} { + set x [catch {chan close $pipe} line] + lappend result catch $line + } else { + chan gets $pipe line + lappend result chan gets $line + } + } + chan close $out + set pipe [open "|[list [interpreter] $path(script)]" r] + chan event $pipe readable [namespace code [list readit $pipe]] + variable x "" + set result "" + vwait [namespace which -variable x] + list $x $result +} {1 {chan gets {normal message from pipe} chan gets {} catch {error message from pipe}}} + +test chan-io-59.1 {Thread reference of channels} {testmainthread testchannel} { + # TIP #10 + # More complicated tests (like that the reference changes as a + # channel is moved from thread to thread) can be done only in the + # extension which fully implements the moving of channels between + # threads, i.e. 'Threads'. Or we have to extend [testthread] as well. + + set f [open $path(longfile) r] + set result [testchannel mthread $f] + chan close $f + string equal $result [testmainthread] +} {1} + +test chan-io-60.1 {writing illegal utf sequences} {openpipe fileevent} { + # This test will hang in older revisions of the core. + + set out [open $path(script) w] + chan puts $out { + chan puts [encoding convertfrom identity \xe2] + exit 1 + } + proc readit {pipe} { + variable x + variable result + if {[chan eof $pipe]} { + set x [catch {chan close $pipe} line] + lappend result catch $line + } else { + chan gets $pipe line + lappend result gets $line + } + } + chan close $out + set pipe [open "|[list [interpreter] $path(script)]" r] + chan event $pipe readable [namespace code [list readit $pipe]] + variable x "" + set result "" + vwait [namespace which -variable x] + + # cut of the remainder of the error stack, especially the filename + set result [lreplace $result 3 3 [lindex [split [lindex $result 3] \n] 0]] + list $x $result +} {1 {gets {} catch {error writing "stdout": invalid argument}}} + +test chan-io-61.1 {Reset eof state after changing the eof char} -setup { + set datafile [makeFile {} eofchar] + set f [open $datafile w] + chan configure $f -translation binary + chan puts -nonewline $f [string repeat "Ho hum\n" 11] + chan puts $f = + set line [string repeat "Ge gla " 4] + chan puts -nonewline $f [string repeat [string trimright $line]\n 834] + chan close $f +} -body { + set f [open $datafile r] + chan configure $f -eofchar = + set res {} + lappend res [chan read $f; chan tell $f] + chan configure $f -eofchar {} + lappend res [chan read $f 1] + lappend res [chan read $f; chan tell $f] + # Any seek zaps the internals into a good state. + #chan seek $f 0 start + #chan seek $f 0 current + #lappend res [chan read $f; chan tell $f] + chan close $f + set res +} -cleanup { + removeFile eofchar +} -result {77 = 23431} + + +# Test the cutting and splicing of channels, this is incidentially the +# attach/detach facility of package Thread, but __without any +# safeguards__. It can also be used to emulate transfer of channels +# between threads, and is used for that here. + +test chan-io-70.0 {Cutting & Splicing channels} {testchannel} { + set f [makeFile {... dummy ...} cutsplice] + set c [open $f r] + + set res {} + lappend res [catch {chan seek $c 0 start}] + testchannel cut $c + + lappend res [catch {chan seek $c 0 start}] + testchannel splice $c + + lappend res [catch {chan seek $c 0 start}] + chan close $c + + removeFile cutsplice + + set res +} {0 1 0} + + +# Duplicate of code in "thread.test". Find a better way of doing this +# without duplication. Maybe placement into a proc which transforms to +# nop after the first call, and placement of its defintion in a +# central location. + +if {[testConstraint testthread]} { + testthread errorproc ThreadError + + proc ThreadError {id info} { + global threadError + set threadError $info + } + + proc ThreadNullError {id info} { + # ignore + } +} + +test chan-io-70.1 {Transfer channel} {testchannel testthread} { + set f [makeFile {... dummy ...} cutsplice] + set c [open $f r] + + set res {} + lappend res [catch {chan seek $c 0 start}] + testchannel cut $c + lappend res [catch {chan seek $c 0 start}] + + set tid [testthread create] + testthread send $tid [list set c $c] + lappend res [testthread send $tid { + testchannel splice $c + set res [catch {chan seek $c 0 start}] + chan close $c + set res + }] + + tcltest::threadReap + removeFile cutsplice + + set res +} {0 1 0} + +# ### ### ### ######### ######### ######### + +foreach {n msg expected} { + 0 {} {} + 1 {{message only}} {{message only}} + 2 {-options x} {-options x} + 3 {-options {x y} {the message}} {-options {x y} {the message}} + + 4 {-code 1 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 5 {-code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 6 {-code 1 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 7 {-code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 8 {-code error -level 0 -f ba snarf} {-code error -level 0 -f ba snarf} + 9 {-code ok -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 10 {-code error -level 5 -f ba snarf} {-code error -level 0 -f ba snarf} + 11 {-code ok -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 12 {-code boss -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 13 {-code boss -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 14 {-code 1 -level 0 -f ba} {-code 1 -level 0 -f ba} + 15 {-code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + 16 {-code 1 -level 5 -f ba} {-code 1 -level 0 -f ba} + 17 {-code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + 18 {-code error -level 0 -f ba} {-code error -level 0 -f ba} + 19 {-code ok -level 0 -f ba} {-code 1 -level 0 -f ba} + 20 {-code error -level 5 -f ba} {-code error -level 0 -f ba} + 21 {-code ok -level 5 -f ba} {-code 1 -level 0 -f ba} + 22 {-code boss -level 0 -f ba} {-code 1 -level 0 -f ba} + 23 {-code boss -level 5 -f ba} {-code 1 -level 0 -f ba} + 24 {-code 1 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 25 {-code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 26 {-code error -level X -f ba snarf} {-code error -level 0 -f ba snarf} + 27 {-code ok -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 28 {-code boss -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 29 {-code 1 -level X -f ba} {-code 1 -level 0 -f ba} + 30 {-code 0 -level X -f ba} {-code 1 -level 0 -f ba} + 31 {-code error -level X -f ba} {-code error -level 0 -f ba} + 32 {-code ok -level X -f ba} {-code 1 -level 0 -f ba} + 33 {-code boss -level X -f ba} {-code 1 -level 0 -f ba} + + 34 {-code 1 -code 1 -level 0 -f ba snarf} {-code 1 -code 1 -level 0 -f ba snarf} + 35 {-code 1 -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 36 {-code 1 -code 1 -level 5 -f ba snarf} {-code 1 -code 1 -level 0 -f ba snarf} + 37 {-code 1 -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 38 {-code 1 -code error -level 0 -f ba snarf} {-code 1 -code error -level 0 -f ba snarf} + 39 {-code 1 -code ok -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 40 {-code 1 -code error -level 5 -f ba snarf} {-code 1 -code error -level 0 -f ba snarf} + 41 {-code 1 -code ok -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 42 {-code 1 -code boss -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 43 {-code 1 -code boss -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 44 {-code 1 -code 1 -level 0 -f ba} {-code 1 -code 1 -level 0 -f ba} + 45 {-code 1 -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + 46 {-code 1 -code 1 -level 5 -f ba} {-code 1 -code 1 -level 0 -f ba} + 47 {-code 1 -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + 48 {-code 1 -code error -level 0 -f ba} {-code 1 -code error -level 0 -f ba} + 49 {-code 1 -code ok -level 0 -f ba} {-code 1 -level 0 -f ba} + 50 {-code 1 -code error -level 5 -f ba} {-code 1 -code error -level 0 -f ba} + 51 {-code 1 -code ok -level 5 -f ba} {-code 1 -level 0 -f ba} + 52 {-code 1 -code boss -level 0 -f ba} {-code 1 -level 0 -f ba} + 53 {-code 1 -code boss -level 5 -f ba} {-code 1 -level 0 -f ba} + 54 {-code 1 -code 1 -level X -f ba snarf} {-code 1 -code 1 -level 0 -f ba snarf} + 55 {-code 1 -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 56 {-code 1 -code error -level X -f ba snarf} {-code 1 -code error -level 0 -f ba snarf} + 57 {-code 1 -code ok -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 58 {-code 1 -code boss -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 59 {-code 1 -code 1 -level X -f ba} {-code 1 -code 1 -level 0 -f ba} + 60 {-code 1 -code 0 -level X -f ba} {-code 1 -level 0 -f ba} + 61 {-code 1 -code error -level X -f ba} {-code 1 -code error -level 0 -f ba} + 62 {-code 1 -code ok -level X -f ba} {-code 1 -level 0 -f ba} + 63 {-code 1 -code boss -level X -f ba} {-code 1 -level 0 -f ba} + + 64 {-code 0 -code 1 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 65 {-code 0 -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 66 {-code 0 -code 1 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 67 {-code 0 -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 68 {-code 0 -code error -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 69 {-code 0 -code ok -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 70 {-code 0 -code error -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 71 {-code 0 -code ok -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 72 {-code 0 -code boss -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 73 {-code 0 -code boss -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 74 {-code 0 -code 1 -level 0 -f ba} {-code 1 -level 0 -f ba} + 75 {-code 0 -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + 76 {-code 0 -code 1 -level 5 -f ba} {-code 1 -level 0 -f ba} + 77 {-code 0 -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + 78 {-code 0 -code error -level 0 -f ba} {-code 1 -level 0 -f ba} + 79 {-code 0 -code ok -level 0 -f ba} {-code 1 -level 0 -f ba} + 80 {-code 0 -code error -level 5 -f ba} {-code 1 -level 0 -f ba} + 81 {-code 0 -code ok -level 5 -f ba} {-code 1 -level 0 -f ba} + 82 {-code 0 -code boss -level 0 -f ba} {-code 1 -level 0 -f ba} + 83 {-code 0 -code boss -level 5 -f ba} {-code 1 -level 0 -f ba} + 84 {-code 0 -code 1 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 85 {-code 0 -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 86 {-code 0 -code error -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 87 {-code 0 -code ok -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 88 {-code 0 -code boss -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 89 {-code 0 -code 1 -level X -f ba} {-code 1 -level 0 -f ba} + 90 {-code 0 -code 0 -level X -f ba} {-code 1 -level 0 -f ba} + 91 {-code 0 -code error -level X -f ba} {-code 1 -level 0 -f ba} + 92 {-code 0 -code ok -level X -f ba} {-code 1 -level 0 -f ba} + 93 {-code 0 -code boss -level X -f ba} {-code 1 -level 0 -f ba} + + 94 {-code 1 -code 1 -level 0 -f ba snarf} {-code 1 -code 1 -level 0 -f ba snarf} + 95 {-code 0 -code 1 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 96 {-code 1 -code 1 -level 5 -f ba snarf} {-code 1 -code 1 -level 0 -f ba snarf} + 97 {-code 0 -code 1 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 98 {-code error -code 1 -level 0 -f ba snarf} {-code error -code 1 -level 0 -f ba snarf} + 99 {-code ok -code 1 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + a0 {-code error -code 1 -level 5 -f ba snarf} {-code error -code 1 -level 0 -f ba snarf} + a1 {-code ok -code 1 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + a2 {-code boss -code 1 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + a3 {-code boss -code 1 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + a4 {-code 1 -code 1 -level 0 -f ba} {-code 1 -code 1 -level 0 -f ba} + a5 {-code 0 -code 1 -level 0 -f ba} {-code 1 -level 0 -f ba} + a6 {-code 1 -code 1 -level 5 -f ba} {-code 1 -code 1 -level 0 -f ba} + a7 {-code 0 -code 1 -level 5 -f ba} {-code 1 -level 0 -f ba} + a8 {-code error -code 1 -level 0 -f ba} {-code error -code 1 -level 0 -f ba} + a9 {-code ok -code 1 -level 0 -f ba} {-code 1 -level 0 -f ba} + b0 {-code error -code 1 -level 5 -f ba} {-code error -code 1 -level 0 -f ba} + b1 {-code ok -code 1 -level 5 -f ba} {-code 1 -level 0 -f ba} + b2 {-code boss -code 1 -level 0 -f ba} {-code 1 -level 0 -f ba} + b3 {-code boss -code 1 -level 5 -f ba} {-code 1 -level 0 -f ba} + b4 {-code 1 -code 1 -level X -f ba snarf} {-code 1 -code 1 -level 0 -f ba snarf} + b5 {-code 0 -code 1 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + b6 {-code error -code 1 -level X -f ba snarf} {-code error -code 1 -level 0 -f ba snarf} + b7 {-code ok -code 1 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + b8 {-code boss -code 1 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + b9 {-code 1 -code 1 -level X -f ba} {-code 1 -code 1 -level 0 -f ba} + c0 {-code 0 -code 1 -level X -f ba} {-code 1 -level 0 -f ba} + c1 {-code error -code 1 -level X -f ba} {-code error -code 1 -level 0 -f ba} + c2 {-code ok -code 1 -level X -f ba} {-code 1 -level 0 -f ba} + c3 {-code boss -code 1 -level X -f ba} {-code 1 -level 0 -f ba} + + c4 {-code 1 -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + c5 {-code 0 -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + c6 {-code 1 -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + c7 {-code 0 -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + c8 {-code error -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + c9 {-code ok -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + d0 {-code error -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + d1 {-code ok -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + d2 {-code boss -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + d3 {-code boss -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + d4 {-code 1 -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + d5 {-code 0 -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + d6 {-code 1 -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + d7 {-code 0 -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + d8 {-code error -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + d9 {-code ok -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + e0 {-code error -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + e1 {-code ok -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + e2 {-code boss -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + e3 {-code boss -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + e4 {-code 1 -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + e5 {-code 0 -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + e6 {-code error -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + e7 {-code ok -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + e8 {-code boss -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + e9 {-code 1 -code 0 -level X -f ba} {-code 1 -level 0 -f ba} + f0 {-code 0 -code 0 -level X -f ba} {-code 1 -level 0 -f ba} + f1 {-code error -code 0 -level X -f ba} {-code 1 -level 0 -f ba} + f2 {-code ok -code 0 -level X -f ba} {-code 1 -level 0 -f ba} + f3 {-code boss -code 0 -level X -f ba} {-code 1 -level 0 -f ba} +} { + test chan-io-71.$n {Tcl_SetChannelError} {testchannel} { + + set f [makeFile {... dummy ...} cutsplice] + set c [open $f r] + + set res [testchannel setchannelerror $c [lrange $msg 0 end]] + chan close $c + removeFile cutsplice + + set res + } [lrange $expected 0 end] + + test chan-io-72.$n {Tcl_SetChannelErrorInterp} {testchannel} { + + set f [makeFile {... dummy ...} cutsplice] + set c [open $f r] + + set res [testchannel setchannelerrorinterp $c [lrange $msg 0 end]] + chan close $c + removeFile cutsplice + + set res + } [lrange $expected 0 end] +} + +test chan-io-73.1 {channel Tcl_Obj SetChannelFromAny} {} { + # Test for Bug 1847044 - don't spoil type unless we have a valid channel + catch {chan close [lreplace [list a] 0 end]} +} {1} + +# ### ### ### ######### ######### ######### + +# cleanup +foreach file [list fooBar longfile script output test1 pipe my_script \ + test2 test3 cat stdout kyrillic.txt utf8-fcopy.txt utf8-rp.txt] { + removeFile $file +} +cleanupTests +} +namespace delete ::tcl::test::io diff --git a/tests/clock.test b/tests/clock.test index a7476d2..fea1fc9 100644 --- a/tests/clock.test +++ b/tests/clock.test @@ -1,230 +1,35648 @@ -# Commands covered: clock +# clock.test -- +# +# This test file covers the 'clock' command that manipulates time. # # This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and +# built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # -# Copyright (c) 1995-1998 Sun Microsystems, Inc. -# Copyright (c) 1998-1999 by Scriptics Corporation. +# Copyright (c) 2004 by Kevin B. Kenny. All rights reserved. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. -set env(LC_TIME) POSIX - if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } -test clock-1.1 {clock tests} { - list [catch {clock} msg] $msg -} {1 {wrong # args: should be "clock option ?arg ...?"}} -test clock-1.2 {clock tests} { - list [catch {clock foo} msg] $msg -} {1 {bad option "foo": must be clicks, format, scan, or seconds}} +if {[testConstraint win]} { + if {[catch { + ::tcltest::loadTestedCommands + package require registry + }]} { + namespace eval ::tcl::clock {variable NoRegistry {}} + } +} + +package require msgcat 1.4 + +testConstraint detroit \ + [expr {![catch {clock format 0 -timezone :America/Detroit -format %z}]}] +testConstraint y2038 \ + [expr {[clock format 2158894800 -format %z -timezone :America/Detroit] eq {-0400}}] + +# TEST PLAN + +# clock-1: +# [clock format] - tests of bad and empty arguments +# +# clock-2 +# formatting of year, month and day of month +# +# clock-3 +# formatting of fiscal year, fiscal week and day of week. +# +# clock-4 +# formatting of time of day. +# +# clock-5 +# handling of Daylight Saving Time in a known locale, formatting of +# %z and %Z +# +# clock-6 +# input conversion - seconds +# +# clock-7 +# input conversion - Julian Day +# +# clock-8 +# input conversion - ccyymmdd +# +# clock-9 +# input conversion - ccyymmdd (test that %s and %J take precedence) +# +# clock-10 +# input conversion - ccyyddd +# +# clock-11 +# input conversion - relative precedence of ccyyddd and ccyymmdd +# (tests the 'rightmost field' comparison) +# +# clock-12 +# input conversion - ccyyWwwd +# +# clock-13 +# input conversion - ccyyWwwd (test that %s and %J take precedence, +# and that invalid days are rejected). +# +# clock-14 +# input conversion - yymmdd +# +# clock-15 +# precedence - yymmdd +# +# clock-16 +# input conversion and precedence - yyddd +# +# clock-17 +# input conversion - yyWwwd +# +# clock-18 +# precedence - yyWwwd +# +# clock-19 +# input conversion - mmdd +# +# clock-20 +# precedence - mmdd +# +# clock-21 +# input conversion and precedence - ddd +# +# clock-22 +# input conversion - Wwwd +# +# clock-23 +# precedence - Wwwd +# +# clock-24 +# input conversion - naked day of month +# +# clock-25 +# precedence - naked day of month +# +# clock-26 +# input conversion - naked day of week +# +# clock-27 +# precedence - day of week +# +# clock-28 +# scan with empty -format is midnight of base date +# +# clock-29 +# scanning of all time-of-day formats +# +# clock-30 +# [clock add] +# +# clock-31 +# Use of -locale system on Windows +# +# clock-32 +# Handling of the Julian-Gregorian transition +# +# clock-33 +# Legacy tests - [clock clicks] +# +# clock-34 +# Legacy tests - [clock scan] without -format +# +# clock-35 +# Legacy tests - [clock seconds] +# +# clock-36 +# Legacy tests - [clock scan] with 'next monthname' +# +# clock-37 +# Test that -gmt does not affect the value of %s +# +# clock-38 +# Regression test to verify that changes in TZ work +# both east and west of Greenwich + + +# Note that all code between comments '# BEGIN' and '# END' is +# autogenerated by 'tools/makeTestCases.tcl'. DO NOT EDIT CODE BETWEEN +# '# BEGIN' and '# END'. + +# Define a fictitious locale, 'en_US_roman', for formatting of clock +# strings with localized numerics and eras. This locale will be used +# in testing the 'clock' command. + +namespace eval ::tcl::clock { + ::msgcat::mcmset en_US_roman { + LOCALE_ERAS { + {-62164627200 {} 0} + {-59008867200 c 100} + {-55853107200 cc 200} + {-52697347200 ccc 300} + {-49541587200 cd 400} + {-46385827200 d 500} + {-43230067200 dc 600} + {-40074307200 dcc 700} + {-36918547200 dccc 800} + {-33762787200 cm 900} + {-30607027200 m 1000} + {-27451267200 mc 1100} + {-24295507200 mcc 1200} + {-21139747200 mccc 1300} + {-17983987200 mcd 1400} + {-14828227200 md 1500} + {-11672467200 mdc 1600} + {-8516707200 mdcc 1700} + {-5364662400 mdccc 1800} + {-2208988800 mcm 1900} + {946684800 mm 2000} + } + LOCALE_NUMERALS { + ? i ii iii iv v vi vii viii ix + x xi xii xiii xiv xv xvi xvii xviii xix + xx xxi xxii xxiii xxiv xxv xxvi xxvii xxviii xxix + xxx xxxi xxxii xxxiii xxxiv xxxv xxxvi xxxvii xxxviii xxxix + xl xli xlii xliii xliv xlv xlvi xlvii xlviii xlix + l li lii liii liv lv lvi lvii lviii lix + lx lxi lxii lxiii lxiv lxv lxvi lxvii lxviii lxix + lxx lxxi lxxii lxxiii lxxiv lxxv lxxvi lxxvii lxxviii lxxix + lxxx lxxxi lxxxii lxxxiii lxxxiv lxxxv lxxxvi lxxxvii lxxxviii + lxxxix + xc xci xcii xciii xciv xcv xcvi xcvii xcviii xcix + c + } + DATE_FORMAT {%m/%d/%Y} + TIME_FORMAT {%H:%M:%S} + DATE_TIME_FORMAT {%x %X} + LOCALE_DATE_FORMAT {die %Od mensis %Om annoque %EY} + LOCALE_TIME_FORMAT {%OH h %OM m %OS s} + LOCALE_DATE_TIME_FORMAT {%Ex %EX} + BCE {Before Christ} + CE {Anno Domini} + } +} + +#---------------------------------------------------------------------- +# +# The tests for the Windows platform are careful *not* to muck with +# the system registry. Instead, the 'registry' command is overridden +# in the '::tcl::clock' namespace. +# +#---------------------------------------------------------------------- + +namespace eval ::testClock { + namespace export registry + set reg \ + [dict create \ + HKEY_CURRENT_USER\\Control\ Panel\\International \ + [dict create \ + locale 0409 \ + sShortDate dd-MMM-yyyy \ + sLongDate "'the' dd''' day of' MMMM yyyy" \ + sTimeFormat "h:mm:ss tt"] \ + HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\TimeZoneInformation \ + [dict create \ + Bias 300 \ + StandardBias 0 \ + DaylightBias -60 \ + StandardStart \x00\x00\x0b\x00\x01\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00 \ + DaylightStart \x00\x00\x03\x00\x02\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00]] +} + + +proc ::testClock::registry { cmd path key } { + variable reg + if { $cmd ne {get} } { + return -code error "test case attempts to write/query the registry" + } + if { ![dict exists $reg $path $key] } { + return -code error "test case attempts to read unknown registry entry $path $key" + } + return [dict get $reg $path $key] +} + +# Test some of the basics of [clock format] + +test clock-1.0 "clock format - wrong # args" { + list [catch {clock format} msg] $msg $::errorCode +} {1 {wrong # args: should be "clock format clockval ?-format string? ?-gmt boolean? ?-locale LOCALE? ?-timezone ZONE?"} {CLOCK wrongNumArgs}} + +test clock-1.1 "clock format - bad time" { + list [catch {clock format foo} msg] $msg +} {1 {expected integer but got "foo"}} + +test clock-1.2 "clock format - bad gmt val" { + list [catch {clock format 0 -gmt foo} msg] $msg +} {1 {expected boolean value but got "foo"}} + +test clock-1.3 "clock format - empty val" { + clock format 0 -gmt 1 -format "" +} {} + +test clock-1.4 "clock format - bad flag" {*}{ + -body { + list [catch {clock format 0 -oops badflag} msg] $msg $::errorCode + } + -match glob + -result {1 {bad switch "-oops": must be -format, -gmt, -locale, or -timezone} {CLOCK badSwitch -oops}} +} + +test clock-1.5 "clock format - bad timezone" { + list [catch {clock format 0 -format "%s" -timezone :NOWHERE} msg] $msg $::errorCode +} {1 {time zone ":NOWHERE" not found} {CLOCK badTimeZone :NOWHERE}} + +test clock-1.6 "clock format - gmt + timezone" { + list [catch {clock format 0 -timezone :GMT -gmt true} msg] $msg $::errorCode +} {1 {cannot use -gmt and -timezone in same call} {CLOCK gmtWithTimezone}} + +test clock-1.7 "clock format - option abbreviations" { + clock format 0 -g true -f "%Y-%m-%d" +} 1970-01-01 + +# BEGIN testcases2 + +# Test formatting of Gregorian year, month, day, all formats +# Formats tested: %b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y %EY + +test clock-2.1 {conversion of 1872-01-01} { + clock format -3092556304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1872 12:34:56 die i mensis i annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2404794 01 i 1 01/01/1872 die i mensis i annoque mdccclxxii 72 lxxii 1872} +test clock-2.2 {conversion of 1872-01-31} { + clock format -3089964304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1872 12:34:56 die xxxi mensis i annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2404824 01 i 1 01/31/1872 die xxxi mensis i annoque mdccclxxii 72 lxxii 1872} +test clock-2.3 {conversion of 1872-02-01} { + clock format -3089877904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1872 12:34:56 die i mensis ii annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2404825 02 ii 2 02/01/1872 die i mensis ii annoque mdccclxxii 72 lxxii 1872} +test clock-2.4 {conversion of 1872-02-29} { + clock format -3087458704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1872 12:34:56 die xxix mensis ii annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 29 xxix 29 xxix Feb 060 2404853 02 ii 2 02/29/1872 die xxix mensis ii annoque mdccclxxii 72 lxxii 1872} +test clock-2.5 {conversion of 1872-03-01} { + clock format -3087372304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1872 12:34:56 die i mensis iii annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 061 2404854 03 iii 3 03/01/1872 die i mensis iii annoque mdccclxxii 72 lxxii 1872} +test clock-2.6 {conversion of 1872-03-31} { + clock format -3084780304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1872 12:34:56 die xxxi mensis iii annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 091 2404884 03 iii 3 03/31/1872 die xxxi mensis iii annoque mdccclxxii 72 lxxii 1872} +test clock-2.7 {conversion of 1872-04-01} { + clock format -3084693904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1872 12:34:56 die i mensis iv annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 092 2404885 04 iv 4 04/01/1872 die i mensis iv annoque mdccclxxii 72 lxxii 1872} +test clock-2.8 {conversion of 1872-04-30} { + clock format -3082188304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1872 12:34:56 die xxx mensis iv annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 121 2404914 04 iv 4 04/30/1872 die xxx mensis iv annoque mdccclxxii 72 lxxii 1872} +test clock-2.9 {conversion of 1872-05-01} { + clock format -3082101904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1872 12:34:56 die i mensis v annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 122 2404915 05 v 5 05/01/1872 die i mensis v annoque mdccclxxii 72 lxxii 1872} +test clock-2.10 {conversion of 1872-05-31} { + clock format -3079509904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1872 12:34:56 die xxxi mensis v annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 152 2404945 05 v 5 05/31/1872 die xxxi mensis v annoque mdccclxxii 72 lxxii 1872} +test clock-2.11 {conversion of 1872-06-01} { + clock format -3079423504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1872 12:34:56 die i mensis vi annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 153 2404946 06 vi 6 06/01/1872 die i mensis vi annoque mdccclxxii 72 lxxii 1872} +test clock-2.12 {conversion of 1872-06-30} { + clock format -3076917904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1872 12:34:56 die xxx mensis vi annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 182 2404975 06 vi 6 06/30/1872 die xxx mensis vi annoque mdccclxxii 72 lxxii 1872} +test clock-2.13 {conversion of 1872-07-01} { + clock format -3076831504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1872 12:34:56 die i mensis vii annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 183 2404976 07 vii 7 07/01/1872 die i mensis vii annoque mdccclxxii 72 lxxii 1872} +test clock-2.14 {conversion of 1872-07-31} { + clock format -3074239504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1872 12:34:56 die xxxi mensis vii annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 213 2405006 07 vii 7 07/31/1872 die xxxi mensis vii annoque mdccclxxii 72 lxxii 1872} +test clock-2.15 {conversion of 1872-08-01} { + clock format -3074153104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1872 12:34:56 die i mensis viii annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 214 2405007 08 viii 8 08/01/1872 die i mensis viii annoque mdccclxxii 72 lxxii 1872} +test clock-2.16 {conversion of 1872-08-31} { + clock format -3071561104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1872 12:34:56 die xxxi mensis viii annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 244 2405037 08 viii 8 08/31/1872 die xxxi mensis viii annoque mdccclxxii 72 lxxii 1872} +test clock-2.17 {conversion of 1872-09-01} { + clock format -3071474704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1872 12:34:56 die i mensis ix annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 245 2405038 09 ix 9 09/01/1872 die i mensis ix annoque mdccclxxii 72 lxxii 1872} +test clock-2.18 {conversion of 1872-09-30} { + clock format -3068969104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1872 12:34:56 die xxx mensis ix annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 274 2405067 09 ix 9 09/30/1872 die xxx mensis ix annoque mdccclxxii 72 lxxii 1872} +test clock-2.19 {conversion of 1872-10-01} { + clock format -3068882704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1872 12:34:56 die i mensis x annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 275 2405068 10 x 10 10/01/1872 die i mensis x annoque mdccclxxii 72 lxxii 1872} +test clock-2.20 {conversion of 1872-10-31} { + clock format -3066290704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1872 12:34:56 die xxxi mensis x annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 305 2405098 10 x 10 10/31/1872 die xxxi mensis x annoque mdccclxxii 72 lxxii 1872} +test clock-2.21 {conversion of 1872-11-01} { + clock format -3066204304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1872 12:34:56 die i mensis xi annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 306 2405099 11 xi 11 11/01/1872 die i mensis xi annoque mdccclxxii 72 lxxii 1872} +test clock-2.22 {conversion of 1872-11-30} { + clock format -3063698704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1872 12:34:56 die xxx mensis xi annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 335 2405128 11 xi 11 11/30/1872 die xxx mensis xi annoque mdccclxxii 72 lxxii 1872} +test clock-2.23 {conversion of 1872-12-01} { + clock format -3063612304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1872 12:34:56 die i mensis xii annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 336 2405129 12 xii 12 12/01/1872 die i mensis xii annoque mdccclxxii 72 lxxii 1872} +test clock-2.24 {conversion of 1872-12-31} { + clock format -3061020304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1872 12:34:56 die xxxi mensis xii annoque mdccclxxii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 366 2405159 12 xii 12 12/31/1872 die xxxi mensis xii annoque mdccclxxii 72 lxxii 1872} +test clock-2.25 {conversion of 1873-01-01} { + clock format -3060933904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1873 12:34:56 die i mensis i annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2405160 01 i 1 01/01/1873 die i mensis i annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.26 {conversion of 1873-01-31} { + clock format -3058341904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1873 12:34:56 die xxxi mensis i annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2405190 01 i 1 01/31/1873 die xxxi mensis i annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.27 {conversion of 1873-02-01} { + clock format -3058255504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1873 12:34:56 die i mensis ii annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2405191 02 ii 2 02/01/1873 die i mensis ii annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.28 {conversion of 1873-02-28} { + clock format -3055922704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1873 12:34:56 die xxviii mensis ii annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 28 xxviii 28 xxviii Feb 059 2405218 02 ii 2 02/28/1873 die xxviii mensis ii annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.29 {conversion of 1873-03-01} { + clock format -3055836304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1873 12:34:56 die i mensis iii annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 060 2405219 03 iii 3 03/01/1873 die i mensis iii annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.30 {conversion of 1873-03-31} { + clock format -3053244304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1873 12:34:56 die xxxi mensis iii annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 090 2405249 03 iii 3 03/31/1873 die xxxi mensis iii annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.31 {conversion of 1873-04-01} { + clock format -3053157904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1873 12:34:56 die i mensis iv annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 091 2405250 04 iv 4 04/01/1873 die i mensis iv annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.32 {conversion of 1873-04-30} { + clock format -3050652304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1873 12:34:56 die xxx mensis iv annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 120 2405279 04 iv 4 04/30/1873 die xxx mensis iv annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.33 {conversion of 1873-05-01} { + clock format -3050565904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1873 12:34:56 die i mensis v annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 121 2405280 05 v 5 05/01/1873 die i mensis v annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.34 {conversion of 1873-05-31} { + clock format -3047973904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1873 12:34:56 die xxxi mensis v annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 151 2405310 05 v 5 05/31/1873 die xxxi mensis v annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.35 {conversion of 1873-06-01} { + clock format -3047887504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1873 12:34:56 die i mensis vi annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 152 2405311 06 vi 6 06/01/1873 die i mensis vi annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.36 {conversion of 1873-06-30} { + clock format -3045381904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1873 12:34:56 die xxx mensis vi annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 181 2405340 06 vi 6 06/30/1873 die xxx mensis vi annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.37 {conversion of 1873-07-01} { + clock format -3045295504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1873 12:34:56 die i mensis vii annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 182 2405341 07 vii 7 07/01/1873 die i mensis vii annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.38 {conversion of 1873-07-31} { + clock format -3042703504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1873 12:34:56 die xxxi mensis vii annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 212 2405371 07 vii 7 07/31/1873 die xxxi mensis vii annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.39 {conversion of 1873-08-01} { + clock format -3042617104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1873 12:34:56 die i mensis viii annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 213 2405372 08 viii 8 08/01/1873 die i mensis viii annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.40 {conversion of 1873-08-31} { + clock format -3040025104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1873 12:34:56 die xxxi mensis viii annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 243 2405402 08 viii 8 08/31/1873 die xxxi mensis viii annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.41 {conversion of 1873-09-01} { + clock format -3039938704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1873 12:34:56 die i mensis ix annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 244 2405403 09 ix 9 09/01/1873 die i mensis ix annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.42 {conversion of 1873-09-30} { + clock format -3037433104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1873 12:34:56 die xxx mensis ix annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 273 2405432 09 ix 9 09/30/1873 die xxx mensis ix annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.43 {conversion of 1873-10-01} { + clock format -3037346704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1873 12:34:56 die i mensis x annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 274 2405433 10 x 10 10/01/1873 die i mensis x annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.44 {conversion of 1873-10-31} { + clock format -3034754704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1873 12:34:56 die xxxi mensis x annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 304 2405463 10 x 10 10/31/1873 die xxxi mensis x annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.45 {conversion of 1873-11-01} { + clock format -3034668304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1873 12:34:56 die i mensis xi annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 305 2405464 11 xi 11 11/01/1873 die i mensis xi annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.46 {conversion of 1873-11-30} { + clock format -3032162704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1873 12:34:56 die xxx mensis xi annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 334 2405493 11 xi 11 11/30/1873 die xxx mensis xi annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.47 {conversion of 1873-12-01} { + clock format -3032076304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1873 12:34:56 die i mensis xii annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 335 2405494 12 xii 12 12/01/1873 die i mensis xii annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.48 {conversion of 1873-12-31} { + clock format -3029484304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1873 12:34:56 die xxxi mensis xii annoque mdccclxxiii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 365 2405524 12 xii 12 12/31/1873 die xxxi mensis xii annoque mdccclxxiii 73 lxxiii 1873} +test clock-2.49 {conversion of 1876-01-01} { + clock format -2966325904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1876 12:34:56 die i mensis i annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2406255 01 i 1 01/01/1876 die i mensis i annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.50 {conversion of 1876-01-31} { + clock format -2963733904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1876 12:34:56 die xxxi mensis i annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2406285 01 i 1 01/31/1876 die xxxi mensis i annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.51 {conversion of 1876-02-01} { + clock format -2963647504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1876 12:34:56 die i mensis ii annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2406286 02 ii 2 02/01/1876 die i mensis ii annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.52 {conversion of 1876-02-29} { + clock format -2961228304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1876 12:34:56 die xxix mensis ii annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 29 xxix 29 xxix Feb 060 2406314 02 ii 2 02/29/1876 die xxix mensis ii annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.53 {conversion of 1876-03-01} { + clock format -2961141904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1876 12:34:56 die i mensis iii annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 061 2406315 03 iii 3 03/01/1876 die i mensis iii annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.54 {conversion of 1876-03-31} { + clock format -2958549904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1876 12:34:56 die xxxi mensis iii annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 091 2406345 03 iii 3 03/31/1876 die xxxi mensis iii annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.55 {conversion of 1876-04-01} { + clock format -2958463504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1876 12:34:56 die i mensis iv annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 092 2406346 04 iv 4 04/01/1876 die i mensis iv annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.56 {conversion of 1876-04-30} { + clock format -2955957904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1876 12:34:56 die xxx mensis iv annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 121 2406375 04 iv 4 04/30/1876 die xxx mensis iv annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.57 {conversion of 1876-05-01} { + clock format -2955871504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1876 12:34:56 die i mensis v annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 122 2406376 05 v 5 05/01/1876 die i mensis v annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.58 {conversion of 1876-05-31} { + clock format -2953279504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1876 12:34:56 die xxxi mensis v annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 152 2406406 05 v 5 05/31/1876 die xxxi mensis v annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.59 {conversion of 1876-06-01} { + clock format -2953193104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1876 12:34:56 die i mensis vi annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 153 2406407 06 vi 6 06/01/1876 die i mensis vi annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.60 {conversion of 1876-06-30} { + clock format -2950687504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1876 12:34:56 die xxx mensis vi annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 182 2406436 06 vi 6 06/30/1876 die xxx mensis vi annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.61 {conversion of 1876-07-01} { + clock format -2950601104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1876 12:34:56 die i mensis vii annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 183 2406437 07 vii 7 07/01/1876 die i mensis vii annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.62 {conversion of 1876-07-31} { + clock format -2948009104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1876 12:34:56 die xxxi mensis vii annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 213 2406467 07 vii 7 07/31/1876 die xxxi mensis vii annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.63 {conversion of 1876-08-01} { + clock format -2947922704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1876 12:34:56 die i mensis viii annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 214 2406468 08 viii 8 08/01/1876 die i mensis viii annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.64 {conversion of 1876-08-31} { + clock format -2945330704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1876 12:34:56 die xxxi mensis viii annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 244 2406498 08 viii 8 08/31/1876 die xxxi mensis viii annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.65 {conversion of 1876-09-01} { + clock format -2945244304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1876 12:34:56 die i mensis ix annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 245 2406499 09 ix 9 09/01/1876 die i mensis ix annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.66 {conversion of 1876-09-30} { + clock format -2942738704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1876 12:34:56 die xxx mensis ix annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 274 2406528 09 ix 9 09/30/1876 die xxx mensis ix annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.67 {conversion of 1876-10-01} { + clock format -2942652304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1876 12:34:56 die i mensis x annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 275 2406529 10 x 10 10/01/1876 die i mensis x annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.68 {conversion of 1876-10-31} { + clock format -2940060304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1876 12:34:56 die xxxi mensis x annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 305 2406559 10 x 10 10/31/1876 die xxxi mensis x annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.69 {conversion of 1876-11-01} { + clock format -2939973904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1876 12:34:56 die i mensis xi annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 306 2406560 11 xi 11 11/01/1876 die i mensis xi annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.70 {conversion of 1876-11-30} { + clock format -2937468304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1876 12:34:56 die xxx mensis xi annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 335 2406589 11 xi 11 11/30/1876 die xxx mensis xi annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.71 {conversion of 1876-12-01} { + clock format -2937381904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1876 12:34:56 die i mensis xii annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 336 2406590 12 xii 12 12/01/1876 die i mensis xii annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.72 {conversion of 1876-12-31} { + clock format -2934789904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1876 12:34:56 die xxxi mensis xii annoque mdccclxxvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 366 2406620 12 xii 12 12/31/1876 die xxxi mensis xii annoque mdccclxxvi 76 lxxvi 1876} +test clock-2.73 {conversion of 1877-01-01} { + clock format -2934703504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1877 12:34:56 die i mensis i annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2406621 01 i 1 01/01/1877 die i mensis i annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.74 {conversion of 1877-01-31} { + clock format -2932111504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1877 12:34:56 die xxxi mensis i annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2406651 01 i 1 01/31/1877 die xxxi mensis i annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.75 {conversion of 1877-02-01} { + clock format -2932025104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1877 12:34:56 die i mensis ii annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2406652 02 ii 2 02/01/1877 die i mensis ii annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.76 {conversion of 1877-02-28} { + clock format -2929692304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1877 12:34:56 die xxviii mensis ii annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 28 xxviii 28 xxviii Feb 059 2406679 02 ii 2 02/28/1877 die xxviii mensis ii annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.77 {conversion of 1877-03-01} { + clock format -2929605904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1877 12:34:56 die i mensis iii annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 060 2406680 03 iii 3 03/01/1877 die i mensis iii annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.78 {conversion of 1877-03-31} { + clock format -2927013904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1877 12:34:56 die xxxi mensis iii annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 090 2406710 03 iii 3 03/31/1877 die xxxi mensis iii annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.79 {conversion of 1877-04-01} { + clock format -2926927504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1877 12:34:56 die i mensis iv annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 091 2406711 04 iv 4 04/01/1877 die i mensis iv annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.80 {conversion of 1877-04-30} { + clock format -2924421904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1877 12:34:56 die xxx mensis iv annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 120 2406740 04 iv 4 04/30/1877 die xxx mensis iv annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.81 {conversion of 1877-05-01} { + clock format -2924335504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1877 12:34:56 die i mensis v annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 121 2406741 05 v 5 05/01/1877 die i mensis v annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.82 {conversion of 1877-05-31} { + clock format -2921743504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1877 12:34:56 die xxxi mensis v annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 151 2406771 05 v 5 05/31/1877 die xxxi mensis v annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.83 {conversion of 1877-06-01} { + clock format -2921657104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1877 12:34:56 die i mensis vi annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 152 2406772 06 vi 6 06/01/1877 die i mensis vi annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.84 {conversion of 1877-06-30} { + clock format -2919151504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1877 12:34:56 die xxx mensis vi annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 181 2406801 06 vi 6 06/30/1877 die xxx mensis vi annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.85 {conversion of 1877-07-01} { + clock format -2919065104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1877 12:34:56 die i mensis vii annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 182 2406802 07 vii 7 07/01/1877 die i mensis vii annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.86 {conversion of 1877-07-31} { + clock format -2916473104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1877 12:34:56 die xxxi mensis vii annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 212 2406832 07 vii 7 07/31/1877 die xxxi mensis vii annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.87 {conversion of 1877-08-01} { + clock format -2916386704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1877 12:34:56 die i mensis viii annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 213 2406833 08 viii 8 08/01/1877 die i mensis viii annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.88 {conversion of 1877-08-31} { + clock format -2913794704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1877 12:34:56 die xxxi mensis viii annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 243 2406863 08 viii 8 08/31/1877 die xxxi mensis viii annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.89 {conversion of 1877-09-01} { + clock format -2913708304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1877 12:34:56 die i mensis ix annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 244 2406864 09 ix 9 09/01/1877 die i mensis ix annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.90 {conversion of 1877-09-30} { + clock format -2911202704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1877 12:34:56 die xxx mensis ix annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 273 2406893 09 ix 9 09/30/1877 die xxx mensis ix annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.91 {conversion of 1877-10-01} { + clock format -2911116304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1877 12:34:56 die i mensis x annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 274 2406894 10 x 10 10/01/1877 die i mensis x annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.92 {conversion of 1877-10-31} { + clock format -2908524304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1877 12:34:56 die xxxi mensis x annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 304 2406924 10 x 10 10/31/1877 die xxxi mensis x annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.93 {conversion of 1877-11-01} { + clock format -2908437904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1877 12:34:56 die i mensis xi annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 305 2406925 11 xi 11 11/01/1877 die i mensis xi annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.94 {conversion of 1877-11-30} { + clock format -2905932304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1877 12:34:56 die xxx mensis xi annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 334 2406954 11 xi 11 11/30/1877 die xxx mensis xi annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.95 {conversion of 1877-12-01} { + clock format -2905845904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1877 12:34:56 die i mensis xii annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 335 2406955 12 xii 12 12/01/1877 die i mensis xii annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.96 {conversion of 1877-12-31} { + clock format -2903253904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1877 12:34:56 die xxxi mensis xii annoque mdccclxxvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 365 2406985 12 xii 12 12/31/1877 die xxxi mensis xii annoque mdccclxxvii 77 lxxvii 1877} +test clock-2.97 {conversion of 1880-01-01} { + clock format -2840095504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1880 12:34:56 die i mensis i annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2407716 01 i 1 01/01/1880 die i mensis i annoque mdccclxxx 80 lxxx 1880} +test clock-2.98 {conversion of 1880-01-31} { + clock format -2837503504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1880 12:34:56 die xxxi mensis i annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2407746 01 i 1 01/31/1880 die xxxi mensis i annoque mdccclxxx 80 lxxx 1880} +test clock-2.99 {conversion of 1880-02-01} { + clock format -2837417104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1880 12:34:56 die i mensis ii annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2407747 02 ii 2 02/01/1880 die i mensis ii annoque mdccclxxx 80 lxxx 1880} +test clock-2.100 {conversion of 1880-02-29} { + clock format -2834997904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1880 12:34:56 die xxix mensis ii annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 29 xxix 29 xxix Feb 060 2407775 02 ii 2 02/29/1880 die xxix mensis ii annoque mdccclxxx 80 lxxx 1880} +test clock-2.101 {conversion of 1880-03-01} { + clock format -2834911504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1880 12:34:56 die i mensis iii annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 061 2407776 03 iii 3 03/01/1880 die i mensis iii annoque mdccclxxx 80 lxxx 1880} +test clock-2.102 {conversion of 1880-03-31} { + clock format -2832319504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1880 12:34:56 die xxxi mensis iii annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 091 2407806 03 iii 3 03/31/1880 die xxxi mensis iii annoque mdccclxxx 80 lxxx 1880} +test clock-2.103 {conversion of 1880-04-01} { + clock format -2832233104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1880 12:34:56 die i mensis iv annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 092 2407807 04 iv 4 04/01/1880 die i mensis iv annoque mdccclxxx 80 lxxx 1880} +test clock-2.104 {conversion of 1880-04-30} { + clock format -2829727504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1880 12:34:56 die xxx mensis iv annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 121 2407836 04 iv 4 04/30/1880 die xxx mensis iv annoque mdccclxxx 80 lxxx 1880} +test clock-2.105 {conversion of 1880-05-01} { + clock format -2829641104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1880 12:34:56 die i mensis v annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 122 2407837 05 v 5 05/01/1880 die i mensis v annoque mdccclxxx 80 lxxx 1880} +test clock-2.106 {conversion of 1880-05-31} { + clock format -2827049104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1880 12:34:56 die xxxi mensis v annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 152 2407867 05 v 5 05/31/1880 die xxxi mensis v annoque mdccclxxx 80 lxxx 1880} +test clock-2.107 {conversion of 1880-06-01} { + clock format -2826962704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1880 12:34:56 die i mensis vi annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 153 2407868 06 vi 6 06/01/1880 die i mensis vi annoque mdccclxxx 80 lxxx 1880} +test clock-2.108 {conversion of 1880-06-30} { + clock format -2824457104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1880 12:34:56 die xxx mensis vi annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 182 2407897 06 vi 6 06/30/1880 die xxx mensis vi annoque mdccclxxx 80 lxxx 1880} +test clock-2.109 {conversion of 1880-07-01} { + clock format -2824370704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1880 12:34:56 die i mensis vii annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 183 2407898 07 vii 7 07/01/1880 die i mensis vii annoque mdccclxxx 80 lxxx 1880} +test clock-2.110 {conversion of 1880-07-31} { + clock format -2821778704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1880 12:34:56 die xxxi mensis vii annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 213 2407928 07 vii 7 07/31/1880 die xxxi mensis vii annoque mdccclxxx 80 lxxx 1880} +test clock-2.111 {conversion of 1880-08-01} { + clock format -2821692304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1880 12:34:56 die i mensis viii annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 214 2407929 08 viii 8 08/01/1880 die i mensis viii annoque mdccclxxx 80 lxxx 1880} +test clock-2.112 {conversion of 1880-08-31} { + clock format -2819100304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1880 12:34:56 die xxxi mensis viii annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 244 2407959 08 viii 8 08/31/1880 die xxxi mensis viii annoque mdccclxxx 80 lxxx 1880} +test clock-2.113 {conversion of 1880-09-01} { + clock format -2819013904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1880 12:34:56 die i mensis ix annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 245 2407960 09 ix 9 09/01/1880 die i mensis ix annoque mdccclxxx 80 lxxx 1880} +test clock-2.114 {conversion of 1880-09-30} { + clock format -2816508304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1880 12:34:56 die xxx mensis ix annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 274 2407989 09 ix 9 09/30/1880 die xxx mensis ix annoque mdccclxxx 80 lxxx 1880} +test clock-2.115 {conversion of 1880-10-01} { + clock format -2816421904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1880 12:34:56 die i mensis x annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 275 2407990 10 x 10 10/01/1880 die i mensis x annoque mdccclxxx 80 lxxx 1880} +test clock-2.116 {conversion of 1880-10-31} { + clock format -2813829904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1880 12:34:56 die xxxi mensis x annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 305 2408020 10 x 10 10/31/1880 die xxxi mensis x annoque mdccclxxx 80 lxxx 1880} +test clock-2.117 {conversion of 1880-11-01} { + clock format -2813743504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1880 12:34:56 die i mensis xi annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 306 2408021 11 xi 11 11/01/1880 die i mensis xi annoque mdccclxxx 80 lxxx 1880} +test clock-2.118 {conversion of 1880-11-30} { + clock format -2811237904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1880 12:34:56 die xxx mensis xi annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 335 2408050 11 xi 11 11/30/1880 die xxx mensis xi annoque mdccclxxx 80 lxxx 1880} +test clock-2.119 {conversion of 1880-12-01} { + clock format -2811151504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1880 12:34:56 die i mensis xii annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 336 2408051 12 xii 12 12/01/1880 die i mensis xii annoque mdccclxxx 80 lxxx 1880} +test clock-2.120 {conversion of 1880-12-31} { + clock format -2808559504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1880 12:34:56 die xxxi mensis xii annoque mdccclxxx xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 366 2408081 12 xii 12 12/31/1880 die xxxi mensis xii annoque mdccclxxx 80 lxxx 1880} +test clock-2.121 {conversion of 1881-01-01} { + clock format -2808473104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1881 12:34:56 die i mensis i annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2408082 01 i 1 01/01/1881 die i mensis i annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.122 {conversion of 1881-01-31} { + clock format -2805881104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1881 12:34:56 die xxxi mensis i annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2408112 01 i 1 01/31/1881 die xxxi mensis i annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.123 {conversion of 1881-02-01} { + clock format -2805794704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1881 12:34:56 die i mensis ii annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2408113 02 ii 2 02/01/1881 die i mensis ii annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.124 {conversion of 1881-02-28} { + clock format -2803461904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1881 12:34:56 die xxviii mensis ii annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 28 xxviii 28 xxviii Feb 059 2408140 02 ii 2 02/28/1881 die xxviii mensis ii annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.125 {conversion of 1881-03-01} { + clock format -2803375504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1881 12:34:56 die i mensis iii annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 060 2408141 03 iii 3 03/01/1881 die i mensis iii annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.126 {conversion of 1881-03-31} { + clock format -2800783504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1881 12:34:56 die xxxi mensis iii annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 090 2408171 03 iii 3 03/31/1881 die xxxi mensis iii annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.127 {conversion of 1881-04-01} { + clock format -2800697104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1881 12:34:56 die i mensis iv annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 091 2408172 04 iv 4 04/01/1881 die i mensis iv annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.128 {conversion of 1881-04-30} { + clock format -2798191504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1881 12:34:56 die xxx mensis iv annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 120 2408201 04 iv 4 04/30/1881 die xxx mensis iv annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.129 {conversion of 1881-05-01} { + clock format -2798105104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1881 12:34:56 die i mensis v annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 121 2408202 05 v 5 05/01/1881 die i mensis v annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.130 {conversion of 1881-05-31} { + clock format -2795513104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1881 12:34:56 die xxxi mensis v annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 151 2408232 05 v 5 05/31/1881 die xxxi mensis v annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.131 {conversion of 1881-06-01} { + clock format -2795426704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1881 12:34:56 die i mensis vi annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 152 2408233 06 vi 6 06/01/1881 die i mensis vi annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.132 {conversion of 1881-06-30} { + clock format -2792921104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1881 12:34:56 die xxx mensis vi annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 181 2408262 06 vi 6 06/30/1881 die xxx mensis vi annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.133 {conversion of 1881-07-01} { + clock format -2792834704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1881 12:34:56 die i mensis vii annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 182 2408263 07 vii 7 07/01/1881 die i mensis vii annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.134 {conversion of 1881-07-31} { + clock format -2790242704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1881 12:34:56 die xxxi mensis vii annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 212 2408293 07 vii 7 07/31/1881 die xxxi mensis vii annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.135 {conversion of 1881-08-01} { + clock format -2790156304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1881 12:34:56 die i mensis viii annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 213 2408294 08 viii 8 08/01/1881 die i mensis viii annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.136 {conversion of 1881-08-31} { + clock format -2787564304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1881 12:34:56 die xxxi mensis viii annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 243 2408324 08 viii 8 08/31/1881 die xxxi mensis viii annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.137 {conversion of 1881-09-01} { + clock format -2787477904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1881 12:34:56 die i mensis ix annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 244 2408325 09 ix 9 09/01/1881 die i mensis ix annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.138 {conversion of 1881-09-30} { + clock format -2784972304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1881 12:34:56 die xxx mensis ix annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 273 2408354 09 ix 9 09/30/1881 die xxx mensis ix annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.139 {conversion of 1881-10-01} { + clock format -2784885904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1881 12:34:56 die i mensis x annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 274 2408355 10 x 10 10/01/1881 die i mensis x annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.140 {conversion of 1881-10-31} { + clock format -2782293904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1881 12:34:56 die xxxi mensis x annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 304 2408385 10 x 10 10/31/1881 die xxxi mensis x annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.141 {conversion of 1881-11-01} { + clock format -2782207504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1881 12:34:56 die i mensis xi annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 305 2408386 11 xi 11 11/01/1881 die i mensis xi annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.142 {conversion of 1881-11-30} { + clock format -2779701904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1881 12:34:56 die xxx mensis xi annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 334 2408415 11 xi 11 11/30/1881 die xxx mensis xi annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.143 {conversion of 1881-12-01} { + clock format -2779615504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1881 12:34:56 die i mensis xii annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 335 2408416 12 xii 12 12/01/1881 die i mensis xii annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.144 {conversion of 1881-12-31} { + clock format -2777023504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1881 12:34:56 die xxxi mensis xii annoque mdccclxxxi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 365 2408446 12 xii 12 12/31/1881 die xxxi mensis xii annoque mdccclxxxi 81 lxxxi 1881} +test clock-2.145 {conversion of 1884-01-01} { + clock format -2713865104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1884 12:34:56 die i mensis i annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2409177 01 i 1 01/01/1884 die i mensis i annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.146 {conversion of 1884-01-31} { + clock format -2711273104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1884 12:34:56 die xxxi mensis i annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2409207 01 i 1 01/31/1884 die xxxi mensis i annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.147 {conversion of 1884-02-01} { + clock format -2711186704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1884 12:34:56 die i mensis ii annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2409208 02 ii 2 02/01/1884 die i mensis ii annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.148 {conversion of 1884-02-29} { + clock format -2708767504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1884 12:34:56 die xxix mensis ii annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 29 xxix 29 xxix Feb 060 2409236 02 ii 2 02/29/1884 die xxix mensis ii annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.149 {conversion of 1884-03-01} { + clock format -2708681104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1884 12:34:56 die i mensis iii annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 061 2409237 03 iii 3 03/01/1884 die i mensis iii annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.150 {conversion of 1884-03-31} { + clock format -2706089104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1884 12:34:56 die xxxi mensis iii annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 091 2409267 03 iii 3 03/31/1884 die xxxi mensis iii annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.151 {conversion of 1884-04-01} { + clock format -2706002704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1884 12:34:56 die i mensis iv annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 092 2409268 04 iv 4 04/01/1884 die i mensis iv annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.152 {conversion of 1884-04-30} { + clock format -2703497104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1884 12:34:56 die xxx mensis iv annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 121 2409297 04 iv 4 04/30/1884 die xxx mensis iv annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.153 {conversion of 1884-05-01} { + clock format -2703410704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1884 12:34:56 die i mensis v annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 122 2409298 05 v 5 05/01/1884 die i mensis v annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.154 {conversion of 1884-05-31} { + clock format -2700818704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1884 12:34:56 die xxxi mensis v annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 152 2409328 05 v 5 05/31/1884 die xxxi mensis v annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.155 {conversion of 1884-06-01} { + clock format -2700732304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1884 12:34:56 die i mensis vi annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 153 2409329 06 vi 6 06/01/1884 die i mensis vi annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.156 {conversion of 1884-06-30} { + clock format -2698226704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1884 12:34:56 die xxx mensis vi annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 182 2409358 06 vi 6 06/30/1884 die xxx mensis vi annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.157 {conversion of 1884-07-01} { + clock format -2698140304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1884 12:34:56 die i mensis vii annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 183 2409359 07 vii 7 07/01/1884 die i mensis vii annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.158 {conversion of 1884-07-31} { + clock format -2695548304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1884 12:34:56 die xxxi mensis vii annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 213 2409389 07 vii 7 07/31/1884 die xxxi mensis vii annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.159 {conversion of 1884-08-01} { + clock format -2695461904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1884 12:34:56 die i mensis viii annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 214 2409390 08 viii 8 08/01/1884 die i mensis viii annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.160 {conversion of 1884-08-31} { + clock format -2692869904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1884 12:34:56 die xxxi mensis viii annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 244 2409420 08 viii 8 08/31/1884 die xxxi mensis viii annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.161 {conversion of 1884-09-01} { + clock format -2692783504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1884 12:34:56 die i mensis ix annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 245 2409421 09 ix 9 09/01/1884 die i mensis ix annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.162 {conversion of 1884-09-30} { + clock format -2690277904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1884 12:34:56 die xxx mensis ix annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 274 2409450 09 ix 9 09/30/1884 die xxx mensis ix annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.163 {conversion of 1884-10-01} { + clock format -2690191504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1884 12:34:56 die i mensis x annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 275 2409451 10 x 10 10/01/1884 die i mensis x annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.164 {conversion of 1884-10-31} { + clock format -2687599504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1884 12:34:56 die xxxi mensis x annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 305 2409481 10 x 10 10/31/1884 die xxxi mensis x annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.165 {conversion of 1884-11-01} { + clock format -2687513104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1884 12:34:56 die i mensis xi annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 306 2409482 11 xi 11 11/01/1884 die i mensis xi annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.166 {conversion of 1884-11-30} { + clock format -2685007504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1884 12:34:56 die xxx mensis xi annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 335 2409511 11 xi 11 11/30/1884 die xxx mensis xi annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.167 {conversion of 1884-12-01} { + clock format -2684921104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1884 12:34:56 die i mensis xii annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 336 2409512 12 xii 12 12/01/1884 die i mensis xii annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.168 {conversion of 1884-12-31} { + clock format -2682329104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1884 12:34:56 die xxxi mensis xii annoque mdccclxxxiv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 366 2409542 12 xii 12 12/31/1884 die xxxi mensis xii annoque mdccclxxxiv 84 lxxxiv 1884} +test clock-2.169 {conversion of 1885-01-01} { + clock format -2682242704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1885 12:34:56 die i mensis i annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2409543 01 i 1 01/01/1885 die i mensis i annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.170 {conversion of 1885-01-31} { + clock format -2679650704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1885 12:34:56 die xxxi mensis i annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2409573 01 i 1 01/31/1885 die xxxi mensis i annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.171 {conversion of 1885-02-01} { + clock format -2679564304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1885 12:34:56 die i mensis ii annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2409574 02 ii 2 02/01/1885 die i mensis ii annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.172 {conversion of 1885-02-28} { + clock format -2677231504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1885 12:34:56 die xxviii mensis ii annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 28 xxviii 28 xxviii Feb 059 2409601 02 ii 2 02/28/1885 die xxviii mensis ii annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.173 {conversion of 1885-03-01} { + clock format -2677145104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1885 12:34:56 die i mensis iii annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 060 2409602 03 iii 3 03/01/1885 die i mensis iii annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.174 {conversion of 1885-03-31} { + clock format -2674553104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1885 12:34:56 die xxxi mensis iii annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 090 2409632 03 iii 3 03/31/1885 die xxxi mensis iii annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.175 {conversion of 1885-04-01} { + clock format -2674466704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1885 12:34:56 die i mensis iv annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 091 2409633 04 iv 4 04/01/1885 die i mensis iv annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.176 {conversion of 1885-04-30} { + clock format -2671961104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1885 12:34:56 die xxx mensis iv annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 120 2409662 04 iv 4 04/30/1885 die xxx mensis iv annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.177 {conversion of 1885-05-01} { + clock format -2671874704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1885 12:34:56 die i mensis v annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 121 2409663 05 v 5 05/01/1885 die i mensis v annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.178 {conversion of 1885-05-31} { + clock format -2669282704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1885 12:34:56 die xxxi mensis v annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 151 2409693 05 v 5 05/31/1885 die xxxi mensis v annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.179 {conversion of 1885-06-01} { + clock format -2669196304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1885 12:34:56 die i mensis vi annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 152 2409694 06 vi 6 06/01/1885 die i mensis vi annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.180 {conversion of 1885-06-30} { + clock format -2666690704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1885 12:34:56 die xxx mensis vi annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 181 2409723 06 vi 6 06/30/1885 die xxx mensis vi annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.181 {conversion of 1885-07-01} { + clock format -2666604304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1885 12:34:56 die i mensis vii annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 182 2409724 07 vii 7 07/01/1885 die i mensis vii annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.182 {conversion of 1885-07-31} { + clock format -2664012304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1885 12:34:56 die xxxi mensis vii annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 212 2409754 07 vii 7 07/31/1885 die xxxi mensis vii annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.183 {conversion of 1885-08-01} { + clock format -2663925904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1885 12:34:56 die i mensis viii annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 213 2409755 08 viii 8 08/01/1885 die i mensis viii annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.184 {conversion of 1885-08-31} { + clock format -2661333904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1885 12:34:56 die xxxi mensis viii annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 243 2409785 08 viii 8 08/31/1885 die xxxi mensis viii annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.185 {conversion of 1885-09-01} { + clock format -2661247504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1885 12:34:56 die i mensis ix annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 244 2409786 09 ix 9 09/01/1885 die i mensis ix annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.186 {conversion of 1885-09-30} { + clock format -2658741904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1885 12:34:56 die xxx mensis ix annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 273 2409815 09 ix 9 09/30/1885 die xxx mensis ix annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.187 {conversion of 1885-10-01} { + clock format -2658655504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1885 12:34:56 die i mensis x annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 274 2409816 10 x 10 10/01/1885 die i mensis x annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.188 {conversion of 1885-10-31} { + clock format -2656063504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1885 12:34:56 die xxxi mensis x annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 304 2409846 10 x 10 10/31/1885 die xxxi mensis x annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.189 {conversion of 1885-11-01} { + clock format -2655977104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1885 12:34:56 die i mensis xi annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 305 2409847 11 xi 11 11/01/1885 die i mensis xi annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.190 {conversion of 1885-11-30} { + clock format -2653471504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1885 12:34:56 die xxx mensis xi annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 334 2409876 11 xi 11 11/30/1885 die xxx mensis xi annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.191 {conversion of 1885-12-01} { + clock format -2653385104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1885 12:34:56 die i mensis xii annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 335 2409877 12 xii 12 12/01/1885 die i mensis xii annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.192 {conversion of 1885-12-31} { + clock format -2650793104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1885 12:34:56 die xxxi mensis xii annoque mdccclxxxv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 365 2409907 12 xii 12 12/31/1885 die xxxi mensis xii annoque mdccclxxxv 85 lxxxv 1885} +test clock-2.193 {conversion of 1888-01-01} { + clock format -2587634704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1888 12:34:56 die i mensis i annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2410638 01 i 1 01/01/1888 die i mensis i annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.194 {conversion of 1888-01-31} { + clock format -2585042704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1888 12:34:56 die xxxi mensis i annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2410668 01 i 1 01/31/1888 die xxxi mensis i annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.195 {conversion of 1888-02-01} { + clock format -2584956304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1888 12:34:56 die i mensis ii annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2410669 02 ii 2 02/01/1888 die i mensis ii annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.196 {conversion of 1888-02-29} { + clock format -2582537104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1888 12:34:56 die xxix mensis ii annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 29 xxix 29 xxix Feb 060 2410697 02 ii 2 02/29/1888 die xxix mensis ii annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.197 {conversion of 1888-03-01} { + clock format -2582450704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1888 12:34:56 die i mensis iii annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 061 2410698 03 iii 3 03/01/1888 die i mensis iii annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.198 {conversion of 1888-03-31} { + clock format -2579858704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1888 12:34:56 die xxxi mensis iii annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 091 2410728 03 iii 3 03/31/1888 die xxxi mensis iii annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.199 {conversion of 1888-04-01} { + clock format -2579772304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1888 12:34:56 die i mensis iv annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 092 2410729 04 iv 4 04/01/1888 die i mensis iv annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.200 {conversion of 1888-04-30} { + clock format -2577266704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1888 12:34:56 die xxx mensis iv annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 121 2410758 04 iv 4 04/30/1888 die xxx mensis iv annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.201 {conversion of 1888-05-01} { + clock format -2577180304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1888 12:34:56 die i mensis v annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 122 2410759 05 v 5 05/01/1888 die i mensis v annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.202 {conversion of 1888-05-31} { + clock format -2574588304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1888 12:34:56 die xxxi mensis v annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 152 2410789 05 v 5 05/31/1888 die xxxi mensis v annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.203 {conversion of 1888-06-01} { + clock format -2574501904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1888 12:34:56 die i mensis vi annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 153 2410790 06 vi 6 06/01/1888 die i mensis vi annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.204 {conversion of 1888-06-30} { + clock format -2571996304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1888 12:34:56 die xxx mensis vi annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 182 2410819 06 vi 6 06/30/1888 die xxx mensis vi annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.205 {conversion of 1888-07-01} { + clock format -2571909904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1888 12:34:56 die i mensis vii annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 183 2410820 07 vii 7 07/01/1888 die i mensis vii annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.206 {conversion of 1888-07-31} { + clock format -2569317904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1888 12:34:56 die xxxi mensis vii annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 213 2410850 07 vii 7 07/31/1888 die xxxi mensis vii annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.207 {conversion of 1888-08-01} { + clock format -2569231504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1888 12:34:56 die i mensis viii annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 214 2410851 08 viii 8 08/01/1888 die i mensis viii annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.208 {conversion of 1888-08-31} { + clock format -2566639504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1888 12:34:56 die xxxi mensis viii annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 244 2410881 08 viii 8 08/31/1888 die xxxi mensis viii annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.209 {conversion of 1888-09-01} { + clock format -2566553104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1888 12:34:56 die i mensis ix annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 245 2410882 09 ix 9 09/01/1888 die i mensis ix annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.210 {conversion of 1888-09-30} { + clock format -2564047504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1888 12:34:56 die xxx mensis ix annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 274 2410911 09 ix 9 09/30/1888 die xxx mensis ix annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.211 {conversion of 1888-10-01} { + clock format -2563961104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1888 12:34:56 die i mensis x annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 275 2410912 10 x 10 10/01/1888 die i mensis x annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.212 {conversion of 1888-10-31} { + clock format -2561369104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1888 12:34:56 die xxxi mensis x annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 305 2410942 10 x 10 10/31/1888 die xxxi mensis x annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.213 {conversion of 1888-11-01} { + clock format -2561282704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1888 12:34:56 die i mensis xi annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 306 2410943 11 xi 11 11/01/1888 die i mensis xi annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.214 {conversion of 1888-11-30} { + clock format -2558777104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1888 12:34:56 die xxx mensis xi annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 335 2410972 11 xi 11 11/30/1888 die xxx mensis xi annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.215 {conversion of 1888-12-01} { + clock format -2558690704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1888 12:34:56 die i mensis xii annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 336 2410973 12 xii 12 12/01/1888 die i mensis xii annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.216 {conversion of 1888-12-31} { + clock format -2556098704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1888 12:34:56 die xxxi mensis xii annoque mdccclxxxviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 366 2411003 12 xii 12 12/31/1888 die xxxi mensis xii annoque mdccclxxxviii 88 lxxxviii 1888} +test clock-2.217 {conversion of 1889-01-01} { + clock format -2556012304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1889 12:34:56 die i mensis i annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2411004 01 i 1 01/01/1889 die i mensis i annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.218 {conversion of 1889-01-31} { + clock format -2553420304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1889 12:34:56 die xxxi mensis i annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2411034 01 i 1 01/31/1889 die xxxi mensis i annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.219 {conversion of 1889-02-01} { + clock format -2553333904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1889 12:34:56 die i mensis ii annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2411035 02 ii 2 02/01/1889 die i mensis ii annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.220 {conversion of 1889-02-28} { + clock format -2551001104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1889 12:34:56 die xxviii mensis ii annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 28 xxviii 28 xxviii Feb 059 2411062 02 ii 2 02/28/1889 die xxviii mensis ii annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.221 {conversion of 1889-03-01} { + clock format -2550914704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1889 12:34:56 die i mensis iii annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 060 2411063 03 iii 3 03/01/1889 die i mensis iii annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.222 {conversion of 1889-03-31} { + clock format -2548322704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1889 12:34:56 die xxxi mensis iii annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 090 2411093 03 iii 3 03/31/1889 die xxxi mensis iii annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.223 {conversion of 1889-04-01} { + clock format -2548236304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1889 12:34:56 die i mensis iv annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 091 2411094 04 iv 4 04/01/1889 die i mensis iv annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.224 {conversion of 1889-04-30} { + clock format -2545730704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1889 12:34:56 die xxx mensis iv annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 120 2411123 04 iv 4 04/30/1889 die xxx mensis iv annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.225 {conversion of 1889-05-01} { + clock format -2545644304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1889 12:34:56 die i mensis v annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 121 2411124 05 v 5 05/01/1889 die i mensis v annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.226 {conversion of 1889-05-31} { + clock format -2543052304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1889 12:34:56 die xxxi mensis v annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 151 2411154 05 v 5 05/31/1889 die xxxi mensis v annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.227 {conversion of 1889-06-01} { + clock format -2542965904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1889 12:34:56 die i mensis vi annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 152 2411155 06 vi 6 06/01/1889 die i mensis vi annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.228 {conversion of 1889-06-30} { + clock format -2540460304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1889 12:34:56 die xxx mensis vi annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 181 2411184 06 vi 6 06/30/1889 die xxx mensis vi annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.229 {conversion of 1889-07-01} { + clock format -2540373904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1889 12:34:56 die i mensis vii annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 182 2411185 07 vii 7 07/01/1889 die i mensis vii annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.230 {conversion of 1889-07-31} { + clock format -2537781904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1889 12:34:56 die xxxi mensis vii annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 212 2411215 07 vii 7 07/31/1889 die xxxi mensis vii annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.231 {conversion of 1889-08-01} { + clock format -2537695504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1889 12:34:56 die i mensis viii annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 213 2411216 08 viii 8 08/01/1889 die i mensis viii annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.232 {conversion of 1889-08-31} { + clock format -2535103504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1889 12:34:56 die xxxi mensis viii annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 243 2411246 08 viii 8 08/31/1889 die xxxi mensis viii annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.233 {conversion of 1889-09-01} { + clock format -2535017104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1889 12:34:56 die i mensis ix annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 244 2411247 09 ix 9 09/01/1889 die i mensis ix annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.234 {conversion of 1889-09-30} { + clock format -2532511504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1889 12:34:56 die xxx mensis ix annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 273 2411276 09 ix 9 09/30/1889 die xxx mensis ix annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.235 {conversion of 1889-10-01} { + clock format -2532425104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1889 12:34:56 die i mensis x annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 274 2411277 10 x 10 10/01/1889 die i mensis x annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.236 {conversion of 1889-10-31} { + clock format -2529833104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1889 12:34:56 die xxxi mensis x annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 304 2411307 10 x 10 10/31/1889 die xxxi mensis x annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.237 {conversion of 1889-11-01} { + clock format -2529746704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1889 12:34:56 die i mensis xi annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 305 2411308 11 xi 11 11/01/1889 die i mensis xi annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.238 {conversion of 1889-11-30} { + clock format -2527241104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1889 12:34:56 die xxx mensis xi annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 334 2411337 11 xi 11 11/30/1889 die xxx mensis xi annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.239 {conversion of 1889-12-01} { + clock format -2527154704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1889 12:34:56 die i mensis xii annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 335 2411338 12 xii 12 12/01/1889 die i mensis xii annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.240 {conversion of 1889-12-31} { + clock format -2524562704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1889 12:34:56 die xxxi mensis xii annoque mdccclxxxix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 365 2411368 12 xii 12 12/31/1889 die xxxi mensis xii annoque mdccclxxxix 89 lxxxix 1889} +test clock-2.241 {conversion of 1890-01-01} { + clock format -2524476304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1890 12:34:56 die i mensis i annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2411369 01 i 1 01/01/1890 die i mensis i annoque mdcccxc 90 xc 1890} +test clock-2.242 {conversion of 1890-01-31} { + clock format -2521884304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1890 12:34:56 die xxxi mensis i annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2411399 01 i 1 01/31/1890 die xxxi mensis i annoque mdcccxc 90 xc 1890} +test clock-2.243 {conversion of 1890-02-01} { + clock format -2521797904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1890 12:34:56 die i mensis ii annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2411400 02 ii 2 02/01/1890 die i mensis ii annoque mdcccxc 90 xc 1890} +test clock-2.244 {conversion of 1890-02-28} { + clock format -2519465104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1890 12:34:56 die xxviii mensis ii annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 28 xxviii 28 xxviii Feb 059 2411427 02 ii 2 02/28/1890 die xxviii mensis ii annoque mdcccxc 90 xc 1890} +test clock-2.245 {conversion of 1890-03-01} { + clock format -2519378704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1890 12:34:56 die i mensis iii annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 060 2411428 03 iii 3 03/01/1890 die i mensis iii annoque mdcccxc 90 xc 1890} +test clock-2.246 {conversion of 1890-03-31} { + clock format -2516786704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1890 12:34:56 die xxxi mensis iii annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 090 2411458 03 iii 3 03/31/1890 die xxxi mensis iii annoque mdcccxc 90 xc 1890} +test clock-2.247 {conversion of 1890-04-01} { + clock format -2516700304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1890 12:34:56 die i mensis iv annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 091 2411459 04 iv 4 04/01/1890 die i mensis iv annoque mdcccxc 90 xc 1890} +test clock-2.248 {conversion of 1890-04-30} { + clock format -2514194704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1890 12:34:56 die xxx mensis iv annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 120 2411488 04 iv 4 04/30/1890 die xxx mensis iv annoque mdcccxc 90 xc 1890} +test clock-2.249 {conversion of 1890-05-01} { + clock format -2514108304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1890 12:34:56 die i mensis v annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 121 2411489 05 v 5 05/01/1890 die i mensis v annoque mdcccxc 90 xc 1890} +test clock-2.250 {conversion of 1890-05-31} { + clock format -2511516304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1890 12:34:56 die xxxi mensis v annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 151 2411519 05 v 5 05/31/1890 die xxxi mensis v annoque mdcccxc 90 xc 1890} +test clock-2.251 {conversion of 1890-06-01} { + clock format -2511429904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1890 12:34:56 die i mensis vi annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 152 2411520 06 vi 6 06/01/1890 die i mensis vi annoque mdcccxc 90 xc 1890} +test clock-2.252 {conversion of 1890-06-30} { + clock format -2508924304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1890 12:34:56 die xxx mensis vi annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 181 2411549 06 vi 6 06/30/1890 die xxx mensis vi annoque mdcccxc 90 xc 1890} +test clock-2.253 {conversion of 1890-07-01} { + clock format -2508837904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1890 12:34:56 die i mensis vii annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 182 2411550 07 vii 7 07/01/1890 die i mensis vii annoque mdcccxc 90 xc 1890} +test clock-2.254 {conversion of 1890-07-31} { + clock format -2506245904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1890 12:34:56 die xxxi mensis vii annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 212 2411580 07 vii 7 07/31/1890 die xxxi mensis vii annoque mdcccxc 90 xc 1890} +test clock-2.255 {conversion of 1890-08-01} { + clock format -2506159504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1890 12:34:56 die i mensis viii annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 213 2411581 08 viii 8 08/01/1890 die i mensis viii annoque mdcccxc 90 xc 1890} +test clock-2.256 {conversion of 1890-08-31} { + clock format -2503567504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1890 12:34:56 die xxxi mensis viii annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 243 2411611 08 viii 8 08/31/1890 die xxxi mensis viii annoque mdcccxc 90 xc 1890} +test clock-2.257 {conversion of 1890-09-01} { + clock format -2503481104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1890 12:34:56 die i mensis ix annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 244 2411612 09 ix 9 09/01/1890 die i mensis ix annoque mdcccxc 90 xc 1890} +test clock-2.258 {conversion of 1890-09-30} { + clock format -2500975504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1890 12:34:56 die xxx mensis ix annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 273 2411641 09 ix 9 09/30/1890 die xxx mensis ix annoque mdcccxc 90 xc 1890} +test clock-2.259 {conversion of 1890-10-01} { + clock format -2500889104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1890 12:34:56 die i mensis x annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 274 2411642 10 x 10 10/01/1890 die i mensis x annoque mdcccxc 90 xc 1890} +test clock-2.260 {conversion of 1890-10-31} { + clock format -2498297104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1890 12:34:56 die xxxi mensis x annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 304 2411672 10 x 10 10/31/1890 die xxxi mensis x annoque mdcccxc 90 xc 1890} +test clock-2.261 {conversion of 1890-11-01} { + clock format -2498210704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1890 12:34:56 die i mensis xi annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 305 2411673 11 xi 11 11/01/1890 die i mensis xi annoque mdcccxc 90 xc 1890} +test clock-2.262 {conversion of 1890-11-30} { + clock format -2495705104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1890 12:34:56 die xxx mensis xi annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 334 2411702 11 xi 11 11/30/1890 die xxx mensis xi annoque mdcccxc 90 xc 1890} +test clock-2.263 {conversion of 1890-12-01} { + clock format -2495618704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1890 12:34:56 die i mensis xii annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 335 2411703 12 xii 12 12/01/1890 die i mensis xii annoque mdcccxc 90 xc 1890} +test clock-2.264 {conversion of 1890-12-31} { + clock format -2493026704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1890 12:34:56 die xxxi mensis xii annoque mdcccxc xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 365 2411733 12 xii 12 12/31/1890 die xxxi mensis xii annoque mdcccxc 90 xc 1890} +test clock-2.265 {conversion of 1891-01-01} { + clock format -2492940304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1891 12:34:56 die i mensis i annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2411734 01 i 1 01/01/1891 die i mensis i annoque mdcccxci 91 xci 1891} +test clock-2.266 {conversion of 1891-01-31} { + clock format -2490348304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1891 12:34:56 die xxxi mensis i annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2411764 01 i 1 01/31/1891 die xxxi mensis i annoque mdcccxci 91 xci 1891} +test clock-2.267 {conversion of 1891-02-01} { + clock format -2490261904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1891 12:34:56 die i mensis ii annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2411765 02 ii 2 02/01/1891 die i mensis ii annoque mdcccxci 91 xci 1891} +test clock-2.268 {conversion of 1891-02-28} { + clock format -2487929104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1891 12:34:56 die xxviii mensis ii annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 28 xxviii 28 xxviii Feb 059 2411792 02 ii 2 02/28/1891 die xxviii mensis ii annoque mdcccxci 91 xci 1891} +test clock-2.269 {conversion of 1891-03-01} { + clock format -2487842704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1891 12:34:56 die i mensis iii annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 060 2411793 03 iii 3 03/01/1891 die i mensis iii annoque mdcccxci 91 xci 1891} +test clock-2.270 {conversion of 1891-03-31} { + clock format -2485250704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1891 12:34:56 die xxxi mensis iii annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 090 2411823 03 iii 3 03/31/1891 die xxxi mensis iii annoque mdcccxci 91 xci 1891} +test clock-2.271 {conversion of 1891-04-01} { + clock format -2485164304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1891 12:34:56 die i mensis iv annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 091 2411824 04 iv 4 04/01/1891 die i mensis iv annoque mdcccxci 91 xci 1891} +test clock-2.272 {conversion of 1891-04-30} { + clock format -2482658704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1891 12:34:56 die xxx mensis iv annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 120 2411853 04 iv 4 04/30/1891 die xxx mensis iv annoque mdcccxci 91 xci 1891} +test clock-2.273 {conversion of 1891-05-01} { + clock format -2482572304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1891 12:34:56 die i mensis v annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 121 2411854 05 v 5 05/01/1891 die i mensis v annoque mdcccxci 91 xci 1891} +test clock-2.274 {conversion of 1891-05-31} { + clock format -2479980304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1891 12:34:56 die xxxi mensis v annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 151 2411884 05 v 5 05/31/1891 die xxxi mensis v annoque mdcccxci 91 xci 1891} +test clock-2.275 {conversion of 1891-06-01} { + clock format -2479893904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1891 12:34:56 die i mensis vi annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 152 2411885 06 vi 6 06/01/1891 die i mensis vi annoque mdcccxci 91 xci 1891} +test clock-2.276 {conversion of 1891-06-30} { + clock format -2477388304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1891 12:34:56 die xxx mensis vi annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 181 2411914 06 vi 6 06/30/1891 die xxx mensis vi annoque mdcccxci 91 xci 1891} +test clock-2.277 {conversion of 1891-07-01} { + clock format -2477301904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1891 12:34:56 die i mensis vii annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 182 2411915 07 vii 7 07/01/1891 die i mensis vii annoque mdcccxci 91 xci 1891} +test clock-2.278 {conversion of 1891-07-31} { + clock format -2474709904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1891 12:34:56 die xxxi mensis vii annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 212 2411945 07 vii 7 07/31/1891 die xxxi mensis vii annoque mdcccxci 91 xci 1891} +test clock-2.279 {conversion of 1891-08-01} { + clock format -2474623504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1891 12:34:56 die i mensis viii annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 213 2411946 08 viii 8 08/01/1891 die i mensis viii annoque mdcccxci 91 xci 1891} +test clock-2.280 {conversion of 1891-08-31} { + clock format -2472031504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1891 12:34:56 die xxxi mensis viii annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 243 2411976 08 viii 8 08/31/1891 die xxxi mensis viii annoque mdcccxci 91 xci 1891} +test clock-2.281 {conversion of 1891-09-01} { + clock format -2471945104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1891 12:34:56 die i mensis ix annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 244 2411977 09 ix 9 09/01/1891 die i mensis ix annoque mdcccxci 91 xci 1891} +test clock-2.282 {conversion of 1891-09-30} { + clock format -2469439504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1891 12:34:56 die xxx mensis ix annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 273 2412006 09 ix 9 09/30/1891 die xxx mensis ix annoque mdcccxci 91 xci 1891} +test clock-2.283 {conversion of 1891-10-01} { + clock format -2469353104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1891 12:34:56 die i mensis x annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 274 2412007 10 x 10 10/01/1891 die i mensis x annoque mdcccxci 91 xci 1891} +test clock-2.284 {conversion of 1891-10-31} { + clock format -2466761104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1891 12:34:56 die xxxi mensis x annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 304 2412037 10 x 10 10/31/1891 die xxxi mensis x annoque mdcccxci 91 xci 1891} +test clock-2.285 {conversion of 1891-11-01} { + clock format -2466674704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1891 12:34:56 die i mensis xi annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 305 2412038 11 xi 11 11/01/1891 die i mensis xi annoque mdcccxci 91 xci 1891} +test clock-2.286 {conversion of 1891-11-30} { + clock format -2464169104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1891 12:34:56 die xxx mensis xi annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 334 2412067 11 xi 11 11/30/1891 die xxx mensis xi annoque mdcccxci 91 xci 1891} +test clock-2.287 {conversion of 1891-12-01} { + clock format -2464082704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1891 12:34:56 die i mensis xii annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 335 2412068 12 xii 12 12/01/1891 die i mensis xii annoque mdcccxci 91 xci 1891} +test clock-2.288 {conversion of 1891-12-31} { + clock format -2461490704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1891 12:34:56 die xxxi mensis xii annoque mdcccxci xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 365 2412098 12 xii 12 12/31/1891 die xxxi mensis xii annoque mdcccxci 91 xci 1891} +test clock-2.289 {conversion of 1892-01-01} { + clock format -2461404304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1892 12:34:56 die i mensis i annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2412099 01 i 1 01/01/1892 die i mensis i annoque mdcccxcii 92 xcii 1892} +test clock-2.290 {conversion of 1892-01-31} { + clock format -2458812304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1892 12:34:56 die xxxi mensis i annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2412129 01 i 1 01/31/1892 die xxxi mensis i annoque mdcccxcii 92 xcii 1892} +test clock-2.291 {conversion of 1892-02-01} { + clock format -2458725904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1892 12:34:56 die i mensis ii annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2412130 02 ii 2 02/01/1892 die i mensis ii annoque mdcccxcii 92 xcii 1892} +test clock-2.292 {conversion of 1892-02-29} { + clock format -2456306704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1892 12:34:56 die xxix mensis ii annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 29 xxix 29 xxix Feb 060 2412158 02 ii 2 02/29/1892 die xxix mensis ii annoque mdcccxcii 92 xcii 1892} +test clock-2.293 {conversion of 1892-03-01} { + clock format -2456220304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1892 12:34:56 die i mensis iii annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 061 2412159 03 iii 3 03/01/1892 die i mensis iii annoque mdcccxcii 92 xcii 1892} +test clock-2.294 {conversion of 1892-03-31} { + clock format -2453628304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1892 12:34:56 die xxxi mensis iii annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 091 2412189 03 iii 3 03/31/1892 die xxxi mensis iii annoque mdcccxcii 92 xcii 1892} +test clock-2.295 {conversion of 1892-04-01} { + clock format -2453541904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1892 12:34:56 die i mensis iv annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 092 2412190 04 iv 4 04/01/1892 die i mensis iv annoque mdcccxcii 92 xcii 1892} +test clock-2.296 {conversion of 1892-04-30} { + clock format -2451036304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1892 12:34:56 die xxx mensis iv annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 121 2412219 04 iv 4 04/30/1892 die xxx mensis iv annoque mdcccxcii 92 xcii 1892} +test clock-2.297 {conversion of 1892-05-01} { + clock format -2450949904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1892 12:34:56 die i mensis v annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 122 2412220 05 v 5 05/01/1892 die i mensis v annoque mdcccxcii 92 xcii 1892} +test clock-2.298 {conversion of 1892-05-31} { + clock format -2448357904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1892 12:34:56 die xxxi mensis v annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 152 2412250 05 v 5 05/31/1892 die xxxi mensis v annoque mdcccxcii 92 xcii 1892} +test clock-2.299 {conversion of 1892-06-01} { + clock format -2448271504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1892 12:34:56 die i mensis vi annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 153 2412251 06 vi 6 06/01/1892 die i mensis vi annoque mdcccxcii 92 xcii 1892} +test clock-2.300 {conversion of 1892-06-30} { + clock format -2445765904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1892 12:34:56 die xxx mensis vi annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 182 2412280 06 vi 6 06/30/1892 die xxx mensis vi annoque mdcccxcii 92 xcii 1892} +test clock-2.301 {conversion of 1892-07-01} { + clock format -2445679504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1892 12:34:56 die i mensis vii annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 183 2412281 07 vii 7 07/01/1892 die i mensis vii annoque mdcccxcii 92 xcii 1892} +test clock-2.302 {conversion of 1892-07-31} { + clock format -2443087504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1892 12:34:56 die xxxi mensis vii annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 213 2412311 07 vii 7 07/31/1892 die xxxi mensis vii annoque mdcccxcii 92 xcii 1892} +test clock-2.303 {conversion of 1892-08-01} { + clock format -2443001104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1892 12:34:56 die i mensis viii annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 214 2412312 08 viii 8 08/01/1892 die i mensis viii annoque mdcccxcii 92 xcii 1892} +test clock-2.304 {conversion of 1892-08-31} { + clock format -2440409104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1892 12:34:56 die xxxi mensis viii annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 244 2412342 08 viii 8 08/31/1892 die xxxi mensis viii annoque mdcccxcii 92 xcii 1892} +test clock-2.305 {conversion of 1892-09-01} { + clock format -2440322704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1892 12:34:56 die i mensis ix annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 245 2412343 09 ix 9 09/01/1892 die i mensis ix annoque mdcccxcii 92 xcii 1892} +test clock-2.306 {conversion of 1892-09-30} { + clock format -2437817104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1892 12:34:56 die xxx mensis ix annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 274 2412372 09 ix 9 09/30/1892 die xxx mensis ix annoque mdcccxcii 92 xcii 1892} +test clock-2.307 {conversion of 1892-10-01} { + clock format -2437730704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1892 12:34:56 die i mensis x annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 275 2412373 10 x 10 10/01/1892 die i mensis x annoque mdcccxcii 92 xcii 1892} +test clock-2.308 {conversion of 1892-10-31} { + clock format -2435138704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1892 12:34:56 die xxxi mensis x annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 305 2412403 10 x 10 10/31/1892 die xxxi mensis x annoque mdcccxcii 92 xcii 1892} +test clock-2.309 {conversion of 1892-11-01} { + clock format -2435052304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1892 12:34:56 die i mensis xi annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 306 2412404 11 xi 11 11/01/1892 die i mensis xi annoque mdcccxcii 92 xcii 1892} +test clock-2.310 {conversion of 1892-11-30} { + clock format -2432546704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1892 12:34:56 die xxx mensis xi annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 335 2412433 11 xi 11 11/30/1892 die xxx mensis xi annoque mdcccxcii 92 xcii 1892} +test clock-2.311 {conversion of 1892-12-01} { + clock format -2432460304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1892 12:34:56 die i mensis xii annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 336 2412434 12 xii 12 12/01/1892 die i mensis xii annoque mdcccxcii 92 xcii 1892} +test clock-2.312 {conversion of 1892-12-31} { + clock format -2429868304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1892 12:34:56 die xxxi mensis xii annoque mdcccxcii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 366 2412464 12 xii 12 12/31/1892 die xxxi mensis xii annoque mdcccxcii 92 xcii 1892} +test clock-2.313 {conversion of 1893-01-01} { + clock format -2429781904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1893 12:34:56 die i mensis i annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2412465 01 i 1 01/01/1893 die i mensis i annoque mdcccxciii 93 xciii 1893} +test clock-2.314 {conversion of 1893-01-31} { + clock format -2427189904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1893 12:34:56 die xxxi mensis i annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2412495 01 i 1 01/31/1893 die xxxi mensis i annoque mdcccxciii 93 xciii 1893} +test clock-2.315 {conversion of 1893-02-01} { + clock format -2427103504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1893 12:34:56 die i mensis ii annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2412496 02 ii 2 02/01/1893 die i mensis ii annoque mdcccxciii 93 xciii 1893} +test clock-2.316 {conversion of 1893-02-28} { + clock format -2424770704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1893 12:34:56 die xxviii mensis ii annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 28 xxviii 28 xxviii Feb 059 2412523 02 ii 2 02/28/1893 die xxviii mensis ii annoque mdcccxciii 93 xciii 1893} +test clock-2.317 {conversion of 1893-03-01} { + clock format -2424684304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1893 12:34:56 die i mensis iii annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 060 2412524 03 iii 3 03/01/1893 die i mensis iii annoque mdcccxciii 93 xciii 1893} +test clock-2.318 {conversion of 1893-03-31} { + clock format -2422092304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1893 12:34:56 die xxxi mensis iii annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 090 2412554 03 iii 3 03/31/1893 die xxxi mensis iii annoque mdcccxciii 93 xciii 1893} +test clock-2.319 {conversion of 1893-04-01} { + clock format -2422005904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1893 12:34:56 die i mensis iv annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 091 2412555 04 iv 4 04/01/1893 die i mensis iv annoque mdcccxciii 93 xciii 1893} +test clock-2.320 {conversion of 1893-04-30} { + clock format -2419500304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1893 12:34:56 die xxx mensis iv annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 120 2412584 04 iv 4 04/30/1893 die xxx mensis iv annoque mdcccxciii 93 xciii 1893} +test clock-2.321 {conversion of 1893-05-01} { + clock format -2419413904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1893 12:34:56 die i mensis v annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 121 2412585 05 v 5 05/01/1893 die i mensis v annoque mdcccxciii 93 xciii 1893} +test clock-2.322 {conversion of 1893-05-31} { + clock format -2416821904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1893 12:34:56 die xxxi mensis v annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 151 2412615 05 v 5 05/31/1893 die xxxi mensis v annoque mdcccxciii 93 xciii 1893} +test clock-2.323 {conversion of 1893-06-01} { + clock format -2416735504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1893 12:34:56 die i mensis vi annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 152 2412616 06 vi 6 06/01/1893 die i mensis vi annoque mdcccxciii 93 xciii 1893} +test clock-2.324 {conversion of 1893-06-30} { + clock format -2414229904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1893 12:34:56 die xxx mensis vi annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 181 2412645 06 vi 6 06/30/1893 die xxx mensis vi annoque mdcccxciii 93 xciii 1893} +test clock-2.325 {conversion of 1893-07-01} { + clock format -2414143504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1893 12:34:56 die i mensis vii annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 182 2412646 07 vii 7 07/01/1893 die i mensis vii annoque mdcccxciii 93 xciii 1893} +test clock-2.326 {conversion of 1893-07-31} { + clock format -2411551504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1893 12:34:56 die xxxi mensis vii annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 212 2412676 07 vii 7 07/31/1893 die xxxi mensis vii annoque mdcccxciii 93 xciii 1893} +test clock-2.327 {conversion of 1893-08-01} { + clock format -2411465104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1893 12:34:56 die i mensis viii annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 213 2412677 08 viii 8 08/01/1893 die i mensis viii annoque mdcccxciii 93 xciii 1893} +test clock-2.328 {conversion of 1893-08-31} { + clock format -2408873104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1893 12:34:56 die xxxi mensis viii annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 243 2412707 08 viii 8 08/31/1893 die xxxi mensis viii annoque mdcccxciii 93 xciii 1893} +test clock-2.329 {conversion of 1893-09-01} { + clock format -2408786704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1893 12:34:56 die i mensis ix annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 244 2412708 09 ix 9 09/01/1893 die i mensis ix annoque mdcccxciii 93 xciii 1893} +test clock-2.330 {conversion of 1893-09-30} { + clock format -2406281104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1893 12:34:56 die xxx mensis ix annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 273 2412737 09 ix 9 09/30/1893 die xxx mensis ix annoque mdcccxciii 93 xciii 1893} +test clock-2.331 {conversion of 1893-10-01} { + clock format -2406194704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1893 12:34:56 die i mensis x annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 274 2412738 10 x 10 10/01/1893 die i mensis x annoque mdcccxciii 93 xciii 1893} +test clock-2.332 {conversion of 1893-10-31} { + clock format -2403602704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1893 12:34:56 die xxxi mensis x annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 304 2412768 10 x 10 10/31/1893 die xxxi mensis x annoque mdcccxciii 93 xciii 1893} +test clock-2.333 {conversion of 1893-11-01} { + clock format -2403516304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1893 12:34:56 die i mensis xi annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 305 2412769 11 xi 11 11/01/1893 die i mensis xi annoque mdcccxciii 93 xciii 1893} +test clock-2.334 {conversion of 1893-11-30} { + clock format -2401010704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1893 12:34:56 die xxx mensis xi annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 334 2412798 11 xi 11 11/30/1893 die xxx mensis xi annoque mdcccxciii 93 xciii 1893} +test clock-2.335 {conversion of 1893-12-01} { + clock format -2400924304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1893 12:34:56 die i mensis xii annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 335 2412799 12 xii 12 12/01/1893 die i mensis xii annoque mdcccxciii 93 xciii 1893} +test clock-2.336 {conversion of 1893-12-31} { + clock format -2398332304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1893 12:34:56 die xxxi mensis xii annoque mdcccxciii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 365 2412829 12 xii 12 12/31/1893 die xxxi mensis xii annoque mdcccxciii 93 xciii 1893} +test clock-2.337 {conversion of 1894-01-01} { + clock format -2398245904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1894 12:34:56 die i mensis i annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2412830 01 i 1 01/01/1894 die i mensis i annoque mdcccxciv 94 xciv 1894} +test clock-2.338 {conversion of 1894-01-31} { + clock format -2395653904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1894 12:34:56 die xxxi mensis i annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2412860 01 i 1 01/31/1894 die xxxi mensis i annoque mdcccxciv 94 xciv 1894} +test clock-2.339 {conversion of 1894-02-01} { + clock format -2395567504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1894 12:34:56 die i mensis ii annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2412861 02 ii 2 02/01/1894 die i mensis ii annoque mdcccxciv 94 xciv 1894} +test clock-2.340 {conversion of 1894-02-28} { + clock format -2393234704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1894 12:34:56 die xxviii mensis ii annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 28 xxviii 28 xxviii Feb 059 2412888 02 ii 2 02/28/1894 die xxviii mensis ii annoque mdcccxciv 94 xciv 1894} +test clock-2.341 {conversion of 1894-03-01} { + clock format -2393148304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1894 12:34:56 die i mensis iii annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 060 2412889 03 iii 3 03/01/1894 die i mensis iii annoque mdcccxciv 94 xciv 1894} +test clock-2.342 {conversion of 1894-03-31} { + clock format -2390556304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1894 12:34:56 die xxxi mensis iii annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 090 2412919 03 iii 3 03/31/1894 die xxxi mensis iii annoque mdcccxciv 94 xciv 1894} +test clock-2.343 {conversion of 1894-04-01} { + clock format -2390469904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1894 12:34:56 die i mensis iv annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 091 2412920 04 iv 4 04/01/1894 die i mensis iv annoque mdcccxciv 94 xciv 1894} +test clock-2.344 {conversion of 1894-04-30} { + clock format -2387964304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1894 12:34:56 die xxx mensis iv annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 120 2412949 04 iv 4 04/30/1894 die xxx mensis iv annoque mdcccxciv 94 xciv 1894} +test clock-2.345 {conversion of 1894-05-01} { + clock format -2387877904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1894 12:34:56 die i mensis v annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 121 2412950 05 v 5 05/01/1894 die i mensis v annoque mdcccxciv 94 xciv 1894} +test clock-2.346 {conversion of 1894-05-31} { + clock format -2385285904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1894 12:34:56 die xxxi mensis v annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 151 2412980 05 v 5 05/31/1894 die xxxi mensis v annoque mdcccxciv 94 xciv 1894} +test clock-2.347 {conversion of 1894-06-01} { + clock format -2385199504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1894 12:34:56 die i mensis vi annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 152 2412981 06 vi 6 06/01/1894 die i mensis vi annoque mdcccxciv 94 xciv 1894} +test clock-2.348 {conversion of 1894-06-30} { + clock format -2382693904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1894 12:34:56 die xxx mensis vi annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 181 2413010 06 vi 6 06/30/1894 die xxx mensis vi annoque mdcccxciv 94 xciv 1894} +test clock-2.349 {conversion of 1894-07-01} { + clock format -2382607504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1894 12:34:56 die i mensis vii annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 182 2413011 07 vii 7 07/01/1894 die i mensis vii annoque mdcccxciv 94 xciv 1894} +test clock-2.350 {conversion of 1894-07-31} { + clock format -2380015504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1894 12:34:56 die xxxi mensis vii annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 212 2413041 07 vii 7 07/31/1894 die xxxi mensis vii annoque mdcccxciv 94 xciv 1894} +test clock-2.351 {conversion of 1894-08-01} { + clock format -2379929104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1894 12:34:56 die i mensis viii annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 213 2413042 08 viii 8 08/01/1894 die i mensis viii annoque mdcccxciv 94 xciv 1894} +test clock-2.352 {conversion of 1894-08-31} { + clock format -2377337104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1894 12:34:56 die xxxi mensis viii annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 243 2413072 08 viii 8 08/31/1894 die xxxi mensis viii annoque mdcccxciv 94 xciv 1894} +test clock-2.353 {conversion of 1894-09-01} { + clock format -2377250704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1894 12:34:56 die i mensis ix annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 244 2413073 09 ix 9 09/01/1894 die i mensis ix annoque mdcccxciv 94 xciv 1894} +test clock-2.354 {conversion of 1894-09-30} { + clock format -2374745104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1894 12:34:56 die xxx mensis ix annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 273 2413102 09 ix 9 09/30/1894 die xxx mensis ix annoque mdcccxciv 94 xciv 1894} +test clock-2.355 {conversion of 1894-10-01} { + clock format -2374658704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1894 12:34:56 die i mensis x annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 274 2413103 10 x 10 10/01/1894 die i mensis x annoque mdcccxciv 94 xciv 1894} +test clock-2.356 {conversion of 1894-10-31} { + clock format -2372066704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1894 12:34:56 die xxxi mensis x annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 304 2413133 10 x 10 10/31/1894 die xxxi mensis x annoque mdcccxciv 94 xciv 1894} +test clock-2.357 {conversion of 1894-11-01} { + clock format -2371980304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1894 12:34:56 die i mensis xi annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 305 2413134 11 xi 11 11/01/1894 die i mensis xi annoque mdcccxciv 94 xciv 1894} +test clock-2.358 {conversion of 1894-11-30} { + clock format -2369474704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1894 12:34:56 die xxx mensis xi annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 334 2413163 11 xi 11 11/30/1894 die xxx mensis xi annoque mdcccxciv 94 xciv 1894} +test clock-2.359 {conversion of 1894-12-01} { + clock format -2369388304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1894 12:34:56 die i mensis xii annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 335 2413164 12 xii 12 12/01/1894 die i mensis xii annoque mdcccxciv 94 xciv 1894} +test clock-2.360 {conversion of 1894-12-31} { + clock format -2366796304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1894 12:34:56 die xxxi mensis xii annoque mdcccxciv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 365 2413194 12 xii 12 12/31/1894 die xxxi mensis xii annoque mdcccxciv 94 xciv 1894} +test clock-2.361 {conversion of 1895-01-01} { + clock format -2366709904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1895 12:34:56 die i mensis i annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2413195 01 i 1 01/01/1895 die i mensis i annoque mdcccxcv 95 xcv 1895} +test clock-2.362 {conversion of 1895-01-31} { + clock format -2364117904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1895 12:34:56 die xxxi mensis i annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2413225 01 i 1 01/31/1895 die xxxi mensis i annoque mdcccxcv 95 xcv 1895} +test clock-2.363 {conversion of 1895-02-01} { + clock format -2364031504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1895 12:34:56 die i mensis ii annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2413226 02 ii 2 02/01/1895 die i mensis ii annoque mdcccxcv 95 xcv 1895} +test clock-2.364 {conversion of 1895-02-28} { + clock format -2361698704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1895 12:34:56 die xxviii mensis ii annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 28 xxviii 28 xxviii Feb 059 2413253 02 ii 2 02/28/1895 die xxviii mensis ii annoque mdcccxcv 95 xcv 1895} +test clock-2.365 {conversion of 1895-03-01} { + clock format -2361612304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1895 12:34:56 die i mensis iii annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 060 2413254 03 iii 3 03/01/1895 die i mensis iii annoque mdcccxcv 95 xcv 1895} +test clock-2.366 {conversion of 1895-03-31} { + clock format -2359020304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1895 12:34:56 die xxxi mensis iii annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 090 2413284 03 iii 3 03/31/1895 die xxxi mensis iii annoque mdcccxcv 95 xcv 1895} +test clock-2.367 {conversion of 1895-04-01} { + clock format -2358933904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1895 12:34:56 die i mensis iv annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 091 2413285 04 iv 4 04/01/1895 die i mensis iv annoque mdcccxcv 95 xcv 1895} +test clock-2.368 {conversion of 1895-04-30} { + clock format -2356428304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1895 12:34:56 die xxx mensis iv annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 120 2413314 04 iv 4 04/30/1895 die xxx mensis iv annoque mdcccxcv 95 xcv 1895} +test clock-2.369 {conversion of 1895-05-01} { + clock format -2356341904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1895 12:34:56 die i mensis v annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 121 2413315 05 v 5 05/01/1895 die i mensis v annoque mdcccxcv 95 xcv 1895} +test clock-2.370 {conversion of 1895-05-31} { + clock format -2353749904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1895 12:34:56 die xxxi mensis v annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 151 2413345 05 v 5 05/31/1895 die xxxi mensis v annoque mdcccxcv 95 xcv 1895} +test clock-2.371 {conversion of 1895-06-01} { + clock format -2353663504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1895 12:34:56 die i mensis vi annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 152 2413346 06 vi 6 06/01/1895 die i mensis vi annoque mdcccxcv 95 xcv 1895} +test clock-2.372 {conversion of 1895-06-30} { + clock format -2351157904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1895 12:34:56 die xxx mensis vi annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 181 2413375 06 vi 6 06/30/1895 die xxx mensis vi annoque mdcccxcv 95 xcv 1895} +test clock-2.373 {conversion of 1895-07-01} { + clock format -2351071504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1895 12:34:56 die i mensis vii annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 182 2413376 07 vii 7 07/01/1895 die i mensis vii annoque mdcccxcv 95 xcv 1895} +test clock-2.374 {conversion of 1895-07-31} { + clock format -2348479504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1895 12:34:56 die xxxi mensis vii annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 212 2413406 07 vii 7 07/31/1895 die xxxi mensis vii annoque mdcccxcv 95 xcv 1895} +test clock-2.375 {conversion of 1895-08-01} { + clock format -2348393104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1895 12:34:56 die i mensis viii annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 213 2413407 08 viii 8 08/01/1895 die i mensis viii annoque mdcccxcv 95 xcv 1895} +test clock-2.376 {conversion of 1895-08-31} { + clock format -2345801104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1895 12:34:56 die xxxi mensis viii annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 243 2413437 08 viii 8 08/31/1895 die xxxi mensis viii annoque mdcccxcv 95 xcv 1895} +test clock-2.377 {conversion of 1895-09-01} { + clock format -2345714704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1895 12:34:56 die i mensis ix annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 244 2413438 09 ix 9 09/01/1895 die i mensis ix annoque mdcccxcv 95 xcv 1895} +test clock-2.378 {conversion of 1895-09-30} { + clock format -2343209104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1895 12:34:56 die xxx mensis ix annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 273 2413467 09 ix 9 09/30/1895 die xxx mensis ix annoque mdcccxcv 95 xcv 1895} +test clock-2.379 {conversion of 1895-10-01} { + clock format -2343122704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1895 12:34:56 die i mensis x annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 274 2413468 10 x 10 10/01/1895 die i mensis x annoque mdcccxcv 95 xcv 1895} +test clock-2.380 {conversion of 1895-10-31} { + clock format -2340530704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1895 12:34:56 die xxxi mensis x annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 304 2413498 10 x 10 10/31/1895 die xxxi mensis x annoque mdcccxcv 95 xcv 1895} +test clock-2.381 {conversion of 1895-11-01} { + clock format -2340444304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1895 12:34:56 die i mensis xi annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 305 2413499 11 xi 11 11/01/1895 die i mensis xi annoque mdcccxcv 95 xcv 1895} +test clock-2.382 {conversion of 1895-11-30} { + clock format -2337938704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1895 12:34:56 die xxx mensis xi annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 334 2413528 11 xi 11 11/30/1895 die xxx mensis xi annoque mdcccxcv 95 xcv 1895} +test clock-2.383 {conversion of 1895-12-01} { + clock format -2337852304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1895 12:34:56 die i mensis xii annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 335 2413529 12 xii 12 12/01/1895 die i mensis xii annoque mdcccxcv 95 xcv 1895} +test clock-2.384 {conversion of 1895-12-31} { + clock format -2335260304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1895 12:34:56 die xxxi mensis xii annoque mdcccxcv xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 365 2413559 12 xii 12 12/31/1895 die xxxi mensis xii annoque mdcccxcv 95 xcv 1895} +test clock-2.385 {conversion of 1896-01-01} { + clock format -2335173904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1896 12:34:56 die i mensis i annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2413560 01 i 1 01/01/1896 die i mensis i annoque mdcccxcvi 96 xcvi 1896} +test clock-2.386 {conversion of 1896-01-31} { + clock format -2332581904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1896 12:34:56 die xxxi mensis i annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2413590 01 i 1 01/31/1896 die xxxi mensis i annoque mdcccxcvi 96 xcvi 1896} +test clock-2.387 {conversion of 1896-02-01} { + clock format -2332495504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1896 12:34:56 die i mensis ii annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2413591 02 ii 2 02/01/1896 die i mensis ii annoque mdcccxcvi 96 xcvi 1896} +test clock-2.388 {conversion of 1896-02-29} { + clock format -2330076304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1896 12:34:56 die xxix mensis ii annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 29 xxix 29 xxix Feb 060 2413619 02 ii 2 02/29/1896 die xxix mensis ii annoque mdcccxcvi 96 xcvi 1896} +test clock-2.389 {conversion of 1896-03-01} { + clock format -2329989904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1896 12:34:56 die i mensis iii annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 061 2413620 03 iii 3 03/01/1896 die i mensis iii annoque mdcccxcvi 96 xcvi 1896} +test clock-2.390 {conversion of 1896-03-31} { + clock format -2327397904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1896 12:34:56 die xxxi mensis iii annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 091 2413650 03 iii 3 03/31/1896 die xxxi mensis iii annoque mdcccxcvi 96 xcvi 1896} +test clock-2.391 {conversion of 1896-04-01} { + clock format -2327311504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1896 12:34:56 die i mensis iv annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 092 2413651 04 iv 4 04/01/1896 die i mensis iv annoque mdcccxcvi 96 xcvi 1896} +test clock-2.392 {conversion of 1896-04-30} { + clock format -2324805904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1896 12:34:56 die xxx mensis iv annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 121 2413680 04 iv 4 04/30/1896 die xxx mensis iv annoque mdcccxcvi 96 xcvi 1896} +test clock-2.393 {conversion of 1896-05-01} { + clock format -2324719504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1896 12:34:56 die i mensis v annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 122 2413681 05 v 5 05/01/1896 die i mensis v annoque mdcccxcvi 96 xcvi 1896} +test clock-2.394 {conversion of 1896-05-31} { + clock format -2322127504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1896 12:34:56 die xxxi mensis v annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 152 2413711 05 v 5 05/31/1896 die xxxi mensis v annoque mdcccxcvi 96 xcvi 1896} +test clock-2.395 {conversion of 1896-06-01} { + clock format -2322041104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1896 12:34:56 die i mensis vi annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 153 2413712 06 vi 6 06/01/1896 die i mensis vi annoque mdcccxcvi 96 xcvi 1896} +test clock-2.396 {conversion of 1896-06-30} { + clock format -2319535504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1896 12:34:56 die xxx mensis vi annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 182 2413741 06 vi 6 06/30/1896 die xxx mensis vi annoque mdcccxcvi 96 xcvi 1896} +test clock-2.397 {conversion of 1896-07-01} { + clock format -2319449104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1896 12:34:56 die i mensis vii annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 183 2413742 07 vii 7 07/01/1896 die i mensis vii annoque mdcccxcvi 96 xcvi 1896} +test clock-2.398 {conversion of 1896-07-31} { + clock format -2316857104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1896 12:34:56 die xxxi mensis vii annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 213 2413772 07 vii 7 07/31/1896 die xxxi mensis vii annoque mdcccxcvi 96 xcvi 1896} +test clock-2.399 {conversion of 1896-08-01} { + clock format -2316770704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1896 12:34:56 die i mensis viii annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 214 2413773 08 viii 8 08/01/1896 die i mensis viii annoque mdcccxcvi 96 xcvi 1896} +test clock-2.400 {conversion of 1896-08-31} { + clock format -2314178704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1896 12:34:56 die xxxi mensis viii annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 244 2413803 08 viii 8 08/31/1896 die xxxi mensis viii annoque mdcccxcvi 96 xcvi 1896} +test clock-2.401 {conversion of 1896-09-01} { + clock format -2314092304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1896 12:34:56 die i mensis ix annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 245 2413804 09 ix 9 09/01/1896 die i mensis ix annoque mdcccxcvi 96 xcvi 1896} +test clock-2.402 {conversion of 1896-09-30} { + clock format -2311586704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1896 12:34:56 die xxx mensis ix annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 274 2413833 09 ix 9 09/30/1896 die xxx mensis ix annoque mdcccxcvi 96 xcvi 1896} +test clock-2.403 {conversion of 1896-10-01} { + clock format -2311500304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1896 12:34:56 die i mensis x annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 275 2413834 10 x 10 10/01/1896 die i mensis x annoque mdcccxcvi 96 xcvi 1896} +test clock-2.404 {conversion of 1896-10-31} { + clock format -2308908304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1896 12:34:56 die xxxi mensis x annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 305 2413864 10 x 10 10/31/1896 die xxxi mensis x annoque mdcccxcvi 96 xcvi 1896} +test clock-2.405 {conversion of 1896-11-01} { + clock format -2308821904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1896 12:34:56 die i mensis xi annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 306 2413865 11 xi 11 11/01/1896 die i mensis xi annoque mdcccxcvi 96 xcvi 1896} +test clock-2.406 {conversion of 1896-11-30} { + clock format -2306316304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1896 12:34:56 die xxx mensis xi annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 335 2413894 11 xi 11 11/30/1896 die xxx mensis xi annoque mdcccxcvi 96 xcvi 1896} +test clock-2.407 {conversion of 1896-12-01} { + clock format -2306229904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1896 12:34:56 die i mensis xii annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 336 2413895 12 xii 12 12/01/1896 die i mensis xii annoque mdcccxcvi 96 xcvi 1896} +test clock-2.408 {conversion of 1896-12-31} { + clock format -2303637904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1896 12:34:56 die xxxi mensis xii annoque mdcccxcvi xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 366 2413925 12 xii 12 12/31/1896 die xxxi mensis xii annoque mdcccxcvi 96 xcvi 1896} +test clock-2.409 {conversion of 1897-01-01} { + clock format -2303551504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1897 12:34:56 die i mensis i annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2413926 01 i 1 01/01/1897 die i mensis i annoque mdcccxcvii 97 xcvii 1897} +test clock-2.410 {conversion of 1897-01-31} { + clock format -2300959504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1897 12:34:56 die xxxi mensis i annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2413956 01 i 1 01/31/1897 die xxxi mensis i annoque mdcccxcvii 97 xcvii 1897} +test clock-2.411 {conversion of 1897-02-01} { + clock format -2300873104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1897 12:34:56 die i mensis ii annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2413957 02 ii 2 02/01/1897 die i mensis ii annoque mdcccxcvii 97 xcvii 1897} +test clock-2.412 {conversion of 1897-02-28} { + clock format -2298540304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1897 12:34:56 die xxviii mensis ii annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 28 xxviii 28 xxviii Feb 059 2413984 02 ii 2 02/28/1897 die xxviii mensis ii annoque mdcccxcvii 97 xcvii 1897} +test clock-2.413 {conversion of 1897-03-01} { + clock format -2298453904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1897 12:34:56 die i mensis iii annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 060 2413985 03 iii 3 03/01/1897 die i mensis iii annoque mdcccxcvii 97 xcvii 1897} +test clock-2.414 {conversion of 1897-03-31} { + clock format -2295861904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1897 12:34:56 die xxxi mensis iii annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 090 2414015 03 iii 3 03/31/1897 die xxxi mensis iii annoque mdcccxcvii 97 xcvii 1897} +test clock-2.415 {conversion of 1897-04-01} { + clock format -2295775504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1897 12:34:56 die i mensis iv annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 091 2414016 04 iv 4 04/01/1897 die i mensis iv annoque mdcccxcvii 97 xcvii 1897} +test clock-2.416 {conversion of 1897-04-30} { + clock format -2293269904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1897 12:34:56 die xxx mensis iv annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 120 2414045 04 iv 4 04/30/1897 die xxx mensis iv annoque mdcccxcvii 97 xcvii 1897} +test clock-2.417 {conversion of 1897-05-01} { + clock format -2293183504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1897 12:34:56 die i mensis v annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 121 2414046 05 v 5 05/01/1897 die i mensis v annoque mdcccxcvii 97 xcvii 1897} +test clock-2.418 {conversion of 1897-05-31} { + clock format -2290591504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1897 12:34:56 die xxxi mensis v annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 151 2414076 05 v 5 05/31/1897 die xxxi mensis v annoque mdcccxcvii 97 xcvii 1897} +test clock-2.419 {conversion of 1897-06-01} { + clock format -2290505104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1897 12:34:56 die i mensis vi annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 152 2414077 06 vi 6 06/01/1897 die i mensis vi annoque mdcccxcvii 97 xcvii 1897} +test clock-2.420 {conversion of 1897-06-30} { + clock format -2287999504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1897 12:34:56 die xxx mensis vi annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 181 2414106 06 vi 6 06/30/1897 die xxx mensis vi annoque mdcccxcvii 97 xcvii 1897} +test clock-2.421 {conversion of 1897-07-01} { + clock format -2287913104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1897 12:34:56 die i mensis vii annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 182 2414107 07 vii 7 07/01/1897 die i mensis vii annoque mdcccxcvii 97 xcvii 1897} +test clock-2.422 {conversion of 1897-07-31} { + clock format -2285321104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1897 12:34:56 die xxxi mensis vii annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 212 2414137 07 vii 7 07/31/1897 die xxxi mensis vii annoque mdcccxcvii 97 xcvii 1897} +test clock-2.423 {conversion of 1897-08-01} { + clock format -2285234704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1897 12:34:56 die i mensis viii annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 213 2414138 08 viii 8 08/01/1897 die i mensis viii annoque mdcccxcvii 97 xcvii 1897} +test clock-2.424 {conversion of 1897-08-31} { + clock format -2282642704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1897 12:34:56 die xxxi mensis viii annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 243 2414168 08 viii 8 08/31/1897 die xxxi mensis viii annoque mdcccxcvii 97 xcvii 1897} +test clock-2.425 {conversion of 1897-09-01} { + clock format -2282556304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1897 12:34:56 die i mensis ix annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 244 2414169 09 ix 9 09/01/1897 die i mensis ix annoque mdcccxcvii 97 xcvii 1897} +test clock-2.426 {conversion of 1897-09-30} { + clock format -2280050704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1897 12:34:56 die xxx mensis ix annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 273 2414198 09 ix 9 09/30/1897 die xxx mensis ix annoque mdcccxcvii 97 xcvii 1897} +test clock-2.427 {conversion of 1897-10-01} { + clock format -2279964304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1897 12:34:56 die i mensis x annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 274 2414199 10 x 10 10/01/1897 die i mensis x annoque mdcccxcvii 97 xcvii 1897} +test clock-2.428 {conversion of 1897-10-31} { + clock format -2277372304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1897 12:34:56 die xxxi mensis x annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 304 2414229 10 x 10 10/31/1897 die xxxi mensis x annoque mdcccxcvii 97 xcvii 1897} +test clock-2.429 {conversion of 1897-11-01} { + clock format -2277285904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1897 12:34:56 die i mensis xi annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 305 2414230 11 xi 11 11/01/1897 die i mensis xi annoque mdcccxcvii 97 xcvii 1897} +test clock-2.430 {conversion of 1897-11-30} { + clock format -2274780304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1897 12:34:56 die xxx mensis xi annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 334 2414259 11 xi 11 11/30/1897 die xxx mensis xi annoque mdcccxcvii 97 xcvii 1897} +test clock-2.431 {conversion of 1897-12-01} { + clock format -2274693904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1897 12:34:56 die i mensis xii annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 335 2414260 12 xii 12 12/01/1897 die i mensis xii annoque mdcccxcvii 97 xcvii 1897} +test clock-2.432 {conversion of 1897-12-31} { + clock format -2272101904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1897 12:34:56 die xxxi mensis xii annoque mdcccxcvii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 365 2414290 12 xii 12 12/31/1897 die xxxi mensis xii annoque mdcccxcvii 97 xcvii 1897} +test clock-2.433 {conversion of 1898-01-01} { + clock format -2272015504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1898 12:34:56 die i mensis i annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2414291 01 i 1 01/01/1898 die i mensis i annoque mdcccxcviii 98 xcviii 1898} +test clock-2.434 {conversion of 1898-01-31} { + clock format -2269423504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1898 12:34:56 die xxxi mensis i annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2414321 01 i 1 01/31/1898 die xxxi mensis i annoque mdcccxcviii 98 xcviii 1898} +test clock-2.435 {conversion of 1898-02-01} { + clock format -2269337104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1898 12:34:56 die i mensis ii annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2414322 02 ii 2 02/01/1898 die i mensis ii annoque mdcccxcviii 98 xcviii 1898} +test clock-2.436 {conversion of 1898-02-28} { + clock format -2267004304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1898 12:34:56 die xxviii mensis ii annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 28 xxviii 28 xxviii Feb 059 2414349 02 ii 2 02/28/1898 die xxviii mensis ii annoque mdcccxcviii 98 xcviii 1898} +test clock-2.437 {conversion of 1898-03-01} { + clock format -2266917904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1898 12:34:56 die i mensis iii annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 060 2414350 03 iii 3 03/01/1898 die i mensis iii annoque mdcccxcviii 98 xcviii 1898} +test clock-2.438 {conversion of 1898-03-31} { + clock format -2264325904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1898 12:34:56 die xxxi mensis iii annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 090 2414380 03 iii 3 03/31/1898 die xxxi mensis iii annoque mdcccxcviii 98 xcviii 1898} +test clock-2.439 {conversion of 1898-04-01} { + clock format -2264239504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1898 12:34:56 die i mensis iv annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 091 2414381 04 iv 4 04/01/1898 die i mensis iv annoque mdcccxcviii 98 xcviii 1898} +test clock-2.440 {conversion of 1898-04-30} { + clock format -2261733904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1898 12:34:56 die xxx mensis iv annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 120 2414410 04 iv 4 04/30/1898 die xxx mensis iv annoque mdcccxcviii 98 xcviii 1898} +test clock-2.441 {conversion of 1898-05-01} { + clock format -2261647504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1898 12:34:56 die i mensis v annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 121 2414411 05 v 5 05/01/1898 die i mensis v annoque mdcccxcviii 98 xcviii 1898} +test clock-2.442 {conversion of 1898-05-31} { + clock format -2259055504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1898 12:34:56 die xxxi mensis v annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 151 2414441 05 v 5 05/31/1898 die xxxi mensis v annoque mdcccxcviii 98 xcviii 1898} +test clock-2.443 {conversion of 1898-06-01} { + clock format -2258969104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1898 12:34:56 die i mensis vi annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 152 2414442 06 vi 6 06/01/1898 die i mensis vi annoque mdcccxcviii 98 xcviii 1898} +test clock-2.444 {conversion of 1898-06-30} { + clock format -2256463504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1898 12:34:56 die xxx mensis vi annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 181 2414471 06 vi 6 06/30/1898 die xxx mensis vi annoque mdcccxcviii 98 xcviii 1898} +test clock-2.445 {conversion of 1898-07-01} { + clock format -2256377104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1898 12:34:56 die i mensis vii annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 182 2414472 07 vii 7 07/01/1898 die i mensis vii annoque mdcccxcviii 98 xcviii 1898} +test clock-2.446 {conversion of 1898-07-31} { + clock format -2253785104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1898 12:34:56 die xxxi mensis vii annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 212 2414502 07 vii 7 07/31/1898 die xxxi mensis vii annoque mdcccxcviii 98 xcviii 1898} +test clock-2.447 {conversion of 1898-08-01} { + clock format -2253698704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1898 12:34:56 die i mensis viii annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 213 2414503 08 viii 8 08/01/1898 die i mensis viii annoque mdcccxcviii 98 xcviii 1898} +test clock-2.448 {conversion of 1898-08-31} { + clock format -2251106704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1898 12:34:56 die xxxi mensis viii annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 243 2414533 08 viii 8 08/31/1898 die xxxi mensis viii annoque mdcccxcviii 98 xcviii 1898} +test clock-2.449 {conversion of 1898-09-01} { + clock format -2251020304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1898 12:34:56 die i mensis ix annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 244 2414534 09 ix 9 09/01/1898 die i mensis ix annoque mdcccxcviii 98 xcviii 1898} +test clock-2.450 {conversion of 1898-09-30} { + clock format -2248514704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1898 12:34:56 die xxx mensis ix annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 273 2414563 09 ix 9 09/30/1898 die xxx mensis ix annoque mdcccxcviii 98 xcviii 1898} +test clock-2.451 {conversion of 1898-10-01} { + clock format -2248428304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1898 12:34:56 die i mensis x annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 274 2414564 10 x 10 10/01/1898 die i mensis x annoque mdcccxcviii 98 xcviii 1898} +test clock-2.452 {conversion of 1898-10-31} { + clock format -2245836304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1898 12:34:56 die xxxi mensis x annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 304 2414594 10 x 10 10/31/1898 die xxxi mensis x annoque mdcccxcviii 98 xcviii 1898} +test clock-2.453 {conversion of 1898-11-01} { + clock format -2245749904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1898 12:34:56 die i mensis xi annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 305 2414595 11 xi 11 11/01/1898 die i mensis xi annoque mdcccxcviii 98 xcviii 1898} +test clock-2.454 {conversion of 1898-11-30} { + clock format -2243244304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1898 12:34:56 die xxx mensis xi annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 334 2414624 11 xi 11 11/30/1898 die xxx mensis xi annoque mdcccxcviii 98 xcviii 1898} +test clock-2.455 {conversion of 1898-12-01} { + clock format -2243157904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1898 12:34:56 die i mensis xii annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 335 2414625 12 xii 12 12/01/1898 die i mensis xii annoque mdcccxcviii 98 xcviii 1898} +test clock-2.456 {conversion of 1898-12-31} { + clock format -2240565904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1898 12:34:56 die xxxi mensis xii annoque mdcccxcviii xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 365 2414655 12 xii 12 12/31/1898 die xxxi mensis xii annoque mdcccxcviii 98 xcviii 1898} +test clock-2.457 {conversion of 1899-01-01} { + clock format -2240479504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1899 12:34:56 die i mensis i annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jan 001 2414656 01 i 1 01/01/1899 die i mensis i annoque mdcccxcix 99 xcix 1899} +test clock-2.458 {conversion of 1899-01-31} { + clock format -2237887504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1899 12:34:56 die xxxi mensis i annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jan 031 2414686 01 i 1 01/31/1899 die xxxi mensis i annoque mdcccxcix 99 xcix 1899} +test clock-2.459 {conversion of 1899-02-01} { + clock format -2237801104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1899 12:34:56 die i mensis ii annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Feb 032 2414687 02 ii 2 02/01/1899 die i mensis ii annoque mdcccxcix 99 xcix 1899} +test clock-2.460 {conversion of 1899-02-28} { + clock format -2235468304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1899 12:34:56 die xxviii mensis ii annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 28 xxviii 28 xxviii Feb 059 2414714 02 ii 2 02/28/1899 die xxviii mensis ii annoque mdcccxcix 99 xcix 1899} +test clock-2.461 {conversion of 1899-03-01} { + clock format -2235381904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1899 12:34:56 die i mensis iii annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Mar 060 2414715 03 iii 3 03/01/1899 die i mensis iii annoque mdcccxcix 99 xcix 1899} +test clock-2.462 {conversion of 1899-03-31} { + clock format -2232789904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1899 12:34:56 die xxxi mensis iii annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Mar 090 2414745 03 iii 3 03/31/1899 die xxxi mensis iii annoque mdcccxcix 99 xcix 1899} +test clock-2.463 {conversion of 1899-04-01} { + clock format -2232703504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1899 12:34:56 die i mensis iv annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Apr 091 2414746 04 iv 4 04/01/1899 die i mensis iv annoque mdcccxcix 99 xcix 1899} +test clock-2.464 {conversion of 1899-04-30} { + clock format -2230197904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1899 12:34:56 die xxx mensis iv annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Apr 120 2414775 04 iv 4 04/30/1899 die xxx mensis iv annoque mdcccxcix 99 xcix 1899} +test clock-2.465 {conversion of 1899-05-01} { + clock format -2230111504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1899 12:34:56 die i mensis v annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 01 i 1 i May 121 2414776 05 v 5 05/01/1899 die i mensis v annoque mdcccxcix 99 xcix 1899} +test clock-2.466 {conversion of 1899-05-31} { + clock format -2227519504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1899 12:34:56 die xxxi mensis v annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi May 151 2414806 05 v 5 05/31/1899 die xxxi mensis v annoque mdcccxcix 99 xcix 1899} +test clock-2.467 {conversion of 1899-06-01} { + clock format -2227433104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1899 12:34:56 die i mensis vi annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jun 152 2414807 06 vi 6 06/01/1899 die i mensis vi annoque mdcccxcix 99 xcix 1899} +test clock-2.468 {conversion of 1899-06-30} { + clock format -2224927504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1899 12:34:56 die xxx mensis vi annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Jun 181 2414836 06 vi 6 06/30/1899 die xxx mensis vi annoque mdcccxcix 99 xcix 1899} +test clock-2.469 {conversion of 1899-07-01} { + clock format -2224841104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1899 12:34:56 die i mensis vii annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Jul 182 2414837 07 vii 7 07/01/1899 die i mensis vii annoque mdcccxcix 99 xcix 1899} +test clock-2.470 {conversion of 1899-07-31} { + clock format -2222249104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1899 12:34:56 die xxxi mensis vii annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Jul 212 2414867 07 vii 7 07/31/1899 die xxxi mensis vii annoque mdcccxcix 99 xcix 1899} +test clock-2.471 {conversion of 1899-08-01} { + clock format -2222162704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1899 12:34:56 die i mensis viii annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Aug 213 2414868 08 viii 8 08/01/1899 die i mensis viii annoque mdcccxcix 99 xcix 1899} +test clock-2.472 {conversion of 1899-08-31} { + clock format -2219570704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1899 12:34:56 die xxxi mensis viii annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Aug 243 2414898 08 viii 8 08/31/1899 die xxxi mensis viii annoque mdcccxcix 99 xcix 1899} +test clock-2.473 {conversion of 1899-09-01} { + clock format -2219484304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1899 12:34:56 die i mensis ix annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Sep 244 2414899 09 ix 9 09/01/1899 die i mensis ix annoque mdcccxcix 99 xcix 1899} +test clock-2.474 {conversion of 1899-09-30} { + clock format -2216978704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1899 12:34:56 die xxx mensis ix annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Sep 273 2414928 09 ix 9 09/30/1899 die xxx mensis ix annoque mdcccxcix 99 xcix 1899} +test clock-2.475 {conversion of 1899-10-01} { + clock format -2216892304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1899 12:34:56 die i mensis x annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Oct 274 2414929 10 x 10 10/01/1899 die i mensis x annoque mdcccxcix 99 xcix 1899} +test clock-2.476 {conversion of 1899-10-31} { + clock format -2214300304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1899 12:34:56 die xxxi mensis x annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Oct 304 2414959 10 x 10 10/31/1899 die xxxi mensis x annoque mdcccxcix 99 xcix 1899} +test clock-2.477 {conversion of 1899-11-01} { + clock format -2214213904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1899 12:34:56 die i mensis xi annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Nov 305 2414960 11 xi 11 11/01/1899 die i mensis xi annoque mdcccxcix 99 xcix 1899} +test clock-2.478 {conversion of 1899-11-30} { + clock format -2211708304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1899 12:34:56 die xxx mensis xi annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 30 xxx 30 xxx Nov 334 2414989 11 xi 11 11/30/1899 die xxx mensis xi annoque mdcccxcix 99 xcix 1899} +test clock-2.479 {conversion of 1899-12-01} { + clock format -2211621904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1899 12:34:56 die i mensis xii annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 01 i 1 i Dec 335 2414990 12 xii 12 12/01/1899 die i mensis xii annoque mdcccxcix 99 xcix 1899} +test clock-2.480 {conversion of 1899-12-31} { + clock format -2209029904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1899 12:34:56 die xxxi mensis xii annoque mdcccxcix xii h xxxiv m lvi s 18 mdccc 31 xxxi 31 xxxi Dec 365 2415020 12 xii 12 12/31/1899 die xxxi mensis xii annoque mdcccxcix 99 xcix 1899} +test clock-2.481 {conversion of 1900-01-01} { + clock format -2208943504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1900 12:34:56 die i mensis i annoque mcm? xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2415021 01 i 1 01/01/1900 die i mensis i annoque mcm? 00 ? 1900} +test clock-2.482 {conversion of 1900-01-31} { + clock format -2206351504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1900 12:34:56 die xxxi mensis i annoque mcm? xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2415051 01 i 1 01/31/1900 die xxxi mensis i annoque mcm? 00 ? 1900} +test clock-2.483 {conversion of 1900-02-01} { + clock format -2206265104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1900 12:34:56 die i mensis ii annoque mcm? xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2415052 02 ii 2 02/01/1900 die i mensis ii annoque mcm? 00 ? 1900} +test clock-2.484 {conversion of 1900-02-28} { + clock format -2203932304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1900 12:34:56 die xxviii mensis ii annoque mcm? xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2415079 02 ii 2 02/28/1900 die xxviii mensis ii annoque mcm? 00 ? 1900} +test clock-2.485 {conversion of 1900-03-01} { + clock format -2203845904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1900 12:34:56 die i mensis iii annoque mcm? xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2415080 03 iii 3 03/01/1900 die i mensis iii annoque mcm? 00 ? 1900} +test clock-2.486 {conversion of 1900-03-31} { + clock format -2201253904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1900 12:34:56 die xxxi mensis iii annoque mcm? xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2415110 03 iii 3 03/31/1900 die xxxi mensis iii annoque mcm? 00 ? 1900} +test clock-2.487 {conversion of 1900-04-01} { + clock format -2201167504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1900 12:34:56 die i mensis iv annoque mcm? xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2415111 04 iv 4 04/01/1900 die i mensis iv annoque mcm? 00 ? 1900} +test clock-2.488 {conversion of 1900-04-30} { + clock format -2198661904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1900 12:34:56 die xxx mensis iv annoque mcm? xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2415140 04 iv 4 04/30/1900 die xxx mensis iv annoque mcm? 00 ? 1900} +test clock-2.489 {conversion of 1900-05-01} { + clock format -2198575504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1900 12:34:56 die i mensis v annoque mcm? xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2415141 05 v 5 05/01/1900 die i mensis v annoque mcm? 00 ? 1900} +test clock-2.490 {conversion of 1900-05-31} { + clock format -2195983504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1900 12:34:56 die xxxi mensis v annoque mcm? xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2415171 05 v 5 05/31/1900 die xxxi mensis v annoque mcm? 00 ? 1900} +test clock-2.491 {conversion of 1900-06-01} { + clock format -2195897104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1900 12:34:56 die i mensis vi annoque mcm? xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2415172 06 vi 6 06/01/1900 die i mensis vi annoque mcm? 00 ? 1900} +test clock-2.492 {conversion of 1900-06-30} { + clock format -2193391504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1900 12:34:56 die xxx mensis vi annoque mcm? xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2415201 06 vi 6 06/30/1900 die xxx mensis vi annoque mcm? 00 ? 1900} +test clock-2.493 {conversion of 1900-07-01} { + clock format -2193305104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1900 12:34:56 die i mensis vii annoque mcm? xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2415202 07 vii 7 07/01/1900 die i mensis vii annoque mcm? 00 ? 1900} +test clock-2.494 {conversion of 1900-07-31} { + clock format -2190713104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1900 12:34:56 die xxxi mensis vii annoque mcm? xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2415232 07 vii 7 07/31/1900 die xxxi mensis vii annoque mcm? 00 ? 1900} +test clock-2.495 {conversion of 1900-08-01} { + clock format -2190626704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1900 12:34:56 die i mensis viii annoque mcm? xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2415233 08 viii 8 08/01/1900 die i mensis viii annoque mcm? 00 ? 1900} +test clock-2.496 {conversion of 1900-08-31} { + clock format -2188034704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1900 12:34:56 die xxxi mensis viii annoque mcm? xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2415263 08 viii 8 08/31/1900 die xxxi mensis viii annoque mcm? 00 ? 1900} +test clock-2.497 {conversion of 1900-09-01} { + clock format -2187948304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1900 12:34:56 die i mensis ix annoque mcm? xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2415264 09 ix 9 09/01/1900 die i mensis ix annoque mcm? 00 ? 1900} +test clock-2.498 {conversion of 1900-09-30} { + clock format -2185442704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1900 12:34:56 die xxx mensis ix annoque mcm? xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2415293 09 ix 9 09/30/1900 die xxx mensis ix annoque mcm? 00 ? 1900} +test clock-2.499 {conversion of 1900-10-01} { + clock format -2185356304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1900 12:34:56 die i mensis x annoque mcm? xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2415294 10 x 10 10/01/1900 die i mensis x annoque mcm? 00 ? 1900} +test clock-2.500 {conversion of 1900-10-31} { + clock format -2182764304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1900 12:34:56 die xxxi mensis x annoque mcm? xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2415324 10 x 10 10/31/1900 die xxxi mensis x annoque mcm? 00 ? 1900} +test clock-2.501 {conversion of 1900-11-01} { + clock format -2182677904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1900 12:34:56 die i mensis xi annoque mcm? xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2415325 11 xi 11 11/01/1900 die i mensis xi annoque mcm? 00 ? 1900} +test clock-2.502 {conversion of 1900-11-30} { + clock format -2180172304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1900 12:34:56 die xxx mensis xi annoque mcm? xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2415354 11 xi 11 11/30/1900 die xxx mensis xi annoque mcm? 00 ? 1900} +test clock-2.503 {conversion of 1900-12-01} { + clock format -2180085904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1900 12:34:56 die i mensis xii annoque mcm? xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2415355 12 xii 12 12/01/1900 die i mensis xii annoque mcm? 00 ? 1900} +test clock-2.504 {conversion of 1900-12-31} { + clock format -2177493904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1900 12:34:56 die xxxi mensis xii annoque mcm? xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2415385 12 xii 12 12/31/1900 die xxxi mensis xii annoque mcm? 00 ? 1900} +test clock-2.505 {conversion of 1944-01-01} { + clock format -820495504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1944 12:34:56 die i mensis i annoque mcmxliv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2431091 01 i 1 01/01/1944 die i mensis i annoque mcmxliv 44 xliv 1944} +test clock-2.506 {conversion of 1944-01-31} { + clock format -817903504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1944 12:34:56 die xxxi mensis i annoque mcmxliv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2431121 01 i 1 01/31/1944 die xxxi mensis i annoque mcmxliv 44 xliv 1944} +test clock-2.507 {conversion of 1944-02-01} { + clock format -817817104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1944 12:34:56 die i mensis ii annoque mcmxliv xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2431122 02 ii 2 02/01/1944 die i mensis ii annoque mcmxliv 44 xliv 1944} +test clock-2.508 {conversion of 1944-02-29} { + clock format -815397904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1944 12:34:56 die xxix mensis ii annoque mcmxliv xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2431150 02 ii 2 02/29/1944 die xxix mensis ii annoque mcmxliv 44 xliv 1944} +test clock-2.509 {conversion of 1944-03-01} { + clock format -815311504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1944 12:34:56 die i mensis iii annoque mcmxliv xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2431151 03 iii 3 03/01/1944 die i mensis iii annoque mcmxliv 44 xliv 1944} +test clock-2.510 {conversion of 1944-03-31} { + clock format -812719504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1944 12:34:56 die xxxi mensis iii annoque mcmxliv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2431181 03 iii 3 03/31/1944 die xxxi mensis iii annoque mcmxliv 44 xliv 1944} +test clock-2.511 {conversion of 1944-04-01} { + clock format -812633104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1944 12:34:56 die i mensis iv annoque mcmxliv xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2431182 04 iv 4 04/01/1944 die i mensis iv annoque mcmxliv 44 xliv 1944} +test clock-2.512 {conversion of 1944-04-30} { + clock format -810127504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1944 12:34:56 die xxx mensis iv annoque mcmxliv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2431211 04 iv 4 04/30/1944 die xxx mensis iv annoque mcmxliv 44 xliv 1944} +test clock-2.513 {conversion of 1944-05-01} { + clock format -810041104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1944 12:34:56 die i mensis v annoque mcmxliv xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2431212 05 v 5 05/01/1944 die i mensis v annoque mcmxliv 44 xliv 1944} +test clock-2.514 {conversion of 1944-05-31} { + clock format -807449104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1944 12:34:56 die xxxi mensis v annoque mcmxliv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2431242 05 v 5 05/31/1944 die xxxi mensis v annoque mcmxliv 44 xliv 1944} +test clock-2.515 {conversion of 1944-06-01} { + clock format -807362704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1944 12:34:56 die i mensis vi annoque mcmxliv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2431243 06 vi 6 06/01/1944 die i mensis vi annoque mcmxliv 44 xliv 1944} +test clock-2.516 {conversion of 1944-06-30} { + clock format -804857104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1944 12:34:56 die xxx mensis vi annoque mcmxliv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2431272 06 vi 6 06/30/1944 die xxx mensis vi annoque mcmxliv 44 xliv 1944} +test clock-2.517 {conversion of 1944-07-01} { + clock format -804770704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1944 12:34:56 die i mensis vii annoque mcmxliv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2431273 07 vii 7 07/01/1944 die i mensis vii annoque mcmxliv 44 xliv 1944} +test clock-2.518 {conversion of 1944-07-31} { + clock format -802178704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1944 12:34:56 die xxxi mensis vii annoque mcmxliv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2431303 07 vii 7 07/31/1944 die xxxi mensis vii annoque mcmxliv 44 xliv 1944} +test clock-2.519 {conversion of 1944-08-01} { + clock format -802092304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1944 12:34:56 die i mensis viii annoque mcmxliv xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2431304 08 viii 8 08/01/1944 die i mensis viii annoque mcmxliv 44 xliv 1944} +test clock-2.520 {conversion of 1944-08-31} { + clock format -799500304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1944 12:34:56 die xxxi mensis viii annoque mcmxliv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2431334 08 viii 8 08/31/1944 die xxxi mensis viii annoque mcmxliv 44 xliv 1944} +test clock-2.521 {conversion of 1944-09-01} { + clock format -799413904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1944 12:34:56 die i mensis ix annoque mcmxliv xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2431335 09 ix 9 09/01/1944 die i mensis ix annoque mcmxliv 44 xliv 1944} +test clock-2.522 {conversion of 1944-09-30} { + clock format -796908304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1944 12:34:56 die xxx mensis ix annoque mcmxliv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2431364 09 ix 9 09/30/1944 die xxx mensis ix annoque mcmxliv 44 xliv 1944} +test clock-2.523 {conversion of 1944-10-01} { + clock format -796821904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1944 12:34:56 die i mensis x annoque mcmxliv xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2431365 10 x 10 10/01/1944 die i mensis x annoque mcmxliv 44 xliv 1944} +test clock-2.524 {conversion of 1944-10-31} { + clock format -794229904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1944 12:34:56 die xxxi mensis x annoque mcmxliv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2431395 10 x 10 10/31/1944 die xxxi mensis x annoque mcmxliv 44 xliv 1944} +test clock-2.525 {conversion of 1944-11-01} { + clock format -794143504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1944 12:34:56 die i mensis xi annoque mcmxliv xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2431396 11 xi 11 11/01/1944 die i mensis xi annoque mcmxliv 44 xliv 1944} +test clock-2.526 {conversion of 1944-11-30} { + clock format -791637904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1944 12:34:56 die xxx mensis xi annoque mcmxliv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2431425 11 xi 11 11/30/1944 die xxx mensis xi annoque mcmxliv 44 xliv 1944} +test clock-2.527 {conversion of 1944-12-01} { + clock format -791551504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1944 12:34:56 die i mensis xii annoque mcmxliv xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2431426 12 xii 12 12/01/1944 die i mensis xii annoque mcmxliv 44 xliv 1944} +test clock-2.528 {conversion of 1944-12-31} { + clock format -788959504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1944 12:34:56 die xxxi mensis xii annoque mcmxliv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2431456 12 xii 12 12/31/1944 die xxxi mensis xii annoque mcmxliv 44 xliv 1944} +test clock-2.529 {conversion of 1945-01-01} { + clock format -788873104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1945 12:34:56 die i mensis i annoque mcmxlv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2431457 01 i 1 01/01/1945 die i mensis i annoque mcmxlv 45 xlv 1945} +test clock-2.530 {conversion of 1945-01-31} { + clock format -786281104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1945 12:34:56 die xxxi mensis i annoque mcmxlv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2431487 01 i 1 01/31/1945 die xxxi mensis i annoque mcmxlv 45 xlv 1945} +test clock-2.531 {conversion of 1945-02-01} { + clock format -786194704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1945 12:34:56 die i mensis ii annoque mcmxlv xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2431488 02 ii 2 02/01/1945 die i mensis ii annoque mcmxlv 45 xlv 1945} +test clock-2.532 {conversion of 1945-02-28} { + clock format -783861904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1945 12:34:56 die xxviii mensis ii annoque mcmxlv xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2431515 02 ii 2 02/28/1945 die xxviii mensis ii annoque mcmxlv 45 xlv 1945} +test clock-2.533 {conversion of 1945-03-01} { + clock format -783775504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1945 12:34:56 die i mensis iii annoque mcmxlv xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2431516 03 iii 3 03/01/1945 die i mensis iii annoque mcmxlv 45 xlv 1945} +test clock-2.534 {conversion of 1945-03-31} { + clock format -781183504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1945 12:34:56 die xxxi mensis iii annoque mcmxlv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2431546 03 iii 3 03/31/1945 die xxxi mensis iii annoque mcmxlv 45 xlv 1945} +test clock-2.535 {conversion of 1945-04-01} { + clock format -781097104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1945 12:34:56 die i mensis iv annoque mcmxlv xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2431547 04 iv 4 04/01/1945 die i mensis iv annoque mcmxlv 45 xlv 1945} +test clock-2.536 {conversion of 1945-04-30} { + clock format -778591504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1945 12:34:56 die xxx mensis iv annoque mcmxlv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2431576 04 iv 4 04/30/1945 die xxx mensis iv annoque mcmxlv 45 xlv 1945} +test clock-2.537 {conversion of 1945-05-01} { + clock format -778505104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1945 12:34:56 die i mensis v annoque mcmxlv xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2431577 05 v 5 05/01/1945 die i mensis v annoque mcmxlv 45 xlv 1945} +test clock-2.538 {conversion of 1945-05-31} { + clock format -775913104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1945 12:34:56 die xxxi mensis v annoque mcmxlv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2431607 05 v 5 05/31/1945 die xxxi mensis v annoque mcmxlv 45 xlv 1945} +test clock-2.539 {conversion of 1945-06-01} { + clock format -775826704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1945 12:34:56 die i mensis vi annoque mcmxlv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2431608 06 vi 6 06/01/1945 die i mensis vi annoque mcmxlv 45 xlv 1945} +test clock-2.540 {conversion of 1945-06-30} { + clock format -773321104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1945 12:34:56 die xxx mensis vi annoque mcmxlv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2431637 06 vi 6 06/30/1945 die xxx mensis vi annoque mcmxlv 45 xlv 1945} +test clock-2.541 {conversion of 1945-07-01} { + clock format -773234704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1945 12:34:56 die i mensis vii annoque mcmxlv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2431638 07 vii 7 07/01/1945 die i mensis vii annoque mcmxlv 45 xlv 1945} +test clock-2.542 {conversion of 1945-07-31} { + clock format -770642704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1945 12:34:56 die xxxi mensis vii annoque mcmxlv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2431668 07 vii 7 07/31/1945 die xxxi mensis vii annoque mcmxlv 45 xlv 1945} +test clock-2.543 {conversion of 1945-08-01} { + clock format -770556304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1945 12:34:56 die i mensis viii annoque mcmxlv xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2431669 08 viii 8 08/01/1945 die i mensis viii annoque mcmxlv 45 xlv 1945} +test clock-2.544 {conversion of 1945-08-31} { + clock format -767964304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1945 12:34:56 die xxxi mensis viii annoque mcmxlv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2431699 08 viii 8 08/31/1945 die xxxi mensis viii annoque mcmxlv 45 xlv 1945} +test clock-2.545 {conversion of 1945-09-01} { + clock format -767877904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1945 12:34:56 die i mensis ix annoque mcmxlv xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2431700 09 ix 9 09/01/1945 die i mensis ix annoque mcmxlv 45 xlv 1945} +test clock-2.546 {conversion of 1945-09-30} { + clock format -765372304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1945 12:34:56 die xxx mensis ix annoque mcmxlv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2431729 09 ix 9 09/30/1945 die xxx mensis ix annoque mcmxlv 45 xlv 1945} +test clock-2.547 {conversion of 1945-10-01} { + clock format -765285904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1945 12:34:56 die i mensis x annoque mcmxlv xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2431730 10 x 10 10/01/1945 die i mensis x annoque mcmxlv 45 xlv 1945} +test clock-2.548 {conversion of 1945-10-31} { + clock format -762693904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1945 12:34:56 die xxxi mensis x annoque mcmxlv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2431760 10 x 10 10/31/1945 die xxxi mensis x annoque mcmxlv 45 xlv 1945} +test clock-2.549 {conversion of 1945-11-01} { + clock format -762607504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1945 12:34:56 die i mensis xi annoque mcmxlv xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2431761 11 xi 11 11/01/1945 die i mensis xi annoque mcmxlv 45 xlv 1945} +test clock-2.550 {conversion of 1945-11-30} { + clock format -760101904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1945 12:34:56 die xxx mensis xi annoque mcmxlv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2431790 11 xi 11 11/30/1945 die xxx mensis xi annoque mcmxlv 45 xlv 1945} +test clock-2.551 {conversion of 1945-12-01} { + clock format -760015504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1945 12:34:56 die i mensis xii annoque mcmxlv xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2431791 12 xii 12 12/01/1945 die i mensis xii annoque mcmxlv 45 xlv 1945} +test clock-2.552 {conversion of 1945-12-31} { + clock format -757423504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1945 12:34:56 die xxxi mensis xii annoque mcmxlv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2431821 12 xii 12 12/31/1945 die xxxi mensis xii annoque mcmxlv 45 xlv 1945} +test clock-2.553 {conversion of 1948-01-01} { + clock format -694265104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1948 12:34:56 die i mensis i annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2432552 01 i 1 01/01/1948 die i mensis i annoque mcmxlviii 48 xlviii 1948} +test clock-2.554 {conversion of 1948-01-31} { + clock format -691673104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1948 12:34:56 die xxxi mensis i annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2432582 01 i 1 01/31/1948 die xxxi mensis i annoque mcmxlviii 48 xlviii 1948} +test clock-2.555 {conversion of 1948-02-01} { + clock format -691586704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1948 12:34:56 die i mensis ii annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2432583 02 ii 2 02/01/1948 die i mensis ii annoque mcmxlviii 48 xlviii 1948} +test clock-2.556 {conversion of 1948-02-29} { + clock format -689167504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1948 12:34:56 die xxix mensis ii annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2432611 02 ii 2 02/29/1948 die xxix mensis ii annoque mcmxlviii 48 xlviii 1948} +test clock-2.557 {conversion of 1948-03-01} { + clock format -689081104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1948 12:34:56 die i mensis iii annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2432612 03 iii 3 03/01/1948 die i mensis iii annoque mcmxlviii 48 xlviii 1948} +test clock-2.558 {conversion of 1948-03-31} { + clock format -686489104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1948 12:34:56 die xxxi mensis iii annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2432642 03 iii 3 03/31/1948 die xxxi mensis iii annoque mcmxlviii 48 xlviii 1948} +test clock-2.559 {conversion of 1948-04-01} { + clock format -686402704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1948 12:34:56 die i mensis iv annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2432643 04 iv 4 04/01/1948 die i mensis iv annoque mcmxlviii 48 xlviii 1948} +test clock-2.560 {conversion of 1948-04-30} { + clock format -683897104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1948 12:34:56 die xxx mensis iv annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2432672 04 iv 4 04/30/1948 die xxx mensis iv annoque mcmxlviii 48 xlviii 1948} +test clock-2.561 {conversion of 1948-05-01} { + clock format -683810704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1948 12:34:56 die i mensis v annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2432673 05 v 5 05/01/1948 die i mensis v annoque mcmxlviii 48 xlviii 1948} +test clock-2.562 {conversion of 1948-05-31} { + clock format -681218704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1948 12:34:56 die xxxi mensis v annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2432703 05 v 5 05/31/1948 die xxxi mensis v annoque mcmxlviii 48 xlviii 1948} +test clock-2.563 {conversion of 1948-06-01} { + clock format -681132304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1948 12:34:56 die i mensis vi annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2432704 06 vi 6 06/01/1948 die i mensis vi annoque mcmxlviii 48 xlviii 1948} +test clock-2.564 {conversion of 1948-06-30} { + clock format -678626704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1948 12:34:56 die xxx mensis vi annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2432733 06 vi 6 06/30/1948 die xxx mensis vi annoque mcmxlviii 48 xlviii 1948} +test clock-2.565 {conversion of 1948-07-01} { + clock format -678540304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1948 12:34:56 die i mensis vii annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2432734 07 vii 7 07/01/1948 die i mensis vii annoque mcmxlviii 48 xlviii 1948} +test clock-2.566 {conversion of 1948-07-31} { + clock format -675948304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1948 12:34:56 die xxxi mensis vii annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2432764 07 vii 7 07/31/1948 die xxxi mensis vii annoque mcmxlviii 48 xlviii 1948} +test clock-2.567 {conversion of 1948-08-01} { + clock format -675861904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1948 12:34:56 die i mensis viii annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2432765 08 viii 8 08/01/1948 die i mensis viii annoque mcmxlviii 48 xlviii 1948} +test clock-2.568 {conversion of 1948-08-31} { + clock format -673269904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1948 12:34:56 die xxxi mensis viii annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2432795 08 viii 8 08/31/1948 die xxxi mensis viii annoque mcmxlviii 48 xlviii 1948} +test clock-2.569 {conversion of 1948-09-01} { + clock format -673183504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1948 12:34:56 die i mensis ix annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2432796 09 ix 9 09/01/1948 die i mensis ix annoque mcmxlviii 48 xlviii 1948} +test clock-2.570 {conversion of 1948-09-30} { + clock format -670677904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1948 12:34:56 die xxx mensis ix annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2432825 09 ix 9 09/30/1948 die xxx mensis ix annoque mcmxlviii 48 xlviii 1948} +test clock-2.571 {conversion of 1948-10-01} { + clock format -670591504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1948 12:34:56 die i mensis x annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2432826 10 x 10 10/01/1948 die i mensis x annoque mcmxlviii 48 xlviii 1948} +test clock-2.572 {conversion of 1948-10-31} { + clock format -667999504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1948 12:34:56 die xxxi mensis x annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2432856 10 x 10 10/31/1948 die xxxi mensis x annoque mcmxlviii 48 xlviii 1948} +test clock-2.573 {conversion of 1948-11-01} { + clock format -667913104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1948 12:34:56 die i mensis xi annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2432857 11 xi 11 11/01/1948 die i mensis xi annoque mcmxlviii 48 xlviii 1948} +test clock-2.574 {conversion of 1948-11-30} { + clock format -665407504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1948 12:34:56 die xxx mensis xi annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2432886 11 xi 11 11/30/1948 die xxx mensis xi annoque mcmxlviii 48 xlviii 1948} +test clock-2.575 {conversion of 1948-12-01} { + clock format -665321104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1948 12:34:56 die i mensis xii annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2432887 12 xii 12 12/01/1948 die i mensis xii annoque mcmxlviii 48 xlviii 1948} +test clock-2.576 {conversion of 1948-12-31} { + clock format -662729104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1948 12:34:56 die xxxi mensis xii annoque mcmxlviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2432917 12 xii 12 12/31/1948 die xxxi mensis xii annoque mcmxlviii 48 xlviii 1948} +test clock-2.577 {conversion of 1949-01-01} { + clock format -662642704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1949 12:34:56 die i mensis i annoque mcmxlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2432918 01 i 1 01/01/1949 die i mensis i annoque mcmxlix 49 xlix 1949} +test clock-2.578 {conversion of 1949-01-31} { + clock format -660050704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1949 12:34:56 die xxxi mensis i annoque mcmxlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2432948 01 i 1 01/31/1949 die xxxi mensis i annoque mcmxlix 49 xlix 1949} +test clock-2.579 {conversion of 1949-02-01} { + clock format -659964304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1949 12:34:56 die i mensis ii annoque mcmxlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2432949 02 ii 2 02/01/1949 die i mensis ii annoque mcmxlix 49 xlix 1949} +test clock-2.580 {conversion of 1949-02-28} { + clock format -657631504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1949 12:34:56 die xxviii mensis ii annoque mcmxlix xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2432976 02 ii 2 02/28/1949 die xxviii mensis ii annoque mcmxlix 49 xlix 1949} +test clock-2.581 {conversion of 1949-03-01} { + clock format -657545104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1949 12:34:56 die i mensis iii annoque mcmxlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2432977 03 iii 3 03/01/1949 die i mensis iii annoque mcmxlix 49 xlix 1949} +test clock-2.582 {conversion of 1949-03-31} { + clock format -654953104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1949 12:34:56 die xxxi mensis iii annoque mcmxlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2433007 03 iii 3 03/31/1949 die xxxi mensis iii annoque mcmxlix 49 xlix 1949} +test clock-2.583 {conversion of 1949-04-01} { + clock format -654866704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1949 12:34:56 die i mensis iv annoque mcmxlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2433008 04 iv 4 04/01/1949 die i mensis iv annoque mcmxlix 49 xlix 1949} +test clock-2.584 {conversion of 1949-04-30} { + clock format -652361104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1949 12:34:56 die xxx mensis iv annoque mcmxlix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2433037 04 iv 4 04/30/1949 die xxx mensis iv annoque mcmxlix 49 xlix 1949} +test clock-2.585 {conversion of 1949-05-01} { + clock format -652274704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1949 12:34:56 die i mensis v annoque mcmxlix xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2433038 05 v 5 05/01/1949 die i mensis v annoque mcmxlix 49 xlix 1949} +test clock-2.586 {conversion of 1949-05-31} { + clock format -649682704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1949 12:34:56 die xxxi mensis v annoque mcmxlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2433068 05 v 5 05/31/1949 die xxxi mensis v annoque mcmxlix 49 xlix 1949} +test clock-2.587 {conversion of 1949-06-01} { + clock format -649596304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1949 12:34:56 die i mensis vi annoque mcmxlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2433069 06 vi 6 06/01/1949 die i mensis vi annoque mcmxlix 49 xlix 1949} +test clock-2.588 {conversion of 1949-06-30} { + clock format -647090704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1949 12:34:56 die xxx mensis vi annoque mcmxlix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2433098 06 vi 6 06/30/1949 die xxx mensis vi annoque mcmxlix 49 xlix 1949} +test clock-2.589 {conversion of 1949-07-01} { + clock format -647004304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1949 12:34:56 die i mensis vii annoque mcmxlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2433099 07 vii 7 07/01/1949 die i mensis vii annoque mcmxlix 49 xlix 1949} +test clock-2.590 {conversion of 1949-07-31} { + clock format -644412304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1949 12:34:56 die xxxi mensis vii annoque mcmxlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2433129 07 vii 7 07/31/1949 die xxxi mensis vii annoque mcmxlix 49 xlix 1949} +test clock-2.591 {conversion of 1949-08-01} { + clock format -644325904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1949 12:34:56 die i mensis viii annoque mcmxlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2433130 08 viii 8 08/01/1949 die i mensis viii annoque mcmxlix 49 xlix 1949} +test clock-2.592 {conversion of 1949-08-31} { + clock format -641733904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1949 12:34:56 die xxxi mensis viii annoque mcmxlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2433160 08 viii 8 08/31/1949 die xxxi mensis viii annoque mcmxlix 49 xlix 1949} +test clock-2.593 {conversion of 1949-09-01} { + clock format -641647504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1949 12:34:56 die i mensis ix annoque mcmxlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2433161 09 ix 9 09/01/1949 die i mensis ix annoque mcmxlix 49 xlix 1949} +test clock-2.594 {conversion of 1949-09-30} { + clock format -639141904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1949 12:34:56 die xxx mensis ix annoque mcmxlix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2433190 09 ix 9 09/30/1949 die xxx mensis ix annoque mcmxlix 49 xlix 1949} +test clock-2.595 {conversion of 1949-10-01} { + clock format -639055504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1949 12:34:56 die i mensis x annoque mcmxlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2433191 10 x 10 10/01/1949 die i mensis x annoque mcmxlix 49 xlix 1949} +test clock-2.596 {conversion of 1949-10-31} { + clock format -636463504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1949 12:34:56 die xxxi mensis x annoque mcmxlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2433221 10 x 10 10/31/1949 die xxxi mensis x annoque mcmxlix 49 xlix 1949} +test clock-2.597 {conversion of 1949-11-01} { + clock format -636377104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1949 12:34:56 die i mensis xi annoque mcmxlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2433222 11 xi 11 11/01/1949 die i mensis xi annoque mcmxlix 49 xlix 1949} +test clock-2.598 {conversion of 1949-11-30} { + clock format -633871504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1949 12:34:56 die xxx mensis xi annoque mcmxlix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2433251 11 xi 11 11/30/1949 die xxx mensis xi annoque mcmxlix 49 xlix 1949} +test clock-2.599 {conversion of 1949-12-01} { + clock format -633785104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1949 12:34:56 die i mensis xii annoque mcmxlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2433252 12 xii 12 12/01/1949 die i mensis xii annoque mcmxlix 49 xlix 1949} +test clock-2.600 {conversion of 1949-12-31} { + clock format -631193104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1949 12:34:56 die xxxi mensis xii annoque mcmxlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2433282 12 xii 12 12/31/1949 die xxxi mensis xii annoque mcmxlix 49 xlix 1949} +test clock-2.601 {conversion of 1952-01-01} { + clock format -568034704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1952 12:34:56 die i mensis i annoque mcmlii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2434013 01 i 1 01/01/1952 die i mensis i annoque mcmlii 52 lii 1952} +test clock-2.602 {conversion of 1952-01-31} { + clock format -565442704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1952 12:34:56 die xxxi mensis i annoque mcmlii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2434043 01 i 1 01/31/1952 die xxxi mensis i annoque mcmlii 52 lii 1952} +test clock-2.603 {conversion of 1952-02-01} { + clock format -565356304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1952 12:34:56 die i mensis ii annoque mcmlii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2434044 02 ii 2 02/01/1952 die i mensis ii annoque mcmlii 52 lii 1952} +test clock-2.604 {conversion of 1952-02-29} { + clock format -562937104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1952 12:34:56 die xxix mensis ii annoque mcmlii xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2434072 02 ii 2 02/29/1952 die xxix mensis ii annoque mcmlii 52 lii 1952} +test clock-2.605 {conversion of 1952-03-01} { + clock format -562850704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1952 12:34:56 die i mensis iii annoque mcmlii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2434073 03 iii 3 03/01/1952 die i mensis iii annoque mcmlii 52 lii 1952} +test clock-2.606 {conversion of 1952-03-31} { + clock format -560258704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1952 12:34:56 die xxxi mensis iii annoque mcmlii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2434103 03 iii 3 03/31/1952 die xxxi mensis iii annoque mcmlii 52 lii 1952} +test clock-2.607 {conversion of 1952-04-01} { + clock format -560172304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1952 12:34:56 die i mensis iv annoque mcmlii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2434104 04 iv 4 04/01/1952 die i mensis iv annoque mcmlii 52 lii 1952} +test clock-2.608 {conversion of 1952-04-30} { + clock format -557666704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1952 12:34:56 die xxx mensis iv annoque mcmlii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2434133 04 iv 4 04/30/1952 die xxx mensis iv annoque mcmlii 52 lii 1952} +test clock-2.609 {conversion of 1952-05-01} { + clock format -557580304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1952 12:34:56 die i mensis v annoque mcmlii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2434134 05 v 5 05/01/1952 die i mensis v annoque mcmlii 52 lii 1952} +test clock-2.610 {conversion of 1952-05-31} { + clock format -554988304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1952 12:34:56 die xxxi mensis v annoque mcmlii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2434164 05 v 5 05/31/1952 die xxxi mensis v annoque mcmlii 52 lii 1952} +test clock-2.611 {conversion of 1952-06-01} { + clock format -554901904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1952 12:34:56 die i mensis vi annoque mcmlii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2434165 06 vi 6 06/01/1952 die i mensis vi annoque mcmlii 52 lii 1952} +test clock-2.612 {conversion of 1952-06-30} { + clock format -552396304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1952 12:34:56 die xxx mensis vi annoque mcmlii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2434194 06 vi 6 06/30/1952 die xxx mensis vi annoque mcmlii 52 lii 1952} +test clock-2.613 {conversion of 1952-07-01} { + clock format -552309904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1952 12:34:56 die i mensis vii annoque mcmlii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2434195 07 vii 7 07/01/1952 die i mensis vii annoque mcmlii 52 lii 1952} +test clock-2.614 {conversion of 1952-07-31} { + clock format -549717904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1952 12:34:56 die xxxi mensis vii annoque mcmlii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2434225 07 vii 7 07/31/1952 die xxxi mensis vii annoque mcmlii 52 lii 1952} +test clock-2.615 {conversion of 1952-08-01} { + clock format -549631504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1952 12:34:56 die i mensis viii annoque mcmlii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2434226 08 viii 8 08/01/1952 die i mensis viii annoque mcmlii 52 lii 1952} +test clock-2.616 {conversion of 1952-08-31} { + clock format -547039504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1952 12:34:56 die xxxi mensis viii annoque mcmlii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2434256 08 viii 8 08/31/1952 die xxxi mensis viii annoque mcmlii 52 lii 1952} +test clock-2.617 {conversion of 1952-09-01} { + clock format -546953104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1952 12:34:56 die i mensis ix annoque mcmlii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2434257 09 ix 9 09/01/1952 die i mensis ix annoque mcmlii 52 lii 1952} +test clock-2.618 {conversion of 1952-09-30} { + clock format -544447504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1952 12:34:56 die xxx mensis ix annoque mcmlii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2434286 09 ix 9 09/30/1952 die xxx mensis ix annoque mcmlii 52 lii 1952} +test clock-2.619 {conversion of 1952-10-01} { + clock format -544361104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1952 12:34:56 die i mensis x annoque mcmlii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2434287 10 x 10 10/01/1952 die i mensis x annoque mcmlii 52 lii 1952} +test clock-2.620 {conversion of 1952-10-31} { + clock format -541769104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1952 12:34:56 die xxxi mensis x annoque mcmlii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2434317 10 x 10 10/31/1952 die xxxi mensis x annoque mcmlii 52 lii 1952} +test clock-2.621 {conversion of 1952-11-01} { + clock format -541682704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1952 12:34:56 die i mensis xi annoque mcmlii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2434318 11 xi 11 11/01/1952 die i mensis xi annoque mcmlii 52 lii 1952} +test clock-2.622 {conversion of 1952-11-30} { + clock format -539177104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1952 12:34:56 die xxx mensis xi annoque mcmlii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2434347 11 xi 11 11/30/1952 die xxx mensis xi annoque mcmlii 52 lii 1952} +test clock-2.623 {conversion of 1952-12-01} { + clock format -539090704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1952 12:34:56 die i mensis xii annoque mcmlii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2434348 12 xii 12 12/01/1952 die i mensis xii annoque mcmlii 52 lii 1952} +test clock-2.624 {conversion of 1952-12-31} { + clock format -536498704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1952 12:34:56 die xxxi mensis xii annoque mcmlii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2434378 12 xii 12 12/31/1952 die xxxi mensis xii annoque mcmlii 52 lii 1952} +test clock-2.625 {conversion of 1953-01-01} { + clock format -536412304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1953 12:34:56 die i mensis i annoque mcmliii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2434379 01 i 1 01/01/1953 die i mensis i annoque mcmliii 53 liii 1953} +test clock-2.626 {conversion of 1953-01-31} { + clock format -533820304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1953 12:34:56 die xxxi mensis i annoque mcmliii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2434409 01 i 1 01/31/1953 die xxxi mensis i annoque mcmliii 53 liii 1953} +test clock-2.627 {conversion of 1953-02-01} { + clock format -533733904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1953 12:34:56 die i mensis ii annoque mcmliii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2434410 02 ii 2 02/01/1953 die i mensis ii annoque mcmliii 53 liii 1953} +test clock-2.628 {conversion of 1953-02-28} { + clock format -531401104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1953 12:34:56 die xxviii mensis ii annoque mcmliii xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2434437 02 ii 2 02/28/1953 die xxviii mensis ii annoque mcmliii 53 liii 1953} +test clock-2.629 {conversion of 1953-03-01} { + clock format -531314704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1953 12:34:56 die i mensis iii annoque mcmliii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2434438 03 iii 3 03/01/1953 die i mensis iii annoque mcmliii 53 liii 1953} +test clock-2.630 {conversion of 1953-03-31} { + clock format -528722704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1953 12:34:56 die xxxi mensis iii annoque mcmliii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2434468 03 iii 3 03/31/1953 die xxxi mensis iii annoque mcmliii 53 liii 1953} +test clock-2.631 {conversion of 1953-04-01} { + clock format -528636304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1953 12:34:56 die i mensis iv annoque mcmliii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2434469 04 iv 4 04/01/1953 die i mensis iv annoque mcmliii 53 liii 1953} +test clock-2.632 {conversion of 1953-04-30} { + clock format -526130704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1953 12:34:56 die xxx mensis iv annoque mcmliii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2434498 04 iv 4 04/30/1953 die xxx mensis iv annoque mcmliii 53 liii 1953} +test clock-2.633 {conversion of 1953-05-01} { + clock format -526044304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1953 12:34:56 die i mensis v annoque mcmliii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2434499 05 v 5 05/01/1953 die i mensis v annoque mcmliii 53 liii 1953} +test clock-2.634 {conversion of 1953-05-31} { + clock format -523452304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1953 12:34:56 die xxxi mensis v annoque mcmliii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2434529 05 v 5 05/31/1953 die xxxi mensis v annoque mcmliii 53 liii 1953} +test clock-2.635 {conversion of 1953-06-01} { + clock format -523365904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1953 12:34:56 die i mensis vi annoque mcmliii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2434530 06 vi 6 06/01/1953 die i mensis vi annoque mcmliii 53 liii 1953} +test clock-2.636 {conversion of 1953-06-30} { + clock format -520860304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1953 12:34:56 die xxx mensis vi annoque mcmliii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2434559 06 vi 6 06/30/1953 die xxx mensis vi annoque mcmliii 53 liii 1953} +test clock-2.637 {conversion of 1953-07-01} { + clock format -520773904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1953 12:34:56 die i mensis vii annoque mcmliii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2434560 07 vii 7 07/01/1953 die i mensis vii annoque mcmliii 53 liii 1953} +test clock-2.638 {conversion of 1953-07-31} { + clock format -518181904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1953 12:34:56 die xxxi mensis vii annoque mcmliii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2434590 07 vii 7 07/31/1953 die xxxi mensis vii annoque mcmliii 53 liii 1953} +test clock-2.639 {conversion of 1953-08-01} { + clock format -518095504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1953 12:34:56 die i mensis viii annoque mcmliii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2434591 08 viii 8 08/01/1953 die i mensis viii annoque mcmliii 53 liii 1953} +test clock-2.640 {conversion of 1953-08-31} { + clock format -515503504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1953 12:34:56 die xxxi mensis viii annoque mcmliii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2434621 08 viii 8 08/31/1953 die xxxi mensis viii annoque mcmliii 53 liii 1953} +test clock-2.641 {conversion of 1953-09-01} { + clock format -515417104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1953 12:34:56 die i mensis ix annoque mcmliii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2434622 09 ix 9 09/01/1953 die i mensis ix annoque mcmliii 53 liii 1953} +test clock-2.642 {conversion of 1953-09-30} { + clock format -512911504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1953 12:34:56 die xxx mensis ix annoque mcmliii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2434651 09 ix 9 09/30/1953 die xxx mensis ix annoque mcmliii 53 liii 1953} +test clock-2.643 {conversion of 1953-10-01} { + clock format -512825104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1953 12:34:56 die i mensis x annoque mcmliii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2434652 10 x 10 10/01/1953 die i mensis x annoque mcmliii 53 liii 1953} +test clock-2.644 {conversion of 1953-10-31} { + clock format -510233104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1953 12:34:56 die xxxi mensis x annoque mcmliii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2434682 10 x 10 10/31/1953 die xxxi mensis x annoque mcmliii 53 liii 1953} +test clock-2.645 {conversion of 1953-11-01} { + clock format -510146704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1953 12:34:56 die i mensis xi annoque mcmliii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2434683 11 xi 11 11/01/1953 die i mensis xi annoque mcmliii 53 liii 1953} +test clock-2.646 {conversion of 1953-11-30} { + clock format -507641104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1953 12:34:56 die xxx mensis xi annoque mcmliii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2434712 11 xi 11 11/30/1953 die xxx mensis xi annoque mcmliii 53 liii 1953} +test clock-2.647 {conversion of 1953-12-01} { + clock format -507554704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1953 12:34:56 die i mensis xii annoque mcmliii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2434713 12 xii 12 12/01/1953 die i mensis xii annoque mcmliii 53 liii 1953} +test clock-2.648 {conversion of 1953-12-31} { + clock format -504962704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1953 12:34:56 die xxxi mensis xii annoque mcmliii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2434743 12 xii 12 12/31/1953 die xxxi mensis xii annoque mcmliii 53 liii 1953} +test clock-2.649 {conversion of 1956-01-01} { + clock format -441804304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1956 12:34:56 die i mensis i annoque mcmlvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2435474 01 i 1 01/01/1956 die i mensis i annoque mcmlvi 56 lvi 1956} +test clock-2.650 {conversion of 1956-01-31} { + clock format -439212304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1956 12:34:56 die xxxi mensis i annoque mcmlvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2435504 01 i 1 01/31/1956 die xxxi mensis i annoque mcmlvi 56 lvi 1956} +test clock-2.651 {conversion of 1956-02-01} { + clock format -439125904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1956 12:34:56 die i mensis ii annoque mcmlvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2435505 02 ii 2 02/01/1956 die i mensis ii annoque mcmlvi 56 lvi 1956} +test clock-2.652 {conversion of 1956-02-29} { + clock format -436706704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1956 12:34:56 die xxix mensis ii annoque mcmlvi xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2435533 02 ii 2 02/29/1956 die xxix mensis ii annoque mcmlvi 56 lvi 1956} +test clock-2.653 {conversion of 1956-03-01} { + clock format -436620304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1956 12:34:56 die i mensis iii annoque mcmlvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2435534 03 iii 3 03/01/1956 die i mensis iii annoque mcmlvi 56 lvi 1956} +test clock-2.654 {conversion of 1956-03-31} { + clock format -434028304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1956 12:34:56 die xxxi mensis iii annoque mcmlvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2435564 03 iii 3 03/31/1956 die xxxi mensis iii annoque mcmlvi 56 lvi 1956} +test clock-2.655 {conversion of 1956-04-01} { + clock format -433941904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1956 12:34:56 die i mensis iv annoque mcmlvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2435565 04 iv 4 04/01/1956 die i mensis iv annoque mcmlvi 56 lvi 1956} +test clock-2.656 {conversion of 1956-04-30} { + clock format -431436304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1956 12:34:56 die xxx mensis iv annoque mcmlvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2435594 04 iv 4 04/30/1956 die xxx mensis iv annoque mcmlvi 56 lvi 1956} +test clock-2.657 {conversion of 1956-05-01} { + clock format -431349904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1956 12:34:56 die i mensis v annoque mcmlvi xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2435595 05 v 5 05/01/1956 die i mensis v annoque mcmlvi 56 lvi 1956} +test clock-2.658 {conversion of 1956-05-31} { + clock format -428757904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1956 12:34:56 die xxxi mensis v annoque mcmlvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2435625 05 v 5 05/31/1956 die xxxi mensis v annoque mcmlvi 56 lvi 1956} +test clock-2.659 {conversion of 1956-06-01} { + clock format -428671504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1956 12:34:56 die i mensis vi annoque mcmlvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2435626 06 vi 6 06/01/1956 die i mensis vi annoque mcmlvi 56 lvi 1956} +test clock-2.660 {conversion of 1956-06-30} { + clock format -426165904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1956 12:34:56 die xxx mensis vi annoque mcmlvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2435655 06 vi 6 06/30/1956 die xxx mensis vi annoque mcmlvi 56 lvi 1956} +test clock-2.661 {conversion of 1956-07-01} { + clock format -426079504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1956 12:34:56 die i mensis vii annoque mcmlvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2435656 07 vii 7 07/01/1956 die i mensis vii annoque mcmlvi 56 lvi 1956} +test clock-2.662 {conversion of 1956-07-31} { + clock format -423487504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1956 12:34:56 die xxxi mensis vii annoque mcmlvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2435686 07 vii 7 07/31/1956 die xxxi mensis vii annoque mcmlvi 56 lvi 1956} +test clock-2.663 {conversion of 1956-08-01} { + clock format -423401104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1956 12:34:56 die i mensis viii annoque mcmlvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2435687 08 viii 8 08/01/1956 die i mensis viii annoque mcmlvi 56 lvi 1956} +test clock-2.664 {conversion of 1956-08-31} { + clock format -420809104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1956 12:34:56 die xxxi mensis viii annoque mcmlvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2435717 08 viii 8 08/31/1956 die xxxi mensis viii annoque mcmlvi 56 lvi 1956} +test clock-2.665 {conversion of 1956-09-01} { + clock format -420722704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1956 12:34:56 die i mensis ix annoque mcmlvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2435718 09 ix 9 09/01/1956 die i mensis ix annoque mcmlvi 56 lvi 1956} +test clock-2.666 {conversion of 1956-09-30} { + clock format -418217104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1956 12:34:56 die xxx mensis ix annoque mcmlvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2435747 09 ix 9 09/30/1956 die xxx mensis ix annoque mcmlvi 56 lvi 1956} +test clock-2.667 {conversion of 1956-10-01} { + clock format -418130704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1956 12:34:56 die i mensis x annoque mcmlvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2435748 10 x 10 10/01/1956 die i mensis x annoque mcmlvi 56 lvi 1956} +test clock-2.668 {conversion of 1956-10-31} { + clock format -415538704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1956 12:34:56 die xxxi mensis x annoque mcmlvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2435778 10 x 10 10/31/1956 die xxxi mensis x annoque mcmlvi 56 lvi 1956} +test clock-2.669 {conversion of 1956-11-01} { + clock format -415452304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1956 12:34:56 die i mensis xi annoque mcmlvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2435779 11 xi 11 11/01/1956 die i mensis xi annoque mcmlvi 56 lvi 1956} +test clock-2.670 {conversion of 1956-11-30} { + clock format -412946704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1956 12:34:56 die xxx mensis xi annoque mcmlvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2435808 11 xi 11 11/30/1956 die xxx mensis xi annoque mcmlvi 56 lvi 1956} +test clock-2.671 {conversion of 1956-12-01} { + clock format -412860304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1956 12:34:56 die i mensis xii annoque mcmlvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2435809 12 xii 12 12/01/1956 die i mensis xii annoque mcmlvi 56 lvi 1956} +test clock-2.672 {conversion of 1956-12-31} { + clock format -410268304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1956 12:34:56 die xxxi mensis xii annoque mcmlvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2435839 12 xii 12 12/31/1956 die xxxi mensis xii annoque mcmlvi 56 lvi 1956} +test clock-2.673 {conversion of 1957-01-01} { + clock format -410181904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1957 12:34:56 die i mensis i annoque mcmlvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2435840 01 i 1 01/01/1957 die i mensis i annoque mcmlvii 57 lvii 1957} +test clock-2.674 {conversion of 1957-01-31} { + clock format -407589904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1957 12:34:56 die xxxi mensis i annoque mcmlvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2435870 01 i 1 01/31/1957 die xxxi mensis i annoque mcmlvii 57 lvii 1957} +test clock-2.675 {conversion of 1957-02-01} { + clock format -407503504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1957 12:34:56 die i mensis ii annoque mcmlvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2435871 02 ii 2 02/01/1957 die i mensis ii annoque mcmlvii 57 lvii 1957} +test clock-2.676 {conversion of 1957-02-28} { + clock format -405170704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1957 12:34:56 die xxviii mensis ii annoque mcmlvii xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2435898 02 ii 2 02/28/1957 die xxviii mensis ii annoque mcmlvii 57 lvii 1957} +test clock-2.677 {conversion of 1957-03-01} { + clock format -405084304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1957 12:34:56 die i mensis iii annoque mcmlvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2435899 03 iii 3 03/01/1957 die i mensis iii annoque mcmlvii 57 lvii 1957} +test clock-2.678 {conversion of 1957-03-31} { + clock format -402492304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1957 12:34:56 die xxxi mensis iii annoque mcmlvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2435929 03 iii 3 03/31/1957 die xxxi mensis iii annoque mcmlvii 57 lvii 1957} +test clock-2.679 {conversion of 1957-04-01} { + clock format -402405904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1957 12:34:56 die i mensis iv annoque mcmlvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2435930 04 iv 4 04/01/1957 die i mensis iv annoque mcmlvii 57 lvii 1957} +test clock-2.680 {conversion of 1957-04-30} { + clock format -399900304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1957 12:34:56 die xxx mensis iv annoque mcmlvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2435959 04 iv 4 04/30/1957 die xxx mensis iv annoque mcmlvii 57 lvii 1957} +test clock-2.681 {conversion of 1957-05-01} { + clock format -399813904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1957 12:34:56 die i mensis v annoque mcmlvii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2435960 05 v 5 05/01/1957 die i mensis v annoque mcmlvii 57 lvii 1957} +test clock-2.682 {conversion of 1957-05-31} { + clock format -397221904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1957 12:34:56 die xxxi mensis v annoque mcmlvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2435990 05 v 5 05/31/1957 die xxxi mensis v annoque mcmlvii 57 lvii 1957} +test clock-2.683 {conversion of 1957-06-01} { + clock format -397135504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1957 12:34:56 die i mensis vi annoque mcmlvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2435991 06 vi 6 06/01/1957 die i mensis vi annoque mcmlvii 57 lvii 1957} +test clock-2.684 {conversion of 1957-06-30} { + clock format -394629904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1957 12:34:56 die xxx mensis vi annoque mcmlvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2436020 06 vi 6 06/30/1957 die xxx mensis vi annoque mcmlvii 57 lvii 1957} +test clock-2.685 {conversion of 1957-07-01} { + clock format -394543504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1957 12:34:56 die i mensis vii annoque mcmlvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2436021 07 vii 7 07/01/1957 die i mensis vii annoque mcmlvii 57 lvii 1957} +test clock-2.686 {conversion of 1957-07-31} { + clock format -391951504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1957 12:34:56 die xxxi mensis vii annoque mcmlvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2436051 07 vii 7 07/31/1957 die xxxi mensis vii annoque mcmlvii 57 lvii 1957} +test clock-2.687 {conversion of 1957-08-01} { + clock format -391865104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1957 12:34:56 die i mensis viii annoque mcmlvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2436052 08 viii 8 08/01/1957 die i mensis viii annoque mcmlvii 57 lvii 1957} +test clock-2.688 {conversion of 1957-08-31} { + clock format -389273104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1957 12:34:56 die xxxi mensis viii annoque mcmlvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2436082 08 viii 8 08/31/1957 die xxxi mensis viii annoque mcmlvii 57 lvii 1957} +test clock-2.689 {conversion of 1957-09-01} { + clock format -389186704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1957 12:34:56 die i mensis ix annoque mcmlvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2436083 09 ix 9 09/01/1957 die i mensis ix annoque mcmlvii 57 lvii 1957} +test clock-2.690 {conversion of 1957-09-30} { + clock format -386681104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1957 12:34:56 die xxx mensis ix annoque mcmlvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2436112 09 ix 9 09/30/1957 die xxx mensis ix annoque mcmlvii 57 lvii 1957} +test clock-2.691 {conversion of 1957-10-01} { + clock format -386594704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1957 12:34:56 die i mensis x annoque mcmlvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2436113 10 x 10 10/01/1957 die i mensis x annoque mcmlvii 57 lvii 1957} +test clock-2.692 {conversion of 1957-10-31} { + clock format -384002704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1957 12:34:56 die xxxi mensis x annoque mcmlvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2436143 10 x 10 10/31/1957 die xxxi mensis x annoque mcmlvii 57 lvii 1957} +test clock-2.693 {conversion of 1957-11-01} { + clock format -383916304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1957 12:34:56 die i mensis xi annoque mcmlvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2436144 11 xi 11 11/01/1957 die i mensis xi annoque mcmlvii 57 lvii 1957} +test clock-2.694 {conversion of 1957-11-30} { + clock format -381410704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1957 12:34:56 die xxx mensis xi annoque mcmlvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2436173 11 xi 11 11/30/1957 die xxx mensis xi annoque mcmlvii 57 lvii 1957} +test clock-2.695 {conversion of 1957-12-01} { + clock format -381324304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1957 12:34:56 die i mensis xii annoque mcmlvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2436174 12 xii 12 12/01/1957 die i mensis xii annoque mcmlvii 57 lvii 1957} +test clock-2.696 {conversion of 1957-12-31} { + clock format -378732304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1957 12:34:56 die xxxi mensis xii annoque mcmlvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2436204 12 xii 12 12/31/1957 die xxxi mensis xii annoque mcmlvii 57 lvii 1957} +test clock-2.697 {conversion of 1959-01-01} { + clock format -347109904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1959 12:34:56 die i mensis i annoque mcmlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2436570 01 i 1 01/01/1959 die i mensis i annoque mcmlix 59 lix 1959} +test clock-2.698 {conversion of 1959-01-31} { + clock format -344517904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1959 12:34:56 die xxxi mensis i annoque mcmlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2436600 01 i 1 01/31/1959 die xxxi mensis i annoque mcmlix 59 lix 1959} +test clock-2.699 {conversion of 1959-02-01} { + clock format -344431504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1959 12:34:56 die i mensis ii annoque mcmlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2436601 02 ii 2 02/01/1959 die i mensis ii annoque mcmlix 59 lix 1959} +test clock-2.700 {conversion of 1959-02-28} { + clock format -342098704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1959 12:34:56 die xxviii mensis ii annoque mcmlix xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2436628 02 ii 2 02/28/1959 die xxviii mensis ii annoque mcmlix 59 lix 1959} +test clock-2.701 {conversion of 1959-03-01} { + clock format -342012304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1959 12:34:56 die i mensis iii annoque mcmlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2436629 03 iii 3 03/01/1959 die i mensis iii annoque mcmlix 59 lix 1959} +test clock-2.702 {conversion of 1959-03-31} { + clock format -339420304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1959 12:34:56 die xxxi mensis iii annoque mcmlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2436659 03 iii 3 03/31/1959 die xxxi mensis iii annoque mcmlix 59 lix 1959} +test clock-2.703 {conversion of 1959-04-01} { + clock format -339333904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1959 12:34:56 die i mensis iv annoque mcmlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2436660 04 iv 4 04/01/1959 die i mensis iv annoque mcmlix 59 lix 1959} +test clock-2.704 {conversion of 1959-04-30} { + clock format -336828304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1959 12:34:56 die xxx mensis iv annoque mcmlix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2436689 04 iv 4 04/30/1959 die xxx mensis iv annoque mcmlix 59 lix 1959} +test clock-2.705 {conversion of 1959-05-01} { + clock format -336741904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1959 12:34:56 die i mensis v annoque mcmlix xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2436690 05 v 5 05/01/1959 die i mensis v annoque mcmlix 59 lix 1959} +test clock-2.706 {conversion of 1959-05-31} { + clock format -334149904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1959 12:34:56 die xxxi mensis v annoque mcmlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2436720 05 v 5 05/31/1959 die xxxi mensis v annoque mcmlix 59 lix 1959} +test clock-2.707 {conversion of 1959-06-01} { + clock format -334063504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1959 12:34:56 die i mensis vi annoque mcmlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2436721 06 vi 6 06/01/1959 die i mensis vi annoque mcmlix 59 lix 1959} +test clock-2.708 {conversion of 1959-06-30} { + clock format -331557904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1959 12:34:56 die xxx mensis vi annoque mcmlix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2436750 06 vi 6 06/30/1959 die xxx mensis vi annoque mcmlix 59 lix 1959} +test clock-2.709 {conversion of 1959-07-01} { + clock format -331471504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1959 12:34:56 die i mensis vii annoque mcmlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2436751 07 vii 7 07/01/1959 die i mensis vii annoque mcmlix 59 lix 1959} +test clock-2.710 {conversion of 1959-07-31} { + clock format -328879504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1959 12:34:56 die xxxi mensis vii annoque mcmlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2436781 07 vii 7 07/31/1959 die xxxi mensis vii annoque mcmlix 59 lix 1959} +test clock-2.711 {conversion of 1959-08-01} { + clock format -328793104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1959 12:34:56 die i mensis viii annoque mcmlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2436782 08 viii 8 08/01/1959 die i mensis viii annoque mcmlix 59 lix 1959} +test clock-2.712 {conversion of 1959-08-31} { + clock format -326201104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1959 12:34:56 die xxxi mensis viii annoque mcmlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2436812 08 viii 8 08/31/1959 die xxxi mensis viii annoque mcmlix 59 lix 1959} +test clock-2.713 {conversion of 1959-09-01} { + clock format -326114704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1959 12:34:56 die i mensis ix annoque mcmlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2436813 09 ix 9 09/01/1959 die i mensis ix annoque mcmlix 59 lix 1959} +test clock-2.714 {conversion of 1959-09-30} { + clock format -323609104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1959 12:34:56 die xxx mensis ix annoque mcmlix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2436842 09 ix 9 09/30/1959 die xxx mensis ix annoque mcmlix 59 lix 1959} +test clock-2.715 {conversion of 1959-10-01} { + clock format -323522704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1959 12:34:56 die i mensis x annoque mcmlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2436843 10 x 10 10/01/1959 die i mensis x annoque mcmlix 59 lix 1959} +test clock-2.716 {conversion of 1959-10-31} { + clock format -320930704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1959 12:34:56 die xxxi mensis x annoque mcmlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2436873 10 x 10 10/31/1959 die xxxi mensis x annoque mcmlix 59 lix 1959} +test clock-2.717 {conversion of 1959-11-01} { + clock format -320844304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1959 12:34:56 die i mensis xi annoque mcmlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2436874 11 xi 11 11/01/1959 die i mensis xi annoque mcmlix 59 lix 1959} +test clock-2.718 {conversion of 1959-11-30} { + clock format -318338704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1959 12:34:56 die xxx mensis xi annoque mcmlix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2436903 11 xi 11 11/30/1959 die xxx mensis xi annoque mcmlix 59 lix 1959} +test clock-2.719 {conversion of 1959-12-01} { + clock format -318252304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1959 12:34:56 die i mensis xii annoque mcmlix xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2436904 12 xii 12 12/01/1959 die i mensis xii annoque mcmlix 59 lix 1959} +test clock-2.720 {conversion of 1959-12-31} { + clock format -315660304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1959 12:34:56 die xxxi mensis xii annoque mcmlix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2436934 12 xii 12 12/31/1959 die xxxi mensis xii annoque mcmlix 59 lix 1959} +test clock-2.721 {conversion of 1960-01-01} { + clock format -315573904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1960 12:34:56 die i mensis i annoque mcmlx xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2436935 01 i 1 01/01/1960 die i mensis i annoque mcmlx 60 lx 1960} +test clock-2.722 {conversion of 1960-01-31} { + clock format -312981904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1960 12:34:56 die xxxi mensis i annoque mcmlx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2436965 01 i 1 01/31/1960 die xxxi mensis i annoque mcmlx 60 lx 1960} +test clock-2.723 {conversion of 1960-02-01} { + clock format -312895504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1960 12:34:56 die i mensis ii annoque mcmlx xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2436966 02 ii 2 02/01/1960 die i mensis ii annoque mcmlx 60 lx 1960} +test clock-2.724 {conversion of 1960-02-29} { + clock format -310476304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1960 12:34:56 die xxix mensis ii annoque mcmlx xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2436994 02 ii 2 02/29/1960 die xxix mensis ii annoque mcmlx 60 lx 1960} +test clock-2.725 {conversion of 1960-03-01} { + clock format -310389904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1960 12:34:56 die i mensis iii annoque mcmlx xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2436995 03 iii 3 03/01/1960 die i mensis iii annoque mcmlx 60 lx 1960} +test clock-2.726 {conversion of 1960-03-31} { + clock format -307797904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1960 12:34:56 die xxxi mensis iii annoque mcmlx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2437025 03 iii 3 03/31/1960 die xxxi mensis iii annoque mcmlx 60 lx 1960} +test clock-2.727 {conversion of 1960-04-01} { + clock format -307711504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1960 12:34:56 die i mensis iv annoque mcmlx xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2437026 04 iv 4 04/01/1960 die i mensis iv annoque mcmlx 60 lx 1960} +test clock-2.728 {conversion of 1960-04-30} { + clock format -305205904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1960 12:34:56 die xxx mensis iv annoque mcmlx xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2437055 04 iv 4 04/30/1960 die xxx mensis iv annoque mcmlx 60 lx 1960} +test clock-2.729 {conversion of 1960-05-01} { + clock format -305119504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1960 12:34:56 die i mensis v annoque mcmlx xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2437056 05 v 5 05/01/1960 die i mensis v annoque mcmlx 60 lx 1960} +test clock-2.730 {conversion of 1960-05-31} { + clock format -302527504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1960 12:34:56 die xxxi mensis v annoque mcmlx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2437086 05 v 5 05/31/1960 die xxxi mensis v annoque mcmlx 60 lx 1960} +test clock-2.731 {conversion of 1960-06-01} { + clock format -302441104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1960 12:34:56 die i mensis vi annoque mcmlx xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2437087 06 vi 6 06/01/1960 die i mensis vi annoque mcmlx 60 lx 1960} +test clock-2.732 {conversion of 1960-06-30} { + clock format -299935504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1960 12:34:56 die xxx mensis vi annoque mcmlx xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2437116 06 vi 6 06/30/1960 die xxx mensis vi annoque mcmlx 60 lx 1960} +test clock-2.733 {conversion of 1960-07-01} { + clock format -299849104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1960 12:34:56 die i mensis vii annoque mcmlx xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2437117 07 vii 7 07/01/1960 die i mensis vii annoque mcmlx 60 lx 1960} +test clock-2.734 {conversion of 1960-07-31} { + clock format -297257104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1960 12:34:56 die xxxi mensis vii annoque mcmlx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2437147 07 vii 7 07/31/1960 die xxxi mensis vii annoque mcmlx 60 lx 1960} +test clock-2.735 {conversion of 1960-08-01} { + clock format -297170704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1960 12:34:56 die i mensis viii annoque mcmlx xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2437148 08 viii 8 08/01/1960 die i mensis viii annoque mcmlx 60 lx 1960} +test clock-2.736 {conversion of 1960-08-31} { + clock format -294578704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1960 12:34:56 die xxxi mensis viii annoque mcmlx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2437178 08 viii 8 08/31/1960 die xxxi mensis viii annoque mcmlx 60 lx 1960} +test clock-2.737 {conversion of 1960-09-01} { + clock format -294492304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1960 12:34:56 die i mensis ix annoque mcmlx xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2437179 09 ix 9 09/01/1960 die i mensis ix annoque mcmlx 60 lx 1960} +test clock-2.738 {conversion of 1960-09-30} { + clock format -291986704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1960 12:34:56 die xxx mensis ix annoque mcmlx xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2437208 09 ix 9 09/30/1960 die xxx mensis ix annoque mcmlx 60 lx 1960} +test clock-2.739 {conversion of 1960-10-01} { + clock format -291900304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1960 12:34:56 die i mensis x annoque mcmlx xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2437209 10 x 10 10/01/1960 die i mensis x annoque mcmlx 60 lx 1960} +test clock-2.740 {conversion of 1960-10-31} { + clock format -289308304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1960 12:34:56 die xxxi mensis x annoque mcmlx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2437239 10 x 10 10/31/1960 die xxxi mensis x annoque mcmlx 60 lx 1960} +test clock-2.741 {conversion of 1960-11-01} { + clock format -289221904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1960 12:34:56 die i mensis xi annoque mcmlx xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2437240 11 xi 11 11/01/1960 die i mensis xi annoque mcmlx 60 lx 1960} +test clock-2.742 {conversion of 1960-11-30} { + clock format -286716304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1960 12:34:56 die xxx mensis xi annoque mcmlx xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2437269 11 xi 11 11/30/1960 die xxx mensis xi annoque mcmlx 60 lx 1960} +test clock-2.743 {conversion of 1960-12-01} { + clock format -286629904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1960 12:34:56 die i mensis xii annoque mcmlx xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2437270 12 xii 12 12/01/1960 die i mensis xii annoque mcmlx 60 lx 1960} +test clock-2.744 {conversion of 1960-12-31} { + clock format -284037904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1960 12:34:56 die xxxi mensis xii annoque mcmlx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2437300 12 xii 12 12/31/1960 die xxxi mensis xii annoque mcmlx 60 lx 1960} +test clock-2.745 {conversion of 1961-01-01} { + clock format -283951504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1961 12:34:56 die i mensis i annoque mcmlxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2437301 01 i 1 01/01/1961 die i mensis i annoque mcmlxi 61 lxi 1961} +test clock-2.746 {conversion of 1961-01-31} { + clock format -281359504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1961 12:34:56 die xxxi mensis i annoque mcmlxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2437331 01 i 1 01/31/1961 die xxxi mensis i annoque mcmlxi 61 lxi 1961} +test clock-2.747 {conversion of 1961-02-01} { + clock format -281273104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1961 12:34:56 die i mensis ii annoque mcmlxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2437332 02 ii 2 02/01/1961 die i mensis ii annoque mcmlxi 61 lxi 1961} +test clock-2.748 {conversion of 1961-02-28} { + clock format -278940304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1961 12:34:56 die xxviii mensis ii annoque mcmlxi xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2437359 02 ii 2 02/28/1961 die xxviii mensis ii annoque mcmlxi 61 lxi 1961} +test clock-2.749 {conversion of 1961-03-01} { + clock format -278853904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1961 12:34:56 die i mensis iii annoque mcmlxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2437360 03 iii 3 03/01/1961 die i mensis iii annoque mcmlxi 61 lxi 1961} +test clock-2.750 {conversion of 1961-03-31} { + clock format -276261904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1961 12:34:56 die xxxi mensis iii annoque mcmlxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2437390 03 iii 3 03/31/1961 die xxxi mensis iii annoque mcmlxi 61 lxi 1961} +test clock-2.751 {conversion of 1961-04-01} { + clock format -276175504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1961 12:34:56 die i mensis iv annoque mcmlxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2437391 04 iv 4 04/01/1961 die i mensis iv annoque mcmlxi 61 lxi 1961} +test clock-2.752 {conversion of 1961-04-30} { + clock format -273669904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1961 12:34:56 die xxx mensis iv annoque mcmlxi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2437420 04 iv 4 04/30/1961 die xxx mensis iv annoque mcmlxi 61 lxi 1961} +test clock-2.753 {conversion of 1961-05-01} { + clock format -273583504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1961 12:34:56 die i mensis v annoque mcmlxi xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2437421 05 v 5 05/01/1961 die i mensis v annoque mcmlxi 61 lxi 1961} +test clock-2.754 {conversion of 1961-05-31} { + clock format -270991504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1961 12:34:56 die xxxi mensis v annoque mcmlxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2437451 05 v 5 05/31/1961 die xxxi mensis v annoque mcmlxi 61 lxi 1961} +test clock-2.755 {conversion of 1961-06-01} { + clock format -270905104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1961 12:34:56 die i mensis vi annoque mcmlxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2437452 06 vi 6 06/01/1961 die i mensis vi annoque mcmlxi 61 lxi 1961} +test clock-2.756 {conversion of 1961-06-30} { + clock format -268399504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1961 12:34:56 die xxx mensis vi annoque mcmlxi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2437481 06 vi 6 06/30/1961 die xxx mensis vi annoque mcmlxi 61 lxi 1961} +test clock-2.757 {conversion of 1961-07-01} { + clock format -268313104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1961 12:34:56 die i mensis vii annoque mcmlxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2437482 07 vii 7 07/01/1961 die i mensis vii annoque mcmlxi 61 lxi 1961} +test clock-2.758 {conversion of 1961-07-31} { + clock format -265721104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1961 12:34:56 die xxxi mensis vii annoque mcmlxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2437512 07 vii 7 07/31/1961 die xxxi mensis vii annoque mcmlxi 61 lxi 1961} +test clock-2.759 {conversion of 1961-08-01} { + clock format -265634704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1961 12:34:56 die i mensis viii annoque mcmlxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2437513 08 viii 8 08/01/1961 die i mensis viii annoque mcmlxi 61 lxi 1961} +test clock-2.760 {conversion of 1961-08-31} { + clock format -263042704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1961 12:34:56 die xxxi mensis viii annoque mcmlxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2437543 08 viii 8 08/31/1961 die xxxi mensis viii annoque mcmlxi 61 lxi 1961} +test clock-2.761 {conversion of 1961-09-01} { + clock format -262956304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1961 12:34:56 die i mensis ix annoque mcmlxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2437544 09 ix 9 09/01/1961 die i mensis ix annoque mcmlxi 61 lxi 1961} +test clock-2.762 {conversion of 1961-09-30} { + clock format -260450704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1961 12:34:56 die xxx mensis ix annoque mcmlxi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2437573 09 ix 9 09/30/1961 die xxx mensis ix annoque mcmlxi 61 lxi 1961} +test clock-2.763 {conversion of 1961-10-01} { + clock format -260364304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1961 12:34:56 die i mensis x annoque mcmlxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2437574 10 x 10 10/01/1961 die i mensis x annoque mcmlxi 61 lxi 1961} +test clock-2.764 {conversion of 1961-10-31} { + clock format -257772304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1961 12:34:56 die xxxi mensis x annoque mcmlxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2437604 10 x 10 10/31/1961 die xxxi mensis x annoque mcmlxi 61 lxi 1961} +test clock-2.765 {conversion of 1961-11-01} { + clock format -257685904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1961 12:34:56 die i mensis xi annoque mcmlxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2437605 11 xi 11 11/01/1961 die i mensis xi annoque mcmlxi 61 lxi 1961} +test clock-2.766 {conversion of 1961-11-30} { + clock format -255180304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1961 12:34:56 die xxx mensis xi annoque mcmlxi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2437634 11 xi 11 11/30/1961 die xxx mensis xi annoque mcmlxi 61 lxi 1961} +test clock-2.767 {conversion of 1961-12-01} { + clock format -255093904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1961 12:34:56 die i mensis xii annoque mcmlxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2437635 12 xii 12 12/01/1961 die i mensis xii annoque mcmlxi 61 lxi 1961} +test clock-2.768 {conversion of 1961-12-31} { + clock format -252501904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1961 12:34:56 die xxxi mensis xii annoque mcmlxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2437665 12 xii 12 12/31/1961 die xxxi mensis xii annoque mcmlxi 61 lxi 1961} +test clock-2.769 {conversion of 1962-01-01} { + clock format -252415504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1962 12:34:56 die i mensis i annoque mcmlxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2437666 01 i 1 01/01/1962 die i mensis i annoque mcmlxii 62 lxii 1962} +test clock-2.770 {conversion of 1962-01-31} { + clock format -249823504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1962 12:34:56 die xxxi mensis i annoque mcmlxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2437696 01 i 1 01/31/1962 die xxxi mensis i annoque mcmlxii 62 lxii 1962} +test clock-2.771 {conversion of 1962-02-01} { + clock format -249737104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1962 12:34:56 die i mensis ii annoque mcmlxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2437697 02 ii 2 02/01/1962 die i mensis ii annoque mcmlxii 62 lxii 1962} +test clock-2.772 {conversion of 1962-02-28} { + clock format -247404304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1962 12:34:56 die xxviii mensis ii annoque mcmlxii xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2437724 02 ii 2 02/28/1962 die xxviii mensis ii annoque mcmlxii 62 lxii 1962} +test clock-2.773 {conversion of 1962-03-01} { + clock format -247317904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1962 12:34:56 die i mensis iii annoque mcmlxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2437725 03 iii 3 03/01/1962 die i mensis iii annoque mcmlxii 62 lxii 1962} +test clock-2.774 {conversion of 1962-03-31} { + clock format -244725904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1962 12:34:56 die xxxi mensis iii annoque mcmlxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2437755 03 iii 3 03/31/1962 die xxxi mensis iii annoque mcmlxii 62 lxii 1962} +test clock-2.775 {conversion of 1962-04-01} { + clock format -244639504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1962 12:34:56 die i mensis iv annoque mcmlxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2437756 04 iv 4 04/01/1962 die i mensis iv annoque mcmlxii 62 lxii 1962} +test clock-2.776 {conversion of 1962-04-30} { + clock format -242133904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1962 12:34:56 die xxx mensis iv annoque mcmlxii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2437785 04 iv 4 04/30/1962 die xxx mensis iv annoque mcmlxii 62 lxii 1962} +test clock-2.777 {conversion of 1962-05-01} { + clock format -242047504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1962 12:34:56 die i mensis v annoque mcmlxii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2437786 05 v 5 05/01/1962 die i mensis v annoque mcmlxii 62 lxii 1962} +test clock-2.778 {conversion of 1962-05-31} { + clock format -239455504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1962 12:34:56 die xxxi mensis v annoque mcmlxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2437816 05 v 5 05/31/1962 die xxxi mensis v annoque mcmlxii 62 lxii 1962} +test clock-2.779 {conversion of 1962-06-01} { + clock format -239369104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1962 12:34:56 die i mensis vi annoque mcmlxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2437817 06 vi 6 06/01/1962 die i mensis vi annoque mcmlxii 62 lxii 1962} +test clock-2.780 {conversion of 1962-06-30} { + clock format -236863504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1962 12:34:56 die xxx mensis vi annoque mcmlxii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2437846 06 vi 6 06/30/1962 die xxx mensis vi annoque mcmlxii 62 lxii 1962} +test clock-2.781 {conversion of 1962-07-01} { + clock format -236777104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1962 12:34:56 die i mensis vii annoque mcmlxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2437847 07 vii 7 07/01/1962 die i mensis vii annoque mcmlxii 62 lxii 1962} +test clock-2.782 {conversion of 1962-07-31} { + clock format -234185104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1962 12:34:56 die xxxi mensis vii annoque mcmlxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2437877 07 vii 7 07/31/1962 die xxxi mensis vii annoque mcmlxii 62 lxii 1962} +test clock-2.783 {conversion of 1962-08-01} { + clock format -234098704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1962 12:34:56 die i mensis viii annoque mcmlxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2437878 08 viii 8 08/01/1962 die i mensis viii annoque mcmlxii 62 lxii 1962} +test clock-2.784 {conversion of 1962-08-31} { + clock format -231506704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1962 12:34:56 die xxxi mensis viii annoque mcmlxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2437908 08 viii 8 08/31/1962 die xxxi mensis viii annoque mcmlxii 62 lxii 1962} +test clock-2.785 {conversion of 1962-09-01} { + clock format -231420304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1962 12:34:56 die i mensis ix annoque mcmlxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2437909 09 ix 9 09/01/1962 die i mensis ix annoque mcmlxii 62 lxii 1962} +test clock-2.786 {conversion of 1962-09-30} { + clock format -228914704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1962 12:34:56 die xxx mensis ix annoque mcmlxii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2437938 09 ix 9 09/30/1962 die xxx mensis ix annoque mcmlxii 62 lxii 1962} +test clock-2.787 {conversion of 1962-10-01} { + clock format -228828304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1962 12:34:56 die i mensis x annoque mcmlxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2437939 10 x 10 10/01/1962 die i mensis x annoque mcmlxii 62 lxii 1962} +test clock-2.788 {conversion of 1962-10-31} { + clock format -226236304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1962 12:34:56 die xxxi mensis x annoque mcmlxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2437969 10 x 10 10/31/1962 die xxxi mensis x annoque mcmlxii 62 lxii 1962} +test clock-2.789 {conversion of 1962-11-01} { + clock format -226149904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1962 12:34:56 die i mensis xi annoque mcmlxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2437970 11 xi 11 11/01/1962 die i mensis xi annoque mcmlxii 62 lxii 1962} +test clock-2.790 {conversion of 1962-11-30} { + clock format -223644304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1962 12:34:56 die xxx mensis xi annoque mcmlxii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2437999 11 xi 11 11/30/1962 die xxx mensis xi annoque mcmlxii 62 lxii 1962} +test clock-2.791 {conversion of 1962-12-01} { + clock format -223557904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1962 12:34:56 die i mensis xii annoque mcmlxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2438000 12 xii 12 12/01/1962 die i mensis xii annoque mcmlxii 62 lxii 1962} +test clock-2.792 {conversion of 1962-12-31} { + clock format -220965904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1962 12:34:56 die xxxi mensis xii annoque mcmlxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2438030 12 xii 12 12/31/1962 die xxxi mensis xii annoque mcmlxii 62 lxii 1962} +test clock-2.793 {conversion of 1963-01-01} { + clock format -220879504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1963 12:34:56 die i mensis i annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2438031 01 i 1 01/01/1963 die i mensis i annoque mcmlxiii 63 lxiii 1963} +test clock-2.794 {conversion of 1963-01-31} { + clock format -218287504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1963 12:34:56 die xxxi mensis i annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2438061 01 i 1 01/31/1963 die xxxi mensis i annoque mcmlxiii 63 lxiii 1963} +test clock-2.795 {conversion of 1963-02-01} { + clock format -218201104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1963 12:34:56 die i mensis ii annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2438062 02 ii 2 02/01/1963 die i mensis ii annoque mcmlxiii 63 lxiii 1963} +test clock-2.796 {conversion of 1963-02-28} { + clock format -215868304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1963 12:34:56 die xxviii mensis ii annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2438089 02 ii 2 02/28/1963 die xxviii mensis ii annoque mcmlxiii 63 lxiii 1963} +test clock-2.797 {conversion of 1963-03-01} { + clock format -215781904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1963 12:34:56 die i mensis iii annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2438090 03 iii 3 03/01/1963 die i mensis iii annoque mcmlxiii 63 lxiii 1963} +test clock-2.798 {conversion of 1963-03-31} { + clock format -213189904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1963 12:34:56 die xxxi mensis iii annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2438120 03 iii 3 03/31/1963 die xxxi mensis iii annoque mcmlxiii 63 lxiii 1963} +test clock-2.799 {conversion of 1963-04-01} { + clock format -213103504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1963 12:34:56 die i mensis iv annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2438121 04 iv 4 04/01/1963 die i mensis iv annoque mcmlxiii 63 lxiii 1963} +test clock-2.800 {conversion of 1963-04-30} { + clock format -210597904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1963 12:34:56 die xxx mensis iv annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2438150 04 iv 4 04/30/1963 die xxx mensis iv annoque mcmlxiii 63 lxiii 1963} +test clock-2.801 {conversion of 1963-05-01} { + clock format -210511504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1963 12:34:56 die i mensis v annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2438151 05 v 5 05/01/1963 die i mensis v annoque mcmlxiii 63 lxiii 1963} +test clock-2.802 {conversion of 1963-05-31} { + clock format -207919504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1963 12:34:56 die xxxi mensis v annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2438181 05 v 5 05/31/1963 die xxxi mensis v annoque mcmlxiii 63 lxiii 1963} +test clock-2.803 {conversion of 1963-06-01} { + clock format -207833104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1963 12:34:56 die i mensis vi annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2438182 06 vi 6 06/01/1963 die i mensis vi annoque mcmlxiii 63 lxiii 1963} +test clock-2.804 {conversion of 1963-06-30} { + clock format -205327504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1963 12:34:56 die xxx mensis vi annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2438211 06 vi 6 06/30/1963 die xxx mensis vi annoque mcmlxiii 63 lxiii 1963} +test clock-2.805 {conversion of 1963-07-01} { + clock format -205241104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1963 12:34:56 die i mensis vii annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2438212 07 vii 7 07/01/1963 die i mensis vii annoque mcmlxiii 63 lxiii 1963} +test clock-2.806 {conversion of 1963-07-31} { + clock format -202649104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1963 12:34:56 die xxxi mensis vii annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2438242 07 vii 7 07/31/1963 die xxxi mensis vii annoque mcmlxiii 63 lxiii 1963} +test clock-2.807 {conversion of 1963-08-01} { + clock format -202562704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1963 12:34:56 die i mensis viii annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2438243 08 viii 8 08/01/1963 die i mensis viii annoque mcmlxiii 63 lxiii 1963} +test clock-2.808 {conversion of 1963-08-31} { + clock format -199970704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1963 12:34:56 die xxxi mensis viii annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2438273 08 viii 8 08/31/1963 die xxxi mensis viii annoque mcmlxiii 63 lxiii 1963} +test clock-2.809 {conversion of 1963-09-01} { + clock format -199884304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1963 12:34:56 die i mensis ix annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2438274 09 ix 9 09/01/1963 die i mensis ix annoque mcmlxiii 63 lxiii 1963} +test clock-2.810 {conversion of 1963-09-30} { + clock format -197378704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1963 12:34:56 die xxx mensis ix annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2438303 09 ix 9 09/30/1963 die xxx mensis ix annoque mcmlxiii 63 lxiii 1963} +test clock-2.811 {conversion of 1963-10-01} { + clock format -197292304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1963 12:34:56 die i mensis x annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2438304 10 x 10 10/01/1963 die i mensis x annoque mcmlxiii 63 lxiii 1963} +test clock-2.812 {conversion of 1963-10-31} { + clock format -194700304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1963 12:34:56 die xxxi mensis x annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2438334 10 x 10 10/31/1963 die xxxi mensis x annoque mcmlxiii 63 lxiii 1963} +test clock-2.813 {conversion of 1963-11-01} { + clock format -194613904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1963 12:34:56 die i mensis xi annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2438335 11 xi 11 11/01/1963 die i mensis xi annoque mcmlxiii 63 lxiii 1963} +test clock-2.814 {conversion of 1963-11-30} { + clock format -192108304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1963 12:34:56 die xxx mensis xi annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2438364 11 xi 11 11/30/1963 die xxx mensis xi annoque mcmlxiii 63 lxiii 1963} +test clock-2.815 {conversion of 1963-12-01} { + clock format -192021904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1963 12:34:56 die i mensis xii annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2438365 12 xii 12 12/01/1963 die i mensis xii annoque mcmlxiii 63 lxiii 1963} +test clock-2.816 {conversion of 1963-12-31} { + clock format -189429904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1963 12:34:56 die xxxi mensis xii annoque mcmlxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2438395 12 xii 12 12/31/1963 die xxxi mensis xii annoque mcmlxiii 63 lxiii 1963} +test clock-2.817 {conversion of 1964-01-01} { + clock format -189343504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1964 12:34:56 die i mensis i annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2438396 01 i 1 01/01/1964 die i mensis i annoque mcmlxiv 64 lxiv 1964} +test clock-2.818 {conversion of 1964-01-31} { + clock format -186751504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1964 12:34:56 die xxxi mensis i annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2438426 01 i 1 01/31/1964 die xxxi mensis i annoque mcmlxiv 64 lxiv 1964} +test clock-2.819 {conversion of 1964-02-01} { + clock format -186665104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1964 12:34:56 die i mensis ii annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2438427 02 ii 2 02/01/1964 die i mensis ii annoque mcmlxiv 64 lxiv 1964} +test clock-2.820 {conversion of 1964-02-29} { + clock format -184245904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1964 12:34:56 die xxix mensis ii annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2438455 02 ii 2 02/29/1964 die xxix mensis ii annoque mcmlxiv 64 lxiv 1964} +test clock-2.821 {conversion of 1964-03-01} { + clock format -184159504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1964 12:34:56 die i mensis iii annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2438456 03 iii 3 03/01/1964 die i mensis iii annoque mcmlxiv 64 lxiv 1964} +test clock-2.822 {conversion of 1964-03-31} { + clock format -181567504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1964 12:34:56 die xxxi mensis iii annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2438486 03 iii 3 03/31/1964 die xxxi mensis iii annoque mcmlxiv 64 lxiv 1964} +test clock-2.823 {conversion of 1964-04-01} { + clock format -181481104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1964 12:34:56 die i mensis iv annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2438487 04 iv 4 04/01/1964 die i mensis iv annoque mcmlxiv 64 lxiv 1964} +test clock-2.824 {conversion of 1964-04-30} { + clock format -178975504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1964 12:34:56 die xxx mensis iv annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2438516 04 iv 4 04/30/1964 die xxx mensis iv annoque mcmlxiv 64 lxiv 1964} +test clock-2.825 {conversion of 1964-05-01} { + clock format -178889104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1964 12:34:56 die i mensis v annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2438517 05 v 5 05/01/1964 die i mensis v annoque mcmlxiv 64 lxiv 1964} +test clock-2.826 {conversion of 1964-05-31} { + clock format -176297104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1964 12:34:56 die xxxi mensis v annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2438547 05 v 5 05/31/1964 die xxxi mensis v annoque mcmlxiv 64 lxiv 1964} +test clock-2.827 {conversion of 1964-06-01} { + clock format -176210704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1964 12:34:56 die i mensis vi annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2438548 06 vi 6 06/01/1964 die i mensis vi annoque mcmlxiv 64 lxiv 1964} +test clock-2.828 {conversion of 1964-06-30} { + clock format -173705104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1964 12:34:56 die xxx mensis vi annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2438577 06 vi 6 06/30/1964 die xxx mensis vi annoque mcmlxiv 64 lxiv 1964} +test clock-2.829 {conversion of 1964-07-01} { + clock format -173618704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1964 12:34:56 die i mensis vii annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2438578 07 vii 7 07/01/1964 die i mensis vii annoque mcmlxiv 64 lxiv 1964} +test clock-2.830 {conversion of 1964-07-31} { + clock format -171026704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1964 12:34:56 die xxxi mensis vii annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2438608 07 vii 7 07/31/1964 die xxxi mensis vii annoque mcmlxiv 64 lxiv 1964} +test clock-2.831 {conversion of 1964-08-01} { + clock format -170940304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1964 12:34:56 die i mensis viii annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2438609 08 viii 8 08/01/1964 die i mensis viii annoque mcmlxiv 64 lxiv 1964} +test clock-2.832 {conversion of 1964-08-31} { + clock format -168348304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1964 12:34:56 die xxxi mensis viii annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2438639 08 viii 8 08/31/1964 die xxxi mensis viii annoque mcmlxiv 64 lxiv 1964} +test clock-2.833 {conversion of 1964-09-01} { + clock format -168261904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1964 12:34:56 die i mensis ix annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2438640 09 ix 9 09/01/1964 die i mensis ix annoque mcmlxiv 64 lxiv 1964} +test clock-2.834 {conversion of 1964-09-30} { + clock format -165756304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1964 12:34:56 die xxx mensis ix annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2438669 09 ix 9 09/30/1964 die xxx mensis ix annoque mcmlxiv 64 lxiv 1964} +test clock-2.835 {conversion of 1964-10-01} { + clock format -165669904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1964 12:34:56 die i mensis x annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2438670 10 x 10 10/01/1964 die i mensis x annoque mcmlxiv 64 lxiv 1964} +test clock-2.836 {conversion of 1964-10-31} { + clock format -163077904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1964 12:34:56 die xxxi mensis x annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2438700 10 x 10 10/31/1964 die xxxi mensis x annoque mcmlxiv 64 lxiv 1964} +test clock-2.837 {conversion of 1964-11-01} { + clock format -162991504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1964 12:34:56 die i mensis xi annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2438701 11 xi 11 11/01/1964 die i mensis xi annoque mcmlxiv 64 lxiv 1964} +test clock-2.838 {conversion of 1964-11-30} { + clock format -160485904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1964 12:34:56 die xxx mensis xi annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2438730 11 xi 11 11/30/1964 die xxx mensis xi annoque mcmlxiv 64 lxiv 1964} +test clock-2.839 {conversion of 1964-12-01} { + clock format -160399504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1964 12:34:56 die i mensis xii annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2438731 12 xii 12 12/01/1964 die i mensis xii annoque mcmlxiv 64 lxiv 1964} +test clock-2.840 {conversion of 1964-12-31} { + clock format -157807504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1964 12:34:56 die xxxi mensis xii annoque mcmlxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2438761 12 xii 12 12/31/1964 die xxxi mensis xii annoque mcmlxiv 64 lxiv 1964} +test clock-2.841 {conversion of 1965-01-01} { + clock format -157721104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1965 12:34:56 die i mensis i annoque mcmlxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2438762 01 i 1 01/01/1965 die i mensis i annoque mcmlxv 65 lxv 1965} +test clock-2.842 {conversion of 1965-01-31} { + clock format -155129104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1965 12:34:56 die xxxi mensis i annoque mcmlxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2438792 01 i 1 01/31/1965 die xxxi mensis i annoque mcmlxv 65 lxv 1965} +test clock-2.843 {conversion of 1965-02-01} { + clock format -155042704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1965 12:34:56 die i mensis ii annoque mcmlxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2438793 02 ii 2 02/01/1965 die i mensis ii annoque mcmlxv 65 lxv 1965} +test clock-2.844 {conversion of 1965-02-28} { + clock format -152709904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1965 12:34:56 die xxviii mensis ii annoque mcmlxv xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2438820 02 ii 2 02/28/1965 die xxviii mensis ii annoque mcmlxv 65 lxv 1965} +test clock-2.845 {conversion of 1965-03-01} { + clock format -152623504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1965 12:34:56 die i mensis iii annoque mcmlxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2438821 03 iii 3 03/01/1965 die i mensis iii annoque mcmlxv 65 lxv 1965} +test clock-2.846 {conversion of 1965-03-31} { + clock format -150031504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1965 12:34:56 die xxxi mensis iii annoque mcmlxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2438851 03 iii 3 03/31/1965 die xxxi mensis iii annoque mcmlxv 65 lxv 1965} +test clock-2.847 {conversion of 1965-04-01} { + clock format -149945104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1965 12:34:56 die i mensis iv annoque mcmlxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2438852 04 iv 4 04/01/1965 die i mensis iv annoque mcmlxv 65 lxv 1965} +test clock-2.848 {conversion of 1965-04-30} { + clock format -147439504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1965 12:34:56 die xxx mensis iv annoque mcmlxv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2438881 04 iv 4 04/30/1965 die xxx mensis iv annoque mcmlxv 65 lxv 1965} +test clock-2.849 {conversion of 1965-05-01} { + clock format -147353104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1965 12:34:56 die i mensis v annoque mcmlxv xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2438882 05 v 5 05/01/1965 die i mensis v annoque mcmlxv 65 lxv 1965} +test clock-2.850 {conversion of 1965-05-31} { + clock format -144761104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1965 12:34:56 die xxxi mensis v annoque mcmlxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2438912 05 v 5 05/31/1965 die xxxi mensis v annoque mcmlxv 65 lxv 1965} +test clock-2.851 {conversion of 1965-06-01} { + clock format -144674704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1965 12:34:56 die i mensis vi annoque mcmlxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2438913 06 vi 6 06/01/1965 die i mensis vi annoque mcmlxv 65 lxv 1965} +test clock-2.852 {conversion of 1965-06-30} { + clock format -142169104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1965 12:34:56 die xxx mensis vi annoque mcmlxv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2438942 06 vi 6 06/30/1965 die xxx mensis vi annoque mcmlxv 65 lxv 1965} +test clock-2.853 {conversion of 1965-07-01} { + clock format -142082704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1965 12:34:56 die i mensis vii annoque mcmlxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2438943 07 vii 7 07/01/1965 die i mensis vii annoque mcmlxv 65 lxv 1965} +test clock-2.854 {conversion of 1965-07-31} { + clock format -139490704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1965 12:34:56 die xxxi mensis vii annoque mcmlxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2438973 07 vii 7 07/31/1965 die xxxi mensis vii annoque mcmlxv 65 lxv 1965} +test clock-2.855 {conversion of 1965-08-01} { + clock format -139404304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1965 12:34:56 die i mensis viii annoque mcmlxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2438974 08 viii 8 08/01/1965 die i mensis viii annoque mcmlxv 65 lxv 1965} +test clock-2.856 {conversion of 1965-08-31} { + clock format -136812304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1965 12:34:56 die xxxi mensis viii annoque mcmlxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2439004 08 viii 8 08/31/1965 die xxxi mensis viii annoque mcmlxv 65 lxv 1965} +test clock-2.857 {conversion of 1965-09-01} { + clock format -136725904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1965 12:34:56 die i mensis ix annoque mcmlxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2439005 09 ix 9 09/01/1965 die i mensis ix annoque mcmlxv 65 lxv 1965} +test clock-2.858 {conversion of 1965-09-30} { + clock format -134220304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1965 12:34:56 die xxx mensis ix annoque mcmlxv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2439034 09 ix 9 09/30/1965 die xxx mensis ix annoque mcmlxv 65 lxv 1965} +test clock-2.859 {conversion of 1965-10-01} { + clock format -134133904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1965 12:34:56 die i mensis x annoque mcmlxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2439035 10 x 10 10/01/1965 die i mensis x annoque mcmlxv 65 lxv 1965} +test clock-2.860 {conversion of 1965-10-31} { + clock format -131541904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1965 12:34:56 die xxxi mensis x annoque mcmlxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2439065 10 x 10 10/31/1965 die xxxi mensis x annoque mcmlxv 65 lxv 1965} +test clock-2.861 {conversion of 1965-11-01} { + clock format -131455504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1965 12:34:56 die i mensis xi annoque mcmlxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2439066 11 xi 11 11/01/1965 die i mensis xi annoque mcmlxv 65 lxv 1965} +test clock-2.862 {conversion of 1965-11-30} { + clock format -128949904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1965 12:34:56 die xxx mensis xi annoque mcmlxv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2439095 11 xi 11 11/30/1965 die xxx mensis xi annoque mcmlxv 65 lxv 1965} +test clock-2.863 {conversion of 1965-12-01} { + clock format -128863504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1965 12:34:56 die i mensis xii annoque mcmlxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2439096 12 xii 12 12/01/1965 die i mensis xii annoque mcmlxv 65 lxv 1965} +test clock-2.864 {conversion of 1965-12-31} { + clock format -126271504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1965 12:34:56 die xxxi mensis xii annoque mcmlxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2439126 12 xii 12 12/31/1965 die xxxi mensis xii annoque mcmlxv 65 lxv 1965} +test clock-2.865 {conversion of 1966-01-01} { + clock format -126185104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1966 12:34:56 die i mensis i annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2439127 01 i 1 01/01/1966 die i mensis i annoque mcmlxvi 66 lxvi 1966} +test clock-2.866 {conversion of 1966-01-31} { + clock format -123593104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1966 12:34:56 die xxxi mensis i annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2439157 01 i 1 01/31/1966 die xxxi mensis i annoque mcmlxvi 66 lxvi 1966} +test clock-2.867 {conversion of 1966-02-01} { + clock format -123506704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1966 12:34:56 die i mensis ii annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2439158 02 ii 2 02/01/1966 die i mensis ii annoque mcmlxvi 66 lxvi 1966} +test clock-2.868 {conversion of 1966-02-28} { + clock format -121173904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1966 12:34:56 die xxviii mensis ii annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2439185 02 ii 2 02/28/1966 die xxviii mensis ii annoque mcmlxvi 66 lxvi 1966} +test clock-2.869 {conversion of 1966-03-01} { + clock format -121087504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1966 12:34:56 die i mensis iii annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2439186 03 iii 3 03/01/1966 die i mensis iii annoque mcmlxvi 66 lxvi 1966} +test clock-2.870 {conversion of 1966-03-31} { + clock format -118495504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1966 12:34:56 die xxxi mensis iii annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2439216 03 iii 3 03/31/1966 die xxxi mensis iii annoque mcmlxvi 66 lxvi 1966} +test clock-2.871 {conversion of 1966-04-01} { + clock format -118409104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1966 12:34:56 die i mensis iv annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2439217 04 iv 4 04/01/1966 die i mensis iv annoque mcmlxvi 66 lxvi 1966} +test clock-2.872 {conversion of 1966-04-30} { + clock format -115903504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1966 12:34:56 die xxx mensis iv annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2439246 04 iv 4 04/30/1966 die xxx mensis iv annoque mcmlxvi 66 lxvi 1966} +test clock-2.873 {conversion of 1966-05-01} { + clock format -115817104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1966 12:34:56 die i mensis v annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2439247 05 v 5 05/01/1966 die i mensis v annoque mcmlxvi 66 lxvi 1966} +test clock-2.874 {conversion of 1966-05-31} { + clock format -113225104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1966 12:34:56 die xxxi mensis v annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2439277 05 v 5 05/31/1966 die xxxi mensis v annoque mcmlxvi 66 lxvi 1966} +test clock-2.875 {conversion of 1966-06-01} { + clock format -113138704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1966 12:34:56 die i mensis vi annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2439278 06 vi 6 06/01/1966 die i mensis vi annoque mcmlxvi 66 lxvi 1966} +test clock-2.876 {conversion of 1966-06-30} { + clock format -110633104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1966 12:34:56 die xxx mensis vi annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2439307 06 vi 6 06/30/1966 die xxx mensis vi annoque mcmlxvi 66 lxvi 1966} +test clock-2.877 {conversion of 1966-07-01} { + clock format -110546704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1966 12:34:56 die i mensis vii annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2439308 07 vii 7 07/01/1966 die i mensis vii annoque mcmlxvi 66 lxvi 1966} +test clock-2.878 {conversion of 1966-07-31} { + clock format -107954704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1966 12:34:56 die xxxi mensis vii annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2439338 07 vii 7 07/31/1966 die xxxi mensis vii annoque mcmlxvi 66 lxvi 1966} +test clock-2.879 {conversion of 1966-08-01} { + clock format -107868304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1966 12:34:56 die i mensis viii annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2439339 08 viii 8 08/01/1966 die i mensis viii annoque mcmlxvi 66 lxvi 1966} +test clock-2.880 {conversion of 1966-08-31} { + clock format -105276304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1966 12:34:56 die xxxi mensis viii annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2439369 08 viii 8 08/31/1966 die xxxi mensis viii annoque mcmlxvi 66 lxvi 1966} +test clock-2.881 {conversion of 1966-09-01} { + clock format -105189904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1966 12:34:56 die i mensis ix annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2439370 09 ix 9 09/01/1966 die i mensis ix annoque mcmlxvi 66 lxvi 1966} +test clock-2.882 {conversion of 1966-09-30} { + clock format -102684304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1966 12:34:56 die xxx mensis ix annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2439399 09 ix 9 09/30/1966 die xxx mensis ix annoque mcmlxvi 66 lxvi 1966} +test clock-2.883 {conversion of 1966-10-01} { + clock format -102597904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1966 12:34:56 die i mensis x annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2439400 10 x 10 10/01/1966 die i mensis x annoque mcmlxvi 66 lxvi 1966} +test clock-2.884 {conversion of 1966-10-31} { + clock format -100005904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1966 12:34:56 die xxxi mensis x annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2439430 10 x 10 10/31/1966 die xxxi mensis x annoque mcmlxvi 66 lxvi 1966} +test clock-2.885 {conversion of 1966-11-01} { + clock format -99919504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1966 12:34:56 die i mensis xi annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2439431 11 xi 11 11/01/1966 die i mensis xi annoque mcmlxvi 66 lxvi 1966} +test clock-2.886 {conversion of 1966-11-30} { + clock format -97413904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1966 12:34:56 die xxx mensis xi annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2439460 11 xi 11 11/30/1966 die xxx mensis xi annoque mcmlxvi 66 lxvi 1966} +test clock-2.887 {conversion of 1966-12-01} { + clock format -97327504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1966 12:34:56 die i mensis xii annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2439461 12 xii 12 12/01/1966 die i mensis xii annoque mcmlxvi 66 lxvi 1966} +test clock-2.888 {conversion of 1966-12-31} { + clock format -94735504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1966 12:34:56 die xxxi mensis xii annoque mcmlxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2439491 12 xii 12 12/31/1966 die xxxi mensis xii annoque mcmlxvi 66 lxvi 1966} +test clock-2.889 {conversion of 1967-01-01} { + clock format -94649104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1967 12:34:56 die i mensis i annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2439492 01 i 1 01/01/1967 die i mensis i annoque mcmlxvii 67 lxvii 1967} +test clock-2.890 {conversion of 1967-01-31} { + clock format -92057104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1967 12:34:56 die xxxi mensis i annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2439522 01 i 1 01/31/1967 die xxxi mensis i annoque mcmlxvii 67 lxvii 1967} +test clock-2.891 {conversion of 1967-02-01} { + clock format -91970704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1967 12:34:56 die i mensis ii annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2439523 02 ii 2 02/01/1967 die i mensis ii annoque mcmlxvii 67 lxvii 1967} +test clock-2.892 {conversion of 1967-02-28} { + clock format -89637904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1967 12:34:56 die xxviii mensis ii annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2439550 02 ii 2 02/28/1967 die xxviii mensis ii annoque mcmlxvii 67 lxvii 1967} +test clock-2.893 {conversion of 1967-03-01} { + clock format -89551504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1967 12:34:56 die i mensis iii annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2439551 03 iii 3 03/01/1967 die i mensis iii annoque mcmlxvii 67 lxvii 1967} +test clock-2.894 {conversion of 1967-03-31} { + clock format -86959504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1967 12:34:56 die xxxi mensis iii annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2439581 03 iii 3 03/31/1967 die xxxi mensis iii annoque mcmlxvii 67 lxvii 1967} +test clock-2.895 {conversion of 1967-04-01} { + clock format -86873104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1967 12:34:56 die i mensis iv annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2439582 04 iv 4 04/01/1967 die i mensis iv annoque mcmlxvii 67 lxvii 1967} +test clock-2.896 {conversion of 1967-04-30} { + clock format -84367504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1967 12:34:56 die xxx mensis iv annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2439611 04 iv 4 04/30/1967 die xxx mensis iv annoque mcmlxvii 67 lxvii 1967} +test clock-2.897 {conversion of 1967-05-01} { + clock format -84281104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1967 12:34:56 die i mensis v annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2439612 05 v 5 05/01/1967 die i mensis v annoque mcmlxvii 67 lxvii 1967} +test clock-2.898 {conversion of 1967-05-31} { + clock format -81689104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1967 12:34:56 die xxxi mensis v annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2439642 05 v 5 05/31/1967 die xxxi mensis v annoque mcmlxvii 67 lxvii 1967} +test clock-2.899 {conversion of 1967-06-01} { + clock format -81602704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1967 12:34:56 die i mensis vi annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2439643 06 vi 6 06/01/1967 die i mensis vi annoque mcmlxvii 67 lxvii 1967} +test clock-2.900 {conversion of 1967-06-30} { + clock format -79097104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1967 12:34:56 die xxx mensis vi annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2439672 06 vi 6 06/30/1967 die xxx mensis vi annoque mcmlxvii 67 lxvii 1967} +test clock-2.901 {conversion of 1967-07-01} { + clock format -79010704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1967 12:34:56 die i mensis vii annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2439673 07 vii 7 07/01/1967 die i mensis vii annoque mcmlxvii 67 lxvii 1967} +test clock-2.902 {conversion of 1967-07-31} { + clock format -76418704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1967 12:34:56 die xxxi mensis vii annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2439703 07 vii 7 07/31/1967 die xxxi mensis vii annoque mcmlxvii 67 lxvii 1967} +test clock-2.903 {conversion of 1967-08-01} { + clock format -76332304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1967 12:34:56 die i mensis viii annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2439704 08 viii 8 08/01/1967 die i mensis viii annoque mcmlxvii 67 lxvii 1967} +test clock-2.904 {conversion of 1967-08-31} { + clock format -73740304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1967 12:34:56 die xxxi mensis viii annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2439734 08 viii 8 08/31/1967 die xxxi mensis viii annoque mcmlxvii 67 lxvii 1967} +test clock-2.905 {conversion of 1967-09-01} { + clock format -73653904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1967 12:34:56 die i mensis ix annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2439735 09 ix 9 09/01/1967 die i mensis ix annoque mcmlxvii 67 lxvii 1967} +test clock-2.906 {conversion of 1967-09-30} { + clock format -71148304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1967 12:34:56 die xxx mensis ix annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2439764 09 ix 9 09/30/1967 die xxx mensis ix annoque mcmlxvii 67 lxvii 1967} +test clock-2.907 {conversion of 1967-10-01} { + clock format -71061904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1967 12:34:56 die i mensis x annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2439765 10 x 10 10/01/1967 die i mensis x annoque mcmlxvii 67 lxvii 1967} +test clock-2.908 {conversion of 1967-10-31} { + clock format -68469904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1967 12:34:56 die xxxi mensis x annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2439795 10 x 10 10/31/1967 die xxxi mensis x annoque mcmlxvii 67 lxvii 1967} +test clock-2.909 {conversion of 1967-11-01} { + clock format -68383504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1967 12:34:56 die i mensis xi annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2439796 11 xi 11 11/01/1967 die i mensis xi annoque mcmlxvii 67 lxvii 1967} +test clock-2.910 {conversion of 1967-11-30} { + clock format -65877904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1967 12:34:56 die xxx mensis xi annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2439825 11 xi 11 11/30/1967 die xxx mensis xi annoque mcmlxvii 67 lxvii 1967} +test clock-2.911 {conversion of 1967-12-01} { + clock format -65791504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1967 12:34:56 die i mensis xii annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2439826 12 xii 12 12/01/1967 die i mensis xii annoque mcmlxvii 67 lxvii 1967} +test clock-2.912 {conversion of 1967-12-31} { + clock format -63199504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1967 12:34:56 die xxxi mensis xii annoque mcmlxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2439856 12 xii 12 12/31/1967 die xxxi mensis xii annoque mcmlxvii 67 lxvii 1967} +test clock-2.913 {conversion of 1968-01-01} { + clock format -63113104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1968 12:34:56 die i mensis i annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2439857 01 i 1 01/01/1968 die i mensis i annoque mcmlxviii 68 lxviii 1968} +test clock-2.914 {conversion of 1968-01-31} { + clock format -60521104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1968 12:34:56 die xxxi mensis i annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2439887 01 i 1 01/31/1968 die xxxi mensis i annoque mcmlxviii 68 lxviii 1968} +test clock-2.915 {conversion of 1968-02-01} { + clock format -60434704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1968 12:34:56 die i mensis ii annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2439888 02 ii 2 02/01/1968 die i mensis ii annoque mcmlxviii 68 lxviii 1968} +test clock-2.916 {conversion of 1968-02-29} { + clock format -58015504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1968 12:34:56 die xxix mensis ii annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2439916 02 ii 2 02/29/1968 die xxix mensis ii annoque mcmlxviii 68 lxviii 1968} +test clock-2.917 {conversion of 1968-03-01} { + clock format -57929104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1968 12:34:56 die i mensis iii annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2439917 03 iii 3 03/01/1968 die i mensis iii annoque mcmlxviii 68 lxviii 1968} +test clock-2.918 {conversion of 1968-03-31} { + clock format -55337104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1968 12:34:56 die xxxi mensis iii annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2439947 03 iii 3 03/31/1968 die xxxi mensis iii annoque mcmlxviii 68 lxviii 1968} +test clock-2.919 {conversion of 1968-04-01} { + clock format -55250704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1968 12:34:56 die i mensis iv annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2439948 04 iv 4 04/01/1968 die i mensis iv annoque mcmlxviii 68 lxviii 1968} +test clock-2.920 {conversion of 1968-04-30} { + clock format -52745104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1968 12:34:56 die xxx mensis iv annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2439977 04 iv 4 04/30/1968 die xxx mensis iv annoque mcmlxviii 68 lxviii 1968} +test clock-2.921 {conversion of 1968-05-01} { + clock format -52658704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1968 12:34:56 die i mensis v annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2439978 05 v 5 05/01/1968 die i mensis v annoque mcmlxviii 68 lxviii 1968} +test clock-2.922 {conversion of 1968-05-31} { + clock format -50066704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1968 12:34:56 die xxxi mensis v annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2440008 05 v 5 05/31/1968 die xxxi mensis v annoque mcmlxviii 68 lxviii 1968} +test clock-2.923 {conversion of 1968-06-01} { + clock format -49980304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1968 12:34:56 die i mensis vi annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2440009 06 vi 6 06/01/1968 die i mensis vi annoque mcmlxviii 68 lxviii 1968} +test clock-2.924 {conversion of 1968-06-30} { + clock format -47474704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1968 12:34:56 die xxx mensis vi annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2440038 06 vi 6 06/30/1968 die xxx mensis vi annoque mcmlxviii 68 lxviii 1968} +test clock-2.925 {conversion of 1968-07-01} { + clock format -47388304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1968 12:34:56 die i mensis vii annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2440039 07 vii 7 07/01/1968 die i mensis vii annoque mcmlxviii 68 lxviii 1968} +test clock-2.926 {conversion of 1968-07-31} { + clock format -44796304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1968 12:34:56 die xxxi mensis vii annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2440069 07 vii 7 07/31/1968 die xxxi mensis vii annoque mcmlxviii 68 lxviii 1968} +test clock-2.927 {conversion of 1968-08-01} { + clock format -44709904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1968 12:34:56 die i mensis viii annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2440070 08 viii 8 08/01/1968 die i mensis viii annoque mcmlxviii 68 lxviii 1968} +test clock-2.928 {conversion of 1968-08-31} { + clock format -42117904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1968 12:34:56 die xxxi mensis viii annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2440100 08 viii 8 08/31/1968 die xxxi mensis viii annoque mcmlxviii 68 lxviii 1968} +test clock-2.929 {conversion of 1968-09-01} { + clock format -42031504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1968 12:34:56 die i mensis ix annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2440101 09 ix 9 09/01/1968 die i mensis ix annoque mcmlxviii 68 lxviii 1968} +test clock-2.930 {conversion of 1968-09-30} { + clock format -39525904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1968 12:34:56 die xxx mensis ix annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2440130 09 ix 9 09/30/1968 die xxx mensis ix annoque mcmlxviii 68 lxviii 1968} +test clock-2.931 {conversion of 1968-10-01} { + clock format -39439504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1968 12:34:56 die i mensis x annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2440131 10 x 10 10/01/1968 die i mensis x annoque mcmlxviii 68 lxviii 1968} +test clock-2.932 {conversion of 1968-10-31} { + clock format -36847504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1968 12:34:56 die xxxi mensis x annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2440161 10 x 10 10/31/1968 die xxxi mensis x annoque mcmlxviii 68 lxviii 1968} +test clock-2.933 {conversion of 1968-11-01} { + clock format -36761104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1968 12:34:56 die i mensis xi annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2440162 11 xi 11 11/01/1968 die i mensis xi annoque mcmlxviii 68 lxviii 1968} +test clock-2.934 {conversion of 1968-11-30} { + clock format -34255504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1968 12:34:56 die xxx mensis xi annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2440191 11 xi 11 11/30/1968 die xxx mensis xi annoque mcmlxviii 68 lxviii 1968} +test clock-2.935 {conversion of 1968-12-01} { + clock format -34169104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1968 12:34:56 die i mensis xii annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2440192 12 xii 12 12/01/1968 die i mensis xii annoque mcmlxviii 68 lxviii 1968} +test clock-2.936 {conversion of 1968-12-31} { + clock format -31577104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1968 12:34:56 die xxxi mensis xii annoque mcmlxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2440222 12 xii 12 12/31/1968 die xxxi mensis xii annoque mcmlxviii 68 lxviii 1968} +test clock-2.937 {conversion of 1969-01-01} { + clock format -31490704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1969 12:34:56 die i mensis i annoque mcmlxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2440223 01 i 1 01/01/1969 die i mensis i annoque mcmlxix 69 lxix 1969} +test clock-2.938 {conversion of 1969-01-31} { + clock format -28898704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1969 12:34:56 die xxxi mensis i annoque mcmlxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2440253 01 i 1 01/31/1969 die xxxi mensis i annoque mcmlxix 69 lxix 1969} +test clock-2.939 {conversion of 1969-02-01} { + clock format -28812304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1969 12:34:56 die i mensis ii annoque mcmlxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2440254 02 ii 2 02/01/1969 die i mensis ii annoque mcmlxix 69 lxix 1969} +test clock-2.940 {conversion of 1969-02-28} { + clock format -26479504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1969 12:34:56 die xxviii mensis ii annoque mcmlxix xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2440281 02 ii 2 02/28/1969 die xxviii mensis ii annoque mcmlxix 69 lxix 1969} +test clock-2.941 {conversion of 1969-03-01} { + clock format -26393104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1969 12:34:56 die i mensis iii annoque mcmlxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2440282 03 iii 3 03/01/1969 die i mensis iii annoque mcmlxix 69 lxix 1969} +test clock-2.942 {conversion of 1969-03-31} { + clock format -23801104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1969 12:34:56 die xxxi mensis iii annoque mcmlxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2440312 03 iii 3 03/31/1969 die xxxi mensis iii annoque mcmlxix 69 lxix 1969} +test clock-2.943 {conversion of 1969-04-01} { + clock format -23714704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1969 12:34:56 die i mensis iv annoque mcmlxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2440313 04 iv 4 04/01/1969 die i mensis iv annoque mcmlxix 69 lxix 1969} +test clock-2.944 {conversion of 1969-04-30} { + clock format -21209104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1969 12:34:56 die xxx mensis iv annoque mcmlxix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2440342 04 iv 4 04/30/1969 die xxx mensis iv annoque mcmlxix 69 lxix 1969} +test clock-2.945 {conversion of 1969-05-01} { + clock format -21122704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1969 12:34:56 die i mensis v annoque mcmlxix xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2440343 05 v 5 05/01/1969 die i mensis v annoque mcmlxix 69 lxix 1969} +test clock-2.946 {conversion of 1969-05-31} { + clock format -18530704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1969 12:34:56 die xxxi mensis v annoque mcmlxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2440373 05 v 5 05/31/1969 die xxxi mensis v annoque mcmlxix 69 lxix 1969} +test clock-2.947 {conversion of 1969-06-01} { + clock format -18444304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1969 12:34:56 die i mensis vi annoque mcmlxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2440374 06 vi 6 06/01/1969 die i mensis vi annoque mcmlxix 69 lxix 1969} +test clock-2.948 {conversion of 1969-06-30} { + clock format -15938704 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1969 12:34:56 die xxx mensis vi annoque mcmlxix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2440403 06 vi 6 06/30/1969 die xxx mensis vi annoque mcmlxix 69 lxix 1969} +test clock-2.949 {conversion of 1969-07-01} { + clock format -15852304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1969 12:34:56 die i mensis vii annoque mcmlxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2440404 07 vii 7 07/01/1969 die i mensis vii annoque mcmlxix 69 lxix 1969} +test clock-2.950 {conversion of 1969-07-31} { + clock format -13260304 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1969 12:34:56 die xxxi mensis vii annoque mcmlxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2440434 07 vii 7 07/31/1969 die xxxi mensis vii annoque mcmlxix 69 lxix 1969} +test clock-2.951 {conversion of 1969-08-01} { + clock format -13173904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1969 12:34:56 die i mensis viii annoque mcmlxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2440435 08 viii 8 08/01/1969 die i mensis viii annoque mcmlxix 69 lxix 1969} +test clock-2.952 {conversion of 1969-08-31} { + clock format -10581904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1969 12:34:56 die xxxi mensis viii annoque mcmlxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2440465 08 viii 8 08/31/1969 die xxxi mensis viii annoque mcmlxix 69 lxix 1969} +test clock-2.953 {conversion of 1969-09-01} { + clock format -10495504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1969 12:34:56 die i mensis ix annoque mcmlxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2440466 09 ix 9 09/01/1969 die i mensis ix annoque mcmlxix 69 lxix 1969} +test clock-2.954 {conversion of 1969-09-30} { + clock format -7989904 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1969 12:34:56 die xxx mensis ix annoque mcmlxix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2440495 09 ix 9 09/30/1969 die xxx mensis ix annoque mcmlxix 69 lxix 1969} +test clock-2.955 {conversion of 1969-10-01} { + clock format -7903504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1969 12:34:56 die i mensis x annoque mcmlxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2440496 10 x 10 10/01/1969 die i mensis x annoque mcmlxix 69 lxix 1969} +test clock-2.956 {conversion of 1969-10-31} { + clock format -5311504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1969 12:34:56 die xxxi mensis x annoque mcmlxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2440526 10 x 10 10/31/1969 die xxxi mensis x annoque mcmlxix 69 lxix 1969} +test clock-2.957 {conversion of 1969-11-01} { + clock format -5225104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1969 12:34:56 die i mensis xi annoque mcmlxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2440527 11 xi 11 11/01/1969 die i mensis xi annoque mcmlxix 69 lxix 1969} +test clock-2.958 {conversion of 1969-11-30} { + clock format -2719504 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1969 12:34:56 die xxx mensis xi annoque mcmlxix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2440556 11 xi 11 11/30/1969 die xxx mensis xi annoque mcmlxix 69 lxix 1969} +test clock-2.959 {conversion of 1969-12-01} { + clock format -2633104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1969 12:34:56 die i mensis xii annoque mcmlxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2440557 12 xii 12 12/01/1969 die i mensis xii annoque mcmlxix 69 lxix 1969} +test clock-2.960 {conversion of 1969-12-31} { + clock format -41104 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1969 12:34:56 die xxxi mensis xii annoque mcmlxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2440587 12 xii 12 12/31/1969 die xxxi mensis xii annoque mcmlxix 69 lxix 1969} +test clock-2.961 {conversion of 1970-01-01} { + clock format 45296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1970 12:34:56 die i mensis i annoque mcmlxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2440588 01 i 1 01/01/1970 die i mensis i annoque mcmlxx 70 lxx 1970} +test clock-2.962 {conversion of 1970-01-31} { + clock format 2637296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1970 12:34:56 die xxxi mensis i annoque mcmlxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2440618 01 i 1 01/31/1970 die xxxi mensis i annoque mcmlxx 70 lxx 1970} +test clock-2.963 {conversion of 1970-02-01} { + clock format 2723696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1970 12:34:56 die i mensis ii annoque mcmlxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2440619 02 ii 2 02/01/1970 die i mensis ii annoque mcmlxx 70 lxx 1970} +test clock-2.964 {conversion of 1970-02-28} { + clock format 5056496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1970 12:34:56 die xxviii mensis ii annoque mcmlxx xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2440646 02 ii 2 02/28/1970 die xxviii mensis ii annoque mcmlxx 70 lxx 1970} +test clock-2.965 {conversion of 1970-03-01} { + clock format 5142896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1970 12:34:56 die i mensis iii annoque mcmlxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2440647 03 iii 3 03/01/1970 die i mensis iii annoque mcmlxx 70 lxx 1970} +test clock-2.966 {conversion of 1970-03-31} { + clock format 7734896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1970 12:34:56 die xxxi mensis iii annoque mcmlxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2440677 03 iii 3 03/31/1970 die xxxi mensis iii annoque mcmlxx 70 lxx 1970} +test clock-2.967 {conversion of 1970-04-01} { + clock format 7821296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1970 12:34:56 die i mensis iv annoque mcmlxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2440678 04 iv 4 04/01/1970 die i mensis iv annoque mcmlxx 70 lxx 1970} +test clock-2.968 {conversion of 1970-04-30} { + clock format 10326896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1970 12:34:56 die xxx mensis iv annoque mcmlxx xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2440707 04 iv 4 04/30/1970 die xxx mensis iv annoque mcmlxx 70 lxx 1970} +test clock-2.969 {conversion of 1970-05-01} { + clock format 10413296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1970 12:34:56 die i mensis v annoque mcmlxx xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2440708 05 v 5 05/01/1970 die i mensis v annoque mcmlxx 70 lxx 1970} +test clock-2.970 {conversion of 1970-05-31} { + clock format 13005296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1970 12:34:56 die xxxi mensis v annoque mcmlxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2440738 05 v 5 05/31/1970 die xxxi mensis v annoque mcmlxx 70 lxx 1970} +test clock-2.971 {conversion of 1970-06-01} { + clock format 13091696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1970 12:34:56 die i mensis vi annoque mcmlxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2440739 06 vi 6 06/01/1970 die i mensis vi annoque mcmlxx 70 lxx 1970} +test clock-2.972 {conversion of 1970-06-30} { + clock format 15597296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1970 12:34:56 die xxx mensis vi annoque mcmlxx xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2440768 06 vi 6 06/30/1970 die xxx mensis vi annoque mcmlxx 70 lxx 1970} +test clock-2.973 {conversion of 1970-07-01} { + clock format 15683696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1970 12:34:56 die i mensis vii annoque mcmlxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2440769 07 vii 7 07/01/1970 die i mensis vii annoque mcmlxx 70 lxx 1970} +test clock-2.974 {conversion of 1970-07-31} { + clock format 18275696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1970 12:34:56 die xxxi mensis vii annoque mcmlxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2440799 07 vii 7 07/31/1970 die xxxi mensis vii annoque mcmlxx 70 lxx 1970} +test clock-2.975 {conversion of 1970-08-01} { + clock format 18362096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1970 12:34:56 die i mensis viii annoque mcmlxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2440800 08 viii 8 08/01/1970 die i mensis viii annoque mcmlxx 70 lxx 1970} +test clock-2.976 {conversion of 1970-08-31} { + clock format 20954096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1970 12:34:56 die xxxi mensis viii annoque mcmlxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2440830 08 viii 8 08/31/1970 die xxxi mensis viii annoque mcmlxx 70 lxx 1970} +test clock-2.977 {conversion of 1970-09-01} { + clock format 21040496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1970 12:34:56 die i mensis ix annoque mcmlxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2440831 09 ix 9 09/01/1970 die i mensis ix annoque mcmlxx 70 lxx 1970} +test clock-2.978 {conversion of 1970-09-30} { + clock format 23546096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1970 12:34:56 die xxx mensis ix annoque mcmlxx xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2440860 09 ix 9 09/30/1970 die xxx mensis ix annoque mcmlxx 70 lxx 1970} +test clock-2.979 {conversion of 1970-10-01} { + clock format 23632496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1970 12:34:56 die i mensis x annoque mcmlxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2440861 10 x 10 10/01/1970 die i mensis x annoque mcmlxx 70 lxx 1970} +test clock-2.980 {conversion of 1970-10-31} { + clock format 26224496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1970 12:34:56 die xxxi mensis x annoque mcmlxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2440891 10 x 10 10/31/1970 die xxxi mensis x annoque mcmlxx 70 lxx 1970} +test clock-2.981 {conversion of 1970-11-01} { + clock format 26310896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1970 12:34:56 die i mensis xi annoque mcmlxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2440892 11 xi 11 11/01/1970 die i mensis xi annoque mcmlxx 70 lxx 1970} +test clock-2.982 {conversion of 1970-11-30} { + clock format 28816496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1970 12:34:56 die xxx mensis xi annoque mcmlxx xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2440921 11 xi 11 11/30/1970 die xxx mensis xi annoque mcmlxx 70 lxx 1970} +test clock-2.983 {conversion of 1970-12-01} { + clock format 28902896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1970 12:34:56 die i mensis xii annoque mcmlxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2440922 12 xii 12 12/01/1970 die i mensis xii annoque mcmlxx 70 lxx 1970} +test clock-2.984 {conversion of 1970-12-31} { + clock format 31494896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1970 12:34:56 die xxxi mensis xii annoque mcmlxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2440952 12 xii 12 12/31/1970 die xxxi mensis xii annoque mcmlxx 70 lxx 1970} +test clock-2.985 {conversion of 1971-01-01} { + clock format 31581296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1971 12:34:56 die i mensis i annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2440953 01 i 1 01/01/1971 die i mensis i annoque mcmlxxi 71 lxxi 1971} +test clock-2.986 {conversion of 1971-01-31} { + clock format 34173296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1971 12:34:56 die xxxi mensis i annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2440983 01 i 1 01/31/1971 die xxxi mensis i annoque mcmlxxi 71 lxxi 1971} +test clock-2.987 {conversion of 1971-02-01} { + clock format 34259696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1971 12:34:56 die i mensis ii annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2440984 02 ii 2 02/01/1971 die i mensis ii annoque mcmlxxi 71 lxxi 1971} +test clock-2.988 {conversion of 1971-02-28} { + clock format 36592496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1971 12:34:56 die xxviii mensis ii annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2441011 02 ii 2 02/28/1971 die xxviii mensis ii annoque mcmlxxi 71 lxxi 1971} +test clock-2.989 {conversion of 1971-03-01} { + clock format 36678896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1971 12:34:56 die i mensis iii annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2441012 03 iii 3 03/01/1971 die i mensis iii annoque mcmlxxi 71 lxxi 1971} +test clock-2.990 {conversion of 1971-03-31} { + clock format 39270896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1971 12:34:56 die xxxi mensis iii annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2441042 03 iii 3 03/31/1971 die xxxi mensis iii annoque mcmlxxi 71 lxxi 1971} +test clock-2.991 {conversion of 1971-04-01} { + clock format 39357296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1971 12:34:56 die i mensis iv annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2441043 04 iv 4 04/01/1971 die i mensis iv annoque mcmlxxi 71 lxxi 1971} +test clock-2.992 {conversion of 1971-04-30} { + clock format 41862896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1971 12:34:56 die xxx mensis iv annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2441072 04 iv 4 04/30/1971 die xxx mensis iv annoque mcmlxxi 71 lxxi 1971} +test clock-2.993 {conversion of 1971-05-01} { + clock format 41949296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1971 12:34:56 die i mensis v annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2441073 05 v 5 05/01/1971 die i mensis v annoque mcmlxxi 71 lxxi 1971} +test clock-2.994 {conversion of 1971-05-31} { + clock format 44541296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1971 12:34:56 die xxxi mensis v annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2441103 05 v 5 05/31/1971 die xxxi mensis v annoque mcmlxxi 71 lxxi 1971} +test clock-2.995 {conversion of 1971-06-01} { + clock format 44627696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1971 12:34:56 die i mensis vi annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2441104 06 vi 6 06/01/1971 die i mensis vi annoque mcmlxxi 71 lxxi 1971} +test clock-2.996 {conversion of 1971-06-30} { + clock format 47133296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1971 12:34:56 die xxx mensis vi annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2441133 06 vi 6 06/30/1971 die xxx mensis vi annoque mcmlxxi 71 lxxi 1971} +test clock-2.997 {conversion of 1971-07-01} { + clock format 47219696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1971 12:34:56 die i mensis vii annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2441134 07 vii 7 07/01/1971 die i mensis vii annoque mcmlxxi 71 lxxi 1971} +test clock-2.998 {conversion of 1971-07-31} { + clock format 49811696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1971 12:34:56 die xxxi mensis vii annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2441164 07 vii 7 07/31/1971 die xxxi mensis vii annoque mcmlxxi 71 lxxi 1971} +test clock-2.999 {conversion of 1971-08-01} { + clock format 49898096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1971 12:34:56 die i mensis viii annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2441165 08 viii 8 08/01/1971 die i mensis viii annoque mcmlxxi 71 lxxi 1971} +test clock-2.1000 {conversion of 1971-08-31} { + clock format 52490096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1971 12:34:56 die xxxi mensis viii annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2441195 08 viii 8 08/31/1971 die xxxi mensis viii annoque mcmlxxi 71 lxxi 1971} +test clock-2.1001 {conversion of 1971-09-01} { + clock format 52576496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1971 12:34:56 die i mensis ix annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2441196 09 ix 9 09/01/1971 die i mensis ix annoque mcmlxxi 71 lxxi 1971} +test clock-2.1002 {conversion of 1971-09-30} { + clock format 55082096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1971 12:34:56 die xxx mensis ix annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2441225 09 ix 9 09/30/1971 die xxx mensis ix annoque mcmlxxi 71 lxxi 1971} +test clock-2.1003 {conversion of 1971-10-01} { + clock format 55168496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1971 12:34:56 die i mensis x annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2441226 10 x 10 10/01/1971 die i mensis x annoque mcmlxxi 71 lxxi 1971} +test clock-2.1004 {conversion of 1971-10-31} { + clock format 57760496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1971 12:34:56 die xxxi mensis x annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2441256 10 x 10 10/31/1971 die xxxi mensis x annoque mcmlxxi 71 lxxi 1971} +test clock-2.1005 {conversion of 1971-11-01} { + clock format 57846896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1971 12:34:56 die i mensis xi annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2441257 11 xi 11 11/01/1971 die i mensis xi annoque mcmlxxi 71 lxxi 1971} +test clock-2.1006 {conversion of 1971-11-30} { + clock format 60352496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1971 12:34:56 die xxx mensis xi annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2441286 11 xi 11 11/30/1971 die xxx mensis xi annoque mcmlxxi 71 lxxi 1971} +test clock-2.1007 {conversion of 1971-12-01} { + clock format 60438896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1971 12:34:56 die i mensis xii annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2441287 12 xii 12 12/01/1971 die i mensis xii annoque mcmlxxi 71 lxxi 1971} +test clock-2.1008 {conversion of 1971-12-31} { + clock format 63030896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1971 12:34:56 die xxxi mensis xii annoque mcmlxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2441317 12 xii 12 12/31/1971 die xxxi mensis xii annoque mcmlxxi 71 lxxi 1971} +test clock-2.1009 {conversion of 1972-01-01} { + clock format 63117296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1972 12:34:56 die i mensis i annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2441318 01 i 1 01/01/1972 die i mensis i annoque mcmlxxii 72 lxxii 1972} +test clock-2.1010 {conversion of 1972-01-31} { + clock format 65709296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1972 12:34:56 die xxxi mensis i annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2441348 01 i 1 01/31/1972 die xxxi mensis i annoque mcmlxxii 72 lxxii 1972} +test clock-2.1011 {conversion of 1972-02-01} { + clock format 65795696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1972 12:34:56 die i mensis ii annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2441349 02 ii 2 02/01/1972 die i mensis ii annoque mcmlxxii 72 lxxii 1972} +test clock-2.1012 {conversion of 1972-02-29} { + clock format 68214896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1972 12:34:56 die xxix mensis ii annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2441377 02 ii 2 02/29/1972 die xxix mensis ii annoque mcmlxxii 72 lxxii 1972} +test clock-2.1013 {conversion of 1972-03-01} { + clock format 68301296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1972 12:34:56 die i mensis iii annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2441378 03 iii 3 03/01/1972 die i mensis iii annoque mcmlxxii 72 lxxii 1972} +test clock-2.1014 {conversion of 1972-03-31} { + clock format 70893296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1972 12:34:56 die xxxi mensis iii annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2441408 03 iii 3 03/31/1972 die xxxi mensis iii annoque mcmlxxii 72 lxxii 1972} +test clock-2.1015 {conversion of 1972-04-01} { + clock format 70979696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1972 12:34:56 die i mensis iv annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2441409 04 iv 4 04/01/1972 die i mensis iv annoque mcmlxxii 72 lxxii 1972} +test clock-2.1016 {conversion of 1972-04-30} { + clock format 73485296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1972 12:34:56 die xxx mensis iv annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2441438 04 iv 4 04/30/1972 die xxx mensis iv annoque mcmlxxii 72 lxxii 1972} +test clock-2.1017 {conversion of 1972-05-01} { + clock format 73571696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1972 12:34:56 die i mensis v annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2441439 05 v 5 05/01/1972 die i mensis v annoque mcmlxxii 72 lxxii 1972} +test clock-2.1018 {conversion of 1972-05-31} { + clock format 76163696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1972 12:34:56 die xxxi mensis v annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2441469 05 v 5 05/31/1972 die xxxi mensis v annoque mcmlxxii 72 lxxii 1972} +test clock-2.1019 {conversion of 1972-06-01} { + clock format 76250096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1972 12:34:56 die i mensis vi annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2441470 06 vi 6 06/01/1972 die i mensis vi annoque mcmlxxii 72 lxxii 1972} +test clock-2.1020 {conversion of 1972-06-30} { + clock format 78755696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1972 12:34:56 die xxx mensis vi annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2441499 06 vi 6 06/30/1972 die xxx mensis vi annoque mcmlxxii 72 lxxii 1972} +test clock-2.1021 {conversion of 1972-07-01} { + clock format 78842096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1972 12:34:56 die i mensis vii annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2441500 07 vii 7 07/01/1972 die i mensis vii annoque mcmlxxii 72 lxxii 1972} +test clock-2.1022 {conversion of 1972-07-31} { + clock format 81434096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1972 12:34:56 die xxxi mensis vii annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2441530 07 vii 7 07/31/1972 die xxxi mensis vii annoque mcmlxxii 72 lxxii 1972} +test clock-2.1023 {conversion of 1972-08-01} { + clock format 81520496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1972 12:34:56 die i mensis viii annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2441531 08 viii 8 08/01/1972 die i mensis viii annoque mcmlxxii 72 lxxii 1972} +test clock-2.1024 {conversion of 1972-08-31} { + clock format 84112496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1972 12:34:56 die xxxi mensis viii annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2441561 08 viii 8 08/31/1972 die xxxi mensis viii annoque mcmlxxii 72 lxxii 1972} +test clock-2.1025 {conversion of 1972-09-01} { + clock format 84198896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1972 12:34:56 die i mensis ix annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2441562 09 ix 9 09/01/1972 die i mensis ix annoque mcmlxxii 72 lxxii 1972} +test clock-2.1026 {conversion of 1972-09-30} { + clock format 86704496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1972 12:34:56 die xxx mensis ix annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2441591 09 ix 9 09/30/1972 die xxx mensis ix annoque mcmlxxii 72 lxxii 1972} +test clock-2.1027 {conversion of 1972-10-01} { + clock format 86790896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1972 12:34:56 die i mensis x annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2441592 10 x 10 10/01/1972 die i mensis x annoque mcmlxxii 72 lxxii 1972} +test clock-2.1028 {conversion of 1972-10-31} { + clock format 89382896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1972 12:34:56 die xxxi mensis x annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2441622 10 x 10 10/31/1972 die xxxi mensis x annoque mcmlxxii 72 lxxii 1972} +test clock-2.1029 {conversion of 1972-11-01} { + clock format 89469296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1972 12:34:56 die i mensis xi annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2441623 11 xi 11 11/01/1972 die i mensis xi annoque mcmlxxii 72 lxxii 1972} +test clock-2.1030 {conversion of 1972-11-30} { + clock format 91974896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1972 12:34:56 die xxx mensis xi annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2441652 11 xi 11 11/30/1972 die xxx mensis xi annoque mcmlxxii 72 lxxii 1972} +test clock-2.1031 {conversion of 1972-12-01} { + clock format 92061296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1972 12:34:56 die i mensis xii annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2441653 12 xii 12 12/01/1972 die i mensis xii annoque mcmlxxii 72 lxxii 1972} +test clock-2.1032 {conversion of 1972-12-31} { + clock format 94653296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1972 12:34:56 die xxxi mensis xii annoque mcmlxxii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2441683 12 xii 12 12/31/1972 die xxxi mensis xii annoque mcmlxxii 72 lxxii 1972} +test clock-2.1033 {conversion of 1973-01-01} { + clock format 94739696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1973 12:34:56 die i mensis i annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2441684 01 i 1 01/01/1973 die i mensis i annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1034 {conversion of 1973-01-31} { + clock format 97331696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1973 12:34:56 die xxxi mensis i annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2441714 01 i 1 01/31/1973 die xxxi mensis i annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1035 {conversion of 1973-02-01} { + clock format 97418096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1973 12:34:56 die i mensis ii annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2441715 02 ii 2 02/01/1973 die i mensis ii annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1036 {conversion of 1973-02-28} { + clock format 99750896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1973 12:34:56 die xxviii mensis ii annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2441742 02 ii 2 02/28/1973 die xxviii mensis ii annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1037 {conversion of 1973-03-01} { + clock format 99837296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1973 12:34:56 die i mensis iii annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2441743 03 iii 3 03/01/1973 die i mensis iii annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1038 {conversion of 1973-03-31} { + clock format 102429296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1973 12:34:56 die xxxi mensis iii annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2441773 03 iii 3 03/31/1973 die xxxi mensis iii annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1039 {conversion of 1973-04-01} { + clock format 102515696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1973 12:34:56 die i mensis iv annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2441774 04 iv 4 04/01/1973 die i mensis iv annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1040 {conversion of 1973-04-30} { + clock format 105021296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1973 12:34:56 die xxx mensis iv annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2441803 04 iv 4 04/30/1973 die xxx mensis iv annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1041 {conversion of 1973-05-01} { + clock format 105107696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1973 12:34:56 die i mensis v annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2441804 05 v 5 05/01/1973 die i mensis v annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1042 {conversion of 1973-05-31} { + clock format 107699696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1973 12:34:56 die xxxi mensis v annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2441834 05 v 5 05/31/1973 die xxxi mensis v annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1043 {conversion of 1973-06-01} { + clock format 107786096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1973 12:34:56 die i mensis vi annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2441835 06 vi 6 06/01/1973 die i mensis vi annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1044 {conversion of 1973-06-30} { + clock format 110291696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1973 12:34:56 die xxx mensis vi annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2441864 06 vi 6 06/30/1973 die xxx mensis vi annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1045 {conversion of 1973-07-01} { + clock format 110378096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1973 12:34:56 die i mensis vii annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2441865 07 vii 7 07/01/1973 die i mensis vii annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1046 {conversion of 1973-07-31} { + clock format 112970096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1973 12:34:56 die xxxi mensis vii annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2441895 07 vii 7 07/31/1973 die xxxi mensis vii annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1047 {conversion of 1973-08-01} { + clock format 113056496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1973 12:34:56 die i mensis viii annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2441896 08 viii 8 08/01/1973 die i mensis viii annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1048 {conversion of 1973-08-31} { + clock format 115648496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1973 12:34:56 die xxxi mensis viii annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2441926 08 viii 8 08/31/1973 die xxxi mensis viii annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1049 {conversion of 1973-09-01} { + clock format 115734896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1973 12:34:56 die i mensis ix annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2441927 09 ix 9 09/01/1973 die i mensis ix annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1050 {conversion of 1973-09-30} { + clock format 118240496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1973 12:34:56 die xxx mensis ix annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2441956 09 ix 9 09/30/1973 die xxx mensis ix annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1051 {conversion of 1973-10-01} { + clock format 118326896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1973 12:34:56 die i mensis x annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2441957 10 x 10 10/01/1973 die i mensis x annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1052 {conversion of 1973-10-31} { + clock format 120918896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1973 12:34:56 die xxxi mensis x annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2441987 10 x 10 10/31/1973 die xxxi mensis x annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1053 {conversion of 1973-11-01} { + clock format 121005296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1973 12:34:56 die i mensis xi annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2441988 11 xi 11 11/01/1973 die i mensis xi annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1054 {conversion of 1973-11-30} { + clock format 123510896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1973 12:34:56 die xxx mensis xi annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2442017 11 xi 11 11/30/1973 die xxx mensis xi annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1055 {conversion of 1973-12-01} { + clock format 123597296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1973 12:34:56 die i mensis xii annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2442018 12 xii 12 12/01/1973 die i mensis xii annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1056 {conversion of 1973-12-31} { + clock format 126189296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1973 12:34:56 die xxxi mensis xii annoque mcmlxxiii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2442048 12 xii 12 12/31/1973 die xxxi mensis xii annoque mcmlxxiii 73 lxxiii 1973} +test clock-2.1057 {conversion of 1974-01-01} { + clock format 126275696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1974 12:34:56 die i mensis i annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2442049 01 i 1 01/01/1974 die i mensis i annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1058 {conversion of 1974-01-31} { + clock format 128867696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1974 12:34:56 die xxxi mensis i annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2442079 01 i 1 01/31/1974 die xxxi mensis i annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1059 {conversion of 1974-02-01} { + clock format 128954096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1974 12:34:56 die i mensis ii annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2442080 02 ii 2 02/01/1974 die i mensis ii annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1060 {conversion of 1974-02-28} { + clock format 131286896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1974 12:34:56 die xxviii mensis ii annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2442107 02 ii 2 02/28/1974 die xxviii mensis ii annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1061 {conversion of 1974-03-01} { + clock format 131373296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1974 12:34:56 die i mensis iii annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2442108 03 iii 3 03/01/1974 die i mensis iii annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1062 {conversion of 1974-03-31} { + clock format 133965296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1974 12:34:56 die xxxi mensis iii annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2442138 03 iii 3 03/31/1974 die xxxi mensis iii annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1063 {conversion of 1974-04-01} { + clock format 134051696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1974 12:34:56 die i mensis iv annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2442139 04 iv 4 04/01/1974 die i mensis iv annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1064 {conversion of 1974-04-30} { + clock format 136557296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1974 12:34:56 die xxx mensis iv annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2442168 04 iv 4 04/30/1974 die xxx mensis iv annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1065 {conversion of 1974-05-01} { + clock format 136643696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1974 12:34:56 die i mensis v annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2442169 05 v 5 05/01/1974 die i mensis v annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1066 {conversion of 1974-05-31} { + clock format 139235696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1974 12:34:56 die xxxi mensis v annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2442199 05 v 5 05/31/1974 die xxxi mensis v annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1067 {conversion of 1974-06-01} { + clock format 139322096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1974 12:34:56 die i mensis vi annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2442200 06 vi 6 06/01/1974 die i mensis vi annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1068 {conversion of 1974-06-30} { + clock format 141827696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1974 12:34:56 die xxx mensis vi annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2442229 06 vi 6 06/30/1974 die xxx mensis vi annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1069 {conversion of 1974-07-01} { + clock format 141914096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1974 12:34:56 die i mensis vii annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2442230 07 vii 7 07/01/1974 die i mensis vii annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1070 {conversion of 1974-07-31} { + clock format 144506096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1974 12:34:56 die xxxi mensis vii annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2442260 07 vii 7 07/31/1974 die xxxi mensis vii annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1071 {conversion of 1974-08-01} { + clock format 144592496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1974 12:34:56 die i mensis viii annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2442261 08 viii 8 08/01/1974 die i mensis viii annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1072 {conversion of 1974-08-31} { + clock format 147184496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1974 12:34:56 die xxxi mensis viii annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2442291 08 viii 8 08/31/1974 die xxxi mensis viii annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1073 {conversion of 1974-09-01} { + clock format 147270896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1974 12:34:56 die i mensis ix annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2442292 09 ix 9 09/01/1974 die i mensis ix annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1074 {conversion of 1974-09-30} { + clock format 149776496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1974 12:34:56 die xxx mensis ix annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2442321 09 ix 9 09/30/1974 die xxx mensis ix annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1075 {conversion of 1974-10-01} { + clock format 149862896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1974 12:34:56 die i mensis x annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2442322 10 x 10 10/01/1974 die i mensis x annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1076 {conversion of 1974-10-31} { + clock format 152454896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1974 12:34:56 die xxxi mensis x annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2442352 10 x 10 10/31/1974 die xxxi mensis x annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1077 {conversion of 1974-11-01} { + clock format 152541296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1974 12:34:56 die i mensis xi annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2442353 11 xi 11 11/01/1974 die i mensis xi annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1078 {conversion of 1974-11-30} { + clock format 155046896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1974 12:34:56 die xxx mensis xi annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2442382 11 xi 11 11/30/1974 die xxx mensis xi annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1079 {conversion of 1974-12-01} { + clock format 155133296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1974 12:34:56 die i mensis xii annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2442383 12 xii 12 12/01/1974 die i mensis xii annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1080 {conversion of 1974-12-31} { + clock format 157725296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1974 12:34:56 die xxxi mensis xii annoque mcmlxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2442413 12 xii 12 12/31/1974 die xxxi mensis xii annoque mcmlxxiv 74 lxxiv 1974} +test clock-2.1081 {conversion of 1975-01-01} { + clock format 157811696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1975 12:34:56 die i mensis i annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2442414 01 i 1 01/01/1975 die i mensis i annoque mcmlxxv 75 lxxv 1975} +test clock-2.1082 {conversion of 1975-01-31} { + clock format 160403696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1975 12:34:56 die xxxi mensis i annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2442444 01 i 1 01/31/1975 die xxxi mensis i annoque mcmlxxv 75 lxxv 1975} +test clock-2.1083 {conversion of 1975-02-01} { + clock format 160490096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1975 12:34:56 die i mensis ii annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2442445 02 ii 2 02/01/1975 die i mensis ii annoque mcmlxxv 75 lxxv 1975} +test clock-2.1084 {conversion of 1975-02-28} { + clock format 162822896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1975 12:34:56 die xxviii mensis ii annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2442472 02 ii 2 02/28/1975 die xxviii mensis ii annoque mcmlxxv 75 lxxv 1975} +test clock-2.1085 {conversion of 1975-03-01} { + clock format 162909296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1975 12:34:56 die i mensis iii annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2442473 03 iii 3 03/01/1975 die i mensis iii annoque mcmlxxv 75 lxxv 1975} +test clock-2.1086 {conversion of 1975-03-31} { + clock format 165501296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1975 12:34:56 die xxxi mensis iii annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2442503 03 iii 3 03/31/1975 die xxxi mensis iii annoque mcmlxxv 75 lxxv 1975} +test clock-2.1087 {conversion of 1975-04-01} { + clock format 165587696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1975 12:34:56 die i mensis iv annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2442504 04 iv 4 04/01/1975 die i mensis iv annoque mcmlxxv 75 lxxv 1975} +test clock-2.1088 {conversion of 1975-04-30} { + clock format 168093296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1975 12:34:56 die xxx mensis iv annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2442533 04 iv 4 04/30/1975 die xxx mensis iv annoque mcmlxxv 75 lxxv 1975} +test clock-2.1089 {conversion of 1975-05-01} { + clock format 168179696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1975 12:34:56 die i mensis v annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2442534 05 v 5 05/01/1975 die i mensis v annoque mcmlxxv 75 lxxv 1975} +test clock-2.1090 {conversion of 1975-05-31} { + clock format 170771696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1975 12:34:56 die xxxi mensis v annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2442564 05 v 5 05/31/1975 die xxxi mensis v annoque mcmlxxv 75 lxxv 1975} +test clock-2.1091 {conversion of 1975-06-01} { + clock format 170858096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1975 12:34:56 die i mensis vi annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2442565 06 vi 6 06/01/1975 die i mensis vi annoque mcmlxxv 75 lxxv 1975} +test clock-2.1092 {conversion of 1975-06-30} { + clock format 173363696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1975 12:34:56 die xxx mensis vi annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2442594 06 vi 6 06/30/1975 die xxx mensis vi annoque mcmlxxv 75 lxxv 1975} +test clock-2.1093 {conversion of 1975-07-01} { + clock format 173450096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1975 12:34:56 die i mensis vii annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2442595 07 vii 7 07/01/1975 die i mensis vii annoque mcmlxxv 75 lxxv 1975} +test clock-2.1094 {conversion of 1975-07-31} { + clock format 176042096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1975 12:34:56 die xxxi mensis vii annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2442625 07 vii 7 07/31/1975 die xxxi mensis vii annoque mcmlxxv 75 lxxv 1975} +test clock-2.1095 {conversion of 1975-08-01} { + clock format 176128496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1975 12:34:56 die i mensis viii annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2442626 08 viii 8 08/01/1975 die i mensis viii annoque mcmlxxv 75 lxxv 1975} +test clock-2.1096 {conversion of 1975-08-31} { + clock format 178720496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1975 12:34:56 die xxxi mensis viii annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2442656 08 viii 8 08/31/1975 die xxxi mensis viii annoque mcmlxxv 75 lxxv 1975} +test clock-2.1097 {conversion of 1975-09-01} { + clock format 178806896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1975 12:34:56 die i mensis ix annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2442657 09 ix 9 09/01/1975 die i mensis ix annoque mcmlxxv 75 lxxv 1975} +test clock-2.1098 {conversion of 1975-09-30} { + clock format 181312496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1975 12:34:56 die xxx mensis ix annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2442686 09 ix 9 09/30/1975 die xxx mensis ix annoque mcmlxxv 75 lxxv 1975} +test clock-2.1099 {conversion of 1975-10-01} { + clock format 181398896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1975 12:34:56 die i mensis x annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2442687 10 x 10 10/01/1975 die i mensis x annoque mcmlxxv 75 lxxv 1975} +test clock-2.1100 {conversion of 1975-10-31} { + clock format 183990896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1975 12:34:56 die xxxi mensis x annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2442717 10 x 10 10/31/1975 die xxxi mensis x annoque mcmlxxv 75 lxxv 1975} +test clock-2.1101 {conversion of 1975-11-01} { + clock format 184077296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1975 12:34:56 die i mensis xi annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2442718 11 xi 11 11/01/1975 die i mensis xi annoque mcmlxxv 75 lxxv 1975} +test clock-2.1102 {conversion of 1975-11-30} { + clock format 186582896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1975 12:34:56 die xxx mensis xi annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2442747 11 xi 11 11/30/1975 die xxx mensis xi annoque mcmlxxv 75 lxxv 1975} +test clock-2.1103 {conversion of 1975-12-01} { + clock format 186669296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1975 12:34:56 die i mensis xii annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2442748 12 xii 12 12/01/1975 die i mensis xii annoque mcmlxxv 75 lxxv 1975} +test clock-2.1104 {conversion of 1975-12-31} { + clock format 189261296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1975 12:34:56 die xxxi mensis xii annoque mcmlxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2442778 12 xii 12 12/31/1975 die xxxi mensis xii annoque mcmlxxv 75 lxxv 1975} +test clock-2.1105 {conversion of 1976-01-01} { + clock format 189347696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1976 12:34:56 die i mensis i annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2442779 01 i 1 01/01/1976 die i mensis i annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1106 {conversion of 1976-01-31} { + clock format 191939696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1976 12:34:56 die xxxi mensis i annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2442809 01 i 1 01/31/1976 die xxxi mensis i annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1107 {conversion of 1976-02-01} { + clock format 192026096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1976 12:34:56 die i mensis ii annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2442810 02 ii 2 02/01/1976 die i mensis ii annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1108 {conversion of 1976-02-29} { + clock format 194445296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1976 12:34:56 die xxix mensis ii annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2442838 02 ii 2 02/29/1976 die xxix mensis ii annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1109 {conversion of 1976-03-01} { + clock format 194531696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1976 12:34:56 die i mensis iii annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2442839 03 iii 3 03/01/1976 die i mensis iii annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1110 {conversion of 1976-03-31} { + clock format 197123696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1976 12:34:56 die xxxi mensis iii annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2442869 03 iii 3 03/31/1976 die xxxi mensis iii annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1111 {conversion of 1976-04-01} { + clock format 197210096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1976 12:34:56 die i mensis iv annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2442870 04 iv 4 04/01/1976 die i mensis iv annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1112 {conversion of 1976-04-30} { + clock format 199715696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1976 12:34:56 die xxx mensis iv annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2442899 04 iv 4 04/30/1976 die xxx mensis iv annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1113 {conversion of 1976-05-01} { + clock format 199802096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1976 12:34:56 die i mensis v annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2442900 05 v 5 05/01/1976 die i mensis v annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1114 {conversion of 1976-05-31} { + clock format 202394096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1976 12:34:56 die xxxi mensis v annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2442930 05 v 5 05/31/1976 die xxxi mensis v annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1115 {conversion of 1976-06-01} { + clock format 202480496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1976 12:34:56 die i mensis vi annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2442931 06 vi 6 06/01/1976 die i mensis vi annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1116 {conversion of 1976-06-30} { + clock format 204986096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1976 12:34:56 die xxx mensis vi annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2442960 06 vi 6 06/30/1976 die xxx mensis vi annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1117 {conversion of 1976-07-01} { + clock format 205072496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1976 12:34:56 die i mensis vii annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2442961 07 vii 7 07/01/1976 die i mensis vii annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1118 {conversion of 1976-07-31} { + clock format 207664496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1976 12:34:56 die xxxi mensis vii annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2442991 07 vii 7 07/31/1976 die xxxi mensis vii annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1119 {conversion of 1976-08-01} { + clock format 207750896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1976 12:34:56 die i mensis viii annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2442992 08 viii 8 08/01/1976 die i mensis viii annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1120 {conversion of 1976-08-31} { + clock format 210342896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1976 12:34:56 die xxxi mensis viii annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2443022 08 viii 8 08/31/1976 die xxxi mensis viii annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1121 {conversion of 1976-09-01} { + clock format 210429296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1976 12:34:56 die i mensis ix annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2443023 09 ix 9 09/01/1976 die i mensis ix annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1122 {conversion of 1976-09-30} { + clock format 212934896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1976 12:34:56 die xxx mensis ix annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2443052 09 ix 9 09/30/1976 die xxx mensis ix annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1123 {conversion of 1976-10-01} { + clock format 213021296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1976 12:34:56 die i mensis x annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2443053 10 x 10 10/01/1976 die i mensis x annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1124 {conversion of 1976-10-31} { + clock format 215613296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1976 12:34:56 die xxxi mensis x annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2443083 10 x 10 10/31/1976 die xxxi mensis x annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1125 {conversion of 1976-11-01} { + clock format 215699696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1976 12:34:56 die i mensis xi annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2443084 11 xi 11 11/01/1976 die i mensis xi annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1126 {conversion of 1976-11-30} { + clock format 218205296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1976 12:34:56 die xxx mensis xi annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2443113 11 xi 11 11/30/1976 die xxx mensis xi annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1127 {conversion of 1976-12-01} { + clock format 218291696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1976 12:34:56 die i mensis xii annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2443114 12 xii 12 12/01/1976 die i mensis xii annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1128 {conversion of 1976-12-31} { + clock format 220883696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1976 12:34:56 die xxxi mensis xii annoque mcmlxxvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2443144 12 xii 12 12/31/1976 die xxxi mensis xii annoque mcmlxxvi 76 lxxvi 1976} +test clock-2.1129 {conversion of 1977-01-01} { + clock format 220970096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1977 12:34:56 die i mensis i annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2443145 01 i 1 01/01/1977 die i mensis i annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1130 {conversion of 1977-01-31} { + clock format 223562096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1977 12:34:56 die xxxi mensis i annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2443175 01 i 1 01/31/1977 die xxxi mensis i annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1131 {conversion of 1977-02-01} { + clock format 223648496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1977 12:34:56 die i mensis ii annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2443176 02 ii 2 02/01/1977 die i mensis ii annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1132 {conversion of 1977-02-28} { + clock format 225981296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1977 12:34:56 die xxviii mensis ii annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2443203 02 ii 2 02/28/1977 die xxviii mensis ii annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1133 {conversion of 1977-03-01} { + clock format 226067696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1977 12:34:56 die i mensis iii annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2443204 03 iii 3 03/01/1977 die i mensis iii annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1134 {conversion of 1977-03-31} { + clock format 228659696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1977 12:34:56 die xxxi mensis iii annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2443234 03 iii 3 03/31/1977 die xxxi mensis iii annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1135 {conversion of 1977-04-01} { + clock format 228746096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1977 12:34:56 die i mensis iv annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2443235 04 iv 4 04/01/1977 die i mensis iv annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1136 {conversion of 1977-04-30} { + clock format 231251696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1977 12:34:56 die xxx mensis iv annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2443264 04 iv 4 04/30/1977 die xxx mensis iv annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1137 {conversion of 1977-05-01} { + clock format 231338096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1977 12:34:56 die i mensis v annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2443265 05 v 5 05/01/1977 die i mensis v annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1138 {conversion of 1977-05-31} { + clock format 233930096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1977 12:34:56 die xxxi mensis v annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2443295 05 v 5 05/31/1977 die xxxi mensis v annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1139 {conversion of 1977-06-01} { + clock format 234016496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1977 12:34:56 die i mensis vi annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2443296 06 vi 6 06/01/1977 die i mensis vi annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1140 {conversion of 1977-06-30} { + clock format 236522096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1977 12:34:56 die xxx mensis vi annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2443325 06 vi 6 06/30/1977 die xxx mensis vi annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1141 {conversion of 1977-07-01} { + clock format 236608496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1977 12:34:56 die i mensis vii annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2443326 07 vii 7 07/01/1977 die i mensis vii annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1142 {conversion of 1977-07-31} { + clock format 239200496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1977 12:34:56 die xxxi mensis vii annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2443356 07 vii 7 07/31/1977 die xxxi mensis vii annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1143 {conversion of 1977-08-01} { + clock format 239286896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1977 12:34:56 die i mensis viii annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2443357 08 viii 8 08/01/1977 die i mensis viii annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1144 {conversion of 1977-08-31} { + clock format 241878896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1977 12:34:56 die xxxi mensis viii annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2443387 08 viii 8 08/31/1977 die xxxi mensis viii annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1145 {conversion of 1977-09-01} { + clock format 241965296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1977 12:34:56 die i mensis ix annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2443388 09 ix 9 09/01/1977 die i mensis ix annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1146 {conversion of 1977-09-30} { + clock format 244470896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1977 12:34:56 die xxx mensis ix annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2443417 09 ix 9 09/30/1977 die xxx mensis ix annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1147 {conversion of 1977-10-01} { + clock format 244557296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1977 12:34:56 die i mensis x annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2443418 10 x 10 10/01/1977 die i mensis x annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1148 {conversion of 1977-10-31} { + clock format 247149296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1977 12:34:56 die xxxi mensis x annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2443448 10 x 10 10/31/1977 die xxxi mensis x annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1149 {conversion of 1977-11-01} { + clock format 247235696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1977 12:34:56 die i mensis xi annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2443449 11 xi 11 11/01/1977 die i mensis xi annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1150 {conversion of 1977-11-30} { + clock format 249741296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1977 12:34:56 die xxx mensis xi annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2443478 11 xi 11 11/30/1977 die xxx mensis xi annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1151 {conversion of 1977-12-01} { + clock format 249827696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1977 12:34:56 die i mensis xii annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2443479 12 xii 12 12/01/1977 die i mensis xii annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1152 {conversion of 1977-12-31} { + clock format 252419696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1977 12:34:56 die xxxi mensis xii annoque mcmlxxvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2443509 12 xii 12 12/31/1977 die xxxi mensis xii annoque mcmlxxvii 77 lxxvii 1977} +test clock-2.1153 {conversion of 1978-01-01} { + clock format 252506096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1978 12:34:56 die i mensis i annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2443510 01 i 1 01/01/1978 die i mensis i annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1154 {conversion of 1978-01-31} { + clock format 255098096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1978 12:34:56 die xxxi mensis i annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2443540 01 i 1 01/31/1978 die xxxi mensis i annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1155 {conversion of 1978-02-01} { + clock format 255184496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1978 12:34:56 die i mensis ii annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2443541 02 ii 2 02/01/1978 die i mensis ii annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1156 {conversion of 1978-02-28} { + clock format 257517296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1978 12:34:56 die xxviii mensis ii annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2443568 02 ii 2 02/28/1978 die xxviii mensis ii annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1157 {conversion of 1978-03-01} { + clock format 257603696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1978 12:34:56 die i mensis iii annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2443569 03 iii 3 03/01/1978 die i mensis iii annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1158 {conversion of 1978-03-31} { + clock format 260195696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1978 12:34:56 die xxxi mensis iii annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2443599 03 iii 3 03/31/1978 die xxxi mensis iii annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1159 {conversion of 1978-04-01} { + clock format 260282096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1978 12:34:56 die i mensis iv annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2443600 04 iv 4 04/01/1978 die i mensis iv annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1160 {conversion of 1978-04-30} { + clock format 262787696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1978 12:34:56 die xxx mensis iv annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2443629 04 iv 4 04/30/1978 die xxx mensis iv annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1161 {conversion of 1978-05-01} { + clock format 262874096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1978 12:34:56 die i mensis v annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2443630 05 v 5 05/01/1978 die i mensis v annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1162 {conversion of 1978-05-31} { + clock format 265466096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1978 12:34:56 die xxxi mensis v annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2443660 05 v 5 05/31/1978 die xxxi mensis v annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1163 {conversion of 1978-06-01} { + clock format 265552496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1978 12:34:56 die i mensis vi annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2443661 06 vi 6 06/01/1978 die i mensis vi annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1164 {conversion of 1978-06-30} { + clock format 268058096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1978 12:34:56 die xxx mensis vi annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2443690 06 vi 6 06/30/1978 die xxx mensis vi annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1165 {conversion of 1978-07-01} { + clock format 268144496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1978 12:34:56 die i mensis vii annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2443691 07 vii 7 07/01/1978 die i mensis vii annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1166 {conversion of 1978-07-31} { + clock format 270736496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1978 12:34:56 die xxxi mensis vii annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2443721 07 vii 7 07/31/1978 die xxxi mensis vii annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1167 {conversion of 1978-08-01} { + clock format 270822896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1978 12:34:56 die i mensis viii annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2443722 08 viii 8 08/01/1978 die i mensis viii annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1168 {conversion of 1978-08-31} { + clock format 273414896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1978 12:34:56 die xxxi mensis viii annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2443752 08 viii 8 08/31/1978 die xxxi mensis viii annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1169 {conversion of 1978-09-01} { + clock format 273501296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1978 12:34:56 die i mensis ix annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2443753 09 ix 9 09/01/1978 die i mensis ix annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1170 {conversion of 1978-09-30} { + clock format 276006896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1978 12:34:56 die xxx mensis ix annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2443782 09 ix 9 09/30/1978 die xxx mensis ix annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1171 {conversion of 1978-10-01} { + clock format 276093296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1978 12:34:56 die i mensis x annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2443783 10 x 10 10/01/1978 die i mensis x annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1172 {conversion of 1978-10-31} { + clock format 278685296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1978 12:34:56 die xxxi mensis x annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2443813 10 x 10 10/31/1978 die xxxi mensis x annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1173 {conversion of 1978-11-01} { + clock format 278771696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1978 12:34:56 die i mensis xi annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2443814 11 xi 11 11/01/1978 die i mensis xi annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1174 {conversion of 1978-11-30} { + clock format 281277296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1978 12:34:56 die xxx mensis xi annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2443843 11 xi 11 11/30/1978 die xxx mensis xi annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1175 {conversion of 1978-12-01} { + clock format 281363696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1978 12:34:56 die i mensis xii annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2443844 12 xii 12 12/01/1978 die i mensis xii annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1176 {conversion of 1978-12-31} { + clock format 283955696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1978 12:34:56 die xxxi mensis xii annoque mcmlxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2443874 12 xii 12 12/31/1978 die xxxi mensis xii annoque mcmlxxviii 78 lxxviii 1978} +test clock-2.1177 {conversion of 1979-01-01} { + clock format 284042096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1979 12:34:56 die i mensis i annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2443875 01 i 1 01/01/1979 die i mensis i annoque mcmlxxix 79 lxxix 1979} +test clock-2.1178 {conversion of 1979-01-31} { + clock format 286634096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1979 12:34:56 die xxxi mensis i annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2443905 01 i 1 01/31/1979 die xxxi mensis i annoque mcmlxxix 79 lxxix 1979} +test clock-2.1179 {conversion of 1979-02-01} { + clock format 286720496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1979 12:34:56 die i mensis ii annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2443906 02 ii 2 02/01/1979 die i mensis ii annoque mcmlxxix 79 lxxix 1979} +test clock-2.1180 {conversion of 1979-02-28} { + clock format 289053296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1979 12:34:56 die xxviii mensis ii annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2443933 02 ii 2 02/28/1979 die xxviii mensis ii annoque mcmlxxix 79 lxxix 1979} +test clock-2.1181 {conversion of 1979-03-01} { + clock format 289139696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1979 12:34:56 die i mensis iii annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2443934 03 iii 3 03/01/1979 die i mensis iii annoque mcmlxxix 79 lxxix 1979} +test clock-2.1182 {conversion of 1979-03-31} { + clock format 291731696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1979 12:34:56 die xxxi mensis iii annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2443964 03 iii 3 03/31/1979 die xxxi mensis iii annoque mcmlxxix 79 lxxix 1979} +test clock-2.1183 {conversion of 1979-04-01} { + clock format 291818096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1979 12:34:56 die i mensis iv annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2443965 04 iv 4 04/01/1979 die i mensis iv annoque mcmlxxix 79 lxxix 1979} +test clock-2.1184 {conversion of 1979-04-30} { + clock format 294323696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1979 12:34:56 die xxx mensis iv annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2443994 04 iv 4 04/30/1979 die xxx mensis iv annoque mcmlxxix 79 lxxix 1979} +test clock-2.1185 {conversion of 1979-05-01} { + clock format 294410096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1979 12:34:56 die i mensis v annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2443995 05 v 5 05/01/1979 die i mensis v annoque mcmlxxix 79 lxxix 1979} +test clock-2.1186 {conversion of 1979-05-31} { + clock format 297002096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1979 12:34:56 die xxxi mensis v annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2444025 05 v 5 05/31/1979 die xxxi mensis v annoque mcmlxxix 79 lxxix 1979} +test clock-2.1187 {conversion of 1979-06-01} { + clock format 297088496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1979 12:34:56 die i mensis vi annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2444026 06 vi 6 06/01/1979 die i mensis vi annoque mcmlxxix 79 lxxix 1979} +test clock-2.1188 {conversion of 1979-06-30} { + clock format 299594096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1979 12:34:56 die xxx mensis vi annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2444055 06 vi 6 06/30/1979 die xxx mensis vi annoque mcmlxxix 79 lxxix 1979} +test clock-2.1189 {conversion of 1979-07-01} { + clock format 299680496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1979 12:34:56 die i mensis vii annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2444056 07 vii 7 07/01/1979 die i mensis vii annoque mcmlxxix 79 lxxix 1979} +test clock-2.1190 {conversion of 1979-07-31} { + clock format 302272496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1979 12:34:56 die xxxi mensis vii annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2444086 07 vii 7 07/31/1979 die xxxi mensis vii annoque mcmlxxix 79 lxxix 1979} +test clock-2.1191 {conversion of 1979-08-01} { + clock format 302358896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1979 12:34:56 die i mensis viii annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2444087 08 viii 8 08/01/1979 die i mensis viii annoque mcmlxxix 79 lxxix 1979} +test clock-2.1192 {conversion of 1979-08-31} { + clock format 304950896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1979 12:34:56 die xxxi mensis viii annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2444117 08 viii 8 08/31/1979 die xxxi mensis viii annoque mcmlxxix 79 lxxix 1979} +test clock-2.1193 {conversion of 1979-09-01} { + clock format 305037296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1979 12:34:56 die i mensis ix annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2444118 09 ix 9 09/01/1979 die i mensis ix annoque mcmlxxix 79 lxxix 1979} +test clock-2.1194 {conversion of 1979-09-30} { + clock format 307542896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1979 12:34:56 die xxx mensis ix annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2444147 09 ix 9 09/30/1979 die xxx mensis ix annoque mcmlxxix 79 lxxix 1979} +test clock-2.1195 {conversion of 1979-10-01} { + clock format 307629296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1979 12:34:56 die i mensis x annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2444148 10 x 10 10/01/1979 die i mensis x annoque mcmlxxix 79 lxxix 1979} +test clock-2.1196 {conversion of 1979-10-31} { + clock format 310221296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1979 12:34:56 die xxxi mensis x annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2444178 10 x 10 10/31/1979 die xxxi mensis x annoque mcmlxxix 79 lxxix 1979} +test clock-2.1197 {conversion of 1979-11-01} { + clock format 310307696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1979 12:34:56 die i mensis xi annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2444179 11 xi 11 11/01/1979 die i mensis xi annoque mcmlxxix 79 lxxix 1979} +test clock-2.1198 {conversion of 1979-11-30} { + clock format 312813296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1979 12:34:56 die xxx mensis xi annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2444208 11 xi 11 11/30/1979 die xxx mensis xi annoque mcmlxxix 79 lxxix 1979} +test clock-2.1199 {conversion of 1979-12-01} { + clock format 312899696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1979 12:34:56 die i mensis xii annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2444209 12 xii 12 12/01/1979 die i mensis xii annoque mcmlxxix 79 lxxix 1979} +test clock-2.1200 {conversion of 1979-12-31} { + clock format 315491696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1979 12:34:56 die xxxi mensis xii annoque mcmlxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2444239 12 xii 12 12/31/1979 die xxxi mensis xii annoque mcmlxxix 79 lxxix 1979} +test clock-2.1201 {conversion of 1980-01-01} { + clock format 315578096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1980 12:34:56 die i mensis i annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2444240 01 i 1 01/01/1980 die i mensis i annoque mcmlxxx 80 lxxx 1980} +test clock-2.1202 {conversion of 1980-01-31} { + clock format 318170096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1980 12:34:56 die xxxi mensis i annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2444270 01 i 1 01/31/1980 die xxxi mensis i annoque mcmlxxx 80 lxxx 1980} +test clock-2.1203 {conversion of 1980-02-01} { + clock format 318256496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1980 12:34:56 die i mensis ii annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2444271 02 ii 2 02/01/1980 die i mensis ii annoque mcmlxxx 80 lxxx 1980} +test clock-2.1204 {conversion of 1980-02-29} { + clock format 320675696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1980 12:34:56 die xxix mensis ii annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2444299 02 ii 2 02/29/1980 die xxix mensis ii annoque mcmlxxx 80 lxxx 1980} +test clock-2.1205 {conversion of 1980-03-01} { + clock format 320762096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1980 12:34:56 die i mensis iii annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2444300 03 iii 3 03/01/1980 die i mensis iii annoque mcmlxxx 80 lxxx 1980} +test clock-2.1206 {conversion of 1980-03-31} { + clock format 323354096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1980 12:34:56 die xxxi mensis iii annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2444330 03 iii 3 03/31/1980 die xxxi mensis iii annoque mcmlxxx 80 lxxx 1980} +test clock-2.1207 {conversion of 1980-04-01} { + clock format 323440496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1980 12:34:56 die i mensis iv annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2444331 04 iv 4 04/01/1980 die i mensis iv annoque mcmlxxx 80 lxxx 1980} +test clock-2.1208 {conversion of 1980-04-30} { + clock format 325946096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1980 12:34:56 die xxx mensis iv annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2444360 04 iv 4 04/30/1980 die xxx mensis iv annoque mcmlxxx 80 lxxx 1980} +test clock-2.1209 {conversion of 1980-05-01} { + clock format 326032496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1980 12:34:56 die i mensis v annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2444361 05 v 5 05/01/1980 die i mensis v annoque mcmlxxx 80 lxxx 1980} +test clock-2.1210 {conversion of 1980-05-31} { + clock format 328624496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1980 12:34:56 die xxxi mensis v annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2444391 05 v 5 05/31/1980 die xxxi mensis v annoque mcmlxxx 80 lxxx 1980} +test clock-2.1211 {conversion of 1980-06-01} { + clock format 328710896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1980 12:34:56 die i mensis vi annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2444392 06 vi 6 06/01/1980 die i mensis vi annoque mcmlxxx 80 lxxx 1980} +test clock-2.1212 {conversion of 1980-06-30} { + clock format 331216496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1980 12:34:56 die xxx mensis vi annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2444421 06 vi 6 06/30/1980 die xxx mensis vi annoque mcmlxxx 80 lxxx 1980} +test clock-2.1213 {conversion of 1980-07-01} { + clock format 331302896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1980 12:34:56 die i mensis vii annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2444422 07 vii 7 07/01/1980 die i mensis vii annoque mcmlxxx 80 lxxx 1980} +test clock-2.1214 {conversion of 1980-07-31} { + clock format 333894896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1980 12:34:56 die xxxi mensis vii annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2444452 07 vii 7 07/31/1980 die xxxi mensis vii annoque mcmlxxx 80 lxxx 1980} +test clock-2.1215 {conversion of 1980-08-01} { + clock format 333981296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1980 12:34:56 die i mensis viii annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2444453 08 viii 8 08/01/1980 die i mensis viii annoque mcmlxxx 80 lxxx 1980} +test clock-2.1216 {conversion of 1980-08-31} { + clock format 336573296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1980 12:34:56 die xxxi mensis viii annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2444483 08 viii 8 08/31/1980 die xxxi mensis viii annoque mcmlxxx 80 lxxx 1980} +test clock-2.1217 {conversion of 1980-09-01} { + clock format 336659696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1980 12:34:56 die i mensis ix annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2444484 09 ix 9 09/01/1980 die i mensis ix annoque mcmlxxx 80 lxxx 1980} +test clock-2.1218 {conversion of 1980-09-30} { + clock format 339165296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1980 12:34:56 die xxx mensis ix annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2444513 09 ix 9 09/30/1980 die xxx mensis ix annoque mcmlxxx 80 lxxx 1980} +test clock-2.1219 {conversion of 1980-10-01} { + clock format 339251696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1980 12:34:56 die i mensis x annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2444514 10 x 10 10/01/1980 die i mensis x annoque mcmlxxx 80 lxxx 1980} +test clock-2.1220 {conversion of 1980-10-31} { + clock format 341843696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1980 12:34:56 die xxxi mensis x annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2444544 10 x 10 10/31/1980 die xxxi mensis x annoque mcmlxxx 80 lxxx 1980} +test clock-2.1221 {conversion of 1980-11-01} { + clock format 341930096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1980 12:34:56 die i mensis xi annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2444545 11 xi 11 11/01/1980 die i mensis xi annoque mcmlxxx 80 lxxx 1980} +test clock-2.1222 {conversion of 1980-11-30} { + clock format 344435696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1980 12:34:56 die xxx mensis xi annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2444574 11 xi 11 11/30/1980 die xxx mensis xi annoque mcmlxxx 80 lxxx 1980} +test clock-2.1223 {conversion of 1980-12-01} { + clock format 344522096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1980 12:34:56 die i mensis xii annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2444575 12 xii 12 12/01/1980 die i mensis xii annoque mcmlxxx 80 lxxx 1980} +test clock-2.1224 {conversion of 1980-12-31} { + clock format 347114096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1980 12:34:56 die xxxi mensis xii annoque mcmlxxx xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2444605 12 xii 12 12/31/1980 die xxxi mensis xii annoque mcmlxxx 80 lxxx 1980} +test clock-2.1225 {conversion of 1981-01-01} { + clock format 347200496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1981 12:34:56 die i mensis i annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2444606 01 i 1 01/01/1981 die i mensis i annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1226 {conversion of 1981-01-31} { + clock format 349792496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1981 12:34:56 die xxxi mensis i annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2444636 01 i 1 01/31/1981 die xxxi mensis i annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1227 {conversion of 1981-02-01} { + clock format 349878896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1981 12:34:56 die i mensis ii annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2444637 02 ii 2 02/01/1981 die i mensis ii annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1228 {conversion of 1981-02-28} { + clock format 352211696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1981 12:34:56 die xxviii mensis ii annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2444664 02 ii 2 02/28/1981 die xxviii mensis ii annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1229 {conversion of 1981-03-01} { + clock format 352298096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1981 12:34:56 die i mensis iii annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2444665 03 iii 3 03/01/1981 die i mensis iii annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1230 {conversion of 1981-03-31} { + clock format 354890096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1981 12:34:56 die xxxi mensis iii annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2444695 03 iii 3 03/31/1981 die xxxi mensis iii annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1231 {conversion of 1981-04-01} { + clock format 354976496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1981 12:34:56 die i mensis iv annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2444696 04 iv 4 04/01/1981 die i mensis iv annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1232 {conversion of 1981-04-30} { + clock format 357482096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1981 12:34:56 die xxx mensis iv annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2444725 04 iv 4 04/30/1981 die xxx mensis iv annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1233 {conversion of 1981-05-01} { + clock format 357568496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1981 12:34:56 die i mensis v annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2444726 05 v 5 05/01/1981 die i mensis v annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1234 {conversion of 1981-05-31} { + clock format 360160496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1981 12:34:56 die xxxi mensis v annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2444756 05 v 5 05/31/1981 die xxxi mensis v annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1235 {conversion of 1981-06-01} { + clock format 360246896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1981 12:34:56 die i mensis vi annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2444757 06 vi 6 06/01/1981 die i mensis vi annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1236 {conversion of 1981-06-30} { + clock format 362752496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1981 12:34:56 die xxx mensis vi annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2444786 06 vi 6 06/30/1981 die xxx mensis vi annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1237 {conversion of 1981-07-01} { + clock format 362838896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1981 12:34:56 die i mensis vii annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2444787 07 vii 7 07/01/1981 die i mensis vii annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1238 {conversion of 1981-07-31} { + clock format 365430896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1981 12:34:56 die xxxi mensis vii annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2444817 07 vii 7 07/31/1981 die xxxi mensis vii annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1239 {conversion of 1981-08-01} { + clock format 365517296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1981 12:34:56 die i mensis viii annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2444818 08 viii 8 08/01/1981 die i mensis viii annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1240 {conversion of 1981-08-31} { + clock format 368109296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1981 12:34:56 die xxxi mensis viii annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2444848 08 viii 8 08/31/1981 die xxxi mensis viii annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1241 {conversion of 1981-09-01} { + clock format 368195696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1981 12:34:56 die i mensis ix annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2444849 09 ix 9 09/01/1981 die i mensis ix annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1242 {conversion of 1981-09-30} { + clock format 370701296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1981 12:34:56 die xxx mensis ix annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2444878 09 ix 9 09/30/1981 die xxx mensis ix annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1243 {conversion of 1981-10-01} { + clock format 370787696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1981 12:34:56 die i mensis x annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2444879 10 x 10 10/01/1981 die i mensis x annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1244 {conversion of 1981-10-31} { + clock format 373379696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1981 12:34:56 die xxxi mensis x annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2444909 10 x 10 10/31/1981 die xxxi mensis x annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1245 {conversion of 1981-11-01} { + clock format 373466096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1981 12:34:56 die i mensis xi annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2444910 11 xi 11 11/01/1981 die i mensis xi annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1246 {conversion of 1981-11-30} { + clock format 375971696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1981 12:34:56 die xxx mensis xi annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2444939 11 xi 11 11/30/1981 die xxx mensis xi annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1247 {conversion of 1981-12-01} { + clock format 376058096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1981 12:34:56 die i mensis xii annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2444940 12 xii 12 12/01/1981 die i mensis xii annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1248 {conversion of 1981-12-31} { + clock format 378650096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1981 12:34:56 die xxxi mensis xii annoque mcmlxxxi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2444970 12 xii 12 12/31/1981 die xxxi mensis xii annoque mcmlxxxi 81 lxxxi 1981} +test clock-2.1249 {conversion of 1984-01-01} { + clock format 441808496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1984 12:34:56 die i mensis i annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2445701 01 i 1 01/01/1984 die i mensis i annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1250 {conversion of 1984-01-31} { + clock format 444400496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1984 12:34:56 die xxxi mensis i annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2445731 01 i 1 01/31/1984 die xxxi mensis i annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1251 {conversion of 1984-02-01} { + clock format 444486896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1984 12:34:56 die i mensis ii annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2445732 02 ii 2 02/01/1984 die i mensis ii annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1252 {conversion of 1984-02-29} { + clock format 446906096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1984 12:34:56 die xxix mensis ii annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2445760 02 ii 2 02/29/1984 die xxix mensis ii annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1253 {conversion of 1984-03-01} { + clock format 446992496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1984 12:34:56 die i mensis iii annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2445761 03 iii 3 03/01/1984 die i mensis iii annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1254 {conversion of 1984-03-31} { + clock format 449584496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1984 12:34:56 die xxxi mensis iii annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2445791 03 iii 3 03/31/1984 die xxxi mensis iii annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1255 {conversion of 1984-04-01} { + clock format 449670896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1984 12:34:56 die i mensis iv annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2445792 04 iv 4 04/01/1984 die i mensis iv annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1256 {conversion of 1984-04-30} { + clock format 452176496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1984 12:34:56 die xxx mensis iv annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2445821 04 iv 4 04/30/1984 die xxx mensis iv annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1257 {conversion of 1984-05-01} { + clock format 452262896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1984 12:34:56 die i mensis v annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2445822 05 v 5 05/01/1984 die i mensis v annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1258 {conversion of 1984-05-31} { + clock format 454854896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1984 12:34:56 die xxxi mensis v annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2445852 05 v 5 05/31/1984 die xxxi mensis v annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1259 {conversion of 1984-06-01} { + clock format 454941296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1984 12:34:56 die i mensis vi annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2445853 06 vi 6 06/01/1984 die i mensis vi annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1260 {conversion of 1984-06-30} { + clock format 457446896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1984 12:34:56 die xxx mensis vi annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2445882 06 vi 6 06/30/1984 die xxx mensis vi annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1261 {conversion of 1984-07-01} { + clock format 457533296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1984 12:34:56 die i mensis vii annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2445883 07 vii 7 07/01/1984 die i mensis vii annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1262 {conversion of 1984-07-31} { + clock format 460125296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1984 12:34:56 die xxxi mensis vii annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2445913 07 vii 7 07/31/1984 die xxxi mensis vii annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1263 {conversion of 1984-08-01} { + clock format 460211696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1984 12:34:56 die i mensis viii annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2445914 08 viii 8 08/01/1984 die i mensis viii annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1264 {conversion of 1984-08-31} { + clock format 462803696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1984 12:34:56 die xxxi mensis viii annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2445944 08 viii 8 08/31/1984 die xxxi mensis viii annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1265 {conversion of 1984-09-01} { + clock format 462890096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1984 12:34:56 die i mensis ix annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2445945 09 ix 9 09/01/1984 die i mensis ix annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1266 {conversion of 1984-09-30} { + clock format 465395696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1984 12:34:56 die xxx mensis ix annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2445974 09 ix 9 09/30/1984 die xxx mensis ix annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1267 {conversion of 1984-10-01} { + clock format 465482096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1984 12:34:56 die i mensis x annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2445975 10 x 10 10/01/1984 die i mensis x annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1268 {conversion of 1984-10-31} { + clock format 468074096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1984 12:34:56 die xxxi mensis x annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2446005 10 x 10 10/31/1984 die xxxi mensis x annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1269 {conversion of 1984-11-01} { + clock format 468160496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1984 12:34:56 die i mensis xi annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2446006 11 xi 11 11/01/1984 die i mensis xi annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1270 {conversion of 1984-11-30} { + clock format 470666096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1984 12:34:56 die xxx mensis xi annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2446035 11 xi 11 11/30/1984 die xxx mensis xi annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1271 {conversion of 1984-12-01} { + clock format 470752496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1984 12:34:56 die i mensis xii annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2446036 12 xii 12 12/01/1984 die i mensis xii annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1272 {conversion of 1984-12-31} { + clock format 473344496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1984 12:34:56 die xxxi mensis xii annoque mcmlxxxiv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2446066 12 xii 12 12/31/1984 die xxxi mensis xii annoque mcmlxxxiv 84 lxxxiv 1984} +test clock-2.1273 {conversion of 1985-01-01} { + clock format 473430896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1985 12:34:56 die i mensis i annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2446067 01 i 1 01/01/1985 die i mensis i annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1274 {conversion of 1985-01-31} { + clock format 476022896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1985 12:34:56 die xxxi mensis i annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2446097 01 i 1 01/31/1985 die xxxi mensis i annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1275 {conversion of 1985-02-01} { + clock format 476109296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1985 12:34:56 die i mensis ii annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2446098 02 ii 2 02/01/1985 die i mensis ii annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1276 {conversion of 1985-02-28} { + clock format 478442096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1985 12:34:56 die xxviii mensis ii annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2446125 02 ii 2 02/28/1985 die xxviii mensis ii annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1277 {conversion of 1985-03-01} { + clock format 478528496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1985 12:34:56 die i mensis iii annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2446126 03 iii 3 03/01/1985 die i mensis iii annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1278 {conversion of 1985-03-31} { + clock format 481120496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1985 12:34:56 die xxxi mensis iii annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2446156 03 iii 3 03/31/1985 die xxxi mensis iii annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1279 {conversion of 1985-04-01} { + clock format 481206896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1985 12:34:56 die i mensis iv annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2446157 04 iv 4 04/01/1985 die i mensis iv annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1280 {conversion of 1985-04-30} { + clock format 483712496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1985 12:34:56 die xxx mensis iv annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2446186 04 iv 4 04/30/1985 die xxx mensis iv annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1281 {conversion of 1985-05-01} { + clock format 483798896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1985 12:34:56 die i mensis v annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2446187 05 v 5 05/01/1985 die i mensis v annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1282 {conversion of 1985-05-31} { + clock format 486390896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1985 12:34:56 die xxxi mensis v annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2446217 05 v 5 05/31/1985 die xxxi mensis v annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1283 {conversion of 1985-06-01} { + clock format 486477296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1985 12:34:56 die i mensis vi annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2446218 06 vi 6 06/01/1985 die i mensis vi annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1284 {conversion of 1985-06-30} { + clock format 488982896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1985 12:34:56 die xxx mensis vi annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2446247 06 vi 6 06/30/1985 die xxx mensis vi annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1285 {conversion of 1985-07-01} { + clock format 489069296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1985 12:34:56 die i mensis vii annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2446248 07 vii 7 07/01/1985 die i mensis vii annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1286 {conversion of 1985-07-31} { + clock format 491661296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1985 12:34:56 die xxxi mensis vii annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2446278 07 vii 7 07/31/1985 die xxxi mensis vii annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1287 {conversion of 1985-08-01} { + clock format 491747696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1985 12:34:56 die i mensis viii annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2446279 08 viii 8 08/01/1985 die i mensis viii annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1288 {conversion of 1985-08-31} { + clock format 494339696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1985 12:34:56 die xxxi mensis viii annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2446309 08 viii 8 08/31/1985 die xxxi mensis viii annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1289 {conversion of 1985-09-01} { + clock format 494426096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1985 12:34:56 die i mensis ix annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2446310 09 ix 9 09/01/1985 die i mensis ix annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1290 {conversion of 1985-09-30} { + clock format 496931696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1985 12:34:56 die xxx mensis ix annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2446339 09 ix 9 09/30/1985 die xxx mensis ix annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1291 {conversion of 1985-10-01} { + clock format 497018096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1985 12:34:56 die i mensis x annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2446340 10 x 10 10/01/1985 die i mensis x annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1292 {conversion of 1985-10-31} { + clock format 499610096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1985 12:34:56 die xxxi mensis x annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2446370 10 x 10 10/31/1985 die xxxi mensis x annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1293 {conversion of 1985-11-01} { + clock format 499696496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1985 12:34:56 die i mensis xi annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2446371 11 xi 11 11/01/1985 die i mensis xi annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1294 {conversion of 1985-11-30} { + clock format 502202096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1985 12:34:56 die xxx mensis xi annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2446400 11 xi 11 11/30/1985 die xxx mensis xi annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1295 {conversion of 1985-12-01} { + clock format 502288496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1985 12:34:56 die i mensis xii annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2446401 12 xii 12 12/01/1985 die i mensis xii annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1296 {conversion of 1985-12-31} { + clock format 504880496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1985 12:34:56 die xxxi mensis xii annoque mcmlxxxv xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2446431 12 xii 12 12/31/1985 die xxxi mensis xii annoque mcmlxxxv 85 lxxxv 1985} +test clock-2.1297 {conversion of 1988-01-01} { + clock format 568038896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1988 12:34:56 die i mensis i annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2447162 01 i 1 01/01/1988 die i mensis i annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1298 {conversion of 1988-01-31} { + clock format 570630896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1988 12:34:56 die xxxi mensis i annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2447192 01 i 1 01/31/1988 die xxxi mensis i annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1299 {conversion of 1988-02-01} { + clock format 570717296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1988 12:34:56 die i mensis ii annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2447193 02 ii 2 02/01/1988 die i mensis ii annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1300 {conversion of 1988-02-29} { + clock format 573136496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1988 12:34:56 die xxix mensis ii annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2447221 02 ii 2 02/29/1988 die xxix mensis ii annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1301 {conversion of 1988-03-01} { + clock format 573222896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1988 12:34:56 die i mensis iii annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2447222 03 iii 3 03/01/1988 die i mensis iii annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1302 {conversion of 1988-03-31} { + clock format 575814896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1988 12:34:56 die xxxi mensis iii annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2447252 03 iii 3 03/31/1988 die xxxi mensis iii annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1303 {conversion of 1988-04-01} { + clock format 575901296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1988 12:34:56 die i mensis iv annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2447253 04 iv 4 04/01/1988 die i mensis iv annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1304 {conversion of 1988-04-30} { + clock format 578406896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1988 12:34:56 die xxx mensis iv annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2447282 04 iv 4 04/30/1988 die xxx mensis iv annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1305 {conversion of 1988-05-01} { + clock format 578493296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1988 12:34:56 die i mensis v annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2447283 05 v 5 05/01/1988 die i mensis v annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1306 {conversion of 1988-05-31} { + clock format 581085296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1988 12:34:56 die xxxi mensis v annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2447313 05 v 5 05/31/1988 die xxxi mensis v annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1307 {conversion of 1988-06-01} { + clock format 581171696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1988 12:34:56 die i mensis vi annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2447314 06 vi 6 06/01/1988 die i mensis vi annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1308 {conversion of 1988-06-30} { + clock format 583677296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1988 12:34:56 die xxx mensis vi annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2447343 06 vi 6 06/30/1988 die xxx mensis vi annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1309 {conversion of 1988-07-01} { + clock format 583763696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1988 12:34:56 die i mensis vii annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2447344 07 vii 7 07/01/1988 die i mensis vii annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1310 {conversion of 1988-07-31} { + clock format 586355696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1988 12:34:56 die xxxi mensis vii annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2447374 07 vii 7 07/31/1988 die xxxi mensis vii annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1311 {conversion of 1988-08-01} { + clock format 586442096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1988 12:34:56 die i mensis viii annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2447375 08 viii 8 08/01/1988 die i mensis viii annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1312 {conversion of 1988-08-31} { + clock format 589034096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1988 12:34:56 die xxxi mensis viii annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2447405 08 viii 8 08/31/1988 die xxxi mensis viii annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1313 {conversion of 1988-09-01} { + clock format 589120496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1988 12:34:56 die i mensis ix annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2447406 09 ix 9 09/01/1988 die i mensis ix annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1314 {conversion of 1988-09-30} { + clock format 591626096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1988 12:34:56 die xxx mensis ix annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2447435 09 ix 9 09/30/1988 die xxx mensis ix annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1315 {conversion of 1988-10-01} { + clock format 591712496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1988 12:34:56 die i mensis x annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2447436 10 x 10 10/01/1988 die i mensis x annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1316 {conversion of 1988-10-31} { + clock format 594304496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1988 12:34:56 die xxxi mensis x annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2447466 10 x 10 10/31/1988 die xxxi mensis x annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1317 {conversion of 1988-11-01} { + clock format 594390896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1988 12:34:56 die i mensis xi annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2447467 11 xi 11 11/01/1988 die i mensis xi annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1318 {conversion of 1988-11-30} { + clock format 596896496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1988 12:34:56 die xxx mensis xi annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2447496 11 xi 11 11/30/1988 die xxx mensis xi annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1319 {conversion of 1988-12-01} { + clock format 596982896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1988 12:34:56 die i mensis xii annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2447497 12 xii 12 12/01/1988 die i mensis xii annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1320 {conversion of 1988-12-31} { + clock format 599574896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1988 12:34:56 die xxxi mensis xii annoque mcmlxxxviii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2447527 12 xii 12 12/31/1988 die xxxi mensis xii annoque mcmlxxxviii 88 lxxxviii 1988} +test clock-2.1321 {conversion of 1989-01-01} { + clock format 599661296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1989 12:34:56 die i mensis i annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2447528 01 i 1 01/01/1989 die i mensis i annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1322 {conversion of 1989-01-31} { + clock format 602253296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1989 12:34:56 die xxxi mensis i annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2447558 01 i 1 01/31/1989 die xxxi mensis i annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1323 {conversion of 1989-02-01} { + clock format 602339696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1989 12:34:56 die i mensis ii annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2447559 02 ii 2 02/01/1989 die i mensis ii annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1324 {conversion of 1989-02-28} { + clock format 604672496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1989 12:34:56 die xxviii mensis ii annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2447586 02 ii 2 02/28/1989 die xxviii mensis ii annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1325 {conversion of 1989-03-01} { + clock format 604758896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1989 12:34:56 die i mensis iii annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2447587 03 iii 3 03/01/1989 die i mensis iii annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1326 {conversion of 1989-03-31} { + clock format 607350896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1989 12:34:56 die xxxi mensis iii annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2447617 03 iii 3 03/31/1989 die xxxi mensis iii annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1327 {conversion of 1989-04-01} { + clock format 607437296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1989 12:34:56 die i mensis iv annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2447618 04 iv 4 04/01/1989 die i mensis iv annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1328 {conversion of 1989-04-30} { + clock format 609942896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1989 12:34:56 die xxx mensis iv annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2447647 04 iv 4 04/30/1989 die xxx mensis iv annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1329 {conversion of 1989-05-01} { + clock format 610029296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1989 12:34:56 die i mensis v annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2447648 05 v 5 05/01/1989 die i mensis v annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1330 {conversion of 1989-05-31} { + clock format 612621296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1989 12:34:56 die xxxi mensis v annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2447678 05 v 5 05/31/1989 die xxxi mensis v annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1331 {conversion of 1989-06-01} { + clock format 612707696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1989 12:34:56 die i mensis vi annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2447679 06 vi 6 06/01/1989 die i mensis vi annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1332 {conversion of 1989-06-30} { + clock format 615213296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1989 12:34:56 die xxx mensis vi annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2447708 06 vi 6 06/30/1989 die xxx mensis vi annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1333 {conversion of 1989-07-01} { + clock format 615299696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1989 12:34:56 die i mensis vii annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2447709 07 vii 7 07/01/1989 die i mensis vii annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1334 {conversion of 1989-07-31} { + clock format 617891696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1989 12:34:56 die xxxi mensis vii annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2447739 07 vii 7 07/31/1989 die xxxi mensis vii annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1335 {conversion of 1989-08-01} { + clock format 617978096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1989 12:34:56 die i mensis viii annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2447740 08 viii 8 08/01/1989 die i mensis viii annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1336 {conversion of 1989-08-31} { + clock format 620570096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1989 12:34:56 die xxxi mensis viii annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2447770 08 viii 8 08/31/1989 die xxxi mensis viii annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1337 {conversion of 1989-09-01} { + clock format 620656496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1989 12:34:56 die i mensis ix annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2447771 09 ix 9 09/01/1989 die i mensis ix annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1338 {conversion of 1989-09-30} { + clock format 623162096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1989 12:34:56 die xxx mensis ix annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2447800 09 ix 9 09/30/1989 die xxx mensis ix annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1339 {conversion of 1989-10-01} { + clock format 623248496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1989 12:34:56 die i mensis x annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2447801 10 x 10 10/01/1989 die i mensis x annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1340 {conversion of 1989-10-31} { + clock format 625840496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1989 12:34:56 die xxxi mensis x annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2447831 10 x 10 10/31/1989 die xxxi mensis x annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1341 {conversion of 1989-11-01} { + clock format 625926896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1989 12:34:56 die i mensis xi annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2447832 11 xi 11 11/01/1989 die i mensis xi annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1342 {conversion of 1989-11-30} { + clock format 628432496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1989 12:34:56 die xxx mensis xi annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2447861 11 xi 11 11/30/1989 die xxx mensis xi annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1343 {conversion of 1989-12-01} { + clock format 628518896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1989 12:34:56 die i mensis xii annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2447862 12 xii 12 12/01/1989 die i mensis xii annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1344 {conversion of 1989-12-31} { + clock format 631110896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1989 12:34:56 die xxxi mensis xii annoque mcmlxxxix xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2447892 12 xii 12 12/31/1989 die xxxi mensis xii annoque mcmlxxxix 89 lxxxix 1989} +test clock-2.1345 {conversion of 1992-01-01} { + clock format 694269296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1992 12:34:56 die i mensis i annoque mcmxcii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2448623 01 i 1 01/01/1992 die i mensis i annoque mcmxcii 92 xcii 1992} +test clock-2.1346 {conversion of 1992-01-31} { + clock format 696861296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1992 12:34:56 die xxxi mensis i annoque mcmxcii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2448653 01 i 1 01/31/1992 die xxxi mensis i annoque mcmxcii 92 xcii 1992} +test clock-2.1347 {conversion of 1992-02-01} { + clock format 696947696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1992 12:34:56 die i mensis ii annoque mcmxcii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2448654 02 ii 2 02/01/1992 die i mensis ii annoque mcmxcii 92 xcii 1992} +test clock-2.1348 {conversion of 1992-02-29} { + clock format 699366896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1992 12:34:56 die xxix mensis ii annoque mcmxcii xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2448682 02 ii 2 02/29/1992 die xxix mensis ii annoque mcmxcii 92 xcii 1992} +test clock-2.1349 {conversion of 1992-03-01} { + clock format 699453296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1992 12:34:56 die i mensis iii annoque mcmxcii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2448683 03 iii 3 03/01/1992 die i mensis iii annoque mcmxcii 92 xcii 1992} +test clock-2.1350 {conversion of 1992-03-31} { + clock format 702045296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1992 12:34:56 die xxxi mensis iii annoque mcmxcii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2448713 03 iii 3 03/31/1992 die xxxi mensis iii annoque mcmxcii 92 xcii 1992} +test clock-2.1351 {conversion of 1992-04-01} { + clock format 702131696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1992 12:34:56 die i mensis iv annoque mcmxcii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2448714 04 iv 4 04/01/1992 die i mensis iv annoque mcmxcii 92 xcii 1992} +test clock-2.1352 {conversion of 1992-04-30} { + clock format 704637296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1992 12:34:56 die xxx mensis iv annoque mcmxcii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2448743 04 iv 4 04/30/1992 die xxx mensis iv annoque mcmxcii 92 xcii 1992} +test clock-2.1353 {conversion of 1992-05-01} { + clock format 704723696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1992 12:34:56 die i mensis v annoque mcmxcii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2448744 05 v 5 05/01/1992 die i mensis v annoque mcmxcii 92 xcii 1992} +test clock-2.1354 {conversion of 1992-05-31} { + clock format 707315696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1992 12:34:56 die xxxi mensis v annoque mcmxcii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2448774 05 v 5 05/31/1992 die xxxi mensis v annoque mcmxcii 92 xcii 1992} +test clock-2.1355 {conversion of 1992-06-01} { + clock format 707402096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1992 12:34:56 die i mensis vi annoque mcmxcii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2448775 06 vi 6 06/01/1992 die i mensis vi annoque mcmxcii 92 xcii 1992} +test clock-2.1356 {conversion of 1992-06-30} { + clock format 709907696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1992 12:34:56 die xxx mensis vi annoque mcmxcii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2448804 06 vi 6 06/30/1992 die xxx mensis vi annoque mcmxcii 92 xcii 1992} +test clock-2.1357 {conversion of 1992-07-01} { + clock format 709994096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1992 12:34:56 die i mensis vii annoque mcmxcii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2448805 07 vii 7 07/01/1992 die i mensis vii annoque mcmxcii 92 xcii 1992} +test clock-2.1358 {conversion of 1992-07-31} { + clock format 712586096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1992 12:34:56 die xxxi mensis vii annoque mcmxcii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2448835 07 vii 7 07/31/1992 die xxxi mensis vii annoque mcmxcii 92 xcii 1992} +test clock-2.1359 {conversion of 1992-08-01} { + clock format 712672496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1992 12:34:56 die i mensis viii annoque mcmxcii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2448836 08 viii 8 08/01/1992 die i mensis viii annoque mcmxcii 92 xcii 1992} +test clock-2.1360 {conversion of 1992-08-31} { + clock format 715264496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1992 12:34:56 die xxxi mensis viii annoque mcmxcii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2448866 08 viii 8 08/31/1992 die xxxi mensis viii annoque mcmxcii 92 xcii 1992} +test clock-2.1361 {conversion of 1992-09-01} { + clock format 715350896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1992 12:34:56 die i mensis ix annoque mcmxcii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2448867 09 ix 9 09/01/1992 die i mensis ix annoque mcmxcii 92 xcii 1992} +test clock-2.1362 {conversion of 1992-09-30} { + clock format 717856496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1992 12:34:56 die xxx mensis ix annoque mcmxcii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2448896 09 ix 9 09/30/1992 die xxx mensis ix annoque mcmxcii 92 xcii 1992} +test clock-2.1363 {conversion of 1992-10-01} { + clock format 717942896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1992 12:34:56 die i mensis x annoque mcmxcii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2448897 10 x 10 10/01/1992 die i mensis x annoque mcmxcii 92 xcii 1992} +test clock-2.1364 {conversion of 1992-10-31} { + clock format 720534896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1992 12:34:56 die xxxi mensis x annoque mcmxcii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2448927 10 x 10 10/31/1992 die xxxi mensis x annoque mcmxcii 92 xcii 1992} +test clock-2.1365 {conversion of 1992-11-01} { + clock format 720621296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1992 12:34:56 die i mensis xi annoque mcmxcii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2448928 11 xi 11 11/01/1992 die i mensis xi annoque mcmxcii 92 xcii 1992} +test clock-2.1366 {conversion of 1992-11-30} { + clock format 723126896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1992 12:34:56 die xxx mensis xi annoque mcmxcii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2448957 11 xi 11 11/30/1992 die xxx mensis xi annoque mcmxcii 92 xcii 1992} +test clock-2.1367 {conversion of 1992-12-01} { + clock format 723213296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1992 12:34:56 die i mensis xii annoque mcmxcii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2448958 12 xii 12 12/01/1992 die i mensis xii annoque mcmxcii 92 xcii 1992} +test clock-2.1368 {conversion of 1992-12-31} { + clock format 725805296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1992 12:34:56 die xxxi mensis xii annoque mcmxcii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2448988 12 xii 12 12/31/1992 die xxxi mensis xii annoque mcmxcii 92 xcii 1992} +test clock-2.1369 {conversion of 1993-01-01} { + clock format 725891696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1993 12:34:56 die i mensis i annoque mcmxciii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2448989 01 i 1 01/01/1993 die i mensis i annoque mcmxciii 93 xciii 1993} +test clock-2.1370 {conversion of 1993-01-31} { + clock format 728483696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1993 12:34:56 die xxxi mensis i annoque mcmxciii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2449019 01 i 1 01/31/1993 die xxxi mensis i annoque mcmxciii 93 xciii 1993} +test clock-2.1371 {conversion of 1993-02-01} { + clock format 728570096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1993 12:34:56 die i mensis ii annoque mcmxciii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2449020 02 ii 2 02/01/1993 die i mensis ii annoque mcmxciii 93 xciii 1993} +test clock-2.1372 {conversion of 1993-02-28} { + clock format 730902896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1993 12:34:56 die xxviii mensis ii annoque mcmxciii xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2449047 02 ii 2 02/28/1993 die xxviii mensis ii annoque mcmxciii 93 xciii 1993} +test clock-2.1373 {conversion of 1993-03-01} { + clock format 730989296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1993 12:34:56 die i mensis iii annoque mcmxciii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2449048 03 iii 3 03/01/1993 die i mensis iii annoque mcmxciii 93 xciii 1993} +test clock-2.1374 {conversion of 1993-03-31} { + clock format 733581296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1993 12:34:56 die xxxi mensis iii annoque mcmxciii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2449078 03 iii 3 03/31/1993 die xxxi mensis iii annoque mcmxciii 93 xciii 1993} +test clock-2.1375 {conversion of 1993-04-01} { + clock format 733667696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1993 12:34:56 die i mensis iv annoque mcmxciii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2449079 04 iv 4 04/01/1993 die i mensis iv annoque mcmxciii 93 xciii 1993} +test clock-2.1376 {conversion of 1993-04-30} { + clock format 736173296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1993 12:34:56 die xxx mensis iv annoque mcmxciii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2449108 04 iv 4 04/30/1993 die xxx mensis iv annoque mcmxciii 93 xciii 1993} +test clock-2.1377 {conversion of 1993-05-01} { + clock format 736259696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1993 12:34:56 die i mensis v annoque mcmxciii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2449109 05 v 5 05/01/1993 die i mensis v annoque mcmxciii 93 xciii 1993} +test clock-2.1378 {conversion of 1993-05-31} { + clock format 738851696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1993 12:34:56 die xxxi mensis v annoque mcmxciii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2449139 05 v 5 05/31/1993 die xxxi mensis v annoque mcmxciii 93 xciii 1993} +test clock-2.1379 {conversion of 1993-06-01} { + clock format 738938096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1993 12:34:56 die i mensis vi annoque mcmxciii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2449140 06 vi 6 06/01/1993 die i mensis vi annoque mcmxciii 93 xciii 1993} +test clock-2.1380 {conversion of 1993-06-30} { + clock format 741443696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1993 12:34:56 die xxx mensis vi annoque mcmxciii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2449169 06 vi 6 06/30/1993 die xxx mensis vi annoque mcmxciii 93 xciii 1993} +test clock-2.1381 {conversion of 1993-07-01} { + clock format 741530096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1993 12:34:56 die i mensis vii annoque mcmxciii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2449170 07 vii 7 07/01/1993 die i mensis vii annoque mcmxciii 93 xciii 1993} +test clock-2.1382 {conversion of 1993-07-31} { + clock format 744122096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1993 12:34:56 die xxxi mensis vii annoque mcmxciii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2449200 07 vii 7 07/31/1993 die xxxi mensis vii annoque mcmxciii 93 xciii 1993} +test clock-2.1383 {conversion of 1993-08-01} { + clock format 744208496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1993 12:34:56 die i mensis viii annoque mcmxciii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2449201 08 viii 8 08/01/1993 die i mensis viii annoque mcmxciii 93 xciii 1993} +test clock-2.1384 {conversion of 1993-08-31} { + clock format 746800496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1993 12:34:56 die xxxi mensis viii annoque mcmxciii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2449231 08 viii 8 08/31/1993 die xxxi mensis viii annoque mcmxciii 93 xciii 1993} +test clock-2.1385 {conversion of 1993-09-01} { + clock format 746886896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1993 12:34:56 die i mensis ix annoque mcmxciii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2449232 09 ix 9 09/01/1993 die i mensis ix annoque mcmxciii 93 xciii 1993} +test clock-2.1386 {conversion of 1993-09-30} { + clock format 749392496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1993 12:34:56 die xxx mensis ix annoque mcmxciii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2449261 09 ix 9 09/30/1993 die xxx mensis ix annoque mcmxciii 93 xciii 1993} +test clock-2.1387 {conversion of 1993-10-01} { + clock format 749478896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1993 12:34:56 die i mensis x annoque mcmxciii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2449262 10 x 10 10/01/1993 die i mensis x annoque mcmxciii 93 xciii 1993} +test clock-2.1388 {conversion of 1993-10-31} { + clock format 752070896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1993 12:34:56 die xxxi mensis x annoque mcmxciii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2449292 10 x 10 10/31/1993 die xxxi mensis x annoque mcmxciii 93 xciii 1993} +test clock-2.1389 {conversion of 1993-11-01} { + clock format 752157296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1993 12:34:56 die i mensis xi annoque mcmxciii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2449293 11 xi 11 11/01/1993 die i mensis xi annoque mcmxciii 93 xciii 1993} +test clock-2.1390 {conversion of 1993-11-30} { + clock format 754662896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1993 12:34:56 die xxx mensis xi annoque mcmxciii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2449322 11 xi 11 11/30/1993 die xxx mensis xi annoque mcmxciii 93 xciii 1993} +test clock-2.1391 {conversion of 1993-12-01} { + clock format 754749296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1993 12:34:56 die i mensis xii annoque mcmxciii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2449323 12 xii 12 12/01/1993 die i mensis xii annoque mcmxciii 93 xciii 1993} +test clock-2.1392 {conversion of 1993-12-31} { + clock format 757341296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1993 12:34:56 die xxxi mensis xii annoque mcmxciii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2449353 12 xii 12 12/31/1993 die xxxi mensis xii annoque mcmxciii 93 xciii 1993} +test clock-2.1393 {conversion of 1996-01-01} { + clock format 820499696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1996 12:34:56 die i mensis i annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2450084 01 i 1 01/01/1996 die i mensis i annoque mcmxcvi 96 xcvi 1996} +test clock-2.1394 {conversion of 1996-01-31} { + clock format 823091696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1996 12:34:56 die xxxi mensis i annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2450114 01 i 1 01/31/1996 die xxxi mensis i annoque mcmxcvi 96 xcvi 1996} +test clock-2.1395 {conversion of 1996-02-01} { + clock format 823178096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1996 12:34:56 die i mensis ii annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2450115 02 ii 2 02/01/1996 die i mensis ii annoque mcmxcvi 96 xcvi 1996} +test clock-2.1396 {conversion of 1996-02-29} { + clock format 825597296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/1996 12:34:56 die xxix mensis ii annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 29 xxix 29 xxix Feb 060 2450143 02 ii 2 02/29/1996 die xxix mensis ii annoque mcmxcvi 96 xcvi 1996} +test clock-2.1397 {conversion of 1996-03-01} { + clock format 825683696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1996 12:34:56 die i mensis iii annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 061 2450144 03 iii 3 03/01/1996 die i mensis iii annoque mcmxcvi 96 xcvi 1996} +test clock-2.1398 {conversion of 1996-03-31} { + clock format 828275696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1996 12:34:56 die xxxi mensis iii annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 091 2450174 03 iii 3 03/31/1996 die xxxi mensis iii annoque mcmxcvi 96 xcvi 1996} +test clock-2.1399 {conversion of 1996-04-01} { + clock format 828362096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1996 12:34:56 die i mensis iv annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 092 2450175 04 iv 4 04/01/1996 die i mensis iv annoque mcmxcvi 96 xcvi 1996} +test clock-2.1400 {conversion of 1996-04-30} { + clock format 830867696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1996 12:34:56 die xxx mensis iv annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 121 2450204 04 iv 4 04/30/1996 die xxx mensis iv annoque mcmxcvi 96 xcvi 1996} +test clock-2.1401 {conversion of 1996-05-01} { + clock format 830954096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1996 12:34:56 die i mensis v annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 01 i 1 i May 122 2450205 05 v 5 05/01/1996 die i mensis v annoque mcmxcvi 96 xcvi 1996} +test clock-2.1402 {conversion of 1996-05-31} { + clock format 833546096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1996 12:34:56 die xxxi mensis v annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 152 2450235 05 v 5 05/31/1996 die xxxi mensis v annoque mcmxcvi 96 xcvi 1996} +test clock-2.1403 {conversion of 1996-06-01} { + clock format 833632496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1996 12:34:56 die i mensis vi annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 153 2450236 06 vi 6 06/01/1996 die i mensis vi annoque mcmxcvi 96 xcvi 1996} +test clock-2.1404 {conversion of 1996-06-30} { + clock format 836138096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1996 12:34:56 die xxx mensis vi annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 182 2450265 06 vi 6 06/30/1996 die xxx mensis vi annoque mcmxcvi 96 xcvi 1996} +test clock-2.1405 {conversion of 1996-07-01} { + clock format 836224496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1996 12:34:56 die i mensis vii annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 183 2450266 07 vii 7 07/01/1996 die i mensis vii annoque mcmxcvi 96 xcvi 1996} +test clock-2.1406 {conversion of 1996-07-31} { + clock format 838816496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1996 12:34:56 die xxxi mensis vii annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 213 2450296 07 vii 7 07/31/1996 die xxxi mensis vii annoque mcmxcvi 96 xcvi 1996} +test clock-2.1407 {conversion of 1996-08-01} { + clock format 838902896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1996 12:34:56 die i mensis viii annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 214 2450297 08 viii 8 08/01/1996 die i mensis viii annoque mcmxcvi 96 xcvi 1996} +test clock-2.1408 {conversion of 1996-08-31} { + clock format 841494896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1996 12:34:56 die xxxi mensis viii annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 244 2450327 08 viii 8 08/31/1996 die xxxi mensis viii annoque mcmxcvi 96 xcvi 1996} +test clock-2.1409 {conversion of 1996-09-01} { + clock format 841581296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1996 12:34:56 die i mensis ix annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 245 2450328 09 ix 9 09/01/1996 die i mensis ix annoque mcmxcvi 96 xcvi 1996} +test clock-2.1410 {conversion of 1996-09-30} { + clock format 844086896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1996 12:34:56 die xxx mensis ix annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 274 2450357 09 ix 9 09/30/1996 die xxx mensis ix annoque mcmxcvi 96 xcvi 1996} +test clock-2.1411 {conversion of 1996-10-01} { + clock format 844173296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1996 12:34:56 die i mensis x annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 275 2450358 10 x 10 10/01/1996 die i mensis x annoque mcmxcvi 96 xcvi 1996} +test clock-2.1412 {conversion of 1996-10-31} { + clock format 846765296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1996 12:34:56 die xxxi mensis x annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 305 2450388 10 x 10 10/31/1996 die xxxi mensis x annoque mcmxcvi 96 xcvi 1996} +test clock-2.1413 {conversion of 1996-11-01} { + clock format 846851696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1996 12:34:56 die i mensis xi annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 306 2450389 11 xi 11 11/01/1996 die i mensis xi annoque mcmxcvi 96 xcvi 1996} +test clock-2.1414 {conversion of 1996-11-30} { + clock format 849357296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1996 12:34:56 die xxx mensis xi annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 335 2450418 11 xi 11 11/30/1996 die xxx mensis xi annoque mcmxcvi 96 xcvi 1996} +test clock-2.1415 {conversion of 1996-12-01} { + clock format 849443696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1996 12:34:56 die i mensis xii annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 336 2450419 12 xii 12 12/01/1996 die i mensis xii annoque mcmxcvi 96 xcvi 1996} +test clock-2.1416 {conversion of 1996-12-31} { + clock format 852035696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1996 12:34:56 die xxxi mensis xii annoque mcmxcvi xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 366 2450449 12 xii 12 12/31/1996 die xxxi mensis xii annoque mcmxcvi 96 xcvi 1996} +test clock-2.1417 {conversion of 1997-01-01} { + clock format 852122096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/1997 12:34:56 die i mensis i annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jan 001 2450450 01 i 1 01/01/1997 die i mensis i annoque mcmxcvii 97 xcvii 1997} +test clock-2.1418 {conversion of 1997-01-31} { + clock format 854714096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/1997 12:34:56 die xxxi mensis i annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jan 031 2450480 01 i 1 01/31/1997 die xxxi mensis i annoque mcmxcvii 97 xcvii 1997} +test clock-2.1419 {conversion of 1997-02-01} { + clock format 854800496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/1997 12:34:56 die i mensis ii annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Feb 032 2450481 02 ii 2 02/01/1997 die i mensis ii annoque mcmxcvii 97 xcvii 1997} +test clock-2.1420 {conversion of 1997-02-28} { + clock format 857133296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/1997 12:34:56 die xxviii mensis ii annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 28 xxviii 28 xxviii Feb 059 2450508 02 ii 2 02/28/1997 die xxviii mensis ii annoque mcmxcvii 97 xcvii 1997} +test clock-2.1421 {conversion of 1997-03-01} { + clock format 857219696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/1997 12:34:56 die i mensis iii annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Mar 060 2450509 03 iii 3 03/01/1997 die i mensis iii annoque mcmxcvii 97 xcvii 1997} +test clock-2.1422 {conversion of 1997-03-31} { + clock format 859811696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/1997 12:34:56 die xxxi mensis iii annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Mar 090 2450539 03 iii 3 03/31/1997 die xxxi mensis iii annoque mcmxcvii 97 xcvii 1997} +test clock-2.1423 {conversion of 1997-04-01} { + clock format 859898096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/1997 12:34:56 die i mensis iv annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Apr 091 2450540 04 iv 4 04/01/1997 die i mensis iv annoque mcmxcvii 97 xcvii 1997} +test clock-2.1424 {conversion of 1997-04-30} { + clock format 862403696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/1997 12:34:56 die xxx mensis iv annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Apr 120 2450569 04 iv 4 04/30/1997 die xxx mensis iv annoque mcmxcvii 97 xcvii 1997} +test clock-2.1425 {conversion of 1997-05-01} { + clock format 862490096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/1997 12:34:56 die i mensis v annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 01 i 1 i May 121 2450570 05 v 5 05/01/1997 die i mensis v annoque mcmxcvii 97 xcvii 1997} +test clock-2.1426 {conversion of 1997-05-31} { + clock format 865082096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/1997 12:34:56 die xxxi mensis v annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi May 151 2450600 05 v 5 05/31/1997 die xxxi mensis v annoque mcmxcvii 97 xcvii 1997} +test clock-2.1427 {conversion of 1997-06-01} { + clock format 865168496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/1997 12:34:56 die i mensis vi annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jun 152 2450601 06 vi 6 06/01/1997 die i mensis vi annoque mcmxcvii 97 xcvii 1997} +test clock-2.1428 {conversion of 1997-06-30} { + clock format 867674096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/1997 12:34:56 die xxx mensis vi annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Jun 181 2450630 06 vi 6 06/30/1997 die xxx mensis vi annoque mcmxcvii 97 xcvii 1997} +test clock-2.1429 {conversion of 1997-07-01} { + clock format 867760496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/1997 12:34:56 die i mensis vii annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Jul 182 2450631 07 vii 7 07/01/1997 die i mensis vii annoque mcmxcvii 97 xcvii 1997} +test clock-2.1430 {conversion of 1997-07-31} { + clock format 870352496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/1997 12:34:56 die xxxi mensis vii annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Jul 212 2450661 07 vii 7 07/31/1997 die xxxi mensis vii annoque mcmxcvii 97 xcvii 1997} +test clock-2.1431 {conversion of 1997-08-01} { + clock format 870438896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/1997 12:34:56 die i mensis viii annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Aug 213 2450662 08 viii 8 08/01/1997 die i mensis viii annoque mcmxcvii 97 xcvii 1997} +test clock-2.1432 {conversion of 1997-08-31} { + clock format 873030896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/1997 12:34:56 die xxxi mensis viii annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Aug 243 2450692 08 viii 8 08/31/1997 die xxxi mensis viii annoque mcmxcvii 97 xcvii 1997} +test clock-2.1433 {conversion of 1997-09-01} { + clock format 873117296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/1997 12:34:56 die i mensis ix annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Sep 244 2450693 09 ix 9 09/01/1997 die i mensis ix annoque mcmxcvii 97 xcvii 1997} +test clock-2.1434 {conversion of 1997-09-30} { + clock format 875622896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/1997 12:34:56 die xxx mensis ix annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Sep 273 2450722 09 ix 9 09/30/1997 die xxx mensis ix annoque mcmxcvii 97 xcvii 1997} +test clock-2.1435 {conversion of 1997-10-01} { + clock format 875709296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/1997 12:34:56 die i mensis x annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Oct 274 2450723 10 x 10 10/01/1997 die i mensis x annoque mcmxcvii 97 xcvii 1997} +test clock-2.1436 {conversion of 1997-10-31} { + clock format 878301296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/1997 12:34:56 die xxxi mensis x annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Oct 304 2450753 10 x 10 10/31/1997 die xxxi mensis x annoque mcmxcvii 97 xcvii 1997} +test clock-2.1437 {conversion of 1997-11-01} { + clock format 878387696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/1997 12:34:56 die i mensis xi annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Nov 305 2450754 11 xi 11 11/01/1997 die i mensis xi annoque mcmxcvii 97 xcvii 1997} +test clock-2.1438 {conversion of 1997-11-30} { + clock format 880893296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/1997 12:34:56 die xxx mensis xi annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 30 xxx 30 xxx Nov 334 2450783 11 xi 11 11/30/1997 die xxx mensis xi annoque mcmxcvii 97 xcvii 1997} +test clock-2.1439 {conversion of 1997-12-01} { + clock format 880979696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/1997 12:34:56 die i mensis xii annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 01 i 1 i Dec 335 2450784 12 xii 12 12/01/1997 die i mensis xii annoque mcmxcvii 97 xcvii 1997} +test clock-2.1440 {conversion of 1997-12-31} { + clock format 883571696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/1997 12:34:56 die xxxi mensis xii annoque mcmxcvii xii h xxxiv m lvi s 19 mcm 31 xxxi 31 xxxi Dec 365 2450814 12 xii 12 12/31/1997 die xxxi mensis xii annoque mcmxcvii 97 xcvii 1997} +test clock-2.1441 {conversion of 2000-01-01} { + clock format 946730096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2000 12:34:56 die i mensis i annoque mm? xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2451545 01 i 1 01/01/2000 die i mensis i annoque mm? 00 ? 2000} +test clock-2.1442 {conversion of 2000-01-31} { + clock format 949322096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2000 12:34:56 die xxxi mensis i annoque mm? xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2451575 01 i 1 01/31/2000 die xxxi mensis i annoque mm? 00 ? 2000} +test clock-2.1443 {conversion of 2000-02-01} { + clock format 949408496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2000 12:34:56 die i mensis ii annoque mm? xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2451576 02 ii 2 02/01/2000 die i mensis ii annoque mm? 00 ? 2000} +test clock-2.1444 {conversion of 2000-02-29} { + clock format 951827696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2000 12:34:56 die xxix mensis ii annoque mm? xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2451604 02 ii 2 02/29/2000 die xxix mensis ii annoque mm? 00 ? 2000} +test clock-2.1445 {conversion of 2000-03-01} { + clock format 951914096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2000 12:34:56 die i mensis iii annoque mm? xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2451605 03 iii 3 03/01/2000 die i mensis iii annoque mm? 00 ? 2000} +test clock-2.1446 {conversion of 2000-03-31} { + clock format 954506096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2000 12:34:56 die xxxi mensis iii annoque mm? xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2451635 03 iii 3 03/31/2000 die xxxi mensis iii annoque mm? 00 ? 2000} +test clock-2.1447 {conversion of 2000-04-01} { + clock format 954592496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2000 12:34:56 die i mensis iv annoque mm? xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2451636 04 iv 4 04/01/2000 die i mensis iv annoque mm? 00 ? 2000} +test clock-2.1448 {conversion of 2000-04-30} { + clock format 957098096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2000 12:34:56 die xxx mensis iv annoque mm? xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2451665 04 iv 4 04/30/2000 die xxx mensis iv annoque mm? 00 ? 2000} +test clock-2.1449 {conversion of 2000-05-01} { + clock format 957184496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2000 12:34:56 die i mensis v annoque mm? xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2451666 05 v 5 05/01/2000 die i mensis v annoque mm? 00 ? 2000} +test clock-2.1450 {conversion of 2000-05-31} { + clock format 959776496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2000 12:34:56 die xxxi mensis v annoque mm? xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2451696 05 v 5 05/31/2000 die xxxi mensis v annoque mm? 00 ? 2000} +test clock-2.1451 {conversion of 2000-06-01} { + clock format 959862896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2000 12:34:56 die i mensis vi annoque mm? xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2451697 06 vi 6 06/01/2000 die i mensis vi annoque mm? 00 ? 2000} +test clock-2.1452 {conversion of 2000-06-30} { + clock format 962368496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2000 12:34:56 die xxx mensis vi annoque mm? xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2451726 06 vi 6 06/30/2000 die xxx mensis vi annoque mm? 00 ? 2000} +test clock-2.1453 {conversion of 2000-07-01} { + clock format 962454896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2000 12:34:56 die i mensis vii annoque mm? xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2451727 07 vii 7 07/01/2000 die i mensis vii annoque mm? 00 ? 2000} +test clock-2.1454 {conversion of 2000-07-31} { + clock format 965046896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2000 12:34:56 die xxxi mensis vii annoque mm? xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2451757 07 vii 7 07/31/2000 die xxxi mensis vii annoque mm? 00 ? 2000} +test clock-2.1455 {conversion of 2000-08-01} { + clock format 965133296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2000 12:34:56 die i mensis viii annoque mm? xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2451758 08 viii 8 08/01/2000 die i mensis viii annoque mm? 00 ? 2000} +test clock-2.1456 {conversion of 2000-08-31} { + clock format 967725296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2000 12:34:56 die xxxi mensis viii annoque mm? xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2451788 08 viii 8 08/31/2000 die xxxi mensis viii annoque mm? 00 ? 2000} +test clock-2.1457 {conversion of 2000-09-01} { + clock format 967811696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2000 12:34:56 die i mensis ix annoque mm? xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2451789 09 ix 9 09/01/2000 die i mensis ix annoque mm? 00 ? 2000} +test clock-2.1458 {conversion of 2000-09-30} { + clock format 970317296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2000 12:34:56 die xxx mensis ix annoque mm? xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2451818 09 ix 9 09/30/2000 die xxx mensis ix annoque mm? 00 ? 2000} +test clock-2.1459 {conversion of 2000-10-01} { + clock format 970403696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2000 12:34:56 die i mensis x annoque mm? xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2451819 10 x 10 10/01/2000 die i mensis x annoque mm? 00 ? 2000} +test clock-2.1460 {conversion of 2000-10-31} { + clock format 972995696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2000 12:34:56 die xxxi mensis x annoque mm? xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2451849 10 x 10 10/31/2000 die xxxi mensis x annoque mm? 00 ? 2000} +test clock-2.1461 {conversion of 2000-11-01} { + clock format 973082096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2000 12:34:56 die i mensis xi annoque mm? xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2451850 11 xi 11 11/01/2000 die i mensis xi annoque mm? 00 ? 2000} +test clock-2.1462 {conversion of 2000-11-30} { + clock format 975587696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2000 12:34:56 die xxx mensis xi annoque mm? xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2451879 11 xi 11 11/30/2000 die xxx mensis xi annoque mm? 00 ? 2000} +test clock-2.1463 {conversion of 2000-12-01} { + clock format 975674096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2000 12:34:56 die i mensis xii annoque mm? xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2451880 12 xii 12 12/01/2000 die i mensis xii annoque mm? 00 ? 2000} +test clock-2.1464 {conversion of 2000-12-31} { + clock format 978266096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2000 12:34:56 die xxxi mensis xii annoque mm? xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2451910 12 xii 12 12/31/2000 die xxxi mensis xii annoque mm? 00 ? 2000} +test clock-2.1465 {conversion of 2001-01-01} { + clock format 978352496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2001 12:34:56 die i mensis i annoque mmi xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2451911 01 i 1 01/01/2001 die i mensis i annoque mmi 01 i 2001} +test clock-2.1466 {conversion of 2001-01-31} { + clock format 980944496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2001 12:34:56 die xxxi mensis i annoque mmi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2451941 01 i 1 01/31/2001 die xxxi mensis i annoque mmi 01 i 2001} +test clock-2.1467 {conversion of 2001-02-01} { + clock format 981030896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2001 12:34:56 die i mensis ii annoque mmi xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2451942 02 ii 2 02/01/2001 die i mensis ii annoque mmi 01 i 2001} +test clock-2.1468 {conversion of 2001-02-28} { + clock format 983363696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2001 12:34:56 die xxviii mensis ii annoque mmi xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2451969 02 ii 2 02/28/2001 die xxviii mensis ii annoque mmi 01 i 2001} +test clock-2.1469 {conversion of 2001-03-01} { + clock format 983450096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2001 12:34:56 die i mensis iii annoque mmi xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2451970 03 iii 3 03/01/2001 die i mensis iii annoque mmi 01 i 2001} +test clock-2.1470 {conversion of 2001-03-31} { + clock format 986042096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2001 12:34:56 die xxxi mensis iii annoque mmi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2452000 03 iii 3 03/31/2001 die xxxi mensis iii annoque mmi 01 i 2001} +test clock-2.1471 {conversion of 2001-04-01} { + clock format 986128496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2001 12:34:56 die i mensis iv annoque mmi xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2452001 04 iv 4 04/01/2001 die i mensis iv annoque mmi 01 i 2001} +test clock-2.1472 {conversion of 2001-04-30} { + clock format 988634096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2001 12:34:56 die xxx mensis iv annoque mmi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2452030 04 iv 4 04/30/2001 die xxx mensis iv annoque mmi 01 i 2001} +test clock-2.1473 {conversion of 2001-05-01} { + clock format 988720496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2001 12:34:56 die i mensis v annoque mmi xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2452031 05 v 5 05/01/2001 die i mensis v annoque mmi 01 i 2001} +test clock-2.1474 {conversion of 2001-05-31} { + clock format 991312496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2001 12:34:56 die xxxi mensis v annoque mmi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2452061 05 v 5 05/31/2001 die xxxi mensis v annoque mmi 01 i 2001} +test clock-2.1475 {conversion of 2001-06-01} { + clock format 991398896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2001 12:34:56 die i mensis vi annoque mmi xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2452062 06 vi 6 06/01/2001 die i mensis vi annoque mmi 01 i 2001} +test clock-2.1476 {conversion of 2001-06-30} { + clock format 993904496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2001 12:34:56 die xxx mensis vi annoque mmi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2452091 06 vi 6 06/30/2001 die xxx mensis vi annoque mmi 01 i 2001} +test clock-2.1477 {conversion of 2001-07-01} { + clock format 993990896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2001 12:34:56 die i mensis vii annoque mmi xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2452092 07 vii 7 07/01/2001 die i mensis vii annoque mmi 01 i 2001} +test clock-2.1478 {conversion of 2001-07-31} { + clock format 996582896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2001 12:34:56 die xxxi mensis vii annoque mmi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2452122 07 vii 7 07/31/2001 die xxxi mensis vii annoque mmi 01 i 2001} +test clock-2.1479 {conversion of 2001-08-01} { + clock format 996669296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2001 12:34:56 die i mensis viii annoque mmi xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2452123 08 viii 8 08/01/2001 die i mensis viii annoque mmi 01 i 2001} +test clock-2.1480 {conversion of 2001-08-31} { + clock format 999261296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2001 12:34:56 die xxxi mensis viii annoque mmi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2452153 08 viii 8 08/31/2001 die xxxi mensis viii annoque mmi 01 i 2001} +test clock-2.1481 {conversion of 2001-09-01} { + clock format 999347696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2001 12:34:56 die i mensis ix annoque mmi xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2452154 09 ix 9 09/01/2001 die i mensis ix annoque mmi 01 i 2001} +test clock-2.1482 {conversion of 2001-09-30} { + clock format 1001853296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2001 12:34:56 die xxx mensis ix annoque mmi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2452183 09 ix 9 09/30/2001 die xxx mensis ix annoque mmi 01 i 2001} +test clock-2.1483 {conversion of 2001-10-01} { + clock format 1001939696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2001 12:34:56 die i mensis x annoque mmi xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2452184 10 x 10 10/01/2001 die i mensis x annoque mmi 01 i 2001} +test clock-2.1484 {conversion of 2001-10-31} { + clock format 1004531696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2001 12:34:56 die xxxi mensis x annoque mmi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2452214 10 x 10 10/31/2001 die xxxi mensis x annoque mmi 01 i 2001} +test clock-2.1485 {conversion of 2001-11-01} { + clock format 1004618096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2001 12:34:56 die i mensis xi annoque mmi xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2452215 11 xi 11 11/01/2001 die i mensis xi annoque mmi 01 i 2001} +test clock-2.1486 {conversion of 2001-11-30} { + clock format 1007123696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2001 12:34:56 die xxx mensis xi annoque mmi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2452244 11 xi 11 11/30/2001 die xxx mensis xi annoque mmi 01 i 2001} +test clock-2.1487 {conversion of 2001-12-01} { + clock format 1007210096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2001 12:34:56 die i mensis xii annoque mmi xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2452245 12 xii 12 12/01/2001 die i mensis xii annoque mmi 01 i 2001} +test clock-2.1488 {conversion of 2001-12-31} { + clock format 1009802096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2001 12:34:56 die xxxi mensis xii annoque mmi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2452275 12 xii 12 12/31/2001 die xxxi mensis xii annoque mmi 01 i 2001} +test clock-2.1489 {conversion of 2002-01-01} { + clock format 1009888496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2002 12:34:56 die i mensis i annoque mmii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2452276 01 i 1 01/01/2002 die i mensis i annoque mmii 02 ii 2002} +test clock-2.1490 {conversion of 2002-01-31} { + clock format 1012480496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2002 12:34:56 die xxxi mensis i annoque mmii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2452306 01 i 1 01/31/2002 die xxxi mensis i annoque mmii 02 ii 2002} +test clock-2.1491 {conversion of 2002-02-01} { + clock format 1012566896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2002 12:34:56 die i mensis ii annoque mmii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2452307 02 ii 2 02/01/2002 die i mensis ii annoque mmii 02 ii 2002} +test clock-2.1492 {conversion of 2002-02-28} { + clock format 1014899696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2002 12:34:56 die xxviii mensis ii annoque mmii xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2452334 02 ii 2 02/28/2002 die xxviii mensis ii annoque mmii 02 ii 2002} +test clock-2.1493 {conversion of 2002-03-01} { + clock format 1014986096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2002 12:34:56 die i mensis iii annoque mmii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2452335 03 iii 3 03/01/2002 die i mensis iii annoque mmii 02 ii 2002} +test clock-2.1494 {conversion of 2002-03-31} { + clock format 1017578096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2002 12:34:56 die xxxi mensis iii annoque mmii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2452365 03 iii 3 03/31/2002 die xxxi mensis iii annoque mmii 02 ii 2002} +test clock-2.1495 {conversion of 2002-04-01} { + clock format 1017664496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2002 12:34:56 die i mensis iv annoque mmii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2452366 04 iv 4 04/01/2002 die i mensis iv annoque mmii 02 ii 2002} +test clock-2.1496 {conversion of 2002-04-30} { + clock format 1020170096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2002 12:34:56 die xxx mensis iv annoque mmii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2452395 04 iv 4 04/30/2002 die xxx mensis iv annoque mmii 02 ii 2002} +test clock-2.1497 {conversion of 2002-05-01} { + clock format 1020256496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2002 12:34:56 die i mensis v annoque mmii xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2452396 05 v 5 05/01/2002 die i mensis v annoque mmii 02 ii 2002} +test clock-2.1498 {conversion of 2002-05-31} { + clock format 1022848496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2002 12:34:56 die xxxi mensis v annoque mmii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2452426 05 v 5 05/31/2002 die xxxi mensis v annoque mmii 02 ii 2002} +test clock-2.1499 {conversion of 2002-06-01} { + clock format 1022934896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2002 12:34:56 die i mensis vi annoque mmii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2452427 06 vi 6 06/01/2002 die i mensis vi annoque mmii 02 ii 2002} +test clock-2.1500 {conversion of 2002-06-30} { + clock format 1025440496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2002 12:34:56 die xxx mensis vi annoque mmii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2452456 06 vi 6 06/30/2002 die xxx mensis vi annoque mmii 02 ii 2002} +test clock-2.1501 {conversion of 2002-07-01} { + clock format 1025526896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2002 12:34:56 die i mensis vii annoque mmii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2452457 07 vii 7 07/01/2002 die i mensis vii annoque mmii 02 ii 2002} +test clock-2.1502 {conversion of 2002-07-31} { + clock format 1028118896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2002 12:34:56 die xxxi mensis vii annoque mmii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2452487 07 vii 7 07/31/2002 die xxxi mensis vii annoque mmii 02 ii 2002} +test clock-2.1503 {conversion of 2002-08-01} { + clock format 1028205296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2002 12:34:56 die i mensis viii annoque mmii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2452488 08 viii 8 08/01/2002 die i mensis viii annoque mmii 02 ii 2002} +test clock-2.1504 {conversion of 2002-08-31} { + clock format 1030797296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2002 12:34:56 die xxxi mensis viii annoque mmii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2452518 08 viii 8 08/31/2002 die xxxi mensis viii annoque mmii 02 ii 2002} +test clock-2.1505 {conversion of 2002-09-01} { + clock format 1030883696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2002 12:34:56 die i mensis ix annoque mmii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2452519 09 ix 9 09/01/2002 die i mensis ix annoque mmii 02 ii 2002} +test clock-2.1506 {conversion of 2002-09-30} { + clock format 1033389296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2002 12:34:56 die xxx mensis ix annoque mmii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2452548 09 ix 9 09/30/2002 die xxx mensis ix annoque mmii 02 ii 2002} +test clock-2.1507 {conversion of 2002-10-01} { + clock format 1033475696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2002 12:34:56 die i mensis x annoque mmii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2452549 10 x 10 10/01/2002 die i mensis x annoque mmii 02 ii 2002} +test clock-2.1508 {conversion of 2002-10-31} { + clock format 1036067696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2002 12:34:56 die xxxi mensis x annoque mmii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2452579 10 x 10 10/31/2002 die xxxi mensis x annoque mmii 02 ii 2002} +test clock-2.1509 {conversion of 2002-11-01} { + clock format 1036154096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2002 12:34:56 die i mensis xi annoque mmii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2452580 11 xi 11 11/01/2002 die i mensis xi annoque mmii 02 ii 2002} +test clock-2.1510 {conversion of 2002-11-30} { + clock format 1038659696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2002 12:34:56 die xxx mensis xi annoque mmii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2452609 11 xi 11 11/30/2002 die xxx mensis xi annoque mmii 02 ii 2002} +test clock-2.1511 {conversion of 2002-12-01} { + clock format 1038746096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2002 12:34:56 die i mensis xii annoque mmii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2452610 12 xii 12 12/01/2002 die i mensis xii annoque mmii 02 ii 2002} +test clock-2.1512 {conversion of 2002-12-31} { + clock format 1041338096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2002 12:34:56 die xxxi mensis xii annoque mmii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2452640 12 xii 12 12/31/2002 die xxxi mensis xii annoque mmii 02 ii 2002} +test clock-2.1513 {conversion of 2003-01-01} { + clock format 1041424496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2003 12:34:56 die i mensis i annoque mmiii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2452641 01 i 1 01/01/2003 die i mensis i annoque mmiii 03 iii 2003} +test clock-2.1514 {conversion of 2003-01-31} { + clock format 1044016496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2003 12:34:56 die xxxi mensis i annoque mmiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2452671 01 i 1 01/31/2003 die xxxi mensis i annoque mmiii 03 iii 2003} +test clock-2.1515 {conversion of 2003-02-01} { + clock format 1044102896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2003 12:34:56 die i mensis ii annoque mmiii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2452672 02 ii 2 02/01/2003 die i mensis ii annoque mmiii 03 iii 2003} +test clock-2.1516 {conversion of 2003-02-28} { + clock format 1046435696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2003 12:34:56 die xxviii mensis ii annoque mmiii xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2452699 02 ii 2 02/28/2003 die xxviii mensis ii annoque mmiii 03 iii 2003} +test clock-2.1517 {conversion of 2003-03-01} { + clock format 1046522096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2003 12:34:56 die i mensis iii annoque mmiii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2452700 03 iii 3 03/01/2003 die i mensis iii annoque mmiii 03 iii 2003} +test clock-2.1518 {conversion of 2003-03-31} { + clock format 1049114096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2003 12:34:56 die xxxi mensis iii annoque mmiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2452730 03 iii 3 03/31/2003 die xxxi mensis iii annoque mmiii 03 iii 2003} +test clock-2.1519 {conversion of 2003-04-01} { + clock format 1049200496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2003 12:34:56 die i mensis iv annoque mmiii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2452731 04 iv 4 04/01/2003 die i mensis iv annoque mmiii 03 iii 2003} +test clock-2.1520 {conversion of 2003-04-30} { + clock format 1051706096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2003 12:34:56 die xxx mensis iv annoque mmiii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2452760 04 iv 4 04/30/2003 die xxx mensis iv annoque mmiii 03 iii 2003} +test clock-2.1521 {conversion of 2003-05-01} { + clock format 1051792496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2003 12:34:56 die i mensis v annoque mmiii xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2452761 05 v 5 05/01/2003 die i mensis v annoque mmiii 03 iii 2003} +test clock-2.1522 {conversion of 2003-05-31} { + clock format 1054384496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2003 12:34:56 die xxxi mensis v annoque mmiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2452791 05 v 5 05/31/2003 die xxxi mensis v annoque mmiii 03 iii 2003} +test clock-2.1523 {conversion of 2003-06-01} { + clock format 1054470896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2003 12:34:56 die i mensis vi annoque mmiii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2452792 06 vi 6 06/01/2003 die i mensis vi annoque mmiii 03 iii 2003} +test clock-2.1524 {conversion of 2003-06-30} { + clock format 1056976496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2003 12:34:56 die xxx mensis vi annoque mmiii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2452821 06 vi 6 06/30/2003 die xxx mensis vi annoque mmiii 03 iii 2003} +test clock-2.1525 {conversion of 2003-07-01} { + clock format 1057062896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2003 12:34:56 die i mensis vii annoque mmiii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2452822 07 vii 7 07/01/2003 die i mensis vii annoque mmiii 03 iii 2003} +test clock-2.1526 {conversion of 2003-07-31} { + clock format 1059654896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2003 12:34:56 die xxxi mensis vii annoque mmiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2452852 07 vii 7 07/31/2003 die xxxi mensis vii annoque mmiii 03 iii 2003} +test clock-2.1527 {conversion of 2003-08-01} { + clock format 1059741296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2003 12:34:56 die i mensis viii annoque mmiii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2452853 08 viii 8 08/01/2003 die i mensis viii annoque mmiii 03 iii 2003} +test clock-2.1528 {conversion of 2003-08-31} { + clock format 1062333296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2003 12:34:56 die xxxi mensis viii annoque mmiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2452883 08 viii 8 08/31/2003 die xxxi mensis viii annoque mmiii 03 iii 2003} +test clock-2.1529 {conversion of 2003-09-01} { + clock format 1062419696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2003 12:34:56 die i mensis ix annoque mmiii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2452884 09 ix 9 09/01/2003 die i mensis ix annoque mmiii 03 iii 2003} +test clock-2.1530 {conversion of 2003-09-30} { + clock format 1064925296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2003 12:34:56 die xxx mensis ix annoque mmiii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2452913 09 ix 9 09/30/2003 die xxx mensis ix annoque mmiii 03 iii 2003} +test clock-2.1531 {conversion of 2003-10-01} { + clock format 1065011696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2003 12:34:56 die i mensis x annoque mmiii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2452914 10 x 10 10/01/2003 die i mensis x annoque mmiii 03 iii 2003} +test clock-2.1532 {conversion of 2003-10-31} { + clock format 1067603696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2003 12:34:56 die xxxi mensis x annoque mmiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2452944 10 x 10 10/31/2003 die xxxi mensis x annoque mmiii 03 iii 2003} +test clock-2.1533 {conversion of 2003-11-01} { + clock format 1067690096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2003 12:34:56 die i mensis xi annoque mmiii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2452945 11 xi 11 11/01/2003 die i mensis xi annoque mmiii 03 iii 2003} +test clock-2.1534 {conversion of 2003-11-30} { + clock format 1070195696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2003 12:34:56 die xxx mensis xi annoque mmiii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2452974 11 xi 11 11/30/2003 die xxx mensis xi annoque mmiii 03 iii 2003} +test clock-2.1535 {conversion of 2003-12-01} { + clock format 1070282096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2003 12:34:56 die i mensis xii annoque mmiii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2452975 12 xii 12 12/01/2003 die i mensis xii annoque mmiii 03 iii 2003} +test clock-2.1536 {conversion of 2003-12-31} { + clock format 1072874096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2003 12:34:56 die xxxi mensis xii annoque mmiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2453005 12 xii 12 12/31/2003 die xxxi mensis xii annoque mmiii 03 iii 2003} +test clock-2.1537 {conversion of 2004-01-01} { + clock format 1072960496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2004 12:34:56 die i mensis i annoque mmiv xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2453006 01 i 1 01/01/2004 die i mensis i annoque mmiv 04 iv 2004} +test clock-2.1538 {conversion of 2004-01-31} { + clock format 1075552496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2004 12:34:56 die xxxi mensis i annoque mmiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2453036 01 i 1 01/31/2004 die xxxi mensis i annoque mmiv 04 iv 2004} +test clock-2.1539 {conversion of 2004-02-01} { + clock format 1075638896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2004 12:34:56 die i mensis ii annoque mmiv xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2453037 02 ii 2 02/01/2004 die i mensis ii annoque mmiv 04 iv 2004} +test clock-2.1540 {conversion of 2004-02-29} { + clock format 1078058096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2004 12:34:56 die xxix mensis ii annoque mmiv xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2453065 02 ii 2 02/29/2004 die xxix mensis ii annoque mmiv 04 iv 2004} +test clock-2.1541 {conversion of 2004-03-01} { + clock format 1078144496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2004 12:34:56 die i mensis iii annoque mmiv xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2453066 03 iii 3 03/01/2004 die i mensis iii annoque mmiv 04 iv 2004} +test clock-2.1542 {conversion of 2004-03-31} { + clock format 1080736496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2004 12:34:56 die xxxi mensis iii annoque mmiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2453096 03 iii 3 03/31/2004 die xxxi mensis iii annoque mmiv 04 iv 2004} +test clock-2.1543 {conversion of 2004-04-01} { + clock format 1080822896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2004 12:34:56 die i mensis iv annoque mmiv xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2453097 04 iv 4 04/01/2004 die i mensis iv annoque mmiv 04 iv 2004} +test clock-2.1544 {conversion of 2004-04-30} { + clock format 1083328496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2004 12:34:56 die xxx mensis iv annoque mmiv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2453126 04 iv 4 04/30/2004 die xxx mensis iv annoque mmiv 04 iv 2004} +test clock-2.1545 {conversion of 2004-05-01} { + clock format 1083414896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2004 12:34:56 die i mensis v annoque mmiv xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2453127 05 v 5 05/01/2004 die i mensis v annoque mmiv 04 iv 2004} +test clock-2.1546 {conversion of 2004-05-31} { + clock format 1086006896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2004 12:34:56 die xxxi mensis v annoque mmiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2453157 05 v 5 05/31/2004 die xxxi mensis v annoque mmiv 04 iv 2004} +test clock-2.1547 {conversion of 2004-06-01} { + clock format 1086093296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2004 12:34:56 die i mensis vi annoque mmiv xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2453158 06 vi 6 06/01/2004 die i mensis vi annoque mmiv 04 iv 2004} +test clock-2.1548 {conversion of 2004-06-30} { + clock format 1088598896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2004 12:34:56 die xxx mensis vi annoque mmiv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2453187 06 vi 6 06/30/2004 die xxx mensis vi annoque mmiv 04 iv 2004} +test clock-2.1549 {conversion of 2004-07-01} { + clock format 1088685296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2004 12:34:56 die i mensis vii annoque mmiv xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2453188 07 vii 7 07/01/2004 die i mensis vii annoque mmiv 04 iv 2004} +test clock-2.1550 {conversion of 2004-07-31} { + clock format 1091277296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2004 12:34:56 die xxxi mensis vii annoque mmiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2453218 07 vii 7 07/31/2004 die xxxi mensis vii annoque mmiv 04 iv 2004} +test clock-2.1551 {conversion of 2004-08-01} { + clock format 1091363696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2004 12:34:56 die i mensis viii annoque mmiv xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2453219 08 viii 8 08/01/2004 die i mensis viii annoque mmiv 04 iv 2004} +test clock-2.1552 {conversion of 2004-08-31} { + clock format 1093955696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2004 12:34:56 die xxxi mensis viii annoque mmiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2453249 08 viii 8 08/31/2004 die xxxi mensis viii annoque mmiv 04 iv 2004} +test clock-2.1553 {conversion of 2004-09-01} { + clock format 1094042096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2004 12:34:56 die i mensis ix annoque mmiv xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2453250 09 ix 9 09/01/2004 die i mensis ix annoque mmiv 04 iv 2004} +test clock-2.1554 {conversion of 2004-09-30} { + clock format 1096547696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2004 12:34:56 die xxx mensis ix annoque mmiv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2453279 09 ix 9 09/30/2004 die xxx mensis ix annoque mmiv 04 iv 2004} +test clock-2.1555 {conversion of 2004-10-01} { + clock format 1096634096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2004 12:34:56 die i mensis x annoque mmiv xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2453280 10 x 10 10/01/2004 die i mensis x annoque mmiv 04 iv 2004} +test clock-2.1556 {conversion of 2004-10-31} { + clock format 1099226096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2004 12:34:56 die xxxi mensis x annoque mmiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2453310 10 x 10 10/31/2004 die xxxi mensis x annoque mmiv 04 iv 2004} +test clock-2.1557 {conversion of 2004-11-01} { + clock format 1099312496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2004 12:34:56 die i mensis xi annoque mmiv xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2453311 11 xi 11 11/01/2004 die i mensis xi annoque mmiv 04 iv 2004} +test clock-2.1558 {conversion of 2004-11-30} { + clock format 1101818096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2004 12:34:56 die xxx mensis xi annoque mmiv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2453340 11 xi 11 11/30/2004 die xxx mensis xi annoque mmiv 04 iv 2004} +test clock-2.1559 {conversion of 2004-12-01} { + clock format 1101904496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2004 12:34:56 die i mensis xii annoque mmiv xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2453341 12 xii 12 12/01/2004 die i mensis xii annoque mmiv 04 iv 2004} +test clock-2.1560 {conversion of 2004-12-31} { + clock format 1104496496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2004 12:34:56 die xxxi mensis xii annoque mmiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2453371 12 xii 12 12/31/2004 die xxxi mensis xii annoque mmiv 04 iv 2004} +test clock-2.1561 {conversion of 2005-01-01} { + clock format 1104582896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2005 12:34:56 die i mensis i annoque mmv xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2453372 01 i 1 01/01/2005 die i mensis i annoque mmv 05 v 2005} +test clock-2.1562 {conversion of 2005-01-31} { + clock format 1107174896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2005 12:34:56 die xxxi mensis i annoque mmv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2453402 01 i 1 01/31/2005 die xxxi mensis i annoque mmv 05 v 2005} +test clock-2.1563 {conversion of 2005-02-01} { + clock format 1107261296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2005 12:34:56 die i mensis ii annoque mmv xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2453403 02 ii 2 02/01/2005 die i mensis ii annoque mmv 05 v 2005} +test clock-2.1564 {conversion of 2005-02-28} { + clock format 1109594096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2005 12:34:56 die xxviii mensis ii annoque mmv xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2453430 02 ii 2 02/28/2005 die xxviii mensis ii annoque mmv 05 v 2005} +test clock-2.1565 {conversion of 2005-03-01} { + clock format 1109680496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2005 12:34:56 die i mensis iii annoque mmv xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2453431 03 iii 3 03/01/2005 die i mensis iii annoque mmv 05 v 2005} +test clock-2.1566 {conversion of 2005-03-31} { + clock format 1112272496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2005 12:34:56 die xxxi mensis iii annoque mmv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2453461 03 iii 3 03/31/2005 die xxxi mensis iii annoque mmv 05 v 2005} +test clock-2.1567 {conversion of 2005-04-01} { + clock format 1112358896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2005 12:34:56 die i mensis iv annoque mmv xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2453462 04 iv 4 04/01/2005 die i mensis iv annoque mmv 05 v 2005} +test clock-2.1568 {conversion of 2005-04-30} { + clock format 1114864496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2005 12:34:56 die xxx mensis iv annoque mmv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2453491 04 iv 4 04/30/2005 die xxx mensis iv annoque mmv 05 v 2005} +test clock-2.1569 {conversion of 2005-05-01} { + clock format 1114950896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2005 12:34:56 die i mensis v annoque mmv xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2453492 05 v 5 05/01/2005 die i mensis v annoque mmv 05 v 2005} +test clock-2.1570 {conversion of 2005-05-31} { + clock format 1117542896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2005 12:34:56 die xxxi mensis v annoque mmv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2453522 05 v 5 05/31/2005 die xxxi mensis v annoque mmv 05 v 2005} +test clock-2.1571 {conversion of 2005-06-01} { + clock format 1117629296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2005 12:34:56 die i mensis vi annoque mmv xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2453523 06 vi 6 06/01/2005 die i mensis vi annoque mmv 05 v 2005} +test clock-2.1572 {conversion of 2005-06-30} { + clock format 1120134896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2005 12:34:56 die xxx mensis vi annoque mmv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2453552 06 vi 6 06/30/2005 die xxx mensis vi annoque mmv 05 v 2005} +test clock-2.1573 {conversion of 2005-07-01} { + clock format 1120221296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2005 12:34:56 die i mensis vii annoque mmv xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2453553 07 vii 7 07/01/2005 die i mensis vii annoque mmv 05 v 2005} +test clock-2.1574 {conversion of 2005-07-31} { + clock format 1122813296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2005 12:34:56 die xxxi mensis vii annoque mmv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2453583 07 vii 7 07/31/2005 die xxxi mensis vii annoque mmv 05 v 2005} +test clock-2.1575 {conversion of 2005-08-01} { + clock format 1122899696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2005 12:34:56 die i mensis viii annoque mmv xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2453584 08 viii 8 08/01/2005 die i mensis viii annoque mmv 05 v 2005} +test clock-2.1576 {conversion of 2005-08-31} { + clock format 1125491696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2005 12:34:56 die xxxi mensis viii annoque mmv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2453614 08 viii 8 08/31/2005 die xxxi mensis viii annoque mmv 05 v 2005} +test clock-2.1577 {conversion of 2005-09-01} { + clock format 1125578096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2005 12:34:56 die i mensis ix annoque mmv xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2453615 09 ix 9 09/01/2005 die i mensis ix annoque mmv 05 v 2005} +test clock-2.1578 {conversion of 2005-09-30} { + clock format 1128083696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2005 12:34:56 die xxx mensis ix annoque mmv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2453644 09 ix 9 09/30/2005 die xxx mensis ix annoque mmv 05 v 2005} +test clock-2.1579 {conversion of 2005-10-01} { + clock format 1128170096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2005 12:34:56 die i mensis x annoque mmv xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2453645 10 x 10 10/01/2005 die i mensis x annoque mmv 05 v 2005} +test clock-2.1580 {conversion of 2005-10-31} { + clock format 1130762096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2005 12:34:56 die xxxi mensis x annoque mmv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2453675 10 x 10 10/31/2005 die xxxi mensis x annoque mmv 05 v 2005} +test clock-2.1581 {conversion of 2005-11-01} { + clock format 1130848496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2005 12:34:56 die i mensis xi annoque mmv xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2453676 11 xi 11 11/01/2005 die i mensis xi annoque mmv 05 v 2005} +test clock-2.1582 {conversion of 2005-11-30} { + clock format 1133354096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2005 12:34:56 die xxx mensis xi annoque mmv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2453705 11 xi 11 11/30/2005 die xxx mensis xi annoque mmv 05 v 2005} +test clock-2.1583 {conversion of 2005-12-01} { + clock format 1133440496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2005 12:34:56 die i mensis xii annoque mmv xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2453706 12 xii 12 12/01/2005 die i mensis xii annoque mmv 05 v 2005} +test clock-2.1584 {conversion of 2005-12-31} { + clock format 1136032496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2005 12:34:56 die xxxi mensis xii annoque mmv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2453736 12 xii 12 12/31/2005 die xxxi mensis xii annoque mmv 05 v 2005} +test clock-2.1585 {conversion of 2006-01-01} { + clock format 1136118896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2006 12:34:56 die i mensis i annoque mmvi xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2453737 01 i 1 01/01/2006 die i mensis i annoque mmvi 06 vi 2006} +test clock-2.1586 {conversion of 2006-01-31} { + clock format 1138710896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2006 12:34:56 die xxxi mensis i annoque mmvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2453767 01 i 1 01/31/2006 die xxxi mensis i annoque mmvi 06 vi 2006} +test clock-2.1587 {conversion of 2006-02-01} { + clock format 1138797296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2006 12:34:56 die i mensis ii annoque mmvi xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2453768 02 ii 2 02/01/2006 die i mensis ii annoque mmvi 06 vi 2006} +test clock-2.1588 {conversion of 2006-02-28} { + clock format 1141130096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2006 12:34:56 die xxviii mensis ii annoque mmvi xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2453795 02 ii 2 02/28/2006 die xxviii mensis ii annoque mmvi 06 vi 2006} +test clock-2.1589 {conversion of 2006-03-01} { + clock format 1141216496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2006 12:34:56 die i mensis iii annoque mmvi xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2453796 03 iii 3 03/01/2006 die i mensis iii annoque mmvi 06 vi 2006} +test clock-2.1590 {conversion of 2006-03-31} { + clock format 1143808496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2006 12:34:56 die xxxi mensis iii annoque mmvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2453826 03 iii 3 03/31/2006 die xxxi mensis iii annoque mmvi 06 vi 2006} +test clock-2.1591 {conversion of 2006-04-01} { + clock format 1143894896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2006 12:34:56 die i mensis iv annoque mmvi xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2453827 04 iv 4 04/01/2006 die i mensis iv annoque mmvi 06 vi 2006} +test clock-2.1592 {conversion of 2006-04-30} { + clock format 1146400496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2006 12:34:56 die xxx mensis iv annoque mmvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2453856 04 iv 4 04/30/2006 die xxx mensis iv annoque mmvi 06 vi 2006} +test clock-2.1593 {conversion of 2006-05-01} { + clock format 1146486896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2006 12:34:56 die i mensis v annoque mmvi xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2453857 05 v 5 05/01/2006 die i mensis v annoque mmvi 06 vi 2006} +test clock-2.1594 {conversion of 2006-05-31} { + clock format 1149078896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2006 12:34:56 die xxxi mensis v annoque mmvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2453887 05 v 5 05/31/2006 die xxxi mensis v annoque mmvi 06 vi 2006} +test clock-2.1595 {conversion of 2006-06-01} { + clock format 1149165296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2006 12:34:56 die i mensis vi annoque mmvi xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2453888 06 vi 6 06/01/2006 die i mensis vi annoque mmvi 06 vi 2006} +test clock-2.1596 {conversion of 2006-06-30} { + clock format 1151670896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2006 12:34:56 die xxx mensis vi annoque mmvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2453917 06 vi 6 06/30/2006 die xxx mensis vi annoque mmvi 06 vi 2006} +test clock-2.1597 {conversion of 2006-07-01} { + clock format 1151757296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2006 12:34:56 die i mensis vii annoque mmvi xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2453918 07 vii 7 07/01/2006 die i mensis vii annoque mmvi 06 vi 2006} +test clock-2.1598 {conversion of 2006-07-31} { + clock format 1154349296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2006 12:34:56 die xxxi mensis vii annoque mmvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2453948 07 vii 7 07/31/2006 die xxxi mensis vii annoque mmvi 06 vi 2006} +test clock-2.1599 {conversion of 2006-08-01} { + clock format 1154435696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2006 12:34:56 die i mensis viii annoque mmvi xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2453949 08 viii 8 08/01/2006 die i mensis viii annoque mmvi 06 vi 2006} +test clock-2.1600 {conversion of 2006-08-31} { + clock format 1157027696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2006 12:34:56 die xxxi mensis viii annoque mmvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2453979 08 viii 8 08/31/2006 die xxxi mensis viii annoque mmvi 06 vi 2006} +test clock-2.1601 {conversion of 2006-09-01} { + clock format 1157114096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2006 12:34:56 die i mensis ix annoque mmvi xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2453980 09 ix 9 09/01/2006 die i mensis ix annoque mmvi 06 vi 2006} +test clock-2.1602 {conversion of 2006-09-30} { + clock format 1159619696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2006 12:34:56 die xxx mensis ix annoque mmvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2454009 09 ix 9 09/30/2006 die xxx mensis ix annoque mmvi 06 vi 2006} +test clock-2.1603 {conversion of 2006-10-01} { + clock format 1159706096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2006 12:34:56 die i mensis x annoque mmvi xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2454010 10 x 10 10/01/2006 die i mensis x annoque mmvi 06 vi 2006} +test clock-2.1604 {conversion of 2006-10-31} { + clock format 1162298096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2006 12:34:56 die xxxi mensis x annoque mmvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2454040 10 x 10 10/31/2006 die xxxi mensis x annoque mmvi 06 vi 2006} +test clock-2.1605 {conversion of 2006-11-01} { + clock format 1162384496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2006 12:34:56 die i mensis xi annoque mmvi xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2454041 11 xi 11 11/01/2006 die i mensis xi annoque mmvi 06 vi 2006} +test clock-2.1606 {conversion of 2006-11-30} { + clock format 1164890096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2006 12:34:56 die xxx mensis xi annoque mmvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2454070 11 xi 11 11/30/2006 die xxx mensis xi annoque mmvi 06 vi 2006} +test clock-2.1607 {conversion of 2006-12-01} { + clock format 1164976496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2006 12:34:56 die i mensis xii annoque mmvi xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2454071 12 xii 12 12/01/2006 die i mensis xii annoque mmvi 06 vi 2006} +test clock-2.1608 {conversion of 2006-12-31} { + clock format 1167568496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2006 12:34:56 die xxxi mensis xii annoque mmvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2454101 12 xii 12 12/31/2006 die xxxi mensis xii annoque mmvi 06 vi 2006} +test clock-2.1609 {conversion of 2007-01-01} { + clock format 1167654896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2007 12:34:56 die i mensis i annoque mmvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2454102 01 i 1 01/01/2007 die i mensis i annoque mmvii 07 vii 2007} +test clock-2.1610 {conversion of 2007-01-31} { + clock format 1170246896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2007 12:34:56 die xxxi mensis i annoque mmvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2454132 01 i 1 01/31/2007 die xxxi mensis i annoque mmvii 07 vii 2007} +test clock-2.1611 {conversion of 2007-02-01} { + clock format 1170333296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2007 12:34:56 die i mensis ii annoque mmvii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2454133 02 ii 2 02/01/2007 die i mensis ii annoque mmvii 07 vii 2007} +test clock-2.1612 {conversion of 2007-02-28} { + clock format 1172666096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2007 12:34:56 die xxviii mensis ii annoque mmvii xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2454160 02 ii 2 02/28/2007 die xxviii mensis ii annoque mmvii 07 vii 2007} +test clock-2.1613 {conversion of 2007-03-01} { + clock format 1172752496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2007 12:34:56 die i mensis iii annoque mmvii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2454161 03 iii 3 03/01/2007 die i mensis iii annoque mmvii 07 vii 2007} +test clock-2.1614 {conversion of 2007-03-31} { + clock format 1175344496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2007 12:34:56 die xxxi mensis iii annoque mmvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2454191 03 iii 3 03/31/2007 die xxxi mensis iii annoque mmvii 07 vii 2007} +test clock-2.1615 {conversion of 2007-04-01} { + clock format 1175430896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2007 12:34:56 die i mensis iv annoque mmvii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2454192 04 iv 4 04/01/2007 die i mensis iv annoque mmvii 07 vii 2007} +test clock-2.1616 {conversion of 2007-04-30} { + clock format 1177936496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2007 12:34:56 die xxx mensis iv annoque mmvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2454221 04 iv 4 04/30/2007 die xxx mensis iv annoque mmvii 07 vii 2007} +test clock-2.1617 {conversion of 2007-05-01} { + clock format 1178022896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2007 12:34:56 die i mensis v annoque mmvii xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2454222 05 v 5 05/01/2007 die i mensis v annoque mmvii 07 vii 2007} +test clock-2.1618 {conversion of 2007-05-31} { + clock format 1180614896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2007 12:34:56 die xxxi mensis v annoque mmvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2454252 05 v 5 05/31/2007 die xxxi mensis v annoque mmvii 07 vii 2007} +test clock-2.1619 {conversion of 2007-06-01} { + clock format 1180701296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2007 12:34:56 die i mensis vi annoque mmvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2454253 06 vi 6 06/01/2007 die i mensis vi annoque mmvii 07 vii 2007} +test clock-2.1620 {conversion of 2007-06-30} { + clock format 1183206896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2007 12:34:56 die xxx mensis vi annoque mmvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2454282 06 vi 6 06/30/2007 die xxx mensis vi annoque mmvii 07 vii 2007} +test clock-2.1621 {conversion of 2007-07-01} { + clock format 1183293296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2007 12:34:56 die i mensis vii annoque mmvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2454283 07 vii 7 07/01/2007 die i mensis vii annoque mmvii 07 vii 2007} +test clock-2.1622 {conversion of 2007-07-31} { + clock format 1185885296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2007 12:34:56 die xxxi mensis vii annoque mmvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2454313 07 vii 7 07/31/2007 die xxxi mensis vii annoque mmvii 07 vii 2007} +test clock-2.1623 {conversion of 2007-08-01} { + clock format 1185971696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2007 12:34:56 die i mensis viii annoque mmvii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2454314 08 viii 8 08/01/2007 die i mensis viii annoque mmvii 07 vii 2007} +test clock-2.1624 {conversion of 2007-08-31} { + clock format 1188563696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2007 12:34:56 die xxxi mensis viii annoque mmvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2454344 08 viii 8 08/31/2007 die xxxi mensis viii annoque mmvii 07 vii 2007} +test clock-2.1625 {conversion of 2007-09-01} { + clock format 1188650096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2007 12:34:56 die i mensis ix annoque mmvii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2454345 09 ix 9 09/01/2007 die i mensis ix annoque mmvii 07 vii 2007} +test clock-2.1626 {conversion of 2007-09-30} { + clock format 1191155696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2007 12:34:56 die xxx mensis ix annoque mmvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2454374 09 ix 9 09/30/2007 die xxx mensis ix annoque mmvii 07 vii 2007} +test clock-2.1627 {conversion of 2007-10-01} { + clock format 1191242096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2007 12:34:56 die i mensis x annoque mmvii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2454375 10 x 10 10/01/2007 die i mensis x annoque mmvii 07 vii 2007} +test clock-2.1628 {conversion of 2007-10-31} { + clock format 1193834096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2007 12:34:56 die xxxi mensis x annoque mmvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2454405 10 x 10 10/31/2007 die xxxi mensis x annoque mmvii 07 vii 2007} +test clock-2.1629 {conversion of 2007-11-01} { + clock format 1193920496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2007 12:34:56 die i mensis xi annoque mmvii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2454406 11 xi 11 11/01/2007 die i mensis xi annoque mmvii 07 vii 2007} +test clock-2.1630 {conversion of 2007-11-30} { + clock format 1196426096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2007 12:34:56 die xxx mensis xi annoque mmvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2454435 11 xi 11 11/30/2007 die xxx mensis xi annoque mmvii 07 vii 2007} +test clock-2.1631 {conversion of 2007-12-01} { + clock format 1196512496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2007 12:34:56 die i mensis xii annoque mmvii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2454436 12 xii 12 12/01/2007 die i mensis xii annoque mmvii 07 vii 2007} +test clock-2.1632 {conversion of 2007-12-31} { + clock format 1199104496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2007 12:34:56 die xxxi mensis xii annoque mmvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2454466 12 xii 12 12/31/2007 die xxxi mensis xii annoque mmvii 07 vii 2007} +test clock-2.1633 {conversion of 2008-01-01} { + clock format 1199190896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2008 12:34:56 die i mensis i annoque mmviii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2454467 01 i 1 01/01/2008 die i mensis i annoque mmviii 08 viii 2008} +test clock-2.1634 {conversion of 2008-01-31} { + clock format 1201782896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2008 12:34:56 die xxxi mensis i annoque mmviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2454497 01 i 1 01/31/2008 die xxxi mensis i annoque mmviii 08 viii 2008} +test clock-2.1635 {conversion of 2008-02-01} { + clock format 1201869296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2008 12:34:56 die i mensis ii annoque mmviii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2454498 02 ii 2 02/01/2008 die i mensis ii annoque mmviii 08 viii 2008} +test clock-2.1636 {conversion of 2008-02-29} { + clock format 1204288496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2008 12:34:56 die xxix mensis ii annoque mmviii xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2454526 02 ii 2 02/29/2008 die xxix mensis ii annoque mmviii 08 viii 2008} +test clock-2.1637 {conversion of 2008-03-01} { + clock format 1204374896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2008 12:34:56 die i mensis iii annoque mmviii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2454527 03 iii 3 03/01/2008 die i mensis iii annoque mmviii 08 viii 2008} +test clock-2.1638 {conversion of 2008-03-31} { + clock format 1206966896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2008 12:34:56 die xxxi mensis iii annoque mmviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2454557 03 iii 3 03/31/2008 die xxxi mensis iii annoque mmviii 08 viii 2008} +test clock-2.1639 {conversion of 2008-04-01} { + clock format 1207053296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2008 12:34:56 die i mensis iv annoque mmviii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2454558 04 iv 4 04/01/2008 die i mensis iv annoque mmviii 08 viii 2008} +test clock-2.1640 {conversion of 2008-04-30} { + clock format 1209558896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2008 12:34:56 die xxx mensis iv annoque mmviii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2454587 04 iv 4 04/30/2008 die xxx mensis iv annoque mmviii 08 viii 2008} +test clock-2.1641 {conversion of 2008-05-01} { + clock format 1209645296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2008 12:34:56 die i mensis v annoque mmviii xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2454588 05 v 5 05/01/2008 die i mensis v annoque mmviii 08 viii 2008} +test clock-2.1642 {conversion of 2008-05-31} { + clock format 1212237296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2008 12:34:56 die xxxi mensis v annoque mmviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2454618 05 v 5 05/31/2008 die xxxi mensis v annoque mmviii 08 viii 2008} +test clock-2.1643 {conversion of 2008-06-01} { + clock format 1212323696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2008 12:34:56 die i mensis vi annoque mmviii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2454619 06 vi 6 06/01/2008 die i mensis vi annoque mmviii 08 viii 2008} +test clock-2.1644 {conversion of 2008-06-30} { + clock format 1214829296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2008 12:34:56 die xxx mensis vi annoque mmviii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2454648 06 vi 6 06/30/2008 die xxx mensis vi annoque mmviii 08 viii 2008} +test clock-2.1645 {conversion of 2008-07-01} { + clock format 1214915696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2008 12:34:56 die i mensis vii annoque mmviii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2454649 07 vii 7 07/01/2008 die i mensis vii annoque mmviii 08 viii 2008} +test clock-2.1646 {conversion of 2008-07-31} { + clock format 1217507696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2008 12:34:56 die xxxi mensis vii annoque mmviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2454679 07 vii 7 07/31/2008 die xxxi mensis vii annoque mmviii 08 viii 2008} +test clock-2.1647 {conversion of 2008-08-01} { + clock format 1217594096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2008 12:34:56 die i mensis viii annoque mmviii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2454680 08 viii 8 08/01/2008 die i mensis viii annoque mmviii 08 viii 2008} +test clock-2.1648 {conversion of 2008-08-31} { + clock format 1220186096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2008 12:34:56 die xxxi mensis viii annoque mmviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2454710 08 viii 8 08/31/2008 die xxxi mensis viii annoque mmviii 08 viii 2008} +test clock-2.1649 {conversion of 2008-09-01} { + clock format 1220272496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2008 12:34:56 die i mensis ix annoque mmviii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2454711 09 ix 9 09/01/2008 die i mensis ix annoque mmviii 08 viii 2008} +test clock-2.1650 {conversion of 2008-09-30} { + clock format 1222778096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2008 12:34:56 die xxx mensis ix annoque mmviii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2454740 09 ix 9 09/30/2008 die xxx mensis ix annoque mmviii 08 viii 2008} +test clock-2.1651 {conversion of 2008-10-01} { + clock format 1222864496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2008 12:34:56 die i mensis x annoque mmviii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2454741 10 x 10 10/01/2008 die i mensis x annoque mmviii 08 viii 2008} +test clock-2.1652 {conversion of 2008-10-31} { + clock format 1225456496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2008 12:34:56 die xxxi mensis x annoque mmviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2454771 10 x 10 10/31/2008 die xxxi mensis x annoque mmviii 08 viii 2008} +test clock-2.1653 {conversion of 2008-11-01} { + clock format 1225542896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2008 12:34:56 die i mensis xi annoque mmviii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2454772 11 xi 11 11/01/2008 die i mensis xi annoque mmviii 08 viii 2008} +test clock-2.1654 {conversion of 2008-11-30} { + clock format 1228048496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2008 12:34:56 die xxx mensis xi annoque mmviii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2454801 11 xi 11 11/30/2008 die xxx mensis xi annoque mmviii 08 viii 2008} +test clock-2.1655 {conversion of 2008-12-01} { + clock format 1228134896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2008 12:34:56 die i mensis xii annoque mmviii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2454802 12 xii 12 12/01/2008 die i mensis xii annoque mmviii 08 viii 2008} +test clock-2.1656 {conversion of 2008-12-31} { + clock format 1230726896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2008 12:34:56 die xxxi mensis xii annoque mmviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2454832 12 xii 12 12/31/2008 die xxxi mensis xii annoque mmviii 08 viii 2008} +test clock-2.1657 {conversion of 2009-01-01} { + clock format 1230813296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2009 12:34:56 die i mensis i annoque mmix xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2454833 01 i 1 01/01/2009 die i mensis i annoque mmix 09 ix 2009} +test clock-2.1658 {conversion of 2009-01-31} { + clock format 1233405296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2009 12:34:56 die xxxi mensis i annoque mmix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2454863 01 i 1 01/31/2009 die xxxi mensis i annoque mmix 09 ix 2009} +test clock-2.1659 {conversion of 2009-02-01} { + clock format 1233491696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2009 12:34:56 die i mensis ii annoque mmix xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2454864 02 ii 2 02/01/2009 die i mensis ii annoque mmix 09 ix 2009} +test clock-2.1660 {conversion of 2009-02-28} { + clock format 1235824496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2009 12:34:56 die xxviii mensis ii annoque mmix xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2454891 02 ii 2 02/28/2009 die xxviii mensis ii annoque mmix 09 ix 2009} +test clock-2.1661 {conversion of 2009-03-01} { + clock format 1235910896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2009 12:34:56 die i mensis iii annoque mmix xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2454892 03 iii 3 03/01/2009 die i mensis iii annoque mmix 09 ix 2009} +test clock-2.1662 {conversion of 2009-03-31} { + clock format 1238502896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2009 12:34:56 die xxxi mensis iii annoque mmix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2454922 03 iii 3 03/31/2009 die xxxi mensis iii annoque mmix 09 ix 2009} +test clock-2.1663 {conversion of 2009-04-01} { + clock format 1238589296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2009 12:34:56 die i mensis iv annoque mmix xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2454923 04 iv 4 04/01/2009 die i mensis iv annoque mmix 09 ix 2009} +test clock-2.1664 {conversion of 2009-04-30} { + clock format 1241094896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2009 12:34:56 die xxx mensis iv annoque mmix xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2454952 04 iv 4 04/30/2009 die xxx mensis iv annoque mmix 09 ix 2009} +test clock-2.1665 {conversion of 2009-05-01} { + clock format 1241181296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2009 12:34:56 die i mensis v annoque mmix xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2454953 05 v 5 05/01/2009 die i mensis v annoque mmix 09 ix 2009} +test clock-2.1666 {conversion of 2009-05-31} { + clock format 1243773296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2009 12:34:56 die xxxi mensis v annoque mmix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2454983 05 v 5 05/31/2009 die xxxi mensis v annoque mmix 09 ix 2009} +test clock-2.1667 {conversion of 2009-06-01} { + clock format 1243859696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2009 12:34:56 die i mensis vi annoque mmix xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2454984 06 vi 6 06/01/2009 die i mensis vi annoque mmix 09 ix 2009} +test clock-2.1668 {conversion of 2009-06-30} { + clock format 1246365296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2009 12:34:56 die xxx mensis vi annoque mmix xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2455013 06 vi 6 06/30/2009 die xxx mensis vi annoque mmix 09 ix 2009} +test clock-2.1669 {conversion of 2009-07-01} { + clock format 1246451696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2009 12:34:56 die i mensis vii annoque mmix xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2455014 07 vii 7 07/01/2009 die i mensis vii annoque mmix 09 ix 2009} +test clock-2.1670 {conversion of 2009-07-31} { + clock format 1249043696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2009 12:34:56 die xxxi mensis vii annoque mmix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2455044 07 vii 7 07/31/2009 die xxxi mensis vii annoque mmix 09 ix 2009} +test clock-2.1671 {conversion of 2009-08-01} { + clock format 1249130096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2009 12:34:56 die i mensis viii annoque mmix xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2455045 08 viii 8 08/01/2009 die i mensis viii annoque mmix 09 ix 2009} +test clock-2.1672 {conversion of 2009-08-31} { + clock format 1251722096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2009 12:34:56 die xxxi mensis viii annoque mmix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2455075 08 viii 8 08/31/2009 die xxxi mensis viii annoque mmix 09 ix 2009} +test clock-2.1673 {conversion of 2009-09-01} { + clock format 1251808496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2009 12:34:56 die i mensis ix annoque mmix xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2455076 09 ix 9 09/01/2009 die i mensis ix annoque mmix 09 ix 2009} +test clock-2.1674 {conversion of 2009-09-30} { + clock format 1254314096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2009 12:34:56 die xxx mensis ix annoque mmix xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2455105 09 ix 9 09/30/2009 die xxx mensis ix annoque mmix 09 ix 2009} +test clock-2.1675 {conversion of 2009-10-01} { + clock format 1254400496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2009 12:34:56 die i mensis x annoque mmix xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2455106 10 x 10 10/01/2009 die i mensis x annoque mmix 09 ix 2009} +test clock-2.1676 {conversion of 2009-10-31} { + clock format 1256992496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2009 12:34:56 die xxxi mensis x annoque mmix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2455136 10 x 10 10/31/2009 die xxxi mensis x annoque mmix 09 ix 2009} +test clock-2.1677 {conversion of 2009-11-01} { + clock format 1257078896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2009 12:34:56 die i mensis xi annoque mmix xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2455137 11 xi 11 11/01/2009 die i mensis xi annoque mmix 09 ix 2009} +test clock-2.1678 {conversion of 2009-11-30} { + clock format 1259584496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2009 12:34:56 die xxx mensis xi annoque mmix xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2455166 11 xi 11 11/30/2009 die xxx mensis xi annoque mmix 09 ix 2009} +test clock-2.1679 {conversion of 2009-12-01} { + clock format 1259670896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2009 12:34:56 die i mensis xii annoque mmix xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2455167 12 xii 12 12/01/2009 die i mensis xii annoque mmix 09 ix 2009} +test clock-2.1680 {conversion of 2009-12-31} { + clock format 1262262896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2009 12:34:56 die xxxi mensis xii annoque mmix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2455197 12 xii 12 12/31/2009 die xxxi mensis xii annoque mmix 09 ix 2009} +test clock-2.1681 {conversion of 2010-01-01} { + clock format 1262349296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2010 12:34:56 die i mensis i annoque mmx xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2455198 01 i 1 01/01/2010 die i mensis i annoque mmx 10 x 2010} +test clock-2.1682 {conversion of 2010-01-31} { + clock format 1264941296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2010 12:34:56 die xxxi mensis i annoque mmx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2455228 01 i 1 01/31/2010 die xxxi mensis i annoque mmx 10 x 2010} +test clock-2.1683 {conversion of 2010-02-01} { + clock format 1265027696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2010 12:34:56 die i mensis ii annoque mmx xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2455229 02 ii 2 02/01/2010 die i mensis ii annoque mmx 10 x 2010} +test clock-2.1684 {conversion of 2010-02-28} { + clock format 1267360496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2010 12:34:56 die xxviii mensis ii annoque mmx xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2455256 02 ii 2 02/28/2010 die xxviii mensis ii annoque mmx 10 x 2010} +test clock-2.1685 {conversion of 2010-03-01} { + clock format 1267446896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2010 12:34:56 die i mensis iii annoque mmx xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2455257 03 iii 3 03/01/2010 die i mensis iii annoque mmx 10 x 2010} +test clock-2.1686 {conversion of 2010-03-31} { + clock format 1270038896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2010 12:34:56 die xxxi mensis iii annoque mmx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2455287 03 iii 3 03/31/2010 die xxxi mensis iii annoque mmx 10 x 2010} +test clock-2.1687 {conversion of 2010-04-01} { + clock format 1270125296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2010 12:34:56 die i mensis iv annoque mmx xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2455288 04 iv 4 04/01/2010 die i mensis iv annoque mmx 10 x 2010} +test clock-2.1688 {conversion of 2010-04-30} { + clock format 1272630896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2010 12:34:56 die xxx mensis iv annoque mmx xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2455317 04 iv 4 04/30/2010 die xxx mensis iv annoque mmx 10 x 2010} +test clock-2.1689 {conversion of 2010-05-01} { + clock format 1272717296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2010 12:34:56 die i mensis v annoque mmx xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2455318 05 v 5 05/01/2010 die i mensis v annoque mmx 10 x 2010} +test clock-2.1690 {conversion of 2010-05-31} { + clock format 1275309296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2010 12:34:56 die xxxi mensis v annoque mmx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2455348 05 v 5 05/31/2010 die xxxi mensis v annoque mmx 10 x 2010} +test clock-2.1691 {conversion of 2010-06-01} { + clock format 1275395696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2010 12:34:56 die i mensis vi annoque mmx xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2455349 06 vi 6 06/01/2010 die i mensis vi annoque mmx 10 x 2010} +test clock-2.1692 {conversion of 2010-06-30} { + clock format 1277901296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2010 12:34:56 die xxx mensis vi annoque mmx xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2455378 06 vi 6 06/30/2010 die xxx mensis vi annoque mmx 10 x 2010} +test clock-2.1693 {conversion of 2010-07-01} { + clock format 1277987696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2010 12:34:56 die i mensis vii annoque mmx xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2455379 07 vii 7 07/01/2010 die i mensis vii annoque mmx 10 x 2010} +test clock-2.1694 {conversion of 2010-07-31} { + clock format 1280579696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2010 12:34:56 die xxxi mensis vii annoque mmx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2455409 07 vii 7 07/31/2010 die xxxi mensis vii annoque mmx 10 x 2010} +test clock-2.1695 {conversion of 2010-08-01} { + clock format 1280666096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2010 12:34:56 die i mensis viii annoque mmx xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2455410 08 viii 8 08/01/2010 die i mensis viii annoque mmx 10 x 2010} +test clock-2.1696 {conversion of 2010-08-31} { + clock format 1283258096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2010 12:34:56 die xxxi mensis viii annoque mmx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2455440 08 viii 8 08/31/2010 die xxxi mensis viii annoque mmx 10 x 2010} +test clock-2.1697 {conversion of 2010-09-01} { + clock format 1283344496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2010 12:34:56 die i mensis ix annoque mmx xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2455441 09 ix 9 09/01/2010 die i mensis ix annoque mmx 10 x 2010} +test clock-2.1698 {conversion of 2010-09-30} { + clock format 1285850096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2010 12:34:56 die xxx mensis ix annoque mmx xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2455470 09 ix 9 09/30/2010 die xxx mensis ix annoque mmx 10 x 2010} +test clock-2.1699 {conversion of 2010-10-01} { + clock format 1285936496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2010 12:34:56 die i mensis x annoque mmx xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2455471 10 x 10 10/01/2010 die i mensis x annoque mmx 10 x 2010} +test clock-2.1700 {conversion of 2010-10-31} { + clock format 1288528496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2010 12:34:56 die xxxi mensis x annoque mmx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2455501 10 x 10 10/31/2010 die xxxi mensis x annoque mmx 10 x 2010} +test clock-2.1701 {conversion of 2010-11-01} { + clock format 1288614896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2010 12:34:56 die i mensis xi annoque mmx xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2455502 11 xi 11 11/01/2010 die i mensis xi annoque mmx 10 x 2010} +test clock-2.1702 {conversion of 2010-11-30} { + clock format 1291120496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2010 12:34:56 die xxx mensis xi annoque mmx xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2455531 11 xi 11 11/30/2010 die xxx mensis xi annoque mmx 10 x 2010} +test clock-2.1703 {conversion of 2010-12-01} { + clock format 1291206896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2010 12:34:56 die i mensis xii annoque mmx xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2455532 12 xii 12 12/01/2010 die i mensis xii annoque mmx 10 x 2010} +test clock-2.1704 {conversion of 2010-12-31} { + clock format 1293798896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2010 12:34:56 die xxxi mensis xii annoque mmx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2455562 12 xii 12 12/31/2010 die xxxi mensis xii annoque mmx 10 x 2010} +test clock-2.1705 {conversion of 2011-01-01} { + clock format 1293885296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2011 12:34:56 die i mensis i annoque mmxi xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2455563 01 i 1 01/01/2011 die i mensis i annoque mmxi 11 xi 2011} +test clock-2.1706 {conversion of 2011-01-31} { + clock format 1296477296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2011 12:34:56 die xxxi mensis i annoque mmxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2455593 01 i 1 01/31/2011 die xxxi mensis i annoque mmxi 11 xi 2011} +test clock-2.1707 {conversion of 2011-02-01} { + clock format 1296563696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2011 12:34:56 die i mensis ii annoque mmxi xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2455594 02 ii 2 02/01/2011 die i mensis ii annoque mmxi 11 xi 2011} +test clock-2.1708 {conversion of 2011-02-28} { + clock format 1298896496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2011 12:34:56 die xxviii mensis ii annoque mmxi xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2455621 02 ii 2 02/28/2011 die xxviii mensis ii annoque mmxi 11 xi 2011} +test clock-2.1709 {conversion of 2011-03-01} { + clock format 1298982896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2011 12:34:56 die i mensis iii annoque mmxi xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2455622 03 iii 3 03/01/2011 die i mensis iii annoque mmxi 11 xi 2011} +test clock-2.1710 {conversion of 2011-03-31} { + clock format 1301574896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2011 12:34:56 die xxxi mensis iii annoque mmxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2455652 03 iii 3 03/31/2011 die xxxi mensis iii annoque mmxi 11 xi 2011} +test clock-2.1711 {conversion of 2011-04-01} { + clock format 1301661296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2011 12:34:56 die i mensis iv annoque mmxi xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2455653 04 iv 4 04/01/2011 die i mensis iv annoque mmxi 11 xi 2011} +test clock-2.1712 {conversion of 2011-04-30} { + clock format 1304166896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2011 12:34:56 die xxx mensis iv annoque mmxi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2455682 04 iv 4 04/30/2011 die xxx mensis iv annoque mmxi 11 xi 2011} +test clock-2.1713 {conversion of 2011-05-01} { + clock format 1304253296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2011 12:34:56 die i mensis v annoque mmxi xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2455683 05 v 5 05/01/2011 die i mensis v annoque mmxi 11 xi 2011} +test clock-2.1714 {conversion of 2011-05-31} { + clock format 1306845296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2011 12:34:56 die xxxi mensis v annoque mmxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2455713 05 v 5 05/31/2011 die xxxi mensis v annoque mmxi 11 xi 2011} +test clock-2.1715 {conversion of 2011-06-01} { + clock format 1306931696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2011 12:34:56 die i mensis vi annoque mmxi xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2455714 06 vi 6 06/01/2011 die i mensis vi annoque mmxi 11 xi 2011} +test clock-2.1716 {conversion of 2011-06-30} { + clock format 1309437296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2011 12:34:56 die xxx mensis vi annoque mmxi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2455743 06 vi 6 06/30/2011 die xxx mensis vi annoque mmxi 11 xi 2011} +test clock-2.1717 {conversion of 2011-07-01} { + clock format 1309523696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2011 12:34:56 die i mensis vii annoque mmxi xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2455744 07 vii 7 07/01/2011 die i mensis vii annoque mmxi 11 xi 2011} +test clock-2.1718 {conversion of 2011-07-31} { + clock format 1312115696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2011 12:34:56 die xxxi mensis vii annoque mmxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2455774 07 vii 7 07/31/2011 die xxxi mensis vii annoque mmxi 11 xi 2011} +test clock-2.1719 {conversion of 2011-08-01} { + clock format 1312202096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2011 12:34:56 die i mensis viii annoque mmxi xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2455775 08 viii 8 08/01/2011 die i mensis viii annoque mmxi 11 xi 2011} +test clock-2.1720 {conversion of 2011-08-31} { + clock format 1314794096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2011 12:34:56 die xxxi mensis viii annoque mmxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2455805 08 viii 8 08/31/2011 die xxxi mensis viii annoque mmxi 11 xi 2011} +test clock-2.1721 {conversion of 2011-09-01} { + clock format 1314880496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2011 12:34:56 die i mensis ix annoque mmxi xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2455806 09 ix 9 09/01/2011 die i mensis ix annoque mmxi 11 xi 2011} +test clock-2.1722 {conversion of 2011-09-30} { + clock format 1317386096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2011 12:34:56 die xxx mensis ix annoque mmxi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2455835 09 ix 9 09/30/2011 die xxx mensis ix annoque mmxi 11 xi 2011} +test clock-2.1723 {conversion of 2011-10-01} { + clock format 1317472496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2011 12:34:56 die i mensis x annoque mmxi xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2455836 10 x 10 10/01/2011 die i mensis x annoque mmxi 11 xi 2011} +test clock-2.1724 {conversion of 2011-10-31} { + clock format 1320064496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2011 12:34:56 die xxxi mensis x annoque mmxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2455866 10 x 10 10/31/2011 die xxxi mensis x annoque mmxi 11 xi 2011} +test clock-2.1725 {conversion of 2011-11-01} { + clock format 1320150896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2011 12:34:56 die i mensis xi annoque mmxi xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2455867 11 xi 11 11/01/2011 die i mensis xi annoque mmxi 11 xi 2011} +test clock-2.1726 {conversion of 2011-11-30} { + clock format 1322656496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2011 12:34:56 die xxx mensis xi annoque mmxi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2455896 11 xi 11 11/30/2011 die xxx mensis xi annoque mmxi 11 xi 2011} +test clock-2.1727 {conversion of 2011-12-01} { + clock format 1322742896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2011 12:34:56 die i mensis xii annoque mmxi xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2455897 12 xii 12 12/01/2011 die i mensis xii annoque mmxi 11 xi 2011} +test clock-2.1728 {conversion of 2011-12-31} { + clock format 1325334896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2011 12:34:56 die xxxi mensis xii annoque mmxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2455927 12 xii 12 12/31/2011 die xxxi mensis xii annoque mmxi 11 xi 2011} +test clock-2.1729 {conversion of 2012-01-01} { + clock format 1325421296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2012 12:34:56 die i mensis i annoque mmxii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2455928 01 i 1 01/01/2012 die i mensis i annoque mmxii 12 xii 2012} +test clock-2.1730 {conversion of 2012-01-31} { + clock format 1328013296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2012 12:34:56 die xxxi mensis i annoque mmxii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2455958 01 i 1 01/31/2012 die xxxi mensis i annoque mmxii 12 xii 2012} +test clock-2.1731 {conversion of 2012-02-01} { + clock format 1328099696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2012 12:34:56 die i mensis ii annoque mmxii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2455959 02 ii 2 02/01/2012 die i mensis ii annoque mmxii 12 xii 2012} +test clock-2.1732 {conversion of 2012-02-29} { + clock format 1330518896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2012 12:34:56 die xxix mensis ii annoque mmxii xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2455987 02 ii 2 02/29/2012 die xxix mensis ii annoque mmxii 12 xii 2012} +test clock-2.1733 {conversion of 2012-03-01} { + clock format 1330605296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2012 12:34:56 die i mensis iii annoque mmxii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2455988 03 iii 3 03/01/2012 die i mensis iii annoque mmxii 12 xii 2012} +test clock-2.1734 {conversion of 2012-03-31} { + clock format 1333197296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2012 12:34:56 die xxxi mensis iii annoque mmxii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2456018 03 iii 3 03/31/2012 die xxxi mensis iii annoque mmxii 12 xii 2012} +test clock-2.1735 {conversion of 2012-04-01} { + clock format 1333283696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2012 12:34:56 die i mensis iv annoque mmxii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2456019 04 iv 4 04/01/2012 die i mensis iv annoque mmxii 12 xii 2012} +test clock-2.1736 {conversion of 2012-04-30} { + clock format 1335789296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2012 12:34:56 die xxx mensis iv annoque mmxii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2456048 04 iv 4 04/30/2012 die xxx mensis iv annoque mmxii 12 xii 2012} +test clock-2.1737 {conversion of 2012-05-01} { + clock format 1335875696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2012 12:34:56 die i mensis v annoque mmxii xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2456049 05 v 5 05/01/2012 die i mensis v annoque mmxii 12 xii 2012} +test clock-2.1738 {conversion of 2012-05-31} { + clock format 1338467696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2012 12:34:56 die xxxi mensis v annoque mmxii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2456079 05 v 5 05/31/2012 die xxxi mensis v annoque mmxii 12 xii 2012} +test clock-2.1739 {conversion of 2012-06-01} { + clock format 1338554096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2012 12:34:56 die i mensis vi annoque mmxii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2456080 06 vi 6 06/01/2012 die i mensis vi annoque mmxii 12 xii 2012} +test clock-2.1740 {conversion of 2012-06-30} { + clock format 1341059696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2012 12:34:56 die xxx mensis vi annoque mmxii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2456109 06 vi 6 06/30/2012 die xxx mensis vi annoque mmxii 12 xii 2012} +test clock-2.1741 {conversion of 2012-07-01} { + clock format 1341146096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2012 12:34:56 die i mensis vii annoque mmxii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2456110 07 vii 7 07/01/2012 die i mensis vii annoque mmxii 12 xii 2012} +test clock-2.1742 {conversion of 2012-07-31} { + clock format 1343738096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2012 12:34:56 die xxxi mensis vii annoque mmxii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2456140 07 vii 7 07/31/2012 die xxxi mensis vii annoque mmxii 12 xii 2012} +test clock-2.1743 {conversion of 2012-08-01} { + clock format 1343824496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2012 12:34:56 die i mensis viii annoque mmxii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2456141 08 viii 8 08/01/2012 die i mensis viii annoque mmxii 12 xii 2012} +test clock-2.1744 {conversion of 2012-08-31} { + clock format 1346416496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2012 12:34:56 die xxxi mensis viii annoque mmxii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2456171 08 viii 8 08/31/2012 die xxxi mensis viii annoque mmxii 12 xii 2012} +test clock-2.1745 {conversion of 2012-09-01} { + clock format 1346502896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2012 12:34:56 die i mensis ix annoque mmxii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2456172 09 ix 9 09/01/2012 die i mensis ix annoque mmxii 12 xii 2012} +test clock-2.1746 {conversion of 2012-09-30} { + clock format 1349008496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2012 12:34:56 die xxx mensis ix annoque mmxii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2456201 09 ix 9 09/30/2012 die xxx mensis ix annoque mmxii 12 xii 2012} +test clock-2.1747 {conversion of 2012-10-01} { + clock format 1349094896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2012 12:34:56 die i mensis x annoque mmxii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2456202 10 x 10 10/01/2012 die i mensis x annoque mmxii 12 xii 2012} +test clock-2.1748 {conversion of 2012-10-31} { + clock format 1351686896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2012 12:34:56 die xxxi mensis x annoque mmxii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2456232 10 x 10 10/31/2012 die xxxi mensis x annoque mmxii 12 xii 2012} +test clock-2.1749 {conversion of 2012-11-01} { + clock format 1351773296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2012 12:34:56 die i mensis xi annoque mmxii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2456233 11 xi 11 11/01/2012 die i mensis xi annoque mmxii 12 xii 2012} +test clock-2.1750 {conversion of 2012-11-30} { + clock format 1354278896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2012 12:34:56 die xxx mensis xi annoque mmxii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2456262 11 xi 11 11/30/2012 die xxx mensis xi annoque mmxii 12 xii 2012} +test clock-2.1751 {conversion of 2012-12-01} { + clock format 1354365296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2012 12:34:56 die i mensis xii annoque mmxii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2456263 12 xii 12 12/01/2012 die i mensis xii annoque mmxii 12 xii 2012} +test clock-2.1752 {conversion of 2012-12-31} { + clock format 1356957296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2012 12:34:56 die xxxi mensis xii annoque mmxii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2456293 12 xii 12 12/31/2012 die xxxi mensis xii annoque mmxii 12 xii 2012} +test clock-2.1753 {conversion of 2013-01-01} { + clock format 1357043696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2013 12:34:56 die i mensis i annoque mmxiii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2456294 01 i 1 01/01/2013 die i mensis i annoque mmxiii 13 xiii 2013} +test clock-2.1754 {conversion of 2013-01-31} { + clock format 1359635696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2013 12:34:56 die xxxi mensis i annoque mmxiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2456324 01 i 1 01/31/2013 die xxxi mensis i annoque mmxiii 13 xiii 2013} +test clock-2.1755 {conversion of 2013-02-01} { + clock format 1359722096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2013 12:34:56 die i mensis ii annoque mmxiii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2456325 02 ii 2 02/01/2013 die i mensis ii annoque mmxiii 13 xiii 2013} +test clock-2.1756 {conversion of 2013-02-28} { + clock format 1362054896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2013 12:34:56 die xxviii mensis ii annoque mmxiii xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2456352 02 ii 2 02/28/2013 die xxviii mensis ii annoque mmxiii 13 xiii 2013} +test clock-2.1757 {conversion of 2013-03-01} { + clock format 1362141296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2013 12:34:56 die i mensis iii annoque mmxiii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2456353 03 iii 3 03/01/2013 die i mensis iii annoque mmxiii 13 xiii 2013} +test clock-2.1758 {conversion of 2013-03-31} { + clock format 1364733296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2013 12:34:56 die xxxi mensis iii annoque mmxiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2456383 03 iii 3 03/31/2013 die xxxi mensis iii annoque mmxiii 13 xiii 2013} +test clock-2.1759 {conversion of 2013-04-01} { + clock format 1364819696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2013 12:34:56 die i mensis iv annoque mmxiii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2456384 04 iv 4 04/01/2013 die i mensis iv annoque mmxiii 13 xiii 2013} +test clock-2.1760 {conversion of 2013-04-30} { + clock format 1367325296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2013 12:34:56 die xxx mensis iv annoque mmxiii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2456413 04 iv 4 04/30/2013 die xxx mensis iv annoque mmxiii 13 xiii 2013} +test clock-2.1761 {conversion of 2013-05-01} { + clock format 1367411696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2013 12:34:56 die i mensis v annoque mmxiii xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2456414 05 v 5 05/01/2013 die i mensis v annoque mmxiii 13 xiii 2013} +test clock-2.1762 {conversion of 2013-05-31} { + clock format 1370003696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2013 12:34:56 die xxxi mensis v annoque mmxiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2456444 05 v 5 05/31/2013 die xxxi mensis v annoque mmxiii 13 xiii 2013} +test clock-2.1763 {conversion of 2013-06-01} { + clock format 1370090096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2013 12:34:56 die i mensis vi annoque mmxiii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2456445 06 vi 6 06/01/2013 die i mensis vi annoque mmxiii 13 xiii 2013} +test clock-2.1764 {conversion of 2013-06-30} { + clock format 1372595696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2013 12:34:56 die xxx mensis vi annoque mmxiii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2456474 06 vi 6 06/30/2013 die xxx mensis vi annoque mmxiii 13 xiii 2013} +test clock-2.1765 {conversion of 2013-07-01} { + clock format 1372682096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2013 12:34:56 die i mensis vii annoque mmxiii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2456475 07 vii 7 07/01/2013 die i mensis vii annoque mmxiii 13 xiii 2013} +test clock-2.1766 {conversion of 2013-07-31} { + clock format 1375274096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2013 12:34:56 die xxxi mensis vii annoque mmxiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2456505 07 vii 7 07/31/2013 die xxxi mensis vii annoque mmxiii 13 xiii 2013} +test clock-2.1767 {conversion of 2013-08-01} { + clock format 1375360496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2013 12:34:56 die i mensis viii annoque mmxiii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2456506 08 viii 8 08/01/2013 die i mensis viii annoque mmxiii 13 xiii 2013} +test clock-2.1768 {conversion of 2013-08-31} { + clock format 1377952496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2013 12:34:56 die xxxi mensis viii annoque mmxiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2456536 08 viii 8 08/31/2013 die xxxi mensis viii annoque mmxiii 13 xiii 2013} +test clock-2.1769 {conversion of 2013-09-01} { + clock format 1378038896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2013 12:34:56 die i mensis ix annoque mmxiii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2456537 09 ix 9 09/01/2013 die i mensis ix annoque mmxiii 13 xiii 2013} +test clock-2.1770 {conversion of 2013-09-30} { + clock format 1380544496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2013 12:34:56 die xxx mensis ix annoque mmxiii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2456566 09 ix 9 09/30/2013 die xxx mensis ix annoque mmxiii 13 xiii 2013} +test clock-2.1771 {conversion of 2013-10-01} { + clock format 1380630896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2013 12:34:56 die i mensis x annoque mmxiii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2456567 10 x 10 10/01/2013 die i mensis x annoque mmxiii 13 xiii 2013} +test clock-2.1772 {conversion of 2013-10-31} { + clock format 1383222896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2013 12:34:56 die xxxi mensis x annoque mmxiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2456597 10 x 10 10/31/2013 die xxxi mensis x annoque mmxiii 13 xiii 2013} +test clock-2.1773 {conversion of 2013-11-01} { + clock format 1383309296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2013 12:34:56 die i mensis xi annoque mmxiii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2456598 11 xi 11 11/01/2013 die i mensis xi annoque mmxiii 13 xiii 2013} +test clock-2.1774 {conversion of 2013-11-30} { + clock format 1385814896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2013 12:34:56 die xxx mensis xi annoque mmxiii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2456627 11 xi 11 11/30/2013 die xxx mensis xi annoque mmxiii 13 xiii 2013} +test clock-2.1775 {conversion of 2013-12-01} { + clock format 1385901296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2013 12:34:56 die i mensis xii annoque mmxiii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2456628 12 xii 12 12/01/2013 die i mensis xii annoque mmxiii 13 xiii 2013} +test clock-2.1776 {conversion of 2013-12-31} { + clock format 1388493296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2013 12:34:56 die xxxi mensis xii annoque mmxiii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2456658 12 xii 12 12/31/2013 die xxxi mensis xii annoque mmxiii 13 xiii 2013} +test clock-2.1777 {conversion of 2016-01-01} { + clock format 1451651696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2016 12:34:56 die i mensis i annoque mmxvi xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2457389 01 i 1 01/01/2016 die i mensis i annoque mmxvi 16 xvi 2016} +test clock-2.1778 {conversion of 2016-01-31} { + clock format 1454243696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2016 12:34:56 die xxxi mensis i annoque mmxvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2457419 01 i 1 01/31/2016 die xxxi mensis i annoque mmxvi 16 xvi 2016} +test clock-2.1779 {conversion of 2016-02-01} { + clock format 1454330096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2016 12:34:56 die i mensis ii annoque mmxvi xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2457420 02 ii 2 02/01/2016 die i mensis ii annoque mmxvi 16 xvi 2016} +test clock-2.1780 {conversion of 2016-02-29} { + clock format 1456749296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2016 12:34:56 die xxix mensis ii annoque mmxvi xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2457448 02 ii 2 02/29/2016 die xxix mensis ii annoque mmxvi 16 xvi 2016} +test clock-2.1781 {conversion of 2016-03-01} { + clock format 1456835696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2016 12:34:56 die i mensis iii annoque mmxvi xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2457449 03 iii 3 03/01/2016 die i mensis iii annoque mmxvi 16 xvi 2016} +test clock-2.1782 {conversion of 2016-03-31} { + clock format 1459427696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2016 12:34:56 die xxxi mensis iii annoque mmxvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2457479 03 iii 3 03/31/2016 die xxxi mensis iii annoque mmxvi 16 xvi 2016} +test clock-2.1783 {conversion of 2016-04-01} { + clock format 1459514096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2016 12:34:56 die i mensis iv annoque mmxvi xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2457480 04 iv 4 04/01/2016 die i mensis iv annoque mmxvi 16 xvi 2016} +test clock-2.1784 {conversion of 2016-04-30} { + clock format 1462019696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2016 12:34:56 die xxx mensis iv annoque mmxvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2457509 04 iv 4 04/30/2016 die xxx mensis iv annoque mmxvi 16 xvi 2016} +test clock-2.1785 {conversion of 2016-05-01} { + clock format 1462106096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2016 12:34:56 die i mensis v annoque mmxvi xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2457510 05 v 5 05/01/2016 die i mensis v annoque mmxvi 16 xvi 2016} +test clock-2.1786 {conversion of 2016-05-31} { + clock format 1464698096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2016 12:34:56 die xxxi mensis v annoque mmxvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2457540 05 v 5 05/31/2016 die xxxi mensis v annoque mmxvi 16 xvi 2016} +test clock-2.1787 {conversion of 2016-06-01} { + clock format 1464784496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2016 12:34:56 die i mensis vi annoque mmxvi xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2457541 06 vi 6 06/01/2016 die i mensis vi annoque mmxvi 16 xvi 2016} +test clock-2.1788 {conversion of 2016-06-30} { + clock format 1467290096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2016 12:34:56 die xxx mensis vi annoque mmxvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2457570 06 vi 6 06/30/2016 die xxx mensis vi annoque mmxvi 16 xvi 2016} +test clock-2.1789 {conversion of 2016-07-01} { + clock format 1467376496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2016 12:34:56 die i mensis vii annoque mmxvi xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2457571 07 vii 7 07/01/2016 die i mensis vii annoque mmxvi 16 xvi 2016} +test clock-2.1790 {conversion of 2016-07-31} { + clock format 1469968496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2016 12:34:56 die xxxi mensis vii annoque mmxvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2457601 07 vii 7 07/31/2016 die xxxi mensis vii annoque mmxvi 16 xvi 2016} +test clock-2.1791 {conversion of 2016-08-01} { + clock format 1470054896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2016 12:34:56 die i mensis viii annoque mmxvi xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2457602 08 viii 8 08/01/2016 die i mensis viii annoque mmxvi 16 xvi 2016} +test clock-2.1792 {conversion of 2016-08-31} { + clock format 1472646896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2016 12:34:56 die xxxi mensis viii annoque mmxvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2457632 08 viii 8 08/31/2016 die xxxi mensis viii annoque mmxvi 16 xvi 2016} +test clock-2.1793 {conversion of 2016-09-01} { + clock format 1472733296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2016 12:34:56 die i mensis ix annoque mmxvi xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2457633 09 ix 9 09/01/2016 die i mensis ix annoque mmxvi 16 xvi 2016} +test clock-2.1794 {conversion of 2016-09-30} { + clock format 1475238896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2016 12:34:56 die xxx mensis ix annoque mmxvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2457662 09 ix 9 09/30/2016 die xxx mensis ix annoque mmxvi 16 xvi 2016} +test clock-2.1795 {conversion of 2016-10-01} { + clock format 1475325296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2016 12:34:56 die i mensis x annoque mmxvi xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2457663 10 x 10 10/01/2016 die i mensis x annoque mmxvi 16 xvi 2016} +test clock-2.1796 {conversion of 2016-10-31} { + clock format 1477917296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2016 12:34:56 die xxxi mensis x annoque mmxvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2457693 10 x 10 10/31/2016 die xxxi mensis x annoque mmxvi 16 xvi 2016} +test clock-2.1797 {conversion of 2016-11-01} { + clock format 1478003696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2016 12:34:56 die i mensis xi annoque mmxvi xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2457694 11 xi 11 11/01/2016 die i mensis xi annoque mmxvi 16 xvi 2016} +test clock-2.1798 {conversion of 2016-11-30} { + clock format 1480509296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2016 12:34:56 die xxx mensis xi annoque mmxvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2457723 11 xi 11 11/30/2016 die xxx mensis xi annoque mmxvi 16 xvi 2016} +test clock-2.1799 {conversion of 2016-12-01} { + clock format 1480595696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2016 12:34:56 die i mensis xii annoque mmxvi xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2457724 12 xii 12 12/01/2016 die i mensis xii annoque mmxvi 16 xvi 2016} +test clock-2.1800 {conversion of 2016-12-31} { + clock format 1483187696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2016 12:34:56 die xxxi mensis xii annoque mmxvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2457754 12 xii 12 12/31/2016 die xxxi mensis xii annoque mmxvi 16 xvi 2016} +test clock-2.1801 {conversion of 2017-01-01} { + clock format 1483274096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2017 12:34:56 die i mensis i annoque mmxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2457755 01 i 1 01/01/2017 die i mensis i annoque mmxvii 17 xvii 2017} +test clock-2.1802 {conversion of 2017-01-31} { + clock format 1485866096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2017 12:34:56 die xxxi mensis i annoque mmxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2457785 01 i 1 01/31/2017 die xxxi mensis i annoque mmxvii 17 xvii 2017} +test clock-2.1803 {conversion of 2017-02-01} { + clock format 1485952496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2017 12:34:56 die i mensis ii annoque mmxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2457786 02 ii 2 02/01/2017 die i mensis ii annoque mmxvii 17 xvii 2017} +test clock-2.1804 {conversion of 2017-02-28} { + clock format 1488285296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2017 12:34:56 die xxviii mensis ii annoque mmxvii xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2457813 02 ii 2 02/28/2017 die xxviii mensis ii annoque mmxvii 17 xvii 2017} +test clock-2.1805 {conversion of 2017-03-01} { + clock format 1488371696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2017 12:34:56 die i mensis iii annoque mmxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2457814 03 iii 3 03/01/2017 die i mensis iii annoque mmxvii 17 xvii 2017} +test clock-2.1806 {conversion of 2017-03-31} { + clock format 1490963696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2017 12:34:56 die xxxi mensis iii annoque mmxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2457844 03 iii 3 03/31/2017 die xxxi mensis iii annoque mmxvii 17 xvii 2017} +test clock-2.1807 {conversion of 2017-04-01} { + clock format 1491050096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2017 12:34:56 die i mensis iv annoque mmxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2457845 04 iv 4 04/01/2017 die i mensis iv annoque mmxvii 17 xvii 2017} +test clock-2.1808 {conversion of 2017-04-30} { + clock format 1493555696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2017 12:34:56 die xxx mensis iv annoque mmxvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2457874 04 iv 4 04/30/2017 die xxx mensis iv annoque mmxvii 17 xvii 2017} +test clock-2.1809 {conversion of 2017-05-01} { + clock format 1493642096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2017 12:34:56 die i mensis v annoque mmxvii xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2457875 05 v 5 05/01/2017 die i mensis v annoque mmxvii 17 xvii 2017} +test clock-2.1810 {conversion of 2017-05-31} { + clock format 1496234096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2017 12:34:56 die xxxi mensis v annoque mmxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2457905 05 v 5 05/31/2017 die xxxi mensis v annoque mmxvii 17 xvii 2017} +test clock-2.1811 {conversion of 2017-06-01} { + clock format 1496320496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2017 12:34:56 die i mensis vi annoque mmxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2457906 06 vi 6 06/01/2017 die i mensis vi annoque mmxvii 17 xvii 2017} +test clock-2.1812 {conversion of 2017-06-30} { + clock format 1498826096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2017 12:34:56 die xxx mensis vi annoque mmxvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2457935 06 vi 6 06/30/2017 die xxx mensis vi annoque mmxvii 17 xvii 2017} +test clock-2.1813 {conversion of 2017-07-01} { + clock format 1498912496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2017 12:34:56 die i mensis vii annoque mmxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2457936 07 vii 7 07/01/2017 die i mensis vii annoque mmxvii 17 xvii 2017} +test clock-2.1814 {conversion of 2017-07-31} { + clock format 1501504496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2017 12:34:56 die xxxi mensis vii annoque mmxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2457966 07 vii 7 07/31/2017 die xxxi mensis vii annoque mmxvii 17 xvii 2017} +test clock-2.1815 {conversion of 2017-08-01} { + clock format 1501590896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2017 12:34:56 die i mensis viii annoque mmxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2457967 08 viii 8 08/01/2017 die i mensis viii annoque mmxvii 17 xvii 2017} +test clock-2.1816 {conversion of 2017-08-31} { + clock format 1504182896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2017 12:34:56 die xxxi mensis viii annoque mmxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2457997 08 viii 8 08/31/2017 die xxxi mensis viii annoque mmxvii 17 xvii 2017} +test clock-2.1817 {conversion of 2017-09-01} { + clock format 1504269296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2017 12:34:56 die i mensis ix annoque mmxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2457998 09 ix 9 09/01/2017 die i mensis ix annoque mmxvii 17 xvii 2017} +test clock-2.1818 {conversion of 2017-09-30} { + clock format 1506774896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2017 12:34:56 die xxx mensis ix annoque mmxvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2458027 09 ix 9 09/30/2017 die xxx mensis ix annoque mmxvii 17 xvii 2017} +test clock-2.1819 {conversion of 2017-10-01} { + clock format 1506861296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2017 12:34:56 die i mensis x annoque mmxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2458028 10 x 10 10/01/2017 die i mensis x annoque mmxvii 17 xvii 2017} +test clock-2.1820 {conversion of 2017-10-31} { + clock format 1509453296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2017 12:34:56 die xxxi mensis x annoque mmxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2458058 10 x 10 10/31/2017 die xxxi mensis x annoque mmxvii 17 xvii 2017} +test clock-2.1821 {conversion of 2017-11-01} { + clock format 1509539696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2017 12:34:56 die i mensis xi annoque mmxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2458059 11 xi 11 11/01/2017 die i mensis xi annoque mmxvii 17 xvii 2017} +test clock-2.1822 {conversion of 2017-11-30} { + clock format 1512045296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2017 12:34:56 die xxx mensis xi annoque mmxvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2458088 11 xi 11 11/30/2017 die xxx mensis xi annoque mmxvii 17 xvii 2017} +test clock-2.1823 {conversion of 2017-12-01} { + clock format 1512131696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2017 12:34:56 die i mensis xii annoque mmxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2458089 12 xii 12 12/01/2017 die i mensis xii annoque mmxvii 17 xvii 2017} +test clock-2.1824 {conversion of 2017-12-31} { + clock format 1514723696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2017 12:34:56 die xxxi mensis xii annoque mmxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2458119 12 xii 12 12/31/2017 die xxxi mensis xii annoque mmxvii 17 xvii 2017} +test clock-2.1825 {conversion of 2020-01-01} { + clock format 1577882096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2020 12:34:56 die i mensis i annoque mmxx xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2458850 01 i 1 01/01/2020 die i mensis i annoque mmxx 20 xx 2020} +test clock-2.1826 {conversion of 2020-01-31} { + clock format 1580474096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2020 12:34:56 die xxxi mensis i annoque mmxx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2458880 01 i 1 01/31/2020 die xxxi mensis i annoque mmxx 20 xx 2020} +test clock-2.1827 {conversion of 2020-02-01} { + clock format 1580560496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2020 12:34:56 die i mensis ii annoque mmxx xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2458881 02 ii 2 02/01/2020 die i mensis ii annoque mmxx 20 xx 2020} +test clock-2.1828 {conversion of 2020-02-29} { + clock format 1582979696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2020 12:34:56 die xxix mensis ii annoque mmxx xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2458909 02 ii 2 02/29/2020 die xxix mensis ii annoque mmxx 20 xx 2020} +test clock-2.1829 {conversion of 2020-03-01} { + clock format 1583066096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2020 12:34:56 die i mensis iii annoque mmxx xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2458910 03 iii 3 03/01/2020 die i mensis iii annoque mmxx 20 xx 2020} +test clock-2.1830 {conversion of 2020-03-31} { + clock format 1585658096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2020 12:34:56 die xxxi mensis iii annoque mmxx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2458940 03 iii 3 03/31/2020 die xxxi mensis iii annoque mmxx 20 xx 2020} +test clock-2.1831 {conversion of 2020-04-01} { + clock format 1585744496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2020 12:34:56 die i mensis iv annoque mmxx xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2458941 04 iv 4 04/01/2020 die i mensis iv annoque mmxx 20 xx 2020} +test clock-2.1832 {conversion of 2020-04-30} { + clock format 1588250096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2020 12:34:56 die xxx mensis iv annoque mmxx xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2458970 04 iv 4 04/30/2020 die xxx mensis iv annoque mmxx 20 xx 2020} +test clock-2.1833 {conversion of 2020-05-01} { + clock format 1588336496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2020 12:34:56 die i mensis v annoque mmxx xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2458971 05 v 5 05/01/2020 die i mensis v annoque mmxx 20 xx 2020} +test clock-2.1834 {conversion of 2020-05-31} { + clock format 1590928496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2020 12:34:56 die xxxi mensis v annoque mmxx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2459001 05 v 5 05/31/2020 die xxxi mensis v annoque mmxx 20 xx 2020} +test clock-2.1835 {conversion of 2020-06-01} { + clock format 1591014896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2020 12:34:56 die i mensis vi annoque mmxx xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2459002 06 vi 6 06/01/2020 die i mensis vi annoque mmxx 20 xx 2020} +test clock-2.1836 {conversion of 2020-06-30} { + clock format 1593520496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2020 12:34:56 die xxx mensis vi annoque mmxx xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2459031 06 vi 6 06/30/2020 die xxx mensis vi annoque mmxx 20 xx 2020} +test clock-2.1837 {conversion of 2020-07-01} { + clock format 1593606896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2020 12:34:56 die i mensis vii annoque mmxx xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2459032 07 vii 7 07/01/2020 die i mensis vii annoque mmxx 20 xx 2020} +test clock-2.1838 {conversion of 2020-07-31} { + clock format 1596198896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2020 12:34:56 die xxxi mensis vii annoque mmxx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2459062 07 vii 7 07/31/2020 die xxxi mensis vii annoque mmxx 20 xx 2020} +test clock-2.1839 {conversion of 2020-08-01} { + clock format 1596285296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2020 12:34:56 die i mensis viii annoque mmxx xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2459063 08 viii 8 08/01/2020 die i mensis viii annoque mmxx 20 xx 2020} +test clock-2.1840 {conversion of 2020-08-31} { + clock format 1598877296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2020 12:34:56 die xxxi mensis viii annoque mmxx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2459093 08 viii 8 08/31/2020 die xxxi mensis viii annoque mmxx 20 xx 2020} +test clock-2.1841 {conversion of 2020-09-01} { + clock format 1598963696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2020 12:34:56 die i mensis ix annoque mmxx xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2459094 09 ix 9 09/01/2020 die i mensis ix annoque mmxx 20 xx 2020} +test clock-2.1842 {conversion of 2020-09-30} { + clock format 1601469296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2020 12:34:56 die xxx mensis ix annoque mmxx xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2459123 09 ix 9 09/30/2020 die xxx mensis ix annoque mmxx 20 xx 2020} +test clock-2.1843 {conversion of 2020-10-01} { + clock format 1601555696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2020 12:34:56 die i mensis x annoque mmxx xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2459124 10 x 10 10/01/2020 die i mensis x annoque mmxx 20 xx 2020} +test clock-2.1844 {conversion of 2020-10-31} { + clock format 1604147696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2020 12:34:56 die xxxi mensis x annoque mmxx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2459154 10 x 10 10/31/2020 die xxxi mensis x annoque mmxx 20 xx 2020} +test clock-2.1845 {conversion of 2020-11-01} { + clock format 1604234096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2020 12:34:56 die i mensis xi annoque mmxx xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2459155 11 xi 11 11/01/2020 die i mensis xi annoque mmxx 20 xx 2020} +test clock-2.1846 {conversion of 2020-11-30} { + clock format 1606739696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2020 12:34:56 die xxx mensis xi annoque mmxx xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2459184 11 xi 11 11/30/2020 die xxx mensis xi annoque mmxx 20 xx 2020} +test clock-2.1847 {conversion of 2020-12-01} { + clock format 1606826096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2020 12:34:56 die i mensis xii annoque mmxx xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2459185 12 xii 12 12/01/2020 die i mensis xii annoque mmxx 20 xx 2020} +test clock-2.1848 {conversion of 2020-12-31} { + clock format 1609418096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2020 12:34:56 die xxxi mensis xii annoque mmxx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2459215 12 xii 12 12/31/2020 die xxxi mensis xii annoque mmxx 20 xx 2020} +test clock-2.1849 {conversion of 2021-01-01} { + clock format 1609504496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2021 12:34:56 die i mensis i annoque mmxxi xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2459216 01 i 1 01/01/2021 die i mensis i annoque mmxxi 21 xxi 2021} +test clock-2.1850 {conversion of 2021-01-31} { + clock format 1612096496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2021 12:34:56 die xxxi mensis i annoque mmxxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2459246 01 i 1 01/31/2021 die xxxi mensis i annoque mmxxi 21 xxi 2021} +test clock-2.1851 {conversion of 2021-02-01} { + clock format 1612182896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2021 12:34:56 die i mensis ii annoque mmxxi xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2459247 02 ii 2 02/01/2021 die i mensis ii annoque mmxxi 21 xxi 2021} +test clock-2.1852 {conversion of 2021-02-28} { + clock format 1614515696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2021 12:34:56 die xxviii mensis ii annoque mmxxi xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2459274 02 ii 2 02/28/2021 die xxviii mensis ii annoque mmxxi 21 xxi 2021} +test clock-2.1853 {conversion of 2021-03-01} { + clock format 1614602096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2021 12:34:56 die i mensis iii annoque mmxxi xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2459275 03 iii 3 03/01/2021 die i mensis iii annoque mmxxi 21 xxi 2021} +test clock-2.1854 {conversion of 2021-03-31} { + clock format 1617194096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2021 12:34:56 die xxxi mensis iii annoque mmxxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2459305 03 iii 3 03/31/2021 die xxxi mensis iii annoque mmxxi 21 xxi 2021} +test clock-2.1855 {conversion of 2021-04-01} { + clock format 1617280496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2021 12:34:56 die i mensis iv annoque mmxxi xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2459306 04 iv 4 04/01/2021 die i mensis iv annoque mmxxi 21 xxi 2021} +test clock-2.1856 {conversion of 2021-04-30} { + clock format 1619786096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2021 12:34:56 die xxx mensis iv annoque mmxxi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2459335 04 iv 4 04/30/2021 die xxx mensis iv annoque mmxxi 21 xxi 2021} +test clock-2.1857 {conversion of 2021-05-01} { + clock format 1619872496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2021 12:34:56 die i mensis v annoque mmxxi xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2459336 05 v 5 05/01/2021 die i mensis v annoque mmxxi 21 xxi 2021} +test clock-2.1858 {conversion of 2021-05-31} { + clock format 1622464496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2021 12:34:56 die xxxi mensis v annoque mmxxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2459366 05 v 5 05/31/2021 die xxxi mensis v annoque mmxxi 21 xxi 2021} +test clock-2.1859 {conversion of 2021-06-01} { + clock format 1622550896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2021 12:34:56 die i mensis vi annoque mmxxi xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2459367 06 vi 6 06/01/2021 die i mensis vi annoque mmxxi 21 xxi 2021} +test clock-2.1860 {conversion of 2021-06-30} { + clock format 1625056496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2021 12:34:56 die xxx mensis vi annoque mmxxi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2459396 06 vi 6 06/30/2021 die xxx mensis vi annoque mmxxi 21 xxi 2021} +test clock-2.1861 {conversion of 2021-07-01} { + clock format 1625142896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2021 12:34:56 die i mensis vii annoque mmxxi xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2459397 07 vii 7 07/01/2021 die i mensis vii annoque mmxxi 21 xxi 2021} +test clock-2.1862 {conversion of 2021-07-31} { + clock format 1627734896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2021 12:34:56 die xxxi mensis vii annoque mmxxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2459427 07 vii 7 07/31/2021 die xxxi mensis vii annoque mmxxi 21 xxi 2021} +test clock-2.1863 {conversion of 2021-08-01} { + clock format 1627821296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2021 12:34:56 die i mensis viii annoque mmxxi xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2459428 08 viii 8 08/01/2021 die i mensis viii annoque mmxxi 21 xxi 2021} +test clock-2.1864 {conversion of 2021-08-31} { + clock format 1630413296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2021 12:34:56 die xxxi mensis viii annoque mmxxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2459458 08 viii 8 08/31/2021 die xxxi mensis viii annoque mmxxi 21 xxi 2021} +test clock-2.1865 {conversion of 2021-09-01} { + clock format 1630499696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2021 12:34:56 die i mensis ix annoque mmxxi xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2459459 09 ix 9 09/01/2021 die i mensis ix annoque mmxxi 21 xxi 2021} +test clock-2.1866 {conversion of 2021-09-30} { + clock format 1633005296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2021 12:34:56 die xxx mensis ix annoque mmxxi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2459488 09 ix 9 09/30/2021 die xxx mensis ix annoque mmxxi 21 xxi 2021} +test clock-2.1867 {conversion of 2021-10-01} { + clock format 1633091696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2021 12:34:56 die i mensis x annoque mmxxi xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2459489 10 x 10 10/01/2021 die i mensis x annoque mmxxi 21 xxi 2021} +test clock-2.1868 {conversion of 2021-10-31} { + clock format 1635683696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2021 12:34:56 die xxxi mensis x annoque mmxxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2459519 10 x 10 10/31/2021 die xxxi mensis x annoque mmxxi 21 xxi 2021} +test clock-2.1869 {conversion of 2021-11-01} { + clock format 1635770096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2021 12:34:56 die i mensis xi annoque mmxxi xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2459520 11 xi 11 11/01/2021 die i mensis xi annoque mmxxi 21 xxi 2021} +test clock-2.1870 {conversion of 2021-11-30} { + clock format 1638275696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2021 12:34:56 die xxx mensis xi annoque mmxxi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2459549 11 xi 11 11/30/2021 die xxx mensis xi annoque mmxxi 21 xxi 2021} +test clock-2.1871 {conversion of 2021-12-01} { + clock format 1638362096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2021 12:34:56 die i mensis xii annoque mmxxi xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2459550 12 xii 12 12/01/2021 die i mensis xii annoque mmxxi 21 xxi 2021} +test clock-2.1872 {conversion of 2021-12-31} { + clock format 1640954096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2021 12:34:56 die xxxi mensis xii annoque mmxxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2459580 12 xii 12 12/31/2021 die xxxi mensis xii annoque mmxxi 21 xxi 2021} +test clock-2.1873 {conversion of 2024-01-01} { + clock format 1704112496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2024 12:34:56 die i mensis i annoque mmxxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2460311 01 i 1 01/01/2024 die i mensis i annoque mmxxiv 24 xxiv 2024} +test clock-2.1874 {conversion of 2024-01-31} { + clock format 1706704496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2024 12:34:56 die xxxi mensis i annoque mmxxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2460341 01 i 1 01/31/2024 die xxxi mensis i annoque mmxxiv 24 xxiv 2024} +test clock-2.1875 {conversion of 2024-02-01} { + clock format 1706790896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2024 12:34:56 die i mensis ii annoque mmxxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2460342 02 ii 2 02/01/2024 die i mensis ii annoque mmxxiv 24 xxiv 2024} +test clock-2.1876 {conversion of 2024-02-29} { + clock format 1709210096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2024 12:34:56 die xxix mensis ii annoque mmxxiv xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2460370 02 ii 2 02/29/2024 die xxix mensis ii annoque mmxxiv 24 xxiv 2024} +test clock-2.1877 {conversion of 2024-03-01} { + clock format 1709296496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2024 12:34:56 die i mensis iii annoque mmxxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2460371 03 iii 3 03/01/2024 die i mensis iii annoque mmxxiv 24 xxiv 2024} +test clock-2.1878 {conversion of 2024-03-31} { + clock format 1711888496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2024 12:34:56 die xxxi mensis iii annoque mmxxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2460401 03 iii 3 03/31/2024 die xxxi mensis iii annoque mmxxiv 24 xxiv 2024} +test clock-2.1879 {conversion of 2024-04-01} { + clock format 1711974896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2024 12:34:56 die i mensis iv annoque mmxxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2460402 04 iv 4 04/01/2024 die i mensis iv annoque mmxxiv 24 xxiv 2024} +test clock-2.1880 {conversion of 2024-04-30} { + clock format 1714480496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2024 12:34:56 die xxx mensis iv annoque mmxxiv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2460431 04 iv 4 04/30/2024 die xxx mensis iv annoque mmxxiv 24 xxiv 2024} +test clock-2.1881 {conversion of 2024-05-01} { + clock format 1714566896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2024 12:34:56 die i mensis v annoque mmxxiv xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2460432 05 v 5 05/01/2024 die i mensis v annoque mmxxiv 24 xxiv 2024} +test clock-2.1882 {conversion of 2024-05-31} { + clock format 1717158896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2024 12:34:56 die xxxi mensis v annoque mmxxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2460462 05 v 5 05/31/2024 die xxxi mensis v annoque mmxxiv 24 xxiv 2024} +test clock-2.1883 {conversion of 2024-06-01} { + clock format 1717245296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2024 12:34:56 die i mensis vi annoque mmxxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2460463 06 vi 6 06/01/2024 die i mensis vi annoque mmxxiv 24 xxiv 2024} +test clock-2.1884 {conversion of 2024-06-30} { + clock format 1719750896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2024 12:34:56 die xxx mensis vi annoque mmxxiv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2460492 06 vi 6 06/30/2024 die xxx mensis vi annoque mmxxiv 24 xxiv 2024} +test clock-2.1885 {conversion of 2024-07-01} { + clock format 1719837296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2024 12:34:56 die i mensis vii annoque mmxxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2460493 07 vii 7 07/01/2024 die i mensis vii annoque mmxxiv 24 xxiv 2024} +test clock-2.1886 {conversion of 2024-07-31} { + clock format 1722429296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2024 12:34:56 die xxxi mensis vii annoque mmxxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2460523 07 vii 7 07/31/2024 die xxxi mensis vii annoque mmxxiv 24 xxiv 2024} +test clock-2.1887 {conversion of 2024-08-01} { + clock format 1722515696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2024 12:34:56 die i mensis viii annoque mmxxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2460524 08 viii 8 08/01/2024 die i mensis viii annoque mmxxiv 24 xxiv 2024} +test clock-2.1888 {conversion of 2024-08-31} { + clock format 1725107696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2024 12:34:56 die xxxi mensis viii annoque mmxxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2460554 08 viii 8 08/31/2024 die xxxi mensis viii annoque mmxxiv 24 xxiv 2024} +test clock-2.1889 {conversion of 2024-09-01} { + clock format 1725194096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2024 12:34:56 die i mensis ix annoque mmxxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2460555 09 ix 9 09/01/2024 die i mensis ix annoque mmxxiv 24 xxiv 2024} +test clock-2.1890 {conversion of 2024-09-30} { + clock format 1727699696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2024 12:34:56 die xxx mensis ix annoque mmxxiv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2460584 09 ix 9 09/30/2024 die xxx mensis ix annoque mmxxiv 24 xxiv 2024} +test clock-2.1891 {conversion of 2024-10-01} { + clock format 1727786096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2024 12:34:56 die i mensis x annoque mmxxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2460585 10 x 10 10/01/2024 die i mensis x annoque mmxxiv 24 xxiv 2024} +test clock-2.1892 {conversion of 2024-10-31} { + clock format 1730378096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2024 12:34:56 die xxxi mensis x annoque mmxxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2460615 10 x 10 10/31/2024 die xxxi mensis x annoque mmxxiv 24 xxiv 2024} +test clock-2.1893 {conversion of 2024-11-01} { + clock format 1730464496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2024 12:34:56 die i mensis xi annoque mmxxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2460616 11 xi 11 11/01/2024 die i mensis xi annoque mmxxiv 24 xxiv 2024} +test clock-2.1894 {conversion of 2024-11-30} { + clock format 1732970096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2024 12:34:56 die xxx mensis xi annoque mmxxiv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2460645 11 xi 11 11/30/2024 die xxx mensis xi annoque mmxxiv 24 xxiv 2024} +test clock-2.1895 {conversion of 2024-12-01} { + clock format 1733056496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2024 12:34:56 die i mensis xii annoque mmxxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2460646 12 xii 12 12/01/2024 die i mensis xii annoque mmxxiv 24 xxiv 2024} +test clock-2.1896 {conversion of 2024-12-31} { + clock format 1735648496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2024 12:34:56 die xxxi mensis xii annoque mmxxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2460676 12 xii 12 12/31/2024 die xxxi mensis xii annoque mmxxiv 24 xxiv 2024} +test clock-2.1897 {conversion of 2025-01-01} { + clock format 1735734896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2025 12:34:56 die i mensis i annoque mmxxv xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2460677 01 i 1 01/01/2025 die i mensis i annoque mmxxv 25 xxv 2025} +test clock-2.1898 {conversion of 2025-01-31} { + clock format 1738326896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2025 12:34:56 die xxxi mensis i annoque mmxxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2460707 01 i 1 01/31/2025 die xxxi mensis i annoque mmxxv 25 xxv 2025} +test clock-2.1899 {conversion of 2025-02-01} { + clock format 1738413296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2025 12:34:56 die i mensis ii annoque mmxxv xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2460708 02 ii 2 02/01/2025 die i mensis ii annoque mmxxv 25 xxv 2025} +test clock-2.1900 {conversion of 2025-02-28} { + clock format 1740746096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2025 12:34:56 die xxviii mensis ii annoque mmxxv xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2460735 02 ii 2 02/28/2025 die xxviii mensis ii annoque mmxxv 25 xxv 2025} +test clock-2.1901 {conversion of 2025-03-01} { + clock format 1740832496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2025 12:34:56 die i mensis iii annoque mmxxv xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2460736 03 iii 3 03/01/2025 die i mensis iii annoque mmxxv 25 xxv 2025} +test clock-2.1902 {conversion of 2025-03-31} { + clock format 1743424496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2025 12:34:56 die xxxi mensis iii annoque mmxxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2460766 03 iii 3 03/31/2025 die xxxi mensis iii annoque mmxxv 25 xxv 2025} +test clock-2.1903 {conversion of 2025-04-01} { + clock format 1743510896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2025 12:34:56 die i mensis iv annoque mmxxv xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2460767 04 iv 4 04/01/2025 die i mensis iv annoque mmxxv 25 xxv 2025} +test clock-2.1904 {conversion of 2025-04-30} { + clock format 1746016496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2025 12:34:56 die xxx mensis iv annoque mmxxv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2460796 04 iv 4 04/30/2025 die xxx mensis iv annoque mmxxv 25 xxv 2025} +test clock-2.1905 {conversion of 2025-05-01} { + clock format 1746102896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2025 12:34:56 die i mensis v annoque mmxxv xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2460797 05 v 5 05/01/2025 die i mensis v annoque mmxxv 25 xxv 2025} +test clock-2.1906 {conversion of 2025-05-31} { + clock format 1748694896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2025 12:34:56 die xxxi mensis v annoque mmxxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2460827 05 v 5 05/31/2025 die xxxi mensis v annoque mmxxv 25 xxv 2025} +test clock-2.1907 {conversion of 2025-06-01} { + clock format 1748781296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2025 12:34:56 die i mensis vi annoque mmxxv xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2460828 06 vi 6 06/01/2025 die i mensis vi annoque mmxxv 25 xxv 2025} +test clock-2.1908 {conversion of 2025-06-30} { + clock format 1751286896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2025 12:34:56 die xxx mensis vi annoque mmxxv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2460857 06 vi 6 06/30/2025 die xxx mensis vi annoque mmxxv 25 xxv 2025} +test clock-2.1909 {conversion of 2025-07-01} { + clock format 1751373296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2025 12:34:56 die i mensis vii annoque mmxxv xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2460858 07 vii 7 07/01/2025 die i mensis vii annoque mmxxv 25 xxv 2025} +test clock-2.1910 {conversion of 2025-07-31} { + clock format 1753965296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2025 12:34:56 die xxxi mensis vii annoque mmxxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2460888 07 vii 7 07/31/2025 die xxxi mensis vii annoque mmxxv 25 xxv 2025} +test clock-2.1911 {conversion of 2025-08-01} { + clock format 1754051696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2025 12:34:56 die i mensis viii annoque mmxxv xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2460889 08 viii 8 08/01/2025 die i mensis viii annoque mmxxv 25 xxv 2025} +test clock-2.1912 {conversion of 2025-08-31} { + clock format 1756643696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2025 12:34:56 die xxxi mensis viii annoque mmxxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2460919 08 viii 8 08/31/2025 die xxxi mensis viii annoque mmxxv 25 xxv 2025} +test clock-2.1913 {conversion of 2025-09-01} { + clock format 1756730096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2025 12:34:56 die i mensis ix annoque mmxxv xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2460920 09 ix 9 09/01/2025 die i mensis ix annoque mmxxv 25 xxv 2025} +test clock-2.1914 {conversion of 2025-09-30} { + clock format 1759235696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2025 12:34:56 die xxx mensis ix annoque mmxxv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2460949 09 ix 9 09/30/2025 die xxx mensis ix annoque mmxxv 25 xxv 2025} +test clock-2.1915 {conversion of 2025-10-01} { + clock format 1759322096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2025 12:34:56 die i mensis x annoque mmxxv xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2460950 10 x 10 10/01/2025 die i mensis x annoque mmxxv 25 xxv 2025} +test clock-2.1916 {conversion of 2025-10-31} { + clock format 1761914096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2025 12:34:56 die xxxi mensis x annoque mmxxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2460980 10 x 10 10/31/2025 die xxxi mensis x annoque mmxxv 25 xxv 2025} +test clock-2.1917 {conversion of 2025-11-01} { + clock format 1762000496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2025 12:34:56 die i mensis xi annoque mmxxv xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2460981 11 xi 11 11/01/2025 die i mensis xi annoque mmxxv 25 xxv 2025} +test clock-2.1918 {conversion of 2025-11-30} { + clock format 1764506096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2025 12:34:56 die xxx mensis xi annoque mmxxv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2461010 11 xi 11 11/30/2025 die xxx mensis xi annoque mmxxv 25 xxv 2025} +test clock-2.1919 {conversion of 2025-12-01} { + clock format 1764592496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2025 12:34:56 die i mensis xii annoque mmxxv xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2461011 12 xii 12 12/01/2025 die i mensis xii annoque mmxxv 25 xxv 2025} +test clock-2.1920 {conversion of 2025-12-31} { + clock format 1767184496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2025 12:34:56 die xxxi mensis xii annoque mmxxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2461041 12 xii 12 12/31/2025 die xxxi mensis xii annoque mmxxv 25 xxv 2025} +test clock-2.1921 {conversion of 2037-01-01} { + clock format 2114426096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2037 12:34:56 die i mensis i annoque mmxxxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2465060 01 i 1 01/01/2037 die i mensis i annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1922 {conversion of 2037-01-31} { + clock format 2117018096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2037 12:34:56 die xxxi mensis i annoque mmxxxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2465090 01 i 1 01/31/2037 die xxxi mensis i annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1923 {conversion of 2037-02-01} { + clock format 2117104496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2037 12:34:56 die i mensis ii annoque mmxxxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2465091 02 ii 2 02/01/2037 die i mensis ii annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1924 {conversion of 2037-02-28} { + clock format 2119437296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2037 12:34:56 die xxviii mensis ii annoque mmxxxvii xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2465118 02 ii 2 02/28/2037 die xxviii mensis ii annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1925 {conversion of 2037-03-01} { + clock format 2119523696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2037 12:34:56 die i mensis iii annoque mmxxxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2465119 03 iii 3 03/01/2037 die i mensis iii annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1926 {conversion of 2037-03-31} { + clock format 2122115696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2037 12:34:56 die xxxi mensis iii annoque mmxxxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2465149 03 iii 3 03/31/2037 die xxxi mensis iii annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1927 {conversion of 2037-04-01} { + clock format 2122202096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2037 12:34:56 die i mensis iv annoque mmxxxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2465150 04 iv 4 04/01/2037 die i mensis iv annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1928 {conversion of 2037-04-30} { + clock format 2124707696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2037 12:34:56 die xxx mensis iv annoque mmxxxvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2465179 04 iv 4 04/30/2037 die xxx mensis iv annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1929 {conversion of 2037-05-01} { + clock format 2124794096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2037 12:34:56 die i mensis v annoque mmxxxvii xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2465180 05 v 5 05/01/2037 die i mensis v annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1930 {conversion of 2037-05-31} { + clock format 2127386096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2037 12:34:56 die xxxi mensis v annoque mmxxxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2465210 05 v 5 05/31/2037 die xxxi mensis v annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1931 {conversion of 2037-06-01} { + clock format 2127472496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2037 12:34:56 die i mensis vi annoque mmxxxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2465211 06 vi 6 06/01/2037 die i mensis vi annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1932 {conversion of 2037-06-30} { + clock format 2129978096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2037 12:34:56 die xxx mensis vi annoque mmxxxvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2465240 06 vi 6 06/30/2037 die xxx mensis vi annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1933 {conversion of 2037-07-01} { + clock format 2130064496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2037 12:34:56 die i mensis vii annoque mmxxxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2465241 07 vii 7 07/01/2037 die i mensis vii annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1934 {conversion of 2037-07-31} { + clock format 2132656496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2037 12:34:56 die xxxi mensis vii annoque mmxxxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2465271 07 vii 7 07/31/2037 die xxxi mensis vii annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1935 {conversion of 2037-08-01} { + clock format 2132742896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2037 12:34:56 die i mensis viii annoque mmxxxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2465272 08 viii 8 08/01/2037 die i mensis viii annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1936 {conversion of 2037-08-31} { + clock format 2135334896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2037 12:34:56 die xxxi mensis viii annoque mmxxxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2465302 08 viii 8 08/31/2037 die xxxi mensis viii annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1937 {conversion of 2037-09-01} { + clock format 2135421296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2037 12:34:56 die i mensis ix annoque mmxxxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2465303 09 ix 9 09/01/2037 die i mensis ix annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1938 {conversion of 2037-09-30} { + clock format 2137926896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2037 12:34:56 die xxx mensis ix annoque mmxxxvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2465332 09 ix 9 09/30/2037 die xxx mensis ix annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1939 {conversion of 2037-10-01} { + clock format 2138013296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2037 12:34:56 die i mensis x annoque mmxxxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2465333 10 x 10 10/01/2037 die i mensis x annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1940 {conversion of 2037-10-31} { + clock format 2140605296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2037 12:34:56 die xxxi mensis x annoque mmxxxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2465363 10 x 10 10/31/2037 die xxxi mensis x annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1941 {conversion of 2037-11-01} { + clock format 2140691696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2037 12:34:56 die i mensis xi annoque mmxxxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2465364 11 xi 11 11/01/2037 die i mensis xi annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1942 {conversion of 2037-11-30} { + clock format 2143197296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2037 12:34:56 die xxx mensis xi annoque mmxxxvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2465393 11 xi 11 11/30/2037 die xxx mensis xi annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1943 {conversion of 2037-12-01} { + clock format 2143283696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2037 12:34:56 die i mensis xii annoque mmxxxvii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2465394 12 xii 12 12/01/2037 die i mensis xii annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1944 {conversion of 2037-12-31} { + clock format 2145875696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2037 12:34:56 die xxxi mensis xii annoque mmxxxvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2465424 12 xii 12 12/31/2037 die xxxi mensis xii annoque mmxxxvii 37 xxxvii 2037} +test clock-2.1945 {conversion of 2038-01-01} { + clock format 2145962096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2038 12:34:56 die i mensis i annoque mmxxxviii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2465425 01 i 1 01/01/2038 die i mensis i annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1946 {conversion of 2038-01-31} { + clock format 2148554096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2038 12:34:56 die xxxi mensis i annoque mmxxxviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2465455 01 i 1 01/31/2038 die xxxi mensis i annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1947 {conversion of 2038-02-01} { + clock format 2148640496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2038 12:34:56 die i mensis ii annoque mmxxxviii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2465456 02 ii 2 02/01/2038 die i mensis ii annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1948 {conversion of 2038-02-28} { + clock format 2150973296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2038 12:34:56 die xxviii mensis ii annoque mmxxxviii xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2465483 02 ii 2 02/28/2038 die xxviii mensis ii annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1949 {conversion of 2038-03-01} { + clock format 2151059696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2038 12:34:56 die i mensis iii annoque mmxxxviii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2465484 03 iii 3 03/01/2038 die i mensis iii annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1950 {conversion of 2038-03-31} { + clock format 2153651696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2038 12:34:56 die xxxi mensis iii annoque mmxxxviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2465514 03 iii 3 03/31/2038 die xxxi mensis iii annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1951 {conversion of 2038-04-01} { + clock format 2153738096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2038 12:34:56 die i mensis iv annoque mmxxxviii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2465515 04 iv 4 04/01/2038 die i mensis iv annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1952 {conversion of 2038-04-30} { + clock format 2156243696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2038 12:34:56 die xxx mensis iv annoque mmxxxviii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2465544 04 iv 4 04/30/2038 die xxx mensis iv annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1953 {conversion of 2038-05-01} { + clock format 2156330096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2038 12:34:56 die i mensis v annoque mmxxxviii xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2465545 05 v 5 05/01/2038 die i mensis v annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1954 {conversion of 2038-05-31} { + clock format 2158922096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2038 12:34:56 die xxxi mensis v annoque mmxxxviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2465575 05 v 5 05/31/2038 die xxxi mensis v annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1955 {conversion of 2038-06-01} { + clock format 2159008496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2038 12:34:56 die i mensis vi annoque mmxxxviii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2465576 06 vi 6 06/01/2038 die i mensis vi annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1956 {conversion of 2038-06-30} { + clock format 2161514096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2038 12:34:56 die xxx mensis vi annoque mmxxxviii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2465605 06 vi 6 06/30/2038 die xxx mensis vi annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1957 {conversion of 2038-07-01} { + clock format 2161600496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2038 12:34:56 die i mensis vii annoque mmxxxviii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2465606 07 vii 7 07/01/2038 die i mensis vii annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1958 {conversion of 2038-07-31} { + clock format 2164192496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2038 12:34:56 die xxxi mensis vii annoque mmxxxviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2465636 07 vii 7 07/31/2038 die xxxi mensis vii annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1959 {conversion of 2038-08-01} { + clock format 2164278896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2038 12:34:56 die i mensis viii annoque mmxxxviii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2465637 08 viii 8 08/01/2038 die i mensis viii annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1960 {conversion of 2038-08-31} { + clock format 2166870896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2038 12:34:56 die xxxi mensis viii annoque mmxxxviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2465667 08 viii 8 08/31/2038 die xxxi mensis viii annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1961 {conversion of 2038-09-01} { + clock format 2166957296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2038 12:34:56 die i mensis ix annoque mmxxxviii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2465668 09 ix 9 09/01/2038 die i mensis ix annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1962 {conversion of 2038-09-30} { + clock format 2169462896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2038 12:34:56 die xxx mensis ix annoque mmxxxviii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2465697 09 ix 9 09/30/2038 die xxx mensis ix annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1963 {conversion of 2038-10-01} { + clock format 2169549296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2038 12:34:56 die i mensis x annoque mmxxxviii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2465698 10 x 10 10/01/2038 die i mensis x annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1964 {conversion of 2038-10-31} { + clock format 2172141296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2038 12:34:56 die xxxi mensis x annoque mmxxxviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2465728 10 x 10 10/31/2038 die xxxi mensis x annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1965 {conversion of 2038-11-01} { + clock format 2172227696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2038 12:34:56 die i mensis xi annoque mmxxxviii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2465729 11 xi 11 11/01/2038 die i mensis xi annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1966 {conversion of 2038-11-30} { + clock format 2174733296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2038 12:34:56 die xxx mensis xi annoque mmxxxviii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2465758 11 xi 11 11/30/2038 die xxx mensis xi annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1967 {conversion of 2038-12-01} { + clock format 2174819696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2038 12:34:56 die i mensis xii annoque mmxxxviii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2465759 12 xii 12 12/01/2038 die i mensis xii annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1968 {conversion of 2038-12-31} { + clock format 2177411696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2038 12:34:56 die xxxi mensis xii annoque mmxxxviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2465789 12 xii 12 12/31/2038 die xxxi mensis xii annoque mmxxxviii 38 xxxviii 2038} +test clock-2.1969 {conversion of 2039-01-01} { + clock format 2177498096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2039 12:34:56 die i mensis i annoque mmxxxix xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2465790 01 i 1 01/01/2039 die i mensis i annoque mmxxxix 39 xxxix 2039} +test clock-2.1970 {conversion of 2039-01-31} { + clock format 2180090096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2039 12:34:56 die xxxi mensis i annoque mmxxxix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2465820 01 i 1 01/31/2039 die xxxi mensis i annoque mmxxxix 39 xxxix 2039} +test clock-2.1971 {conversion of 2039-02-01} { + clock format 2180176496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2039 12:34:56 die i mensis ii annoque mmxxxix xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2465821 02 ii 2 02/01/2039 die i mensis ii annoque mmxxxix 39 xxxix 2039} +test clock-2.1972 {conversion of 2039-02-28} { + clock format 2182509296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2039 12:34:56 die xxviii mensis ii annoque mmxxxix xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2465848 02 ii 2 02/28/2039 die xxviii mensis ii annoque mmxxxix 39 xxxix 2039} +test clock-2.1973 {conversion of 2039-03-01} { + clock format 2182595696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2039 12:34:56 die i mensis iii annoque mmxxxix xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2465849 03 iii 3 03/01/2039 die i mensis iii annoque mmxxxix 39 xxxix 2039} +test clock-2.1974 {conversion of 2039-03-31} { + clock format 2185187696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2039 12:34:56 die xxxi mensis iii annoque mmxxxix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2465879 03 iii 3 03/31/2039 die xxxi mensis iii annoque mmxxxix 39 xxxix 2039} +test clock-2.1975 {conversion of 2039-04-01} { + clock format 2185274096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2039 12:34:56 die i mensis iv annoque mmxxxix xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2465880 04 iv 4 04/01/2039 die i mensis iv annoque mmxxxix 39 xxxix 2039} +test clock-2.1976 {conversion of 2039-04-30} { + clock format 2187779696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2039 12:34:56 die xxx mensis iv annoque mmxxxix xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2465909 04 iv 4 04/30/2039 die xxx mensis iv annoque mmxxxix 39 xxxix 2039} +test clock-2.1977 {conversion of 2039-05-01} { + clock format 2187866096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2039 12:34:56 die i mensis v annoque mmxxxix xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2465910 05 v 5 05/01/2039 die i mensis v annoque mmxxxix 39 xxxix 2039} +test clock-2.1978 {conversion of 2039-05-31} { + clock format 2190458096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2039 12:34:56 die xxxi mensis v annoque mmxxxix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2465940 05 v 5 05/31/2039 die xxxi mensis v annoque mmxxxix 39 xxxix 2039} +test clock-2.1979 {conversion of 2039-06-01} { + clock format 2190544496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2039 12:34:56 die i mensis vi annoque mmxxxix xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2465941 06 vi 6 06/01/2039 die i mensis vi annoque mmxxxix 39 xxxix 2039} +test clock-2.1980 {conversion of 2039-06-30} { + clock format 2193050096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2039 12:34:56 die xxx mensis vi annoque mmxxxix xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2465970 06 vi 6 06/30/2039 die xxx mensis vi annoque mmxxxix 39 xxxix 2039} +test clock-2.1981 {conversion of 2039-07-01} { + clock format 2193136496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2039 12:34:56 die i mensis vii annoque mmxxxix xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2465971 07 vii 7 07/01/2039 die i mensis vii annoque mmxxxix 39 xxxix 2039} +test clock-2.1982 {conversion of 2039-07-31} { + clock format 2195728496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2039 12:34:56 die xxxi mensis vii annoque mmxxxix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2466001 07 vii 7 07/31/2039 die xxxi mensis vii annoque mmxxxix 39 xxxix 2039} +test clock-2.1983 {conversion of 2039-08-01} { + clock format 2195814896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2039 12:34:56 die i mensis viii annoque mmxxxix xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2466002 08 viii 8 08/01/2039 die i mensis viii annoque mmxxxix 39 xxxix 2039} +test clock-2.1984 {conversion of 2039-08-31} { + clock format 2198406896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2039 12:34:56 die xxxi mensis viii annoque mmxxxix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2466032 08 viii 8 08/31/2039 die xxxi mensis viii annoque mmxxxix 39 xxxix 2039} +test clock-2.1985 {conversion of 2039-09-01} { + clock format 2198493296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2039 12:34:56 die i mensis ix annoque mmxxxix xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2466033 09 ix 9 09/01/2039 die i mensis ix annoque mmxxxix 39 xxxix 2039} +test clock-2.1986 {conversion of 2039-09-30} { + clock format 2200998896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2039 12:34:56 die xxx mensis ix annoque mmxxxix xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2466062 09 ix 9 09/30/2039 die xxx mensis ix annoque mmxxxix 39 xxxix 2039} +test clock-2.1987 {conversion of 2039-10-01} { + clock format 2201085296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2039 12:34:56 die i mensis x annoque mmxxxix xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2466063 10 x 10 10/01/2039 die i mensis x annoque mmxxxix 39 xxxix 2039} +test clock-2.1988 {conversion of 2039-10-31} { + clock format 2203677296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2039 12:34:56 die xxxi mensis x annoque mmxxxix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2466093 10 x 10 10/31/2039 die xxxi mensis x annoque mmxxxix 39 xxxix 2039} +test clock-2.1989 {conversion of 2039-11-01} { + clock format 2203763696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2039 12:34:56 die i mensis xi annoque mmxxxix xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2466094 11 xi 11 11/01/2039 die i mensis xi annoque mmxxxix 39 xxxix 2039} +test clock-2.1990 {conversion of 2039-11-30} { + clock format 2206269296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2039 12:34:56 die xxx mensis xi annoque mmxxxix xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2466123 11 xi 11 11/30/2039 die xxx mensis xi annoque mmxxxix 39 xxxix 2039} +test clock-2.1991 {conversion of 2039-12-01} { + clock format 2206355696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2039 12:34:56 die i mensis xii annoque mmxxxix xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2466124 12 xii 12 12/01/2039 die i mensis xii annoque mmxxxix 39 xxxix 2039} +test clock-2.1992 {conversion of 2039-12-31} { + clock format 2208947696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2039 12:34:56 die xxxi mensis xii annoque mmxxxix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2466154 12 xii 12 12/31/2039 die xxxi mensis xii annoque mmxxxix 39 xxxix 2039} +test clock-2.1993 {conversion of 2040-01-01} { + clock format 2209034096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2040 12:34:56 die i mensis i annoque mmxl xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2466155 01 i 1 01/01/2040 die i mensis i annoque mmxl 40 xl 2040} +test clock-2.1994 {conversion of 2040-01-31} { + clock format 2211626096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2040 12:34:56 die xxxi mensis i annoque mmxl xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2466185 01 i 1 01/31/2040 die xxxi mensis i annoque mmxl 40 xl 2040} +test clock-2.1995 {conversion of 2040-02-01} { + clock format 2211712496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2040 12:34:56 die i mensis ii annoque mmxl xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2466186 02 ii 2 02/01/2040 die i mensis ii annoque mmxl 40 xl 2040} +test clock-2.1996 {conversion of 2040-02-29} { + clock format 2214131696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2040 12:34:56 die xxix mensis ii annoque mmxl xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2466214 02 ii 2 02/29/2040 die xxix mensis ii annoque mmxl 40 xl 2040} +test clock-2.1997 {conversion of 2040-03-01} { + clock format 2214218096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2040 12:34:56 die i mensis iii annoque mmxl xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2466215 03 iii 3 03/01/2040 die i mensis iii annoque mmxl 40 xl 2040} +test clock-2.1998 {conversion of 2040-03-31} { + clock format 2216810096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2040 12:34:56 die xxxi mensis iii annoque mmxl xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2466245 03 iii 3 03/31/2040 die xxxi mensis iii annoque mmxl 40 xl 2040} +test clock-2.1999 {conversion of 2040-04-01} { + clock format 2216896496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2040 12:34:56 die i mensis iv annoque mmxl xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2466246 04 iv 4 04/01/2040 die i mensis iv annoque mmxl 40 xl 2040} +test clock-2.2000 {conversion of 2040-04-30} { + clock format 2219402096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2040 12:34:56 die xxx mensis iv annoque mmxl xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2466275 04 iv 4 04/30/2040 die xxx mensis iv annoque mmxl 40 xl 2040} +test clock-2.2001 {conversion of 2040-05-01} { + clock format 2219488496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2040 12:34:56 die i mensis v annoque mmxl xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2466276 05 v 5 05/01/2040 die i mensis v annoque mmxl 40 xl 2040} +test clock-2.2002 {conversion of 2040-05-31} { + clock format 2222080496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2040 12:34:56 die xxxi mensis v annoque mmxl xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2466306 05 v 5 05/31/2040 die xxxi mensis v annoque mmxl 40 xl 2040} +test clock-2.2003 {conversion of 2040-06-01} { + clock format 2222166896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2040 12:34:56 die i mensis vi annoque mmxl xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2466307 06 vi 6 06/01/2040 die i mensis vi annoque mmxl 40 xl 2040} +test clock-2.2004 {conversion of 2040-06-30} { + clock format 2224672496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2040 12:34:56 die xxx mensis vi annoque mmxl xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2466336 06 vi 6 06/30/2040 die xxx mensis vi annoque mmxl 40 xl 2040} +test clock-2.2005 {conversion of 2040-07-01} { + clock format 2224758896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2040 12:34:56 die i mensis vii annoque mmxl xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2466337 07 vii 7 07/01/2040 die i mensis vii annoque mmxl 40 xl 2040} +test clock-2.2006 {conversion of 2040-07-31} { + clock format 2227350896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2040 12:34:56 die xxxi mensis vii annoque mmxl xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2466367 07 vii 7 07/31/2040 die xxxi mensis vii annoque mmxl 40 xl 2040} +test clock-2.2007 {conversion of 2040-08-01} { + clock format 2227437296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2040 12:34:56 die i mensis viii annoque mmxl xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2466368 08 viii 8 08/01/2040 die i mensis viii annoque mmxl 40 xl 2040} +test clock-2.2008 {conversion of 2040-08-31} { + clock format 2230029296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2040 12:34:56 die xxxi mensis viii annoque mmxl xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2466398 08 viii 8 08/31/2040 die xxxi mensis viii annoque mmxl 40 xl 2040} +test clock-2.2009 {conversion of 2040-09-01} { + clock format 2230115696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2040 12:34:56 die i mensis ix annoque mmxl xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2466399 09 ix 9 09/01/2040 die i mensis ix annoque mmxl 40 xl 2040} +test clock-2.2010 {conversion of 2040-09-30} { + clock format 2232621296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2040 12:34:56 die xxx mensis ix annoque mmxl xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2466428 09 ix 9 09/30/2040 die xxx mensis ix annoque mmxl 40 xl 2040} +test clock-2.2011 {conversion of 2040-10-01} { + clock format 2232707696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2040 12:34:56 die i mensis x annoque mmxl xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2466429 10 x 10 10/01/2040 die i mensis x annoque mmxl 40 xl 2040} +test clock-2.2012 {conversion of 2040-10-31} { + clock format 2235299696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2040 12:34:56 die xxxi mensis x annoque mmxl xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2466459 10 x 10 10/31/2040 die xxxi mensis x annoque mmxl 40 xl 2040} +test clock-2.2013 {conversion of 2040-11-01} { + clock format 2235386096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2040 12:34:56 die i mensis xi annoque mmxl xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2466460 11 xi 11 11/01/2040 die i mensis xi annoque mmxl 40 xl 2040} +test clock-2.2014 {conversion of 2040-11-30} { + clock format 2237891696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2040 12:34:56 die xxx mensis xi annoque mmxl xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2466489 11 xi 11 11/30/2040 die xxx mensis xi annoque mmxl 40 xl 2040} +test clock-2.2015 {conversion of 2040-12-01} { + clock format 2237978096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2040 12:34:56 die i mensis xii annoque mmxl xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2466490 12 xii 12 12/01/2040 die i mensis xii annoque mmxl 40 xl 2040} +test clock-2.2016 {conversion of 2040-12-31} { + clock format 2240570096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2040 12:34:56 die xxxi mensis xii annoque mmxl xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2466520 12 xii 12 12/31/2040 die xxxi mensis xii annoque mmxl 40 xl 2040} +test clock-2.2017 {conversion of 2041-01-01} { + clock format 2240656496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2041 12:34:56 die i mensis i annoque mmxli xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2466521 01 i 1 01/01/2041 die i mensis i annoque mmxli 41 xli 2041} +test clock-2.2018 {conversion of 2041-01-31} { + clock format 2243248496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2041 12:34:56 die xxxi mensis i annoque mmxli xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2466551 01 i 1 01/31/2041 die xxxi mensis i annoque mmxli 41 xli 2041} +test clock-2.2019 {conversion of 2041-02-01} { + clock format 2243334896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2041 12:34:56 die i mensis ii annoque mmxli xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2466552 02 ii 2 02/01/2041 die i mensis ii annoque mmxli 41 xli 2041} +test clock-2.2020 {conversion of 2041-02-28} { + clock format 2245667696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2041 12:34:56 die xxviii mensis ii annoque mmxli xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2466579 02 ii 2 02/28/2041 die xxviii mensis ii annoque mmxli 41 xli 2041} +test clock-2.2021 {conversion of 2041-03-01} { + clock format 2245754096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2041 12:34:56 die i mensis iii annoque mmxli xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2466580 03 iii 3 03/01/2041 die i mensis iii annoque mmxli 41 xli 2041} +test clock-2.2022 {conversion of 2041-03-31} { + clock format 2248346096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2041 12:34:56 die xxxi mensis iii annoque mmxli xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2466610 03 iii 3 03/31/2041 die xxxi mensis iii annoque mmxli 41 xli 2041} +test clock-2.2023 {conversion of 2041-04-01} { + clock format 2248432496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2041 12:34:56 die i mensis iv annoque mmxli xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2466611 04 iv 4 04/01/2041 die i mensis iv annoque mmxli 41 xli 2041} +test clock-2.2024 {conversion of 2041-04-30} { + clock format 2250938096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2041 12:34:56 die xxx mensis iv annoque mmxli xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2466640 04 iv 4 04/30/2041 die xxx mensis iv annoque mmxli 41 xli 2041} +test clock-2.2025 {conversion of 2041-05-01} { + clock format 2251024496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2041 12:34:56 die i mensis v annoque mmxli xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2466641 05 v 5 05/01/2041 die i mensis v annoque mmxli 41 xli 2041} +test clock-2.2026 {conversion of 2041-05-31} { + clock format 2253616496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2041 12:34:56 die xxxi mensis v annoque mmxli xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2466671 05 v 5 05/31/2041 die xxxi mensis v annoque mmxli 41 xli 2041} +test clock-2.2027 {conversion of 2041-06-01} { + clock format 2253702896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2041 12:34:56 die i mensis vi annoque mmxli xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2466672 06 vi 6 06/01/2041 die i mensis vi annoque mmxli 41 xli 2041} +test clock-2.2028 {conversion of 2041-06-30} { + clock format 2256208496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2041 12:34:56 die xxx mensis vi annoque mmxli xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2466701 06 vi 6 06/30/2041 die xxx mensis vi annoque mmxli 41 xli 2041} +test clock-2.2029 {conversion of 2041-07-01} { + clock format 2256294896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2041 12:34:56 die i mensis vii annoque mmxli xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2466702 07 vii 7 07/01/2041 die i mensis vii annoque mmxli 41 xli 2041} +test clock-2.2030 {conversion of 2041-07-31} { + clock format 2258886896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2041 12:34:56 die xxxi mensis vii annoque mmxli xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2466732 07 vii 7 07/31/2041 die xxxi mensis vii annoque mmxli 41 xli 2041} +test clock-2.2031 {conversion of 2041-08-01} { + clock format 2258973296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2041 12:34:56 die i mensis viii annoque mmxli xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2466733 08 viii 8 08/01/2041 die i mensis viii annoque mmxli 41 xli 2041} +test clock-2.2032 {conversion of 2041-08-31} { + clock format 2261565296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2041 12:34:56 die xxxi mensis viii annoque mmxli xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2466763 08 viii 8 08/31/2041 die xxxi mensis viii annoque mmxli 41 xli 2041} +test clock-2.2033 {conversion of 2041-09-01} { + clock format 2261651696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2041 12:34:56 die i mensis ix annoque mmxli xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2466764 09 ix 9 09/01/2041 die i mensis ix annoque mmxli 41 xli 2041} +test clock-2.2034 {conversion of 2041-09-30} { + clock format 2264157296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2041 12:34:56 die xxx mensis ix annoque mmxli xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2466793 09 ix 9 09/30/2041 die xxx mensis ix annoque mmxli 41 xli 2041} +test clock-2.2035 {conversion of 2041-10-01} { + clock format 2264243696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2041 12:34:56 die i mensis x annoque mmxli xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2466794 10 x 10 10/01/2041 die i mensis x annoque mmxli 41 xli 2041} +test clock-2.2036 {conversion of 2041-10-31} { + clock format 2266835696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2041 12:34:56 die xxxi mensis x annoque mmxli xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2466824 10 x 10 10/31/2041 die xxxi mensis x annoque mmxli 41 xli 2041} +test clock-2.2037 {conversion of 2041-11-01} { + clock format 2266922096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2041 12:34:56 die i mensis xi annoque mmxli xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2466825 11 xi 11 11/01/2041 die i mensis xi annoque mmxli 41 xli 2041} +test clock-2.2038 {conversion of 2041-11-30} { + clock format 2269427696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2041 12:34:56 die xxx mensis xi annoque mmxli xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2466854 11 xi 11 11/30/2041 die xxx mensis xi annoque mmxli 41 xli 2041} +test clock-2.2039 {conversion of 2041-12-01} { + clock format 2269514096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2041 12:34:56 die i mensis xii annoque mmxli xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2466855 12 xii 12 12/01/2041 die i mensis xii annoque mmxli 41 xli 2041} +test clock-2.2040 {conversion of 2041-12-31} { + clock format 2272106096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2041 12:34:56 die xxxi mensis xii annoque mmxli xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2466885 12 xii 12 12/31/2041 die xxxi mensis xii annoque mmxli 41 xli 2041} +test clock-2.2041 {conversion of 2042-01-01} { + clock format 2272192496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2042 12:34:56 die i mensis i annoque mmxlii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2466886 01 i 1 01/01/2042 die i mensis i annoque mmxlii 42 xlii 2042} +test clock-2.2042 {conversion of 2042-01-31} { + clock format 2274784496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2042 12:34:56 die xxxi mensis i annoque mmxlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2466916 01 i 1 01/31/2042 die xxxi mensis i annoque mmxlii 42 xlii 2042} +test clock-2.2043 {conversion of 2042-02-01} { + clock format 2274870896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2042 12:34:56 die i mensis ii annoque mmxlii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2466917 02 ii 2 02/01/2042 die i mensis ii annoque mmxlii 42 xlii 2042} +test clock-2.2044 {conversion of 2042-02-28} { + clock format 2277203696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2042 12:34:56 die xxviii mensis ii annoque mmxlii xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2466944 02 ii 2 02/28/2042 die xxviii mensis ii annoque mmxlii 42 xlii 2042} +test clock-2.2045 {conversion of 2042-03-01} { + clock format 2277290096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2042 12:34:56 die i mensis iii annoque mmxlii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2466945 03 iii 3 03/01/2042 die i mensis iii annoque mmxlii 42 xlii 2042} +test clock-2.2046 {conversion of 2042-03-31} { + clock format 2279882096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2042 12:34:56 die xxxi mensis iii annoque mmxlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2466975 03 iii 3 03/31/2042 die xxxi mensis iii annoque mmxlii 42 xlii 2042} +test clock-2.2047 {conversion of 2042-04-01} { + clock format 2279968496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2042 12:34:56 die i mensis iv annoque mmxlii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2466976 04 iv 4 04/01/2042 die i mensis iv annoque mmxlii 42 xlii 2042} +test clock-2.2048 {conversion of 2042-04-30} { + clock format 2282474096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2042 12:34:56 die xxx mensis iv annoque mmxlii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2467005 04 iv 4 04/30/2042 die xxx mensis iv annoque mmxlii 42 xlii 2042} +test clock-2.2049 {conversion of 2042-05-01} { + clock format 2282560496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2042 12:34:56 die i mensis v annoque mmxlii xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2467006 05 v 5 05/01/2042 die i mensis v annoque mmxlii 42 xlii 2042} +test clock-2.2050 {conversion of 2042-05-31} { + clock format 2285152496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2042 12:34:56 die xxxi mensis v annoque mmxlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2467036 05 v 5 05/31/2042 die xxxi mensis v annoque mmxlii 42 xlii 2042} +test clock-2.2051 {conversion of 2042-06-01} { + clock format 2285238896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2042 12:34:56 die i mensis vi annoque mmxlii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2467037 06 vi 6 06/01/2042 die i mensis vi annoque mmxlii 42 xlii 2042} +test clock-2.2052 {conversion of 2042-06-30} { + clock format 2287744496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2042 12:34:56 die xxx mensis vi annoque mmxlii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2467066 06 vi 6 06/30/2042 die xxx mensis vi annoque mmxlii 42 xlii 2042} +test clock-2.2053 {conversion of 2042-07-01} { + clock format 2287830896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2042 12:34:56 die i mensis vii annoque mmxlii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2467067 07 vii 7 07/01/2042 die i mensis vii annoque mmxlii 42 xlii 2042} +test clock-2.2054 {conversion of 2042-07-31} { + clock format 2290422896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2042 12:34:56 die xxxi mensis vii annoque mmxlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2467097 07 vii 7 07/31/2042 die xxxi mensis vii annoque mmxlii 42 xlii 2042} +test clock-2.2055 {conversion of 2042-08-01} { + clock format 2290509296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2042 12:34:56 die i mensis viii annoque mmxlii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2467098 08 viii 8 08/01/2042 die i mensis viii annoque mmxlii 42 xlii 2042} +test clock-2.2056 {conversion of 2042-08-31} { + clock format 2293101296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2042 12:34:56 die xxxi mensis viii annoque mmxlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2467128 08 viii 8 08/31/2042 die xxxi mensis viii annoque mmxlii 42 xlii 2042} +test clock-2.2057 {conversion of 2042-09-01} { + clock format 2293187696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2042 12:34:56 die i mensis ix annoque mmxlii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2467129 09 ix 9 09/01/2042 die i mensis ix annoque mmxlii 42 xlii 2042} +test clock-2.2058 {conversion of 2042-09-30} { + clock format 2295693296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2042 12:34:56 die xxx mensis ix annoque mmxlii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2467158 09 ix 9 09/30/2042 die xxx mensis ix annoque mmxlii 42 xlii 2042} +test clock-2.2059 {conversion of 2042-10-01} { + clock format 2295779696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2042 12:34:56 die i mensis x annoque mmxlii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2467159 10 x 10 10/01/2042 die i mensis x annoque mmxlii 42 xlii 2042} +test clock-2.2060 {conversion of 2042-10-31} { + clock format 2298371696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2042 12:34:56 die xxxi mensis x annoque mmxlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2467189 10 x 10 10/31/2042 die xxxi mensis x annoque mmxlii 42 xlii 2042} +test clock-2.2061 {conversion of 2042-11-01} { + clock format 2298458096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2042 12:34:56 die i mensis xi annoque mmxlii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2467190 11 xi 11 11/01/2042 die i mensis xi annoque mmxlii 42 xlii 2042} +test clock-2.2062 {conversion of 2042-11-30} { + clock format 2300963696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2042 12:34:56 die xxx mensis xi annoque mmxlii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2467219 11 xi 11 11/30/2042 die xxx mensis xi annoque mmxlii 42 xlii 2042} +test clock-2.2063 {conversion of 2042-12-01} { + clock format 2301050096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2042 12:34:56 die i mensis xii annoque mmxlii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2467220 12 xii 12 12/01/2042 die i mensis xii annoque mmxlii 42 xlii 2042} +test clock-2.2064 {conversion of 2042-12-31} { + clock format 2303642096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2042 12:34:56 die xxxi mensis xii annoque mmxlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2467250 12 xii 12 12/31/2042 die xxxi mensis xii annoque mmxlii 42 xlii 2042} +test clock-2.2065 {conversion of 2043-01-01} { + clock format 2303728496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2043 12:34:56 die i mensis i annoque mmxliii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2467251 01 i 1 01/01/2043 die i mensis i annoque mmxliii 43 xliii 2043} +test clock-2.2066 {conversion of 2043-01-31} { + clock format 2306320496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2043 12:34:56 die xxxi mensis i annoque mmxliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2467281 01 i 1 01/31/2043 die xxxi mensis i annoque mmxliii 43 xliii 2043} +test clock-2.2067 {conversion of 2043-02-01} { + clock format 2306406896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2043 12:34:56 die i mensis ii annoque mmxliii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2467282 02 ii 2 02/01/2043 die i mensis ii annoque mmxliii 43 xliii 2043} +test clock-2.2068 {conversion of 2043-02-28} { + clock format 2308739696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2043 12:34:56 die xxviii mensis ii annoque mmxliii xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2467309 02 ii 2 02/28/2043 die xxviii mensis ii annoque mmxliii 43 xliii 2043} +test clock-2.2069 {conversion of 2043-03-01} { + clock format 2308826096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2043 12:34:56 die i mensis iii annoque mmxliii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2467310 03 iii 3 03/01/2043 die i mensis iii annoque mmxliii 43 xliii 2043} +test clock-2.2070 {conversion of 2043-03-31} { + clock format 2311418096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2043 12:34:56 die xxxi mensis iii annoque mmxliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2467340 03 iii 3 03/31/2043 die xxxi mensis iii annoque mmxliii 43 xliii 2043} +test clock-2.2071 {conversion of 2043-04-01} { + clock format 2311504496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2043 12:34:56 die i mensis iv annoque mmxliii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2467341 04 iv 4 04/01/2043 die i mensis iv annoque mmxliii 43 xliii 2043} +test clock-2.2072 {conversion of 2043-04-30} { + clock format 2314010096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2043 12:34:56 die xxx mensis iv annoque mmxliii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2467370 04 iv 4 04/30/2043 die xxx mensis iv annoque mmxliii 43 xliii 2043} +test clock-2.2073 {conversion of 2043-05-01} { + clock format 2314096496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2043 12:34:56 die i mensis v annoque mmxliii xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2467371 05 v 5 05/01/2043 die i mensis v annoque mmxliii 43 xliii 2043} +test clock-2.2074 {conversion of 2043-05-31} { + clock format 2316688496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2043 12:34:56 die xxxi mensis v annoque mmxliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2467401 05 v 5 05/31/2043 die xxxi mensis v annoque mmxliii 43 xliii 2043} +test clock-2.2075 {conversion of 2043-06-01} { + clock format 2316774896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2043 12:34:56 die i mensis vi annoque mmxliii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2467402 06 vi 6 06/01/2043 die i mensis vi annoque mmxliii 43 xliii 2043} +test clock-2.2076 {conversion of 2043-06-30} { + clock format 2319280496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2043 12:34:56 die xxx mensis vi annoque mmxliii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2467431 06 vi 6 06/30/2043 die xxx mensis vi annoque mmxliii 43 xliii 2043} +test clock-2.2077 {conversion of 2043-07-01} { + clock format 2319366896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2043 12:34:56 die i mensis vii annoque mmxliii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2467432 07 vii 7 07/01/2043 die i mensis vii annoque mmxliii 43 xliii 2043} +test clock-2.2078 {conversion of 2043-07-31} { + clock format 2321958896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2043 12:34:56 die xxxi mensis vii annoque mmxliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2467462 07 vii 7 07/31/2043 die xxxi mensis vii annoque mmxliii 43 xliii 2043} +test clock-2.2079 {conversion of 2043-08-01} { + clock format 2322045296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2043 12:34:56 die i mensis viii annoque mmxliii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2467463 08 viii 8 08/01/2043 die i mensis viii annoque mmxliii 43 xliii 2043} +test clock-2.2080 {conversion of 2043-08-31} { + clock format 2324637296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2043 12:34:56 die xxxi mensis viii annoque mmxliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2467493 08 viii 8 08/31/2043 die xxxi mensis viii annoque mmxliii 43 xliii 2043} +test clock-2.2081 {conversion of 2043-09-01} { + clock format 2324723696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2043 12:34:56 die i mensis ix annoque mmxliii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2467494 09 ix 9 09/01/2043 die i mensis ix annoque mmxliii 43 xliii 2043} +test clock-2.2082 {conversion of 2043-09-30} { + clock format 2327229296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2043 12:34:56 die xxx mensis ix annoque mmxliii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2467523 09 ix 9 09/30/2043 die xxx mensis ix annoque mmxliii 43 xliii 2043} +test clock-2.2083 {conversion of 2043-10-01} { + clock format 2327315696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2043 12:34:56 die i mensis x annoque mmxliii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2467524 10 x 10 10/01/2043 die i mensis x annoque mmxliii 43 xliii 2043} +test clock-2.2084 {conversion of 2043-10-31} { + clock format 2329907696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2043 12:34:56 die xxxi mensis x annoque mmxliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2467554 10 x 10 10/31/2043 die xxxi mensis x annoque mmxliii 43 xliii 2043} +test clock-2.2085 {conversion of 2043-11-01} { + clock format 2329994096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2043 12:34:56 die i mensis xi annoque mmxliii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2467555 11 xi 11 11/01/2043 die i mensis xi annoque mmxliii 43 xliii 2043} +test clock-2.2086 {conversion of 2043-11-30} { + clock format 2332499696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2043 12:34:56 die xxx mensis xi annoque mmxliii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2467584 11 xi 11 11/30/2043 die xxx mensis xi annoque mmxliii 43 xliii 2043} +test clock-2.2087 {conversion of 2043-12-01} { + clock format 2332586096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2043 12:34:56 die i mensis xii annoque mmxliii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2467585 12 xii 12 12/01/2043 die i mensis xii annoque mmxliii 43 xliii 2043} +test clock-2.2088 {conversion of 2043-12-31} { + clock format 2335178096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2043 12:34:56 die xxxi mensis xii annoque mmxliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2467615 12 xii 12 12/31/2043 die xxxi mensis xii annoque mmxliii 43 xliii 2043} +test clock-2.2089 {conversion of 2044-01-01} { + clock format 2335264496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2044 12:34:56 die i mensis i annoque mmxliv xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2467616 01 i 1 01/01/2044 die i mensis i annoque mmxliv 44 xliv 2044} +test clock-2.2090 {conversion of 2044-01-31} { + clock format 2337856496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2044 12:34:56 die xxxi mensis i annoque mmxliv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2467646 01 i 1 01/31/2044 die xxxi mensis i annoque mmxliv 44 xliv 2044} +test clock-2.2091 {conversion of 2044-02-01} { + clock format 2337942896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2044 12:34:56 die i mensis ii annoque mmxliv xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2467647 02 ii 2 02/01/2044 die i mensis ii annoque mmxliv 44 xliv 2044} +test clock-2.2092 {conversion of 2044-02-29} { + clock format 2340362096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2044 12:34:56 die xxix mensis ii annoque mmxliv xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2467675 02 ii 2 02/29/2044 die xxix mensis ii annoque mmxliv 44 xliv 2044} +test clock-2.2093 {conversion of 2044-03-01} { + clock format 2340448496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2044 12:34:56 die i mensis iii annoque mmxliv xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2467676 03 iii 3 03/01/2044 die i mensis iii annoque mmxliv 44 xliv 2044} +test clock-2.2094 {conversion of 2044-03-31} { + clock format 2343040496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2044 12:34:56 die xxxi mensis iii annoque mmxliv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2467706 03 iii 3 03/31/2044 die xxxi mensis iii annoque mmxliv 44 xliv 2044} +test clock-2.2095 {conversion of 2044-04-01} { + clock format 2343126896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2044 12:34:56 die i mensis iv annoque mmxliv xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2467707 04 iv 4 04/01/2044 die i mensis iv annoque mmxliv 44 xliv 2044} +test clock-2.2096 {conversion of 2044-04-30} { + clock format 2345632496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2044 12:34:56 die xxx mensis iv annoque mmxliv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2467736 04 iv 4 04/30/2044 die xxx mensis iv annoque mmxliv 44 xliv 2044} +test clock-2.2097 {conversion of 2044-05-01} { + clock format 2345718896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2044 12:34:56 die i mensis v annoque mmxliv xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2467737 05 v 5 05/01/2044 die i mensis v annoque mmxliv 44 xliv 2044} +test clock-2.2098 {conversion of 2044-05-31} { + clock format 2348310896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2044 12:34:56 die xxxi mensis v annoque mmxliv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2467767 05 v 5 05/31/2044 die xxxi mensis v annoque mmxliv 44 xliv 2044} +test clock-2.2099 {conversion of 2044-06-01} { + clock format 2348397296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2044 12:34:56 die i mensis vi annoque mmxliv xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2467768 06 vi 6 06/01/2044 die i mensis vi annoque mmxliv 44 xliv 2044} +test clock-2.2100 {conversion of 2044-06-30} { + clock format 2350902896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2044 12:34:56 die xxx mensis vi annoque mmxliv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2467797 06 vi 6 06/30/2044 die xxx mensis vi annoque mmxliv 44 xliv 2044} +test clock-2.2101 {conversion of 2044-07-01} { + clock format 2350989296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2044 12:34:56 die i mensis vii annoque mmxliv xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2467798 07 vii 7 07/01/2044 die i mensis vii annoque mmxliv 44 xliv 2044} +test clock-2.2102 {conversion of 2044-07-31} { + clock format 2353581296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2044 12:34:56 die xxxi mensis vii annoque mmxliv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2467828 07 vii 7 07/31/2044 die xxxi mensis vii annoque mmxliv 44 xliv 2044} +test clock-2.2103 {conversion of 2044-08-01} { + clock format 2353667696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2044 12:34:56 die i mensis viii annoque mmxliv xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2467829 08 viii 8 08/01/2044 die i mensis viii annoque mmxliv 44 xliv 2044} +test clock-2.2104 {conversion of 2044-08-31} { + clock format 2356259696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2044 12:34:56 die xxxi mensis viii annoque mmxliv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2467859 08 viii 8 08/31/2044 die xxxi mensis viii annoque mmxliv 44 xliv 2044} +test clock-2.2105 {conversion of 2044-09-01} { + clock format 2356346096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2044 12:34:56 die i mensis ix annoque mmxliv xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2467860 09 ix 9 09/01/2044 die i mensis ix annoque mmxliv 44 xliv 2044} +test clock-2.2106 {conversion of 2044-09-30} { + clock format 2358851696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2044 12:34:56 die xxx mensis ix annoque mmxliv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2467889 09 ix 9 09/30/2044 die xxx mensis ix annoque mmxliv 44 xliv 2044} +test clock-2.2107 {conversion of 2044-10-01} { + clock format 2358938096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2044 12:34:56 die i mensis x annoque mmxliv xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2467890 10 x 10 10/01/2044 die i mensis x annoque mmxliv 44 xliv 2044} +test clock-2.2108 {conversion of 2044-10-31} { + clock format 2361530096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2044 12:34:56 die xxxi mensis x annoque mmxliv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2467920 10 x 10 10/31/2044 die xxxi mensis x annoque mmxliv 44 xliv 2044} +test clock-2.2109 {conversion of 2044-11-01} { + clock format 2361616496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2044 12:34:56 die i mensis xi annoque mmxliv xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2467921 11 xi 11 11/01/2044 die i mensis xi annoque mmxliv 44 xliv 2044} +test clock-2.2110 {conversion of 2044-11-30} { + clock format 2364122096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2044 12:34:56 die xxx mensis xi annoque mmxliv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2467950 11 xi 11 11/30/2044 die xxx mensis xi annoque mmxliv 44 xliv 2044} +test clock-2.2111 {conversion of 2044-12-01} { + clock format 2364208496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2044 12:34:56 die i mensis xii annoque mmxliv xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2467951 12 xii 12 12/01/2044 die i mensis xii annoque mmxliv 44 xliv 2044} +test clock-2.2112 {conversion of 2044-12-31} { + clock format 2366800496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2044 12:34:56 die xxxi mensis xii annoque mmxliv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2467981 12 xii 12 12/31/2044 die xxxi mensis xii annoque mmxliv 44 xliv 2044} +test clock-2.2113 {conversion of 2045-01-01} { + clock format 2366886896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2045 12:34:56 die i mensis i annoque mmxlv xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2467982 01 i 1 01/01/2045 die i mensis i annoque mmxlv 45 xlv 2045} +test clock-2.2114 {conversion of 2045-01-31} { + clock format 2369478896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2045 12:34:56 die xxxi mensis i annoque mmxlv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2468012 01 i 1 01/31/2045 die xxxi mensis i annoque mmxlv 45 xlv 2045} +test clock-2.2115 {conversion of 2045-02-01} { + clock format 2369565296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2045 12:34:56 die i mensis ii annoque mmxlv xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2468013 02 ii 2 02/01/2045 die i mensis ii annoque mmxlv 45 xlv 2045} +test clock-2.2116 {conversion of 2045-02-28} { + clock format 2371898096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2045 12:34:56 die xxviii mensis ii annoque mmxlv xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2468040 02 ii 2 02/28/2045 die xxviii mensis ii annoque mmxlv 45 xlv 2045} +test clock-2.2117 {conversion of 2045-03-01} { + clock format 2371984496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2045 12:34:56 die i mensis iii annoque mmxlv xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2468041 03 iii 3 03/01/2045 die i mensis iii annoque mmxlv 45 xlv 2045} +test clock-2.2118 {conversion of 2045-03-31} { + clock format 2374576496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2045 12:34:56 die xxxi mensis iii annoque mmxlv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2468071 03 iii 3 03/31/2045 die xxxi mensis iii annoque mmxlv 45 xlv 2045} +test clock-2.2119 {conversion of 2045-04-01} { + clock format 2374662896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2045 12:34:56 die i mensis iv annoque mmxlv xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2468072 04 iv 4 04/01/2045 die i mensis iv annoque mmxlv 45 xlv 2045} +test clock-2.2120 {conversion of 2045-04-30} { + clock format 2377168496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2045 12:34:56 die xxx mensis iv annoque mmxlv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2468101 04 iv 4 04/30/2045 die xxx mensis iv annoque mmxlv 45 xlv 2045} +test clock-2.2121 {conversion of 2045-05-01} { + clock format 2377254896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2045 12:34:56 die i mensis v annoque mmxlv xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2468102 05 v 5 05/01/2045 die i mensis v annoque mmxlv 45 xlv 2045} +test clock-2.2122 {conversion of 2045-05-31} { + clock format 2379846896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2045 12:34:56 die xxxi mensis v annoque mmxlv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2468132 05 v 5 05/31/2045 die xxxi mensis v annoque mmxlv 45 xlv 2045} +test clock-2.2123 {conversion of 2045-06-01} { + clock format 2379933296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2045 12:34:56 die i mensis vi annoque mmxlv xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2468133 06 vi 6 06/01/2045 die i mensis vi annoque mmxlv 45 xlv 2045} +test clock-2.2124 {conversion of 2045-06-30} { + clock format 2382438896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2045 12:34:56 die xxx mensis vi annoque mmxlv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2468162 06 vi 6 06/30/2045 die xxx mensis vi annoque mmxlv 45 xlv 2045} +test clock-2.2125 {conversion of 2045-07-01} { + clock format 2382525296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2045 12:34:56 die i mensis vii annoque mmxlv xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2468163 07 vii 7 07/01/2045 die i mensis vii annoque mmxlv 45 xlv 2045} +test clock-2.2126 {conversion of 2045-07-31} { + clock format 2385117296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2045 12:34:56 die xxxi mensis vii annoque mmxlv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2468193 07 vii 7 07/31/2045 die xxxi mensis vii annoque mmxlv 45 xlv 2045} +test clock-2.2127 {conversion of 2045-08-01} { + clock format 2385203696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2045 12:34:56 die i mensis viii annoque mmxlv xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2468194 08 viii 8 08/01/2045 die i mensis viii annoque mmxlv 45 xlv 2045} +test clock-2.2128 {conversion of 2045-08-31} { + clock format 2387795696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2045 12:34:56 die xxxi mensis viii annoque mmxlv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2468224 08 viii 8 08/31/2045 die xxxi mensis viii annoque mmxlv 45 xlv 2045} +test clock-2.2129 {conversion of 2045-09-01} { + clock format 2387882096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2045 12:34:56 die i mensis ix annoque mmxlv xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2468225 09 ix 9 09/01/2045 die i mensis ix annoque mmxlv 45 xlv 2045} +test clock-2.2130 {conversion of 2045-09-30} { + clock format 2390387696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2045 12:34:56 die xxx mensis ix annoque mmxlv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2468254 09 ix 9 09/30/2045 die xxx mensis ix annoque mmxlv 45 xlv 2045} +test clock-2.2131 {conversion of 2045-10-01} { + clock format 2390474096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2045 12:34:56 die i mensis x annoque mmxlv xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2468255 10 x 10 10/01/2045 die i mensis x annoque mmxlv 45 xlv 2045} +test clock-2.2132 {conversion of 2045-10-31} { + clock format 2393066096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2045 12:34:56 die xxxi mensis x annoque mmxlv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2468285 10 x 10 10/31/2045 die xxxi mensis x annoque mmxlv 45 xlv 2045} +test clock-2.2133 {conversion of 2045-11-01} { + clock format 2393152496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2045 12:34:56 die i mensis xi annoque mmxlv xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2468286 11 xi 11 11/01/2045 die i mensis xi annoque mmxlv 45 xlv 2045} +test clock-2.2134 {conversion of 2045-11-30} { + clock format 2395658096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2045 12:34:56 die xxx mensis xi annoque mmxlv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2468315 11 xi 11 11/30/2045 die xxx mensis xi annoque mmxlv 45 xlv 2045} +test clock-2.2135 {conversion of 2045-12-01} { + clock format 2395744496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2045 12:34:56 die i mensis xii annoque mmxlv xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2468316 12 xii 12 12/01/2045 die i mensis xii annoque mmxlv 45 xlv 2045} +test clock-2.2136 {conversion of 2045-12-31} { + clock format 2398336496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2045 12:34:56 die xxxi mensis xii annoque mmxlv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2468346 12 xii 12 12/31/2045 die xxxi mensis xii annoque mmxlv 45 xlv 2045} +test clock-2.2137 {conversion of 2046-01-01} { + clock format 2398422896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2046 12:34:56 die i mensis i annoque mmxlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2468347 01 i 1 01/01/2046 die i mensis i annoque mmxlvi 46 xlvi 2046} +test clock-2.2138 {conversion of 2046-01-31} { + clock format 2401014896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2046 12:34:56 die xxxi mensis i annoque mmxlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2468377 01 i 1 01/31/2046 die xxxi mensis i annoque mmxlvi 46 xlvi 2046} +test clock-2.2139 {conversion of 2046-02-01} { + clock format 2401101296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2046 12:34:56 die i mensis ii annoque mmxlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2468378 02 ii 2 02/01/2046 die i mensis ii annoque mmxlvi 46 xlvi 2046} +test clock-2.2140 {conversion of 2046-02-28} { + clock format 2403434096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2046 12:34:56 die xxviii mensis ii annoque mmxlvi xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2468405 02 ii 2 02/28/2046 die xxviii mensis ii annoque mmxlvi 46 xlvi 2046} +test clock-2.2141 {conversion of 2046-03-01} { + clock format 2403520496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2046 12:34:56 die i mensis iii annoque mmxlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2468406 03 iii 3 03/01/2046 die i mensis iii annoque mmxlvi 46 xlvi 2046} +test clock-2.2142 {conversion of 2046-03-31} { + clock format 2406112496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2046 12:34:56 die xxxi mensis iii annoque mmxlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2468436 03 iii 3 03/31/2046 die xxxi mensis iii annoque mmxlvi 46 xlvi 2046} +test clock-2.2143 {conversion of 2046-04-01} { + clock format 2406198896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2046 12:34:56 die i mensis iv annoque mmxlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2468437 04 iv 4 04/01/2046 die i mensis iv annoque mmxlvi 46 xlvi 2046} +test clock-2.2144 {conversion of 2046-04-30} { + clock format 2408704496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2046 12:34:56 die xxx mensis iv annoque mmxlvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2468466 04 iv 4 04/30/2046 die xxx mensis iv annoque mmxlvi 46 xlvi 2046} +test clock-2.2145 {conversion of 2046-05-01} { + clock format 2408790896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2046 12:34:56 die i mensis v annoque mmxlvi xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2468467 05 v 5 05/01/2046 die i mensis v annoque mmxlvi 46 xlvi 2046} +test clock-2.2146 {conversion of 2046-05-31} { + clock format 2411382896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2046 12:34:56 die xxxi mensis v annoque mmxlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2468497 05 v 5 05/31/2046 die xxxi mensis v annoque mmxlvi 46 xlvi 2046} +test clock-2.2147 {conversion of 2046-06-01} { + clock format 2411469296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2046 12:34:56 die i mensis vi annoque mmxlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2468498 06 vi 6 06/01/2046 die i mensis vi annoque mmxlvi 46 xlvi 2046} +test clock-2.2148 {conversion of 2046-06-30} { + clock format 2413974896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2046 12:34:56 die xxx mensis vi annoque mmxlvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2468527 06 vi 6 06/30/2046 die xxx mensis vi annoque mmxlvi 46 xlvi 2046} +test clock-2.2149 {conversion of 2046-07-01} { + clock format 2414061296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2046 12:34:56 die i mensis vii annoque mmxlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2468528 07 vii 7 07/01/2046 die i mensis vii annoque mmxlvi 46 xlvi 2046} +test clock-2.2150 {conversion of 2046-07-31} { + clock format 2416653296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2046 12:34:56 die xxxi mensis vii annoque mmxlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2468558 07 vii 7 07/31/2046 die xxxi mensis vii annoque mmxlvi 46 xlvi 2046} +test clock-2.2151 {conversion of 2046-08-01} { + clock format 2416739696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2046 12:34:56 die i mensis viii annoque mmxlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2468559 08 viii 8 08/01/2046 die i mensis viii annoque mmxlvi 46 xlvi 2046} +test clock-2.2152 {conversion of 2046-08-31} { + clock format 2419331696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2046 12:34:56 die xxxi mensis viii annoque mmxlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2468589 08 viii 8 08/31/2046 die xxxi mensis viii annoque mmxlvi 46 xlvi 2046} +test clock-2.2153 {conversion of 2046-09-01} { + clock format 2419418096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2046 12:34:56 die i mensis ix annoque mmxlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2468590 09 ix 9 09/01/2046 die i mensis ix annoque mmxlvi 46 xlvi 2046} +test clock-2.2154 {conversion of 2046-09-30} { + clock format 2421923696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2046 12:34:56 die xxx mensis ix annoque mmxlvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2468619 09 ix 9 09/30/2046 die xxx mensis ix annoque mmxlvi 46 xlvi 2046} +test clock-2.2155 {conversion of 2046-10-01} { + clock format 2422010096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2046 12:34:56 die i mensis x annoque mmxlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2468620 10 x 10 10/01/2046 die i mensis x annoque mmxlvi 46 xlvi 2046} +test clock-2.2156 {conversion of 2046-10-31} { + clock format 2424602096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2046 12:34:56 die xxxi mensis x annoque mmxlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2468650 10 x 10 10/31/2046 die xxxi mensis x annoque mmxlvi 46 xlvi 2046} +test clock-2.2157 {conversion of 2046-11-01} { + clock format 2424688496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2046 12:34:56 die i mensis xi annoque mmxlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2468651 11 xi 11 11/01/2046 die i mensis xi annoque mmxlvi 46 xlvi 2046} +test clock-2.2158 {conversion of 2046-11-30} { + clock format 2427194096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2046 12:34:56 die xxx mensis xi annoque mmxlvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2468680 11 xi 11 11/30/2046 die xxx mensis xi annoque mmxlvi 46 xlvi 2046} +test clock-2.2159 {conversion of 2046-12-01} { + clock format 2427280496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2046 12:34:56 die i mensis xii annoque mmxlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2468681 12 xii 12 12/01/2046 die i mensis xii annoque mmxlvi 46 xlvi 2046} +test clock-2.2160 {conversion of 2046-12-31} { + clock format 2429872496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2046 12:34:56 die xxxi mensis xii annoque mmxlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2468711 12 xii 12 12/31/2046 die xxxi mensis xii annoque mmxlvi 46 xlvi 2046} +test clock-2.2161 {conversion of 2047-01-01} { + clock format 2429958896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2047 12:34:56 die i mensis i annoque mmxlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2468712 01 i 1 01/01/2047 die i mensis i annoque mmxlvii 47 xlvii 2047} +test clock-2.2162 {conversion of 2047-01-31} { + clock format 2432550896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2047 12:34:56 die xxxi mensis i annoque mmxlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2468742 01 i 1 01/31/2047 die xxxi mensis i annoque mmxlvii 47 xlvii 2047} +test clock-2.2163 {conversion of 2047-02-01} { + clock format 2432637296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2047 12:34:56 die i mensis ii annoque mmxlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2468743 02 ii 2 02/01/2047 die i mensis ii annoque mmxlvii 47 xlvii 2047} +test clock-2.2164 {conversion of 2047-02-28} { + clock format 2434970096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2047 12:34:56 die xxviii mensis ii annoque mmxlvii xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2468770 02 ii 2 02/28/2047 die xxviii mensis ii annoque mmxlvii 47 xlvii 2047} +test clock-2.2165 {conversion of 2047-03-01} { + clock format 2435056496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2047 12:34:56 die i mensis iii annoque mmxlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2468771 03 iii 3 03/01/2047 die i mensis iii annoque mmxlvii 47 xlvii 2047} +test clock-2.2166 {conversion of 2047-03-31} { + clock format 2437648496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2047 12:34:56 die xxxi mensis iii annoque mmxlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2468801 03 iii 3 03/31/2047 die xxxi mensis iii annoque mmxlvii 47 xlvii 2047} +test clock-2.2167 {conversion of 2047-04-01} { + clock format 2437734896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2047 12:34:56 die i mensis iv annoque mmxlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2468802 04 iv 4 04/01/2047 die i mensis iv annoque mmxlvii 47 xlvii 2047} +test clock-2.2168 {conversion of 2047-04-30} { + clock format 2440240496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2047 12:34:56 die xxx mensis iv annoque mmxlvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2468831 04 iv 4 04/30/2047 die xxx mensis iv annoque mmxlvii 47 xlvii 2047} +test clock-2.2169 {conversion of 2047-05-01} { + clock format 2440326896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2047 12:34:56 die i mensis v annoque mmxlvii xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2468832 05 v 5 05/01/2047 die i mensis v annoque mmxlvii 47 xlvii 2047} +test clock-2.2170 {conversion of 2047-05-31} { + clock format 2442918896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2047 12:34:56 die xxxi mensis v annoque mmxlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2468862 05 v 5 05/31/2047 die xxxi mensis v annoque mmxlvii 47 xlvii 2047} +test clock-2.2171 {conversion of 2047-06-01} { + clock format 2443005296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2047 12:34:56 die i mensis vi annoque mmxlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2468863 06 vi 6 06/01/2047 die i mensis vi annoque mmxlvii 47 xlvii 2047} +test clock-2.2172 {conversion of 2047-06-30} { + clock format 2445510896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2047 12:34:56 die xxx mensis vi annoque mmxlvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2468892 06 vi 6 06/30/2047 die xxx mensis vi annoque mmxlvii 47 xlvii 2047} +test clock-2.2173 {conversion of 2047-07-01} { + clock format 2445597296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2047 12:34:56 die i mensis vii annoque mmxlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2468893 07 vii 7 07/01/2047 die i mensis vii annoque mmxlvii 47 xlvii 2047} +test clock-2.2174 {conversion of 2047-07-31} { + clock format 2448189296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2047 12:34:56 die xxxi mensis vii annoque mmxlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2468923 07 vii 7 07/31/2047 die xxxi mensis vii annoque mmxlvii 47 xlvii 2047} +test clock-2.2175 {conversion of 2047-08-01} { + clock format 2448275696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2047 12:34:56 die i mensis viii annoque mmxlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2468924 08 viii 8 08/01/2047 die i mensis viii annoque mmxlvii 47 xlvii 2047} +test clock-2.2176 {conversion of 2047-08-31} { + clock format 2450867696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2047 12:34:56 die xxxi mensis viii annoque mmxlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2468954 08 viii 8 08/31/2047 die xxxi mensis viii annoque mmxlvii 47 xlvii 2047} +test clock-2.2177 {conversion of 2047-09-01} { + clock format 2450954096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2047 12:34:56 die i mensis ix annoque mmxlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2468955 09 ix 9 09/01/2047 die i mensis ix annoque mmxlvii 47 xlvii 2047} +test clock-2.2178 {conversion of 2047-09-30} { + clock format 2453459696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2047 12:34:56 die xxx mensis ix annoque mmxlvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2468984 09 ix 9 09/30/2047 die xxx mensis ix annoque mmxlvii 47 xlvii 2047} +test clock-2.2179 {conversion of 2047-10-01} { + clock format 2453546096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2047 12:34:56 die i mensis x annoque mmxlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2468985 10 x 10 10/01/2047 die i mensis x annoque mmxlvii 47 xlvii 2047} +test clock-2.2180 {conversion of 2047-10-31} { + clock format 2456138096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2047 12:34:56 die xxxi mensis x annoque mmxlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2469015 10 x 10 10/31/2047 die xxxi mensis x annoque mmxlvii 47 xlvii 2047} +test clock-2.2181 {conversion of 2047-11-01} { + clock format 2456224496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2047 12:34:56 die i mensis xi annoque mmxlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2469016 11 xi 11 11/01/2047 die i mensis xi annoque mmxlvii 47 xlvii 2047} +test clock-2.2182 {conversion of 2047-11-30} { + clock format 2458730096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2047 12:34:56 die xxx mensis xi annoque mmxlvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2469045 11 xi 11 11/30/2047 die xxx mensis xi annoque mmxlvii 47 xlvii 2047} +test clock-2.2183 {conversion of 2047-12-01} { + clock format 2458816496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2047 12:34:56 die i mensis xii annoque mmxlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2469046 12 xii 12 12/01/2047 die i mensis xii annoque mmxlvii 47 xlvii 2047} +test clock-2.2184 {conversion of 2047-12-31} { + clock format 2461408496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2047 12:34:56 die xxxi mensis xii annoque mmxlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2469076 12 xii 12 12/31/2047 die xxxi mensis xii annoque mmxlvii 47 xlvii 2047} +test clock-2.2185 {conversion of 2048-01-01} { + clock format 2461494896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2048 12:34:56 die i mensis i annoque mmxlviii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2469077 01 i 1 01/01/2048 die i mensis i annoque mmxlviii 48 xlviii 2048} +test clock-2.2186 {conversion of 2048-01-31} { + clock format 2464086896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2048 12:34:56 die xxxi mensis i annoque mmxlviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2469107 01 i 1 01/31/2048 die xxxi mensis i annoque mmxlviii 48 xlviii 2048} +test clock-2.2187 {conversion of 2048-02-01} { + clock format 2464173296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2048 12:34:56 die i mensis ii annoque mmxlviii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2469108 02 ii 2 02/01/2048 die i mensis ii annoque mmxlviii 48 xlviii 2048} +test clock-2.2188 {conversion of 2048-02-29} { + clock format 2466592496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2048 12:34:56 die xxix mensis ii annoque mmxlviii xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2469136 02 ii 2 02/29/2048 die xxix mensis ii annoque mmxlviii 48 xlviii 2048} +test clock-2.2189 {conversion of 2048-03-01} { + clock format 2466678896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2048 12:34:56 die i mensis iii annoque mmxlviii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2469137 03 iii 3 03/01/2048 die i mensis iii annoque mmxlviii 48 xlviii 2048} +test clock-2.2190 {conversion of 2048-03-31} { + clock format 2469270896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2048 12:34:56 die xxxi mensis iii annoque mmxlviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2469167 03 iii 3 03/31/2048 die xxxi mensis iii annoque mmxlviii 48 xlviii 2048} +test clock-2.2191 {conversion of 2048-04-01} { + clock format 2469357296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2048 12:34:56 die i mensis iv annoque mmxlviii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2469168 04 iv 4 04/01/2048 die i mensis iv annoque mmxlviii 48 xlviii 2048} +test clock-2.2192 {conversion of 2048-04-30} { + clock format 2471862896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2048 12:34:56 die xxx mensis iv annoque mmxlviii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2469197 04 iv 4 04/30/2048 die xxx mensis iv annoque mmxlviii 48 xlviii 2048} +test clock-2.2193 {conversion of 2048-05-01} { + clock format 2471949296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2048 12:34:56 die i mensis v annoque mmxlviii xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2469198 05 v 5 05/01/2048 die i mensis v annoque mmxlviii 48 xlviii 2048} +test clock-2.2194 {conversion of 2048-05-31} { + clock format 2474541296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2048 12:34:56 die xxxi mensis v annoque mmxlviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2469228 05 v 5 05/31/2048 die xxxi mensis v annoque mmxlviii 48 xlviii 2048} +test clock-2.2195 {conversion of 2048-06-01} { + clock format 2474627696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2048 12:34:56 die i mensis vi annoque mmxlviii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2469229 06 vi 6 06/01/2048 die i mensis vi annoque mmxlviii 48 xlviii 2048} +test clock-2.2196 {conversion of 2048-06-30} { + clock format 2477133296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2048 12:34:56 die xxx mensis vi annoque mmxlviii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2469258 06 vi 6 06/30/2048 die xxx mensis vi annoque mmxlviii 48 xlviii 2048} +test clock-2.2197 {conversion of 2048-07-01} { + clock format 2477219696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2048 12:34:56 die i mensis vii annoque mmxlviii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2469259 07 vii 7 07/01/2048 die i mensis vii annoque mmxlviii 48 xlviii 2048} +test clock-2.2198 {conversion of 2048-07-31} { + clock format 2479811696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2048 12:34:56 die xxxi mensis vii annoque mmxlviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2469289 07 vii 7 07/31/2048 die xxxi mensis vii annoque mmxlviii 48 xlviii 2048} +test clock-2.2199 {conversion of 2048-08-01} { + clock format 2479898096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2048 12:34:56 die i mensis viii annoque mmxlviii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2469290 08 viii 8 08/01/2048 die i mensis viii annoque mmxlviii 48 xlviii 2048} +test clock-2.2200 {conversion of 2048-08-31} { + clock format 2482490096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2048 12:34:56 die xxxi mensis viii annoque mmxlviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2469320 08 viii 8 08/31/2048 die xxxi mensis viii annoque mmxlviii 48 xlviii 2048} +test clock-2.2201 {conversion of 2048-09-01} { + clock format 2482576496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2048 12:34:56 die i mensis ix annoque mmxlviii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2469321 09 ix 9 09/01/2048 die i mensis ix annoque mmxlviii 48 xlviii 2048} +test clock-2.2202 {conversion of 2048-09-30} { + clock format 2485082096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2048 12:34:56 die xxx mensis ix annoque mmxlviii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2469350 09 ix 9 09/30/2048 die xxx mensis ix annoque mmxlviii 48 xlviii 2048} +test clock-2.2203 {conversion of 2048-10-01} { + clock format 2485168496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2048 12:34:56 die i mensis x annoque mmxlviii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2469351 10 x 10 10/01/2048 die i mensis x annoque mmxlviii 48 xlviii 2048} +test clock-2.2204 {conversion of 2048-10-31} { + clock format 2487760496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2048 12:34:56 die xxxi mensis x annoque mmxlviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2469381 10 x 10 10/31/2048 die xxxi mensis x annoque mmxlviii 48 xlviii 2048} +test clock-2.2205 {conversion of 2048-11-01} { + clock format 2487846896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2048 12:34:56 die i mensis xi annoque mmxlviii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2469382 11 xi 11 11/01/2048 die i mensis xi annoque mmxlviii 48 xlviii 2048} +test clock-2.2206 {conversion of 2048-11-30} { + clock format 2490352496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2048 12:34:56 die xxx mensis xi annoque mmxlviii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2469411 11 xi 11 11/30/2048 die xxx mensis xi annoque mmxlviii 48 xlviii 2048} +test clock-2.2207 {conversion of 2048-12-01} { + clock format 2490438896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2048 12:34:56 die i mensis xii annoque mmxlviii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2469412 12 xii 12 12/01/2048 die i mensis xii annoque mmxlviii 48 xlviii 2048} +test clock-2.2208 {conversion of 2048-12-31} { + clock format 2493030896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2048 12:34:56 die xxxi mensis xii annoque mmxlviii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2469442 12 xii 12 12/31/2048 die xxxi mensis xii annoque mmxlviii 48 xlviii 2048} +test clock-2.2209 {conversion of 2049-01-01} { + clock format 2493117296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2049 12:34:56 die i mensis i annoque mmxlix xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2469443 01 i 1 01/01/2049 die i mensis i annoque mmxlix 49 xlix 2049} +test clock-2.2210 {conversion of 2049-01-31} { + clock format 2495709296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2049 12:34:56 die xxxi mensis i annoque mmxlix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2469473 01 i 1 01/31/2049 die xxxi mensis i annoque mmxlix 49 xlix 2049} +test clock-2.2211 {conversion of 2049-02-01} { + clock format 2495795696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2049 12:34:56 die i mensis ii annoque mmxlix xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2469474 02 ii 2 02/01/2049 die i mensis ii annoque mmxlix 49 xlix 2049} +test clock-2.2212 {conversion of 2049-02-28} { + clock format 2498128496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2049 12:34:56 die xxviii mensis ii annoque mmxlix xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2469501 02 ii 2 02/28/2049 die xxviii mensis ii annoque mmxlix 49 xlix 2049} +test clock-2.2213 {conversion of 2049-03-01} { + clock format 2498214896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2049 12:34:56 die i mensis iii annoque mmxlix xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2469502 03 iii 3 03/01/2049 die i mensis iii annoque mmxlix 49 xlix 2049} +test clock-2.2214 {conversion of 2049-03-31} { + clock format 2500806896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2049 12:34:56 die xxxi mensis iii annoque mmxlix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2469532 03 iii 3 03/31/2049 die xxxi mensis iii annoque mmxlix 49 xlix 2049} +test clock-2.2215 {conversion of 2049-04-01} { + clock format 2500893296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2049 12:34:56 die i mensis iv annoque mmxlix xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2469533 04 iv 4 04/01/2049 die i mensis iv annoque mmxlix 49 xlix 2049} +test clock-2.2216 {conversion of 2049-04-30} { + clock format 2503398896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2049 12:34:56 die xxx mensis iv annoque mmxlix xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2469562 04 iv 4 04/30/2049 die xxx mensis iv annoque mmxlix 49 xlix 2049} +test clock-2.2217 {conversion of 2049-05-01} { + clock format 2503485296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2049 12:34:56 die i mensis v annoque mmxlix xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2469563 05 v 5 05/01/2049 die i mensis v annoque mmxlix 49 xlix 2049} +test clock-2.2218 {conversion of 2049-05-31} { + clock format 2506077296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2049 12:34:56 die xxxi mensis v annoque mmxlix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2469593 05 v 5 05/31/2049 die xxxi mensis v annoque mmxlix 49 xlix 2049} +test clock-2.2219 {conversion of 2049-06-01} { + clock format 2506163696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2049 12:34:56 die i mensis vi annoque mmxlix xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2469594 06 vi 6 06/01/2049 die i mensis vi annoque mmxlix 49 xlix 2049} +test clock-2.2220 {conversion of 2049-06-30} { + clock format 2508669296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2049 12:34:56 die xxx mensis vi annoque mmxlix xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2469623 06 vi 6 06/30/2049 die xxx mensis vi annoque mmxlix 49 xlix 2049} +test clock-2.2221 {conversion of 2049-07-01} { + clock format 2508755696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2049 12:34:56 die i mensis vii annoque mmxlix xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2469624 07 vii 7 07/01/2049 die i mensis vii annoque mmxlix 49 xlix 2049} +test clock-2.2222 {conversion of 2049-07-31} { + clock format 2511347696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2049 12:34:56 die xxxi mensis vii annoque mmxlix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2469654 07 vii 7 07/31/2049 die xxxi mensis vii annoque mmxlix 49 xlix 2049} +test clock-2.2223 {conversion of 2049-08-01} { + clock format 2511434096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2049 12:34:56 die i mensis viii annoque mmxlix xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2469655 08 viii 8 08/01/2049 die i mensis viii annoque mmxlix 49 xlix 2049} +test clock-2.2224 {conversion of 2049-08-31} { + clock format 2514026096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2049 12:34:56 die xxxi mensis viii annoque mmxlix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2469685 08 viii 8 08/31/2049 die xxxi mensis viii annoque mmxlix 49 xlix 2049} +test clock-2.2225 {conversion of 2049-09-01} { + clock format 2514112496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2049 12:34:56 die i mensis ix annoque mmxlix xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2469686 09 ix 9 09/01/2049 die i mensis ix annoque mmxlix 49 xlix 2049} +test clock-2.2226 {conversion of 2049-09-30} { + clock format 2516618096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2049 12:34:56 die xxx mensis ix annoque mmxlix xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2469715 09 ix 9 09/30/2049 die xxx mensis ix annoque mmxlix 49 xlix 2049} +test clock-2.2227 {conversion of 2049-10-01} { + clock format 2516704496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2049 12:34:56 die i mensis x annoque mmxlix xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2469716 10 x 10 10/01/2049 die i mensis x annoque mmxlix 49 xlix 2049} +test clock-2.2228 {conversion of 2049-10-31} { + clock format 2519296496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2049 12:34:56 die xxxi mensis x annoque mmxlix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2469746 10 x 10 10/31/2049 die xxxi mensis x annoque mmxlix 49 xlix 2049} +test clock-2.2229 {conversion of 2049-11-01} { + clock format 2519382896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2049 12:34:56 die i mensis xi annoque mmxlix xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2469747 11 xi 11 11/01/2049 die i mensis xi annoque mmxlix 49 xlix 2049} +test clock-2.2230 {conversion of 2049-11-30} { + clock format 2521888496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2049 12:34:56 die xxx mensis xi annoque mmxlix xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2469776 11 xi 11 11/30/2049 die xxx mensis xi annoque mmxlix 49 xlix 2049} +test clock-2.2231 {conversion of 2049-12-01} { + clock format 2521974896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2049 12:34:56 die i mensis xii annoque mmxlix xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2469777 12 xii 12 12/01/2049 die i mensis xii annoque mmxlix 49 xlix 2049} +test clock-2.2232 {conversion of 2049-12-31} { + clock format 2524566896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2049 12:34:56 die xxxi mensis xii annoque mmxlix xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2469807 12 xii 12 12/31/2049 die xxxi mensis xii annoque mmxlix 49 xlix 2049} +test clock-2.2233 {conversion of 2052-01-01} { + clock format 2587725296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2052 12:34:56 die i mensis i annoque mmlii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2470538 01 i 1 01/01/2052 die i mensis i annoque mmlii 52 lii 2052} +test clock-2.2234 {conversion of 2052-01-31} { + clock format 2590317296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2052 12:34:56 die xxxi mensis i annoque mmlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2470568 01 i 1 01/31/2052 die xxxi mensis i annoque mmlii 52 lii 2052} +test clock-2.2235 {conversion of 2052-02-01} { + clock format 2590403696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2052 12:34:56 die i mensis ii annoque mmlii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2470569 02 ii 2 02/01/2052 die i mensis ii annoque mmlii 52 lii 2052} +test clock-2.2236 {conversion of 2052-02-29} { + clock format 2592822896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2052 12:34:56 die xxix mensis ii annoque mmlii xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2470597 02 ii 2 02/29/2052 die xxix mensis ii annoque mmlii 52 lii 2052} +test clock-2.2237 {conversion of 2052-03-01} { + clock format 2592909296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2052 12:34:56 die i mensis iii annoque mmlii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2470598 03 iii 3 03/01/2052 die i mensis iii annoque mmlii 52 lii 2052} +test clock-2.2238 {conversion of 2052-03-31} { + clock format 2595501296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2052 12:34:56 die xxxi mensis iii annoque mmlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2470628 03 iii 3 03/31/2052 die xxxi mensis iii annoque mmlii 52 lii 2052} +test clock-2.2239 {conversion of 2052-04-01} { + clock format 2595587696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2052 12:34:56 die i mensis iv annoque mmlii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2470629 04 iv 4 04/01/2052 die i mensis iv annoque mmlii 52 lii 2052} +test clock-2.2240 {conversion of 2052-04-30} { + clock format 2598093296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2052 12:34:56 die xxx mensis iv annoque mmlii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2470658 04 iv 4 04/30/2052 die xxx mensis iv annoque mmlii 52 lii 2052} +test clock-2.2241 {conversion of 2052-05-01} { + clock format 2598179696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2052 12:34:56 die i mensis v annoque mmlii xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2470659 05 v 5 05/01/2052 die i mensis v annoque mmlii 52 lii 2052} +test clock-2.2242 {conversion of 2052-05-31} { + clock format 2600771696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2052 12:34:56 die xxxi mensis v annoque mmlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2470689 05 v 5 05/31/2052 die xxxi mensis v annoque mmlii 52 lii 2052} +test clock-2.2243 {conversion of 2052-06-01} { + clock format 2600858096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2052 12:34:56 die i mensis vi annoque mmlii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2470690 06 vi 6 06/01/2052 die i mensis vi annoque mmlii 52 lii 2052} +test clock-2.2244 {conversion of 2052-06-30} { + clock format 2603363696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2052 12:34:56 die xxx mensis vi annoque mmlii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2470719 06 vi 6 06/30/2052 die xxx mensis vi annoque mmlii 52 lii 2052} +test clock-2.2245 {conversion of 2052-07-01} { + clock format 2603450096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2052 12:34:56 die i mensis vii annoque mmlii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2470720 07 vii 7 07/01/2052 die i mensis vii annoque mmlii 52 lii 2052} +test clock-2.2246 {conversion of 2052-07-31} { + clock format 2606042096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2052 12:34:56 die xxxi mensis vii annoque mmlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2470750 07 vii 7 07/31/2052 die xxxi mensis vii annoque mmlii 52 lii 2052} +test clock-2.2247 {conversion of 2052-08-01} { + clock format 2606128496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2052 12:34:56 die i mensis viii annoque mmlii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2470751 08 viii 8 08/01/2052 die i mensis viii annoque mmlii 52 lii 2052} +test clock-2.2248 {conversion of 2052-08-31} { + clock format 2608720496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2052 12:34:56 die xxxi mensis viii annoque mmlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2470781 08 viii 8 08/31/2052 die xxxi mensis viii annoque mmlii 52 lii 2052} +test clock-2.2249 {conversion of 2052-09-01} { + clock format 2608806896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2052 12:34:56 die i mensis ix annoque mmlii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2470782 09 ix 9 09/01/2052 die i mensis ix annoque mmlii 52 lii 2052} +test clock-2.2250 {conversion of 2052-09-30} { + clock format 2611312496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2052 12:34:56 die xxx mensis ix annoque mmlii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2470811 09 ix 9 09/30/2052 die xxx mensis ix annoque mmlii 52 lii 2052} +test clock-2.2251 {conversion of 2052-10-01} { + clock format 2611398896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2052 12:34:56 die i mensis x annoque mmlii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2470812 10 x 10 10/01/2052 die i mensis x annoque mmlii 52 lii 2052} +test clock-2.2252 {conversion of 2052-10-31} { + clock format 2613990896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2052 12:34:56 die xxxi mensis x annoque mmlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2470842 10 x 10 10/31/2052 die xxxi mensis x annoque mmlii 52 lii 2052} +test clock-2.2253 {conversion of 2052-11-01} { + clock format 2614077296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2052 12:34:56 die i mensis xi annoque mmlii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2470843 11 xi 11 11/01/2052 die i mensis xi annoque mmlii 52 lii 2052} +test clock-2.2254 {conversion of 2052-11-30} { + clock format 2616582896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2052 12:34:56 die xxx mensis xi annoque mmlii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2470872 11 xi 11 11/30/2052 die xxx mensis xi annoque mmlii 52 lii 2052} +test clock-2.2255 {conversion of 2052-12-01} { + clock format 2616669296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2052 12:34:56 die i mensis xii annoque mmlii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2470873 12 xii 12 12/01/2052 die i mensis xii annoque mmlii 52 lii 2052} +test clock-2.2256 {conversion of 2052-12-31} { + clock format 2619261296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2052 12:34:56 die xxxi mensis xii annoque mmlii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2470903 12 xii 12 12/31/2052 die xxxi mensis xii annoque mmlii 52 lii 2052} +test clock-2.2257 {conversion of 2053-01-01} { + clock format 2619347696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2053 12:34:56 die i mensis i annoque mmliii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2470904 01 i 1 01/01/2053 die i mensis i annoque mmliii 53 liii 2053} +test clock-2.2258 {conversion of 2053-01-31} { + clock format 2621939696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2053 12:34:56 die xxxi mensis i annoque mmliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2470934 01 i 1 01/31/2053 die xxxi mensis i annoque mmliii 53 liii 2053} +test clock-2.2259 {conversion of 2053-02-01} { + clock format 2622026096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2053 12:34:56 die i mensis ii annoque mmliii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2470935 02 ii 2 02/01/2053 die i mensis ii annoque mmliii 53 liii 2053} +test clock-2.2260 {conversion of 2053-02-28} { + clock format 2624358896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2053 12:34:56 die xxviii mensis ii annoque mmliii xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2470962 02 ii 2 02/28/2053 die xxviii mensis ii annoque mmliii 53 liii 2053} +test clock-2.2261 {conversion of 2053-03-01} { + clock format 2624445296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2053 12:34:56 die i mensis iii annoque mmliii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2470963 03 iii 3 03/01/2053 die i mensis iii annoque mmliii 53 liii 2053} +test clock-2.2262 {conversion of 2053-03-31} { + clock format 2627037296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2053 12:34:56 die xxxi mensis iii annoque mmliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2470993 03 iii 3 03/31/2053 die xxxi mensis iii annoque mmliii 53 liii 2053} +test clock-2.2263 {conversion of 2053-04-01} { + clock format 2627123696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2053 12:34:56 die i mensis iv annoque mmliii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2470994 04 iv 4 04/01/2053 die i mensis iv annoque mmliii 53 liii 2053} +test clock-2.2264 {conversion of 2053-04-30} { + clock format 2629629296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2053 12:34:56 die xxx mensis iv annoque mmliii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2471023 04 iv 4 04/30/2053 die xxx mensis iv annoque mmliii 53 liii 2053} +test clock-2.2265 {conversion of 2053-05-01} { + clock format 2629715696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2053 12:34:56 die i mensis v annoque mmliii xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2471024 05 v 5 05/01/2053 die i mensis v annoque mmliii 53 liii 2053} +test clock-2.2266 {conversion of 2053-05-31} { + clock format 2632307696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2053 12:34:56 die xxxi mensis v annoque mmliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2471054 05 v 5 05/31/2053 die xxxi mensis v annoque mmliii 53 liii 2053} +test clock-2.2267 {conversion of 2053-06-01} { + clock format 2632394096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2053 12:34:56 die i mensis vi annoque mmliii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2471055 06 vi 6 06/01/2053 die i mensis vi annoque mmliii 53 liii 2053} +test clock-2.2268 {conversion of 2053-06-30} { + clock format 2634899696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2053 12:34:56 die xxx mensis vi annoque mmliii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2471084 06 vi 6 06/30/2053 die xxx mensis vi annoque mmliii 53 liii 2053} +test clock-2.2269 {conversion of 2053-07-01} { + clock format 2634986096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2053 12:34:56 die i mensis vii annoque mmliii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2471085 07 vii 7 07/01/2053 die i mensis vii annoque mmliii 53 liii 2053} +test clock-2.2270 {conversion of 2053-07-31} { + clock format 2637578096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2053 12:34:56 die xxxi mensis vii annoque mmliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2471115 07 vii 7 07/31/2053 die xxxi mensis vii annoque mmliii 53 liii 2053} +test clock-2.2271 {conversion of 2053-08-01} { + clock format 2637664496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2053 12:34:56 die i mensis viii annoque mmliii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2471116 08 viii 8 08/01/2053 die i mensis viii annoque mmliii 53 liii 2053} +test clock-2.2272 {conversion of 2053-08-31} { + clock format 2640256496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2053 12:34:56 die xxxi mensis viii annoque mmliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2471146 08 viii 8 08/31/2053 die xxxi mensis viii annoque mmliii 53 liii 2053} +test clock-2.2273 {conversion of 2053-09-01} { + clock format 2640342896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2053 12:34:56 die i mensis ix annoque mmliii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2471147 09 ix 9 09/01/2053 die i mensis ix annoque mmliii 53 liii 2053} +test clock-2.2274 {conversion of 2053-09-30} { + clock format 2642848496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2053 12:34:56 die xxx mensis ix annoque mmliii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2471176 09 ix 9 09/30/2053 die xxx mensis ix annoque mmliii 53 liii 2053} +test clock-2.2275 {conversion of 2053-10-01} { + clock format 2642934896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2053 12:34:56 die i mensis x annoque mmliii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2471177 10 x 10 10/01/2053 die i mensis x annoque mmliii 53 liii 2053} +test clock-2.2276 {conversion of 2053-10-31} { + clock format 2645526896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2053 12:34:56 die xxxi mensis x annoque mmliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2471207 10 x 10 10/31/2053 die xxxi mensis x annoque mmliii 53 liii 2053} +test clock-2.2277 {conversion of 2053-11-01} { + clock format 2645613296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2053 12:34:56 die i mensis xi annoque mmliii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2471208 11 xi 11 11/01/2053 die i mensis xi annoque mmliii 53 liii 2053} +test clock-2.2278 {conversion of 2053-11-30} { + clock format 2648118896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2053 12:34:56 die xxx mensis xi annoque mmliii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2471237 11 xi 11 11/30/2053 die xxx mensis xi annoque mmliii 53 liii 2053} +test clock-2.2279 {conversion of 2053-12-01} { + clock format 2648205296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2053 12:34:56 die i mensis xii annoque mmliii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2471238 12 xii 12 12/01/2053 die i mensis xii annoque mmliii 53 liii 2053} +test clock-2.2280 {conversion of 2053-12-31} { + clock format 2650797296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2053 12:34:56 die xxxi mensis xii annoque mmliii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2471268 12 xii 12 12/31/2053 die xxxi mensis xii annoque mmliii 53 liii 2053} +test clock-2.2281 {conversion of 2056-01-01} { + clock format 2713955696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2056 12:34:56 die i mensis i annoque mmlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2471999 01 i 1 01/01/2056 die i mensis i annoque mmlvi 56 lvi 2056} +test clock-2.2282 {conversion of 2056-01-31} { + clock format 2716547696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2056 12:34:56 die xxxi mensis i annoque mmlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2472029 01 i 1 01/31/2056 die xxxi mensis i annoque mmlvi 56 lvi 2056} +test clock-2.2283 {conversion of 2056-02-01} { + clock format 2716634096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2056 12:34:56 die i mensis ii annoque mmlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2472030 02 ii 2 02/01/2056 die i mensis ii annoque mmlvi 56 lvi 2056} +test clock-2.2284 {conversion of 2056-02-29} { + clock format 2719053296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2056 12:34:56 die xxix mensis ii annoque mmlvi xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2472058 02 ii 2 02/29/2056 die xxix mensis ii annoque mmlvi 56 lvi 2056} +test clock-2.2285 {conversion of 2056-03-01} { + clock format 2719139696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2056 12:34:56 die i mensis iii annoque mmlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2472059 03 iii 3 03/01/2056 die i mensis iii annoque mmlvi 56 lvi 2056} +test clock-2.2286 {conversion of 2056-03-31} { + clock format 2721731696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2056 12:34:56 die xxxi mensis iii annoque mmlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2472089 03 iii 3 03/31/2056 die xxxi mensis iii annoque mmlvi 56 lvi 2056} +test clock-2.2287 {conversion of 2056-04-01} { + clock format 2721818096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2056 12:34:56 die i mensis iv annoque mmlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2472090 04 iv 4 04/01/2056 die i mensis iv annoque mmlvi 56 lvi 2056} +test clock-2.2288 {conversion of 2056-04-30} { + clock format 2724323696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2056 12:34:56 die xxx mensis iv annoque mmlvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2472119 04 iv 4 04/30/2056 die xxx mensis iv annoque mmlvi 56 lvi 2056} +test clock-2.2289 {conversion of 2056-05-01} { + clock format 2724410096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2056 12:34:56 die i mensis v annoque mmlvi xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2472120 05 v 5 05/01/2056 die i mensis v annoque mmlvi 56 lvi 2056} +test clock-2.2290 {conversion of 2056-05-31} { + clock format 2727002096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2056 12:34:56 die xxxi mensis v annoque mmlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2472150 05 v 5 05/31/2056 die xxxi mensis v annoque mmlvi 56 lvi 2056} +test clock-2.2291 {conversion of 2056-06-01} { + clock format 2727088496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2056 12:34:56 die i mensis vi annoque mmlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2472151 06 vi 6 06/01/2056 die i mensis vi annoque mmlvi 56 lvi 2056} +test clock-2.2292 {conversion of 2056-06-30} { + clock format 2729594096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2056 12:34:56 die xxx mensis vi annoque mmlvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2472180 06 vi 6 06/30/2056 die xxx mensis vi annoque mmlvi 56 lvi 2056} +test clock-2.2293 {conversion of 2056-07-01} { + clock format 2729680496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2056 12:34:56 die i mensis vii annoque mmlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2472181 07 vii 7 07/01/2056 die i mensis vii annoque mmlvi 56 lvi 2056} +test clock-2.2294 {conversion of 2056-07-31} { + clock format 2732272496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2056 12:34:56 die xxxi mensis vii annoque mmlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2472211 07 vii 7 07/31/2056 die xxxi mensis vii annoque mmlvi 56 lvi 2056} +test clock-2.2295 {conversion of 2056-08-01} { + clock format 2732358896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2056 12:34:56 die i mensis viii annoque mmlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2472212 08 viii 8 08/01/2056 die i mensis viii annoque mmlvi 56 lvi 2056} +test clock-2.2296 {conversion of 2056-08-31} { + clock format 2734950896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2056 12:34:56 die xxxi mensis viii annoque mmlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2472242 08 viii 8 08/31/2056 die xxxi mensis viii annoque mmlvi 56 lvi 2056} +test clock-2.2297 {conversion of 2056-09-01} { + clock format 2735037296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2056 12:34:56 die i mensis ix annoque mmlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2472243 09 ix 9 09/01/2056 die i mensis ix annoque mmlvi 56 lvi 2056} +test clock-2.2298 {conversion of 2056-09-30} { + clock format 2737542896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2056 12:34:56 die xxx mensis ix annoque mmlvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2472272 09 ix 9 09/30/2056 die xxx mensis ix annoque mmlvi 56 lvi 2056} +test clock-2.2299 {conversion of 2056-10-01} { + clock format 2737629296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2056 12:34:56 die i mensis x annoque mmlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2472273 10 x 10 10/01/2056 die i mensis x annoque mmlvi 56 lvi 2056} +test clock-2.2300 {conversion of 2056-10-31} { + clock format 2740221296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2056 12:34:56 die xxxi mensis x annoque mmlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2472303 10 x 10 10/31/2056 die xxxi mensis x annoque mmlvi 56 lvi 2056} +test clock-2.2301 {conversion of 2056-11-01} { + clock format 2740307696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2056 12:34:56 die i mensis xi annoque mmlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2472304 11 xi 11 11/01/2056 die i mensis xi annoque mmlvi 56 lvi 2056} +test clock-2.2302 {conversion of 2056-11-30} { + clock format 2742813296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2056 12:34:56 die xxx mensis xi annoque mmlvi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2472333 11 xi 11 11/30/2056 die xxx mensis xi annoque mmlvi 56 lvi 2056} +test clock-2.2303 {conversion of 2056-12-01} { + clock format 2742899696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2056 12:34:56 die i mensis xii annoque mmlvi xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2472334 12 xii 12 12/01/2056 die i mensis xii annoque mmlvi 56 lvi 2056} +test clock-2.2304 {conversion of 2056-12-31} { + clock format 2745491696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2056 12:34:56 die xxxi mensis xii annoque mmlvi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2472364 12 xii 12 12/31/2056 die xxxi mensis xii annoque mmlvi 56 lvi 2056} +test clock-2.2305 {conversion of 2057-01-01} { + clock format 2745578096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2057 12:34:56 die i mensis i annoque mmlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2472365 01 i 1 01/01/2057 die i mensis i annoque mmlvii 57 lvii 2057} +test clock-2.2306 {conversion of 2057-01-31} { + clock format 2748170096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2057 12:34:56 die xxxi mensis i annoque mmlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2472395 01 i 1 01/31/2057 die xxxi mensis i annoque mmlvii 57 lvii 2057} +test clock-2.2307 {conversion of 2057-02-01} { + clock format 2748256496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2057 12:34:56 die i mensis ii annoque mmlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2472396 02 ii 2 02/01/2057 die i mensis ii annoque mmlvii 57 lvii 2057} +test clock-2.2308 {conversion of 2057-02-28} { + clock format 2750589296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2057 12:34:56 die xxviii mensis ii annoque mmlvii xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2472423 02 ii 2 02/28/2057 die xxviii mensis ii annoque mmlvii 57 lvii 2057} +test clock-2.2309 {conversion of 2057-03-01} { + clock format 2750675696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2057 12:34:56 die i mensis iii annoque mmlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2472424 03 iii 3 03/01/2057 die i mensis iii annoque mmlvii 57 lvii 2057} +test clock-2.2310 {conversion of 2057-03-31} { + clock format 2753267696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2057 12:34:56 die xxxi mensis iii annoque mmlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2472454 03 iii 3 03/31/2057 die xxxi mensis iii annoque mmlvii 57 lvii 2057} +test clock-2.2311 {conversion of 2057-04-01} { + clock format 2753354096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2057 12:34:56 die i mensis iv annoque mmlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2472455 04 iv 4 04/01/2057 die i mensis iv annoque mmlvii 57 lvii 2057} +test clock-2.2312 {conversion of 2057-04-30} { + clock format 2755859696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2057 12:34:56 die xxx mensis iv annoque mmlvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2472484 04 iv 4 04/30/2057 die xxx mensis iv annoque mmlvii 57 lvii 2057} +test clock-2.2313 {conversion of 2057-05-01} { + clock format 2755946096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2057 12:34:56 die i mensis v annoque mmlvii xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2472485 05 v 5 05/01/2057 die i mensis v annoque mmlvii 57 lvii 2057} +test clock-2.2314 {conversion of 2057-05-31} { + clock format 2758538096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2057 12:34:56 die xxxi mensis v annoque mmlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2472515 05 v 5 05/31/2057 die xxxi mensis v annoque mmlvii 57 lvii 2057} +test clock-2.2315 {conversion of 2057-06-01} { + clock format 2758624496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2057 12:34:56 die i mensis vi annoque mmlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2472516 06 vi 6 06/01/2057 die i mensis vi annoque mmlvii 57 lvii 2057} +test clock-2.2316 {conversion of 2057-06-30} { + clock format 2761130096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2057 12:34:56 die xxx mensis vi annoque mmlvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2472545 06 vi 6 06/30/2057 die xxx mensis vi annoque mmlvii 57 lvii 2057} +test clock-2.2317 {conversion of 2057-07-01} { + clock format 2761216496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2057 12:34:56 die i mensis vii annoque mmlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2472546 07 vii 7 07/01/2057 die i mensis vii annoque mmlvii 57 lvii 2057} +test clock-2.2318 {conversion of 2057-07-31} { + clock format 2763808496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2057 12:34:56 die xxxi mensis vii annoque mmlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2472576 07 vii 7 07/31/2057 die xxxi mensis vii annoque mmlvii 57 lvii 2057} +test clock-2.2319 {conversion of 2057-08-01} { + clock format 2763894896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2057 12:34:56 die i mensis viii annoque mmlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2472577 08 viii 8 08/01/2057 die i mensis viii annoque mmlvii 57 lvii 2057} +test clock-2.2320 {conversion of 2057-08-31} { + clock format 2766486896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2057 12:34:56 die xxxi mensis viii annoque mmlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2472607 08 viii 8 08/31/2057 die xxxi mensis viii annoque mmlvii 57 lvii 2057} +test clock-2.2321 {conversion of 2057-09-01} { + clock format 2766573296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2057 12:34:56 die i mensis ix annoque mmlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2472608 09 ix 9 09/01/2057 die i mensis ix annoque mmlvii 57 lvii 2057} +test clock-2.2322 {conversion of 2057-09-30} { + clock format 2769078896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2057 12:34:56 die xxx mensis ix annoque mmlvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2472637 09 ix 9 09/30/2057 die xxx mensis ix annoque mmlvii 57 lvii 2057} +test clock-2.2323 {conversion of 2057-10-01} { + clock format 2769165296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2057 12:34:56 die i mensis x annoque mmlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2472638 10 x 10 10/01/2057 die i mensis x annoque mmlvii 57 lvii 2057} +test clock-2.2324 {conversion of 2057-10-31} { + clock format 2771757296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2057 12:34:56 die xxxi mensis x annoque mmlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2472668 10 x 10 10/31/2057 die xxxi mensis x annoque mmlvii 57 lvii 2057} +test clock-2.2325 {conversion of 2057-11-01} { + clock format 2771843696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2057 12:34:56 die i mensis xi annoque mmlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2472669 11 xi 11 11/01/2057 die i mensis xi annoque mmlvii 57 lvii 2057} +test clock-2.2326 {conversion of 2057-11-30} { + clock format 2774349296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2057 12:34:56 die xxx mensis xi annoque mmlvii xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2472698 11 xi 11 11/30/2057 die xxx mensis xi annoque mmlvii 57 lvii 2057} +test clock-2.2327 {conversion of 2057-12-01} { + clock format 2774435696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2057 12:34:56 die i mensis xii annoque mmlvii xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2472699 12 xii 12 12/01/2057 die i mensis xii annoque mmlvii 57 lvii 2057} +test clock-2.2328 {conversion of 2057-12-31} { + clock format 2777027696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2057 12:34:56 die xxxi mensis xii annoque mmlvii xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2472729 12 xii 12 12/31/2057 die xxxi mensis xii annoque mmlvii 57 lvii 2057} +test clock-2.2329 {conversion of 2060-01-01} { + clock format 2840186096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2060 12:34:56 die i mensis i annoque mmlx xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2473460 01 i 1 01/01/2060 die i mensis i annoque mmlx 60 lx 2060} +test clock-2.2330 {conversion of 2060-01-31} { + clock format 2842778096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2060 12:34:56 die xxxi mensis i annoque mmlx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2473490 01 i 1 01/31/2060 die xxxi mensis i annoque mmlx 60 lx 2060} +test clock-2.2331 {conversion of 2060-02-01} { + clock format 2842864496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2060 12:34:56 die i mensis ii annoque mmlx xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2473491 02 ii 2 02/01/2060 die i mensis ii annoque mmlx 60 lx 2060} +test clock-2.2332 {conversion of 2060-02-29} { + clock format 2845283696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2060 12:34:56 die xxix mensis ii annoque mmlx xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2473519 02 ii 2 02/29/2060 die xxix mensis ii annoque mmlx 60 lx 2060} +test clock-2.2333 {conversion of 2060-03-01} { + clock format 2845370096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2060 12:34:56 die i mensis iii annoque mmlx xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2473520 03 iii 3 03/01/2060 die i mensis iii annoque mmlx 60 lx 2060} +test clock-2.2334 {conversion of 2060-03-31} { + clock format 2847962096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2060 12:34:56 die xxxi mensis iii annoque mmlx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2473550 03 iii 3 03/31/2060 die xxxi mensis iii annoque mmlx 60 lx 2060} +test clock-2.2335 {conversion of 2060-04-01} { + clock format 2848048496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2060 12:34:56 die i mensis iv annoque mmlx xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2473551 04 iv 4 04/01/2060 die i mensis iv annoque mmlx 60 lx 2060} +test clock-2.2336 {conversion of 2060-04-30} { + clock format 2850554096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2060 12:34:56 die xxx mensis iv annoque mmlx xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2473580 04 iv 4 04/30/2060 die xxx mensis iv annoque mmlx 60 lx 2060} +test clock-2.2337 {conversion of 2060-05-01} { + clock format 2850640496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2060 12:34:56 die i mensis v annoque mmlx xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2473581 05 v 5 05/01/2060 die i mensis v annoque mmlx 60 lx 2060} +test clock-2.2338 {conversion of 2060-05-31} { + clock format 2853232496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2060 12:34:56 die xxxi mensis v annoque mmlx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2473611 05 v 5 05/31/2060 die xxxi mensis v annoque mmlx 60 lx 2060} +test clock-2.2339 {conversion of 2060-06-01} { + clock format 2853318896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2060 12:34:56 die i mensis vi annoque mmlx xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2473612 06 vi 6 06/01/2060 die i mensis vi annoque mmlx 60 lx 2060} +test clock-2.2340 {conversion of 2060-06-30} { + clock format 2855824496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2060 12:34:56 die xxx mensis vi annoque mmlx xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2473641 06 vi 6 06/30/2060 die xxx mensis vi annoque mmlx 60 lx 2060} +test clock-2.2341 {conversion of 2060-07-01} { + clock format 2855910896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2060 12:34:56 die i mensis vii annoque mmlx xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2473642 07 vii 7 07/01/2060 die i mensis vii annoque mmlx 60 lx 2060} +test clock-2.2342 {conversion of 2060-07-31} { + clock format 2858502896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2060 12:34:56 die xxxi mensis vii annoque mmlx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2473672 07 vii 7 07/31/2060 die xxxi mensis vii annoque mmlx 60 lx 2060} +test clock-2.2343 {conversion of 2060-08-01} { + clock format 2858589296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2060 12:34:56 die i mensis viii annoque mmlx xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2473673 08 viii 8 08/01/2060 die i mensis viii annoque mmlx 60 lx 2060} +test clock-2.2344 {conversion of 2060-08-31} { + clock format 2861181296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2060 12:34:56 die xxxi mensis viii annoque mmlx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2473703 08 viii 8 08/31/2060 die xxxi mensis viii annoque mmlx 60 lx 2060} +test clock-2.2345 {conversion of 2060-09-01} { + clock format 2861267696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2060 12:34:56 die i mensis ix annoque mmlx xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2473704 09 ix 9 09/01/2060 die i mensis ix annoque mmlx 60 lx 2060} +test clock-2.2346 {conversion of 2060-09-30} { + clock format 2863773296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2060 12:34:56 die xxx mensis ix annoque mmlx xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2473733 09 ix 9 09/30/2060 die xxx mensis ix annoque mmlx 60 lx 2060} +test clock-2.2347 {conversion of 2060-10-01} { + clock format 2863859696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2060 12:34:56 die i mensis x annoque mmlx xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2473734 10 x 10 10/01/2060 die i mensis x annoque mmlx 60 lx 2060} +test clock-2.2348 {conversion of 2060-10-31} { + clock format 2866451696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2060 12:34:56 die xxxi mensis x annoque mmlx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2473764 10 x 10 10/31/2060 die xxxi mensis x annoque mmlx 60 lx 2060} +test clock-2.2349 {conversion of 2060-11-01} { + clock format 2866538096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2060 12:34:56 die i mensis xi annoque mmlx xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2473765 11 xi 11 11/01/2060 die i mensis xi annoque mmlx 60 lx 2060} +test clock-2.2350 {conversion of 2060-11-30} { + clock format 2869043696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2060 12:34:56 die xxx mensis xi annoque mmlx xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2473794 11 xi 11 11/30/2060 die xxx mensis xi annoque mmlx 60 lx 2060} +test clock-2.2351 {conversion of 2060-12-01} { + clock format 2869130096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2060 12:34:56 die i mensis xii annoque mmlx xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2473795 12 xii 12 12/01/2060 die i mensis xii annoque mmlx 60 lx 2060} +test clock-2.2352 {conversion of 2060-12-31} { + clock format 2871722096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2060 12:34:56 die xxxi mensis xii annoque mmlx xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2473825 12 xii 12 12/31/2060 die xxxi mensis xii annoque mmlx 60 lx 2060} +test clock-2.2353 {conversion of 2061-01-01} { + clock format 2871808496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2061 12:34:56 die i mensis i annoque mmlxi xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2473826 01 i 1 01/01/2061 die i mensis i annoque mmlxi 61 lxi 2061} +test clock-2.2354 {conversion of 2061-01-31} { + clock format 2874400496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2061 12:34:56 die xxxi mensis i annoque mmlxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2473856 01 i 1 01/31/2061 die xxxi mensis i annoque mmlxi 61 lxi 2061} +test clock-2.2355 {conversion of 2061-02-01} { + clock format 2874486896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2061 12:34:56 die i mensis ii annoque mmlxi xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2473857 02 ii 2 02/01/2061 die i mensis ii annoque mmlxi 61 lxi 2061} +test clock-2.2356 {conversion of 2061-02-28} { + clock format 2876819696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2061 12:34:56 die xxviii mensis ii annoque mmlxi xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2473884 02 ii 2 02/28/2061 die xxviii mensis ii annoque mmlxi 61 lxi 2061} +test clock-2.2357 {conversion of 2061-03-01} { + clock format 2876906096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2061 12:34:56 die i mensis iii annoque mmlxi xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2473885 03 iii 3 03/01/2061 die i mensis iii annoque mmlxi 61 lxi 2061} +test clock-2.2358 {conversion of 2061-03-31} { + clock format 2879498096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2061 12:34:56 die xxxi mensis iii annoque mmlxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2473915 03 iii 3 03/31/2061 die xxxi mensis iii annoque mmlxi 61 lxi 2061} +test clock-2.2359 {conversion of 2061-04-01} { + clock format 2879584496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2061 12:34:56 die i mensis iv annoque mmlxi xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2473916 04 iv 4 04/01/2061 die i mensis iv annoque mmlxi 61 lxi 2061} +test clock-2.2360 {conversion of 2061-04-30} { + clock format 2882090096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2061 12:34:56 die xxx mensis iv annoque mmlxi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2473945 04 iv 4 04/30/2061 die xxx mensis iv annoque mmlxi 61 lxi 2061} +test clock-2.2361 {conversion of 2061-05-01} { + clock format 2882176496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2061 12:34:56 die i mensis v annoque mmlxi xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2473946 05 v 5 05/01/2061 die i mensis v annoque mmlxi 61 lxi 2061} +test clock-2.2362 {conversion of 2061-05-31} { + clock format 2884768496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2061 12:34:56 die xxxi mensis v annoque mmlxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2473976 05 v 5 05/31/2061 die xxxi mensis v annoque mmlxi 61 lxi 2061} +test clock-2.2363 {conversion of 2061-06-01} { + clock format 2884854896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2061 12:34:56 die i mensis vi annoque mmlxi xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2473977 06 vi 6 06/01/2061 die i mensis vi annoque mmlxi 61 lxi 2061} +test clock-2.2364 {conversion of 2061-06-30} { + clock format 2887360496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2061 12:34:56 die xxx mensis vi annoque mmlxi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2474006 06 vi 6 06/30/2061 die xxx mensis vi annoque mmlxi 61 lxi 2061} +test clock-2.2365 {conversion of 2061-07-01} { + clock format 2887446896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2061 12:34:56 die i mensis vii annoque mmlxi xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2474007 07 vii 7 07/01/2061 die i mensis vii annoque mmlxi 61 lxi 2061} +test clock-2.2366 {conversion of 2061-07-31} { + clock format 2890038896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2061 12:34:56 die xxxi mensis vii annoque mmlxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2474037 07 vii 7 07/31/2061 die xxxi mensis vii annoque mmlxi 61 lxi 2061} +test clock-2.2367 {conversion of 2061-08-01} { + clock format 2890125296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2061 12:34:56 die i mensis viii annoque mmlxi xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2474038 08 viii 8 08/01/2061 die i mensis viii annoque mmlxi 61 lxi 2061} +test clock-2.2368 {conversion of 2061-08-31} { + clock format 2892717296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2061 12:34:56 die xxxi mensis viii annoque mmlxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2474068 08 viii 8 08/31/2061 die xxxi mensis viii annoque mmlxi 61 lxi 2061} +test clock-2.2369 {conversion of 2061-09-01} { + clock format 2892803696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2061 12:34:56 die i mensis ix annoque mmlxi xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2474069 09 ix 9 09/01/2061 die i mensis ix annoque mmlxi 61 lxi 2061} +test clock-2.2370 {conversion of 2061-09-30} { + clock format 2895309296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2061 12:34:56 die xxx mensis ix annoque mmlxi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2474098 09 ix 9 09/30/2061 die xxx mensis ix annoque mmlxi 61 lxi 2061} +test clock-2.2371 {conversion of 2061-10-01} { + clock format 2895395696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2061 12:34:56 die i mensis x annoque mmlxi xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2474099 10 x 10 10/01/2061 die i mensis x annoque mmlxi 61 lxi 2061} +test clock-2.2372 {conversion of 2061-10-31} { + clock format 2897987696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2061 12:34:56 die xxxi mensis x annoque mmlxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2474129 10 x 10 10/31/2061 die xxxi mensis x annoque mmlxi 61 lxi 2061} +test clock-2.2373 {conversion of 2061-11-01} { + clock format 2898074096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2061 12:34:56 die i mensis xi annoque mmlxi xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2474130 11 xi 11 11/01/2061 die i mensis xi annoque mmlxi 61 lxi 2061} +test clock-2.2374 {conversion of 2061-11-30} { + clock format 2900579696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2061 12:34:56 die xxx mensis xi annoque mmlxi xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2474159 11 xi 11 11/30/2061 die xxx mensis xi annoque mmlxi 61 lxi 2061} +test clock-2.2375 {conversion of 2061-12-01} { + clock format 2900666096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2061 12:34:56 die i mensis xii annoque mmlxi xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2474160 12 xii 12 12/01/2061 die i mensis xii annoque mmlxi 61 lxi 2061} +test clock-2.2376 {conversion of 2061-12-31} { + clock format 2903258096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2061 12:34:56 die xxxi mensis xii annoque mmlxi xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2474190 12 xii 12 12/31/2061 die xxxi mensis xii annoque mmlxi 61 lxi 2061} +test clock-2.2377 {conversion of 2064-01-01} { + clock format 2966416496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2064 12:34:56 die i mensis i annoque mmlxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2474921 01 i 1 01/01/2064 die i mensis i annoque mmlxiv 64 lxiv 2064} +test clock-2.2378 {conversion of 2064-01-31} { + clock format 2969008496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2064 12:34:56 die xxxi mensis i annoque mmlxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2474951 01 i 1 01/31/2064 die xxxi mensis i annoque mmlxiv 64 lxiv 2064} +test clock-2.2379 {conversion of 2064-02-01} { + clock format 2969094896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2064 12:34:56 die i mensis ii annoque mmlxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2474952 02 ii 2 02/01/2064 die i mensis ii annoque mmlxiv 64 lxiv 2064} +test clock-2.2380 {conversion of 2064-02-29} { + clock format 2971514096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/29/2064 12:34:56 die xxix mensis ii annoque mmlxiv xii h xxxiv m lvi s 20 mm 29 xxix 29 xxix Feb 060 2474980 02 ii 2 02/29/2064 die xxix mensis ii annoque mmlxiv 64 lxiv 2064} +test clock-2.2381 {conversion of 2064-03-01} { + clock format 2971600496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2064 12:34:56 die i mensis iii annoque mmlxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 061 2474981 03 iii 3 03/01/2064 die i mensis iii annoque mmlxiv 64 lxiv 2064} +test clock-2.2382 {conversion of 2064-03-31} { + clock format 2974192496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2064 12:34:56 die xxxi mensis iii annoque mmlxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 091 2475011 03 iii 3 03/31/2064 die xxxi mensis iii annoque mmlxiv 64 lxiv 2064} +test clock-2.2383 {conversion of 2064-04-01} { + clock format 2974278896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2064 12:34:56 die i mensis iv annoque mmlxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 092 2475012 04 iv 4 04/01/2064 die i mensis iv annoque mmlxiv 64 lxiv 2064} +test clock-2.2384 {conversion of 2064-04-30} { + clock format 2976784496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2064 12:34:56 die xxx mensis iv annoque mmlxiv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 121 2475041 04 iv 4 04/30/2064 die xxx mensis iv annoque mmlxiv 64 lxiv 2064} +test clock-2.2385 {conversion of 2064-05-01} { + clock format 2976870896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2064 12:34:56 die i mensis v annoque mmlxiv xii h xxxiv m lvi s 20 mm 01 i 1 i May 122 2475042 05 v 5 05/01/2064 die i mensis v annoque mmlxiv 64 lxiv 2064} +test clock-2.2386 {conversion of 2064-05-31} { + clock format 2979462896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2064 12:34:56 die xxxi mensis v annoque mmlxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 152 2475072 05 v 5 05/31/2064 die xxxi mensis v annoque mmlxiv 64 lxiv 2064} +test clock-2.2387 {conversion of 2064-06-01} { + clock format 2979549296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2064 12:34:56 die i mensis vi annoque mmlxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 153 2475073 06 vi 6 06/01/2064 die i mensis vi annoque mmlxiv 64 lxiv 2064} +test clock-2.2388 {conversion of 2064-06-30} { + clock format 2982054896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2064 12:34:56 die xxx mensis vi annoque mmlxiv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 182 2475102 06 vi 6 06/30/2064 die xxx mensis vi annoque mmlxiv 64 lxiv 2064} +test clock-2.2389 {conversion of 2064-07-01} { + clock format 2982141296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2064 12:34:56 die i mensis vii annoque mmlxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 183 2475103 07 vii 7 07/01/2064 die i mensis vii annoque mmlxiv 64 lxiv 2064} +test clock-2.2390 {conversion of 2064-07-31} { + clock format 2984733296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2064 12:34:56 die xxxi mensis vii annoque mmlxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 213 2475133 07 vii 7 07/31/2064 die xxxi mensis vii annoque mmlxiv 64 lxiv 2064} +test clock-2.2391 {conversion of 2064-08-01} { + clock format 2984819696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2064 12:34:56 die i mensis viii annoque mmlxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 214 2475134 08 viii 8 08/01/2064 die i mensis viii annoque mmlxiv 64 lxiv 2064} +test clock-2.2392 {conversion of 2064-08-31} { + clock format 2987411696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2064 12:34:56 die xxxi mensis viii annoque mmlxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 244 2475164 08 viii 8 08/31/2064 die xxxi mensis viii annoque mmlxiv 64 lxiv 2064} +test clock-2.2393 {conversion of 2064-09-01} { + clock format 2987498096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2064 12:34:56 die i mensis ix annoque mmlxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 245 2475165 09 ix 9 09/01/2064 die i mensis ix annoque mmlxiv 64 lxiv 2064} +test clock-2.2394 {conversion of 2064-09-30} { + clock format 2990003696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2064 12:34:56 die xxx mensis ix annoque mmlxiv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 274 2475194 09 ix 9 09/30/2064 die xxx mensis ix annoque mmlxiv 64 lxiv 2064} +test clock-2.2395 {conversion of 2064-10-01} { + clock format 2990090096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2064 12:34:56 die i mensis x annoque mmlxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 275 2475195 10 x 10 10/01/2064 die i mensis x annoque mmlxiv 64 lxiv 2064} +test clock-2.2396 {conversion of 2064-10-31} { + clock format 2992682096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2064 12:34:56 die xxxi mensis x annoque mmlxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 305 2475225 10 x 10 10/31/2064 die xxxi mensis x annoque mmlxiv 64 lxiv 2064} +test clock-2.2397 {conversion of 2064-11-01} { + clock format 2992768496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2064 12:34:56 die i mensis xi annoque mmlxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 306 2475226 11 xi 11 11/01/2064 die i mensis xi annoque mmlxiv 64 lxiv 2064} +test clock-2.2398 {conversion of 2064-11-30} { + clock format 2995274096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2064 12:34:56 die xxx mensis xi annoque mmlxiv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 335 2475255 11 xi 11 11/30/2064 die xxx mensis xi annoque mmlxiv 64 lxiv 2064} +test clock-2.2399 {conversion of 2064-12-01} { + clock format 2995360496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2064 12:34:56 die i mensis xii annoque mmlxiv xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 336 2475256 12 xii 12 12/01/2064 die i mensis xii annoque mmlxiv 64 lxiv 2064} +test clock-2.2400 {conversion of 2064-12-31} { + clock format 2997952496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2064 12:34:56 die xxxi mensis xii annoque mmlxiv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 366 2475286 12 xii 12 12/31/2064 die xxxi mensis xii annoque mmlxiv 64 lxiv 2064} +test clock-2.2401 {conversion of 2065-01-01} { + clock format 2998038896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/01/2065 12:34:56 die i mensis i annoque mmlxv xii h xxxiv m lvi s 20 mm 01 i 1 i Jan 001 2475287 01 i 1 01/01/2065 die i mensis i annoque mmlxv 65 lxv 2065} +test clock-2.2402 {conversion of 2065-01-31} { + clock format 3000630896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jan January 01/31/2065 12:34:56 die xxxi mensis i annoque mmlxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jan 031 2475317 01 i 1 01/31/2065 die xxxi mensis i annoque mmlxv 65 lxv 2065} +test clock-2.2403 {conversion of 2065-02-01} { + clock format 3000717296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/01/2065 12:34:56 die i mensis ii annoque mmlxv xii h xxxiv m lvi s 20 mm 01 i 1 i Feb 032 2475318 02 ii 2 02/01/2065 die i mensis ii annoque mmlxv 65 lxv 2065} +test clock-2.2404 {conversion of 2065-02-28} { + clock format 3003050096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Feb February 02/28/2065 12:34:56 die xxviii mensis ii annoque mmlxv xii h xxxiv m lvi s 20 mm 28 xxviii 28 xxviii Feb 059 2475345 02 ii 2 02/28/2065 die xxviii mensis ii annoque mmlxv 65 lxv 2065} +test clock-2.2405 {conversion of 2065-03-01} { + clock format 3003136496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/01/2065 12:34:56 die i mensis iii annoque mmlxv xii h xxxiv m lvi s 20 mm 01 i 1 i Mar 060 2475346 03 iii 3 03/01/2065 die i mensis iii annoque mmlxv 65 lxv 2065} +test clock-2.2406 {conversion of 2065-03-31} { + clock format 3005728496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Mar March 03/31/2065 12:34:56 die xxxi mensis iii annoque mmlxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Mar 090 2475376 03 iii 3 03/31/2065 die xxxi mensis iii annoque mmlxv 65 lxv 2065} +test clock-2.2407 {conversion of 2065-04-01} { + clock format 3005814896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/01/2065 12:34:56 die i mensis iv annoque mmlxv xii h xxxiv m lvi s 20 mm 01 i 1 i Apr 091 2475377 04 iv 4 04/01/2065 die i mensis iv annoque mmlxv 65 lxv 2065} +test clock-2.2408 {conversion of 2065-04-30} { + clock format 3008320496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Apr April 04/30/2065 12:34:56 die xxx mensis iv annoque mmlxv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Apr 120 2475406 04 iv 4 04/30/2065 die xxx mensis iv annoque mmlxv 65 lxv 2065} +test clock-2.2409 {conversion of 2065-05-01} { + clock format 3008406896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/01/2065 12:34:56 die i mensis v annoque mmlxv xii h xxxiv m lvi s 20 mm 01 i 1 i May 121 2475407 05 v 5 05/01/2065 die i mensis v annoque mmlxv 65 lxv 2065} +test clock-2.2410 {conversion of 2065-05-31} { + clock format 3010998896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {May May 05/31/2065 12:34:56 die xxxi mensis v annoque mmlxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi May 151 2475437 05 v 5 05/31/2065 die xxxi mensis v annoque mmlxv 65 lxv 2065} +test clock-2.2411 {conversion of 2065-06-01} { + clock format 3011085296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/01/2065 12:34:56 die i mensis vi annoque mmlxv xii h xxxiv m lvi s 20 mm 01 i 1 i Jun 152 2475438 06 vi 6 06/01/2065 die i mensis vi annoque mmlxv 65 lxv 2065} +test clock-2.2412 {conversion of 2065-06-30} { + clock format 3013590896 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jun June 06/30/2065 12:34:56 die xxx mensis vi annoque mmlxv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Jun 181 2475467 06 vi 6 06/30/2065 die xxx mensis vi annoque mmlxv 65 lxv 2065} +test clock-2.2413 {conversion of 2065-07-01} { + clock format 3013677296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/01/2065 12:34:56 die i mensis vii annoque mmlxv xii h xxxiv m lvi s 20 mm 01 i 1 i Jul 182 2475468 07 vii 7 07/01/2065 die i mensis vii annoque mmlxv 65 lxv 2065} +test clock-2.2414 {conversion of 2065-07-31} { + clock format 3016269296 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Jul July 07/31/2065 12:34:56 die xxxi mensis vii annoque mmlxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Jul 212 2475498 07 vii 7 07/31/2065 die xxxi mensis vii annoque mmlxv 65 lxv 2065} +test clock-2.2415 {conversion of 2065-08-01} { + clock format 3016355696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/01/2065 12:34:56 die i mensis viii annoque mmlxv xii h xxxiv m lvi s 20 mm 01 i 1 i Aug 213 2475499 08 viii 8 08/01/2065 die i mensis viii annoque mmlxv 65 lxv 2065} +test clock-2.2416 {conversion of 2065-08-31} { + clock format 3018947696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Aug August 08/31/2065 12:34:56 die xxxi mensis viii annoque mmlxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Aug 243 2475529 08 viii 8 08/31/2065 die xxxi mensis viii annoque mmlxv 65 lxv 2065} +test clock-2.2417 {conversion of 2065-09-01} { + clock format 3019034096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/01/2065 12:34:56 die i mensis ix annoque mmlxv xii h xxxiv m lvi s 20 mm 01 i 1 i Sep 244 2475530 09 ix 9 09/01/2065 die i mensis ix annoque mmlxv 65 lxv 2065} +test clock-2.2418 {conversion of 2065-09-30} { + clock format 3021539696 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Sep September 09/30/2065 12:34:56 die xxx mensis ix annoque mmlxv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Sep 273 2475559 09 ix 9 09/30/2065 die xxx mensis ix annoque mmlxv 65 lxv 2065} +test clock-2.2419 {conversion of 2065-10-01} { + clock format 3021626096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/01/2065 12:34:56 die i mensis x annoque mmlxv xii h xxxiv m lvi s 20 mm 01 i 1 i Oct 274 2475560 10 x 10 10/01/2065 die i mensis x annoque mmlxv 65 lxv 2065} +test clock-2.2420 {conversion of 2065-10-31} { + clock format 3024218096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Oct October 10/31/2065 12:34:56 die xxxi mensis x annoque mmlxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Oct 304 2475590 10 x 10 10/31/2065 die xxxi mensis x annoque mmlxv 65 lxv 2065} +test clock-2.2421 {conversion of 2065-11-01} { + clock format 3024304496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/01/2065 12:34:56 die i mensis xi annoque mmlxv xii h xxxiv m lvi s 20 mm 01 i 1 i Nov 305 2475591 11 xi 11 11/01/2065 die i mensis xi annoque mmlxv 65 lxv 2065} +test clock-2.2422 {conversion of 2065-11-30} { + clock format 3026810096 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Nov November 11/30/2065 12:34:56 die xxx mensis xi annoque mmlxv xii h xxxiv m lvi s 20 mm 30 xxx 30 xxx Nov 334 2475620 11 xi 11 11/30/2065 die xxx mensis xi annoque mmlxv 65 lxv 2065} +test clock-2.2423 {conversion of 2065-12-01} { + clock format 3026896496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/01/2065 12:34:56 die i mensis xii annoque mmlxv xii h xxxiv m lvi s 20 mm 01 i 1 i Dec 335 2475621 12 xii 12 12/01/2065 die i mensis xii annoque mmlxv 65 lxv 2065} +test clock-2.2424 {conversion of 2065-12-31} { + clock format 3029488496 \ + -format {%b %B %c %Ec %C %EC %d %Od %e %Oe %h %j %J %m %Om %N %x %Ex %y %Oy %Y} \ + -gmt true -locale en_US_roman +} {Dec December 12/31/2065 12:34:56 die xxxi mensis xii annoque mmlxv xii h xxxiv m lvi s 20 mm 31 xxxi 31 xxxi Dec 365 2475651 12 xii 12 12/31/2065 die xxxi mensis xii annoque mmlxv 65 lxv 2065} +# END testcases2 + +# BEGIN testcases3 +test clock-3.1 {ISO week-based calendar 1871-W52-1} { + clock format -3093206400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1871-W52-1 +} {Mon Monday 71 1871 1 52 52 1 52} +test clock-3.2 {ISO week-based calendar 1871-W52-6} { + clock format -3092774400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1871-W52-6 +} {Sat Saturday 71 1871 6 52 52 6 52} +test clock-3.3 {ISO week-based calendar 1871-W52-7} { + clock format -3092688000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1871-W52-7 +} {Sun Sunday 71 1871 7 53 52 0 52} +test clock-3.4 {ISO week-based calendar 1872-W01-1} { + clock format -3092601600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1872-W01-1 +} {Mon Monday 72 1872 1 00 01 1 01} +test clock-3.5 {ISO week-based calendar 1872-W01-6} { + clock format -3092169600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1872-W01-6 +} {Sat Saturday 72 1872 6 00 01 6 01} +test clock-3.6 {ISO week-based calendar 1872-W01-7} { + clock format -3092083200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1872-W01-7 +} {Sun Sunday 72 1872 7 01 01 0 01} +test clock-3.7 {ISO week-based calendar 1872-W02-1} { + clock format -3091996800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1872-W02-1 +} {Mon Monday 72 1872 1 01 02 1 02} +test clock-3.8 {ISO week-based calendar 1872-W52-1} { + clock format -3061756800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1872-W52-1 +} {Mon Monday 72 1872 1 51 52 1 52} +test clock-3.9 {ISO week-based calendar 1872-W52-6} { + clock format -3061324800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1872-W52-6 +} {Sat Saturday 72 1872 6 51 52 6 52} +test clock-3.10 {ISO week-based calendar 1872-W52-7} { + clock format -3061238400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1872-W52-7 +} {Sun Sunday 72 1872 7 52 52 0 52} +test clock-3.11 {ISO week-based calendar 1873-W01-1} { + clock format -3061152000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1873-W01-1 +} {Mon Monday 73 1873 1 52 01 1 53} +test clock-3.12 {ISO week-based calendar 1873-W01-3} { + clock format -3060979200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1873-W01-3 +} {Wed Wednesday 73 1873 3 00 01 3 00} +test clock-3.13 {ISO week-based calendar 1873-W01-6} { + clock format -3060720000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1873-W01-6 +} {Sat Saturday 73 1873 6 00 01 6 00} +test clock-3.14 {ISO week-based calendar 1873-W01-7} { + clock format -3060633600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1873-W01-7 +} {Sun Sunday 73 1873 7 01 01 0 00} +test clock-3.15 {ISO week-based calendar 1873-W02-1} { + clock format -3060547200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1873-W02-1 +} {Mon Monday 73 1873 1 01 02 1 01} +test clock-3.16 {ISO week-based calendar 1875-W52-1} { + clock format -2966803200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1875-W52-1 +} {Mon Monday 75 1875 1 52 52 1 52} +test clock-3.17 {ISO week-based calendar 1875-W52-6} { + clock format -2966371200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1875-W52-6 +} {Sat Saturday 75 1875 6 00 52 6 00} +test clock-3.18 {ISO week-based calendar 1875-W52-7} { + clock format -2966284800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1875-W52-7 +} {Sun Sunday 75 1875 7 01 52 0 00} +test clock-3.19 {ISO week-based calendar 1876-W01-1} { + clock format -2966198400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1876-W01-1 +} {Mon Monday 76 1876 1 01 01 1 01} +test clock-3.20 {ISO week-based calendar 1876-W01-6} { + clock format -2965766400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1876-W01-6 +} {Sat Saturday 76 1876 6 01 01 6 01} +test clock-3.21 {ISO week-based calendar 1876-W01-7} { + clock format -2965680000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1876-W01-7 +} {Sun Sunday 76 1876 7 02 01 0 01} +test clock-3.22 {ISO week-based calendar 1876-W02-1} { + clock format -2965593600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1876-W02-1 +} {Mon Monday 76 1876 1 02 02 1 02} +test clock-3.23 {ISO week-based calendar 1876-W52-1} { + clock format -2935353600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1876-W52-1 +} {Mon Monday 76 1876 1 52 52 1 52} +test clock-3.24 {ISO week-based calendar 1876-W52-6} { + clock format -2934921600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1876-W52-6 +} {Sat Saturday 76 1876 6 52 52 6 52} +test clock-3.25 {ISO week-based calendar 1876-W52-7} { + clock format -2934835200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1876-W52-7 +} {Sun Sunday 76 1876 7 53 52 0 52} +test clock-3.26 {ISO week-based calendar 1877-W01-1} { + clock format -2934748800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1877-W01-1 +} {Mon Monday 77 1877 1 00 01 1 01} +test clock-3.27 {ISO week-based calendar 1877-W01-6} { + clock format -2934316800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1877-W01-6 +} {Sat Saturday 77 1877 6 00 01 6 01} +test clock-3.28 {ISO week-based calendar 1877-W01-7} { + clock format -2934230400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1877-W01-7 +} {Sun Sunday 77 1877 7 01 01 0 01} +test clock-3.29 {ISO week-based calendar 1877-W02-1} { + clock format -2934144000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1877-W02-1 +} {Mon Monday 77 1877 1 01 02 1 02} +test clock-3.30 {ISO week-based calendar 1879-W52-1} { + clock format -2841004800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1879-W52-1 +} {Mon Monday 79 1879 1 51 52 1 51} +test clock-3.31 {ISO week-based calendar 1879-W52-6} { + clock format -2840572800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1879-W52-6 +} {Sat Saturday 79 1879 6 51 52 6 51} +test clock-3.32 {ISO week-based calendar 1879-W52-7} { + clock format -2840486400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1879-W52-7 +} {Sun Sunday 79 1879 7 52 52 0 51} +test clock-3.33 {ISO week-based calendar 1880-W01-1} { + clock format -2840400000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1880-W01-1 +} {Mon Monday 80 1880 1 52 01 1 52} +test clock-3.34 {ISO week-based calendar 1880-W01-4} { + clock format -2840140800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1880-W01-4 +} {Thu Thursday 80 1880 4 00 01 4 00} +test clock-3.35 {ISO week-based calendar 1880-W01-6} { + clock format -2839968000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1880-W01-6 +} {Sat Saturday 80 1880 6 00 01 6 00} +test clock-3.36 {ISO week-based calendar 1880-W01-7} { + clock format -2839881600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1880-W01-7 +} {Sun Sunday 80 1880 7 01 01 0 00} +test clock-3.37 {ISO week-based calendar 1880-W02-1} { + clock format -2839795200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1880-W02-1 +} {Mon Monday 80 1880 1 01 02 1 01} +test clock-3.38 {ISO week-based calendar 1880-W53-1} { + clock format -2808950400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1880-W53-1 +} {Mon Monday 80 1880 1 52 53 1 52} +test clock-3.39 {ISO week-based calendar 1880-W53-6} { + clock format -2808518400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1880-W53-6 +} {Sat Saturday 80 1880 6 00 53 6 00} +test clock-3.40 {ISO week-based calendar 1880-W53-7} { + clock format -2808432000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1880-W53-7 +} {Sun Sunday 80 1880 7 01 53 0 00} +test clock-3.41 {ISO week-based calendar 1881-W01-1} { + clock format -2808345600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1881-W01-1 +} {Mon Monday 81 1881 1 01 01 1 01} +test clock-3.42 {ISO week-based calendar 1881-W01-6} { + clock format -2807913600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1881-W01-6 +} {Sat Saturday 81 1881 6 01 01 6 01} +test clock-3.43 {ISO week-based calendar 1881-W01-7} { + clock format -2807827200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1881-W01-7 +} {Sun Sunday 81 1881 7 02 01 0 01} +test clock-3.44 {ISO week-based calendar 1881-W02-1} { + clock format -2807740800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1881-W02-1 +} {Mon Monday 81 1881 1 02 02 1 02} +test clock-3.45 {ISO week-based calendar 1883-W52-1} { + clock format -2714601600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1883-W52-1 +} {Mon Monday 83 1883 1 51 52 1 52} +test clock-3.46 {ISO week-based calendar 1883-W52-6} { + clock format -2714169600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1883-W52-6 +} {Sat Saturday 83 1883 6 51 52 6 52} +test clock-3.47 {ISO week-based calendar 1883-W52-7} { + clock format -2714083200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1883-W52-7 +} {Sun Sunday 83 1883 7 52 52 0 52} +test clock-3.48 {ISO week-based calendar 1884-W01-1} { + clock format -2713996800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1884-W01-1 +} {Mon Monday 84 1884 1 52 01 1 53} +test clock-3.49 {ISO week-based calendar 1884-W01-2} { + clock format -2713910400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1884-W01-2 +} {Tue Tuesday 84 1884 2 00 01 2 00} +test clock-3.50 {ISO week-based calendar 1884-W01-6} { + clock format -2713564800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1884-W01-6 +} {Sat Saturday 84 1884 6 00 01 6 00} +test clock-3.51 {ISO week-based calendar 1884-W01-7} { + clock format -2713478400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1884-W01-7 +} {Sun Sunday 84 1884 7 01 01 0 00} +test clock-3.52 {ISO week-based calendar 1884-W02-1} { + clock format -2713392000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1884-W02-1 +} {Mon Monday 84 1884 1 01 02 1 01} +test clock-3.53 {ISO week-based calendar 1884-W52-1} { + clock format -2683152000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1884-W52-1 +} {Mon Monday 84 1884 1 51 52 1 51} +test clock-3.54 {ISO week-based calendar 1884-W52-6} { + clock format -2682720000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1884-W52-6 +} {Sat Saturday 84 1884 6 51 52 6 51} +test clock-3.55 {ISO week-based calendar 1884-W52-7} { + clock format -2682633600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1884-W52-7 +} {Sun Sunday 84 1884 7 52 52 0 51} +test clock-3.56 {ISO week-based calendar 1885-W01-1} { + clock format -2682547200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1885-W01-1 +} {Mon Monday 85 1885 1 52 01 1 52} +test clock-3.57 {ISO week-based calendar 1885-W01-4} { + clock format -2682288000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1885-W01-4 +} {Thu Thursday 85 1885 4 00 01 4 00} +test clock-3.58 {ISO week-based calendar 1885-W01-6} { + clock format -2682115200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1885-W01-6 +} {Sat Saturday 85 1885 6 00 01 6 00} +test clock-3.59 {ISO week-based calendar 1885-W01-7} { + clock format -2682028800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1885-W01-7 +} {Sun Sunday 85 1885 7 01 01 0 00} +test clock-3.60 {ISO week-based calendar 1885-W02-1} { + clock format -2681942400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1885-W02-1 +} {Mon Monday 85 1885 1 01 02 1 01} +test clock-3.61 {ISO week-based calendar 1887-W52-1} { + clock format -2588198400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1887-W52-1 +} {Mon Monday 87 1887 1 52 52 1 52} +test clock-3.62 {ISO week-based calendar 1887-W52-6} { + clock format -2587766400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1887-W52-6 +} {Sat Saturday 87 1887 6 52 52 6 52} +test clock-3.63 {ISO week-based calendar 1887-W52-7} { + clock format -2587680000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1887-W52-7 +} {Sun Sunday 87 1887 7 01 52 0 00} +test clock-3.64 {ISO week-based calendar 1888-W01-1} { + clock format -2587593600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1888-W01-1 +} {Mon Monday 88 1888 1 01 01 1 01} +test clock-3.65 {ISO week-based calendar 1888-W01-6} { + clock format -2587161600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1888-W01-6 +} {Sat Saturday 88 1888 6 01 01 6 01} +test clock-3.66 {ISO week-based calendar 1888-W01-7} { + clock format -2587075200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1888-W01-7 +} {Sun Sunday 88 1888 7 02 01 0 01} +test clock-3.67 {ISO week-based calendar 1888-W02-1} { + clock format -2586988800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1888-W02-1 +} {Mon Monday 88 1888 1 02 02 1 02} +test clock-3.68 {ISO week-based calendar 1888-W52-1} { + clock format -2556748800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1888-W52-1 +} {Mon Monday 88 1888 1 52 52 1 52} +test clock-3.69 {ISO week-based calendar 1888-W52-6} { + clock format -2556316800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1888-W52-6 +} {Sat Saturday 88 1888 6 52 52 6 52} +test clock-3.70 {ISO week-based calendar 1888-W52-7} { + clock format -2556230400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1888-W52-7 +} {Sun Sunday 88 1888 7 53 52 0 52} +test clock-3.71 {ISO week-based calendar 1889-W01-1} { + clock format -2556144000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1889-W01-1 +} {Mon Monday 89 1889 1 53 01 1 53} +test clock-3.72 {ISO week-based calendar 1889-W01-2} { + clock format -2556057600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1889-W01-2 +} {Tue Tuesday 89 1889 2 00 01 2 00} +test clock-3.73 {ISO week-based calendar 1889-W01-6} { + clock format -2555712000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1889-W01-6 +} {Sat Saturday 89 1889 6 00 01 6 00} +test clock-3.74 {ISO week-based calendar 1889-W01-7} { + clock format -2555625600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1889-W01-7 +} {Sun Sunday 89 1889 7 01 01 0 00} +test clock-3.75 {ISO week-based calendar 1889-W02-1} { + clock format -2555539200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1889-W02-1 +} {Mon Monday 89 1889 1 01 02 1 01} +test clock-3.76 {ISO week-based calendar 1889-W52-1} { + clock format -2525299200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1889-W52-1 +} {Mon Monday 89 1889 1 51 52 1 51} +test clock-3.77 {ISO week-based calendar 1889-W52-6} { + clock format -2524867200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1889-W52-6 +} {Sat Saturday 89 1889 6 51 52 6 51} +test clock-3.78 {ISO week-based calendar 1889-W52-7} { + clock format -2524780800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1889-W52-7 +} {Sun Sunday 89 1889 7 52 52 0 51} +test clock-3.79 {ISO week-based calendar 1890-W01-1} { + clock format -2524694400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1890-W01-1 +} {Mon Monday 90 1890 1 52 01 1 52} +test clock-3.80 {ISO week-based calendar 1890-W01-3} { + clock format -2524521600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1890-W01-3 +} {Wed Wednesday 90 1890 3 00 01 3 00} +test clock-3.81 {ISO week-based calendar 1890-W01-6} { + clock format -2524262400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1890-W01-6 +} {Sat Saturday 90 1890 6 00 01 6 00} +test clock-3.82 {ISO week-based calendar 1890-W01-7} { + clock format -2524176000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1890-W01-7 +} {Sun Sunday 90 1890 7 01 01 0 00} +test clock-3.83 {ISO week-based calendar 1890-W02-1} { + clock format -2524089600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1890-W02-1 +} {Mon Monday 90 1890 1 01 02 1 01} +test clock-3.84 {ISO week-based calendar 1890-W52-1} { + clock format -2493849600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1890-W52-1 +} {Mon Monday 90 1890 1 51 52 1 51} +test clock-3.85 {ISO week-based calendar 1890-W52-6} { + clock format -2493417600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1890-W52-6 +} {Sat Saturday 90 1890 6 51 52 6 51} +test clock-3.86 {ISO week-based calendar 1890-W52-7} { + clock format -2493331200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1890-W52-7 +} {Sun Sunday 90 1890 7 52 52 0 51} +test clock-3.87 {ISO week-based calendar 1891-W01-1} { + clock format -2493244800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1891-W01-1 +} {Mon Monday 91 1891 1 52 01 1 52} +test clock-3.88 {ISO week-based calendar 1891-W01-4} { + clock format -2492985600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1891-W01-4 +} {Thu Thursday 91 1891 4 00 01 4 00} +test clock-3.89 {ISO week-based calendar 1891-W01-6} { + clock format -2492812800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1891-W01-6 +} {Sat Saturday 91 1891 6 00 01 6 00} +test clock-3.90 {ISO week-based calendar 1891-W01-7} { + clock format -2492726400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1891-W01-7 +} {Sun Sunday 91 1891 7 01 01 0 00} +test clock-3.91 {ISO week-based calendar 1891-W02-1} { + clock format -2492640000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1891-W02-1 +} {Mon Monday 91 1891 1 01 02 1 01} +test clock-3.92 {ISO week-based calendar 1891-W53-1} { + clock format -2461795200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1891-W53-1 +} {Mon Monday 91 1891 1 52 53 1 52} +test clock-3.93 {ISO week-based calendar 1891-W53-5} { + clock format -2461449600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1891-W53-5 +} {Fri Friday 91 1891 5 00 53 5 00} +test clock-3.94 {ISO week-based calendar 1891-W53-6} { + clock format -2461363200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1891-W53-6 +} {Sat Saturday 91 1891 6 00 53 6 00} +test clock-3.95 {ISO week-based calendar 1891-W53-7} { + clock format -2461276800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1891-W53-7 +} {Sun Sunday 91 1891 7 01 53 0 00} +test clock-3.96 {ISO week-based calendar 1892-W01-1} { + clock format -2461190400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1892-W01-1 +} {Mon Monday 92 1892 1 01 01 1 01} +test clock-3.97 {ISO week-based calendar 1892-W01-6} { + clock format -2460758400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1892-W01-6 +} {Sat Saturday 92 1892 6 01 01 6 01} +test clock-3.98 {ISO week-based calendar 1892-W01-7} { + clock format -2460672000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1892-W01-7 +} {Sun Sunday 92 1892 7 02 01 0 01} +test clock-3.99 {ISO week-based calendar 1892-W02-1} { + clock format -2460585600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1892-W02-1 +} {Mon Monday 92 1892 1 02 02 1 02} +test clock-3.100 {ISO week-based calendar 1892-W52-1} { + clock format -2430345600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1892-W52-1 +} {Mon Monday 92 1892 1 52 52 1 52} +test clock-3.101 {ISO week-based calendar 1892-W52-6} { + clock format -2429913600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1892-W52-6 +} {Sat Saturday 92 1892 6 52 52 6 52} +test clock-3.102 {ISO week-based calendar 1892-W52-7} { + clock format -2429827200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1892-W52-7 +} {Sun Sunday 92 1892 7 01 52 0 00} +test clock-3.103 {ISO week-based calendar 1893-W01-1} { + clock format -2429740800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1893-W01-1 +} {Mon Monday 93 1893 1 01 01 1 01} +test clock-3.104 {ISO week-based calendar 1893-W01-6} { + clock format -2429308800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1893-W01-6 +} {Sat Saturday 93 1893 6 01 01 6 01} +test clock-3.105 {ISO week-based calendar 1893-W01-7} { + clock format -2429222400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1893-W01-7 +} {Sun Sunday 93 1893 7 02 01 0 01} +test clock-3.106 {ISO week-based calendar 1893-W02-1} { + clock format -2429136000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1893-W02-1 +} {Mon Monday 93 1893 1 02 02 1 02} +test clock-3.107 {ISO week-based calendar 1893-W52-1} { + clock format -2398896000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1893-W52-1 +} {Mon Monday 93 1893 1 52 52 1 52} +test clock-3.108 {ISO week-based calendar 1893-W52-6} { + clock format -2398464000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1893-W52-6 +} {Sat Saturday 93 1893 6 52 52 6 52} +test clock-3.109 {ISO week-based calendar 1893-W52-7} { + clock format -2398377600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1893-W52-7 +} {Sun Sunday 93 1893 7 53 52 0 52} +test clock-3.110 {ISO week-based calendar 1894-W01-1} { + clock format -2398291200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1894-W01-1 +} {Mon Monday 94 1894 1 00 01 1 01} +test clock-3.111 {ISO week-based calendar 1894-W01-6} { + clock format -2397859200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1894-W01-6 +} {Sat Saturday 94 1894 6 00 01 6 01} +test clock-3.112 {ISO week-based calendar 1894-W01-7} { + clock format -2397772800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1894-W01-7 +} {Sun Sunday 94 1894 7 01 01 0 01} +test clock-3.113 {ISO week-based calendar 1894-W02-1} { + clock format -2397686400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1894-W02-1 +} {Mon Monday 94 1894 1 01 02 1 02} +test clock-3.114 {ISO week-based calendar 1894-W52-1} { + clock format -2367446400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1894-W52-1 +} {Mon Monday 94 1894 1 51 52 1 52} +test clock-3.115 {ISO week-based calendar 1894-W52-6} { + clock format -2367014400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1894-W52-6 +} {Sat Saturday 94 1894 6 51 52 6 52} +test clock-3.116 {ISO week-based calendar 1894-W52-7} { + clock format -2366928000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1894-W52-7 +} {Sun Sunday 94 1894 7 52 52 0 52} +test clock-3.117 {ISO week-based calendar 1895-W01-1} { + clock format -2366841600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1895-W01-1 +} {Mon Monday 95 1895 1 52 01 1 53} +test clock-3.118 {ISO week-based calendar 1895-W01-2} { + clock format -2366755200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1895-W01-2 +} {Tue Tuesday 95 1895 2 00 01 2 00} +test clock-3.119 {ISO week-based calendar 1895-W01-6} { + clock format -2366409600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1895-W01-6 +} {Sat Saturday 95 1895 6 00 01 6 00} +test clock-3.120 {ISO week-based calendar 1895-W01-7} { + clock format -2366323200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1895-W01-7 +} {Sun Sunday 95 1895 7 01 01 0 00} +test clock-3.121 {ISO week-based calendar 1895-W02-1} { + clock format -2366236800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1895-W02-1 +} {Mon Monday 95 1895 1 01 02 1 01} +test clock-3.122 {ISO week-based calendar 1895-W52-1} { + clock format -2335996800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1895-W52-1 +} {Mon Monday 95 1895 1 51 52 1 51} +test clock-3.123 {ISO week-based calendar 1895-W52-6} { + clock format -2335564800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1895-W52-6 +} {Sat Saturday 95 1895 6 51 52 6 51} +test clock-3.124 {ISO week-based calendar 1895-W52-7} { + clock format -2335478400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1895-W52-7 +} {Sun Sunday 95 1895 7 52 52 0 51} +test clock-3.125 {ISO week-based calendar 1896-W01-1} { + clock format -2335392000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1896-W01-1 +} {Mon Monday 96 1896 1 52 01 1 52} +test clock-3.126 {ISO week-based calendar 1896-W01-3} { + clock format -2335219200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1896-W01-3 +} {Wed Wednesday 96 1896 3 00 01 3 00} +test clock-3.127 {ISO week-based calendar 1896-W01-6} { + clock format -2334960000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1896-W01-6 +} {Sat Saturday 96 1896 6 00 01 6 00} +test clock-3.128 {ISO week-based calendar 1896-W01-7} { + clock format -2334873600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1896-W01-7 +} {Sun Sunday 96 1896 7 01 01 0 00} +test clock-3.129 {ISO week-based calendar 1896-W02-1} { + clock format -2334787200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1896-W02-1 +} {Mon Monday 96 1896 1 01 02 1 01} +test clock-3.130 {ISO week-based calendar 1896-W53-1} { + clock format -2303942400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1896-W53-1 +} {Mon Monday 96 1896 1 52 53 1 52} +test clock-3.131 {ISO week-based calendar 1896-W53-5} { + clock format -2303596800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1896-W53-5 +} {Fri Friday 96 1896 5 00 53 5 00} +test clock-3.132 {ISO week-based calendar 1896-W53-6} { + clock format -2303510400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1896-W53-6 +} {Sat Saturday 96 1896 6 00 53 6 00} +test clock-3.133 {ISO week-based calendar 1896-W53-7} { + clock format -2303424000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1896-W53-7 +} {Sun Sunday 96 1896 7 01 53 0 00} +test clock-3.134 {ISO week-based calendar 1897-W01-1} { + clock format -2303337600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1897-W01-1 +} {Mon Monday 97 1897 1 01 01 1 01} +test clock-3.135 {ISO week-based calendar 1897-W01-6} { + clock format -2302905600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1897-W01-6 +} {Sat Saturday 97 1897 6 01 01 6 01} +test clock-3.136 {ISO week-based calendar 1897-W01-7} { + clock format -2302819200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1897-W01-7 +} {Sun Sunday 97 1897 7 02 01 0 01} +test clock-3.137 {ISO week-based calendar 1897-W02-1} { + clock format -2302732800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1897-W02-1 +} {Mon Monday 97 1897 1 02 02 1 02} +test clock-3.138 {ISO week-based calendar 1897-W52-1} { + clock format -2272492800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1897-W52-1 +} {Mon Monday 97 1897 1 52 52 1 52} +test clock-3.139 {ISO week-based calendar 1897-W52-6} { + clock format -2272060800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1897-W52-6 +} {Sat Saturday 97 1897 6 00 52 6 00} +test clock-3.140 {ISO week-based calendar 1897-W52-7} { + clock format -2271974400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1897-W52-7 +} {Sun Sunday 97 1897 7 01 52 0 00} +test clock-3.141 {ISO week-based calendar 1898-W01-1} { + clock format -2271888000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1898-W01-1 +} {Mon Monday 98 1898 1 01 01 1 01} +test clock-3.142 {ISO week-based calendar 1898-W01-6} { + clock format -2271456000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1898-W01-6 +} {Sat Saturday 98 1898 6 01 01 6 01} +test clock-3.143 {ISO week-based calendar 1898-W01-7} { + clock format -2271369600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1898-W01-7 +} {Sun Sunday 98 1898 7 02 01 0 01} +test clock-3.144 {ISO week-based calendar 1898-W02-1} { + clock format -2271283200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1898-W02-1 +} {Mon Monday 98 1898 1 02 02 1 02} +test clock-3.145 {ISO week-based calendar 1898-W52-1} { + clock format -2241043200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1898-W52-1 +} {Mon Monday 98 1898 1 52 52 1 52} +test clock-3.146 {ISO week-based calendar 1898-W52-6} { + clock format -2240611200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1898-W52-6 +} {Sat Saturday 98 1898 6 52 52 6 52} +test clock-3.147 {ISO week-based calendar 1898-W52-7} { + clock format -2240524800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1898-W52-7 +} {Sun Sunday 98 1898 7 01 52 0 00} +test clock-3.148 {ISO week-based calendar 1899-W01-1} { + clock format -2240438400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1899-W01-1 +} {Mon Monday 99 1899 1 01 01 1 01} +test clock-3.149 {ISO week-based calendar 1899-W01-6} { + clock format -2240006400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1899-W01-6 +} {Sat Saturday 99 1899 6 01 01 6 01} +test clock-3.150 {ISO week-based calendar 1899-W01-7} { + clock format -2239920000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1899-W01-7 +} {Sun Sunday 99 1899 7 02 01 0 01} +test clock-3.151 {ISO week-based calendar 1899-W02-1} { + clock format -2239833600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1899-W02-1 +} {Mon Monday 99 1899 1 02 02 1 02} +test clock-3.152 {ISO week-based calendar 1899-W52-1} { + clock format -2209593600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1899-W52-1 +} {Mon Monday 99 1899 1 52 52 1 52} +test clock-3.153 {ISO week-based calendar 1899-W52-6} { + clock format -2209161600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1899-W52-6 +} {Sat Saturday 99 1899 6 52 52 6 52} +test clock-3.154 {ISO week-based calendar 1899-W52-7} { + clock format -2209075200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1899-W52-7 +} {Sun Sunday 99 1899 7 53 52 0 52} +test clock-3.155 {ISO week-based calendar 1900-W01-1} { + clock format -2208988800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1900-W01-1 +} {Mon Monday 00 1900 1 00 01 1 01} +test clock-3.156 {ISO week-based calendar 1900-W01-6} { + clock format -2208556800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1900-W01-6 +} {Sat Saturday 00 1900 6 00 01 6 01} +test clock-3.157 {ISO week-based calendar 1900-W01-7} { + clock format -2208470400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1900-W01-7 +} {Sun Sunday 00 1900 7 01 01 0 01} +test clock-3.158 {ISO week-based calendar 1900-W02-1} { + clock format -2208384000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1900-W02-1 +} {Mon Monday 00 1900 1 01 02 1 02} +test clock-3.159 {ISO week-based calendar 1943-W52-1} { + clock format -820972800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1943-W52-1 +} {Mon Monday 43 1943 1 52 52 1 52} +test clock-3.160 {ISO week-based calendar 1943-W52-6} { + clock format -820540800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1943-W52-6 +} {Sat Saturday 43 1943 6 00 52 6 00} +test clock-3.161 {ISO week-based calendar 1943-W52-7} { + clock format -820454400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1943-W52-7 +} {Sun Sunday 43 1943 7 01 52 0 00} +test clock-3.162 {ISO week-based calendar 1944-W01-1} { + clock format -820368000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1944-W01-1 +} {Mon Monday 44 1944 1 01 01 1 01} +test clock-3.163 {ISO week-based calendar 1944-W01-6} { + clock format -819936000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1944-W01-6 +} {Sat Saturday 44 1944 6 01 01 6 01} +test clock-3.164 {ISO week-based calendar 1944-W01-7} { + clock format -819849600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1944-W01-7 +} {Sun Sunday 44 1944 7 02 01 0 01} +test clock-3.165 {ISO week-based calendar 1944-W02-1} { + clock format -819763200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1944-W02-1 +} {Mon Monday 44 1944 1 02 02 1 02} +test clock-3.166 {ISO week-based calendar 1944-W52-1} { + clock format -789523200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1944-W52-1 +} {Mon Monday 44 1944 1 52 52 1 52} +test clock-3.167 {ISO week-based calendar 1944-W52-6} { + clock format -789091200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1944-W52-6 +} {Sat Saturday 44 1944 6 52 52 6 52} +test clock-3.168 {ISO week-based calendar 1944-W52-7} { + clock format -789004800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1944-W52-7 +} {Sun Sunday 44 1944 7 53 52 0 52} +test clock-3.169 {ISO week-based calendar 1945-W01-1} { + clock format -788918400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1945-W01-1 +} {Mon Monday 45 1945 1 00 01 1 01} +test clock-3.170 {ISO week-based calendar 1945-W01-6} { + clock format -788486400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1945-W01-6 +} {Sat Saturday 45 1945 6 00 01 6 01} +test clock-3.171 {ISO week-based calendar 1945-W01-7} { + clock format -788400000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1945-W01-7 +} {Sun Sunday 45 1945 7 01 01 0 01} +test clock-3.172 {ISO week-based calendar 1945-W02-1} { + clock format -788313600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1945-W02-1 +} {Mon Monday 45 1945 1 01 02 1 02} +test clock-3.173 {ISO week-based calendar 1947-W52-1} { + clock format -695174400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1947-W52-1 +} {Mon Monday 47 1947 1 51 52 1 51} +test clock-3.174 {ISO week-based calendar 1947-W52-6} { + clock format -694742400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1947-W52-6 +} {Sat Saturday 47 1947 6 51 52 6 51} +test clock-3.175 {ISO week-based calendar 1947-W52-7} { + clock format -694656000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1947-W52-7 +} {Sun Sunday 47 1947 7 52 52 0 51} +test clock-3.176 {ISO week-based calendar 1948-W01-1} { + clock format -694569600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1948-W01-1 +} {Mon Monday 48 1948 1 52 01 1 52} +test clock-3.177 {ISO week-based calendar 1948-W01-4} { + clock format -694310400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1948-W01-4 +} {Thu Thursday 48 1948 4 00 01 4 00} +test clock-3.178 {ISO week-based calendar 1948-W01-6} { + clock format -694137600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1948-W01-6 +} {Sat Saturday 48 1948 6 00 01 6 00} +test clock-3.179 {ISO week-based calendar 1948-W01-7} { + clock format -694051200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1948-W01-7 +} {Sun Sunday 48 1948 7 01 01 0 00} +test clock-3.180 {ISO week-based calendar 1948-W02-1} { + clock format -693964800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1948-W02-1 +} {Mon Monday 48 1948 1 01 02 1 01} +test clock-3.181 {ISO week-based calendar 1948-W53-1} { + clock format -663120000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1948-W53-1 +} {Mon Monday 48 1948 1 52 53 1 52} +test clock-3.182 {ISO week-based calendar 1948-W53-6} { + clock format -662688000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1948-W53-6 +} {Sat Saturday 48 1948 6 00 53 6 00} +test clock-3.183 {ISO week-based calendar 1948-W53-7} { + clock format -662601600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1948-W53-7 +} {Sun Sunday 48 1948 7 01 53 0 00} +test clock-3.184 {ISO week-based calendar 1949-W01-1} { + clock format -662515200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1949-W01-1 +} {Mon Monday 49 1949 1 01 01 1 01} +test clock-3.185 {ISO week-based calendar 1949-W01-6} { + clock format -662083200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1949-W01-6 +} {Sat Saturday 49 1949 6 01 01 6 01} +test clock-3.186 {ISO week-based calendar 1949-W01-7} { + clock format -661996800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1949-W01-7 +} {Sun Sunday 49 1949 7 02 01 0 01} +test clock-3.187 {ISO week-based calendar 1949-W02-1} { + clock format -661910400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1949-W02-1 +} {Mon Monday 49 1949 1 02 02 1 02} +test clock-3.188 {ISO week-based calendar 1951-W52-1} { + clock format -568771200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1951-W52-1 +} {Mon Monday 51 1951 1 51 52 1 52} +test clock-3.189 {ISO week-based calendar 1951-W52-6} { + clock format -568339200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1951-W52-6 +} {Sat Saturday 51 1951 6 51 52 6 52} +test clock-3.190 {ISO week-based calendar 1951-W52-7} { + clock format -568252800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1951-W52-7 +} {Sun Sunday 51 1951 7 52 52 0 52} +test clock-3.191 {ISO week-based calendar 1952-W01-1} { + clock format -568166400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1952-W01-1 +} {Mon Monday 52 1952 1 52 01 1 53} +test clock-3.192 {ISO week-based calendar 1952-W01-2} { + clock format -568080000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1952-W01-2 +} {Tue Tuesday 52 1952 2 00 01 2 00} +test clock-3.193 {ISO week-based calendar 1952-W01-6} { + clock format -567734400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1952-W01-6 +} {Sat Saturday 52 1952 6 00 01 6 00} +test clock-3.194 {ISO week-based calendar 1952-W01-7} { + clock format -567648000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1952-W01-7 +} {Sun Sunday 52 1952 7 01 01 0 00} +test clock-3.195 {ISO week-based calendar 1952-W02-1} { + clock format -567561600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1952-W02-1 +} {Mon Monday 52 1952 1 01 02 1 01} +test clock-3.196 {ISO week-based calendar 1952-W52-1} { + clock format -537321600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1952-W52-1 +} {Mon Monday 52 1952 1 51 52 1 51} +test clock-3.197 {ISO week-based calendar 1952-W52-6} { + clock format -536889600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1952-W52-6 +} {Sat Saturday 52 1952 6 51 52 6 51} +test clock-3.198 {ISO week-based calendar 1952-W52-7} { + clock format -536803200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1952-W52-7 +} {Sun Sunday 52 1952 7 52 52 0 51} +test clock-3.199 {ISO week-based calendar 1953-W01-1} { + clock format -536716800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1953-W01-1 +} {Mon Monday 53 1953 1 52 01 1 52} +test clock-3.200 {ISO week-based calendar 1953-W01-4} { + clock format -536457600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1953-W01-4 +} {Thu Thursday 53 1953 4 00 01 4 00} +test clock-3.201 {ISO week-based calendar 1953-W01-6} { + clock format -536284800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1953-W01-6 +} {Sat Saturday 53 1953 6 00 01 6 00} +test clock-3.202 {ISO week-based calendar 1953-W01-7} { + clock format -536198400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1953-W01-7 +} {Sun Sunday 53 1953 7 01 01 0 00} +test clock-3.203 {ISO week-based calendar 1953-W02-1} { + clock format -536112000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1953-W02-1 +} {Mon Monday 53 1953 1 01 02 1 01} +test clock-3.204 {ISO week-based calendar 1955-W52-1} { + clock format -442368000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1955-W52-1 +} {Mon Monday 55 1955 1 52 52 1 52} +test clock-3.205 {ISO week-based calendar 1955-W52-6} { + clock format -441936000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1955-W52-6 +} {Sat Saturday 55 1955 6 52 52 6 52} +test clock-3.206 {ISO week-based calendar 1955-W52-7} { + clock format -441849600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1955-W52-7 +} {Sun Sunday 55 1955 7 01 52 0 00} +test clock-3.207 {ISO week-based calendar 1956-W01-1} { + clock format -441763200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1956-W01-1 +} {Mon Monday 56 1956 1 01 01 1 01} +test clock-3.208 {ISO week-based calendar 1956-W01-6} { + clock format -441331200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1956-W01-6 +} {Sat Saturday 56 1956 6 01 01 6 01} +test clock-3.209 {ISO week-based calendar 1956-W01-7} { + clock format -441244800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1956-W01-7 +} {Sun Sunday 56 1956 7 02 01 0 01} +test clock-3.210 {ISO week-based calendar 1956-W02-1} { + clock format -441158400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1956-W02-1 +} {Mon Monday 56 1956 1 02 02 1 02} +test clock-3.211 {ISO week-based calendar 1956-W52-1} { + clock format -410918400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1956-W52-1 +} {Mon Monday 56 1956 1 52 52 1 52} +test clock-3.212 {ISO week-based calendar 1956-W52-6} { + clock format -410486400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1956-W52-6 +} {Sat Saturday 56 1956 6 52 52 6 52} +test clock-3.213 {ISO week-based calendar 1956-W52-7} { + clock format -410400000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1956-W52-7 +} {Sun Sunday 56 1956 7 53 52 0 52} +test clock-3.214 {ISO week-based calendar 1957-W01-1} { + clock format -410313600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1957-W01-1 +} {Mon Monday 57 1957 1 53 01 1 53} +test clock-3.215 {ISO week-based calendar 1957-W01-2} { + clock format -410227200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1957-W01-2 +} {Tue Tuesday 57 1957 2 00 01 2 00} +test clock-3.216 {ISO week-based calendar 1957-W01-6} { + clock format -409881600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1957-W01-6 +} {Sat Saturday 57 1957 6 00 01 6 00} +test clock-3.217 {ISO week-based calendar 1957-W01-7} { + clock format -409795200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1957-W01-7 +} {Sun Sunday 57 1957 7 01 01 0 00} +test clock-3.218 {ISO week-based calendar 1957-W02-1} { + clock format -409708800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1957-W02-1 +} {Mon Monday 57 1957 1 01 02 1 01} +test clock-3.219 {ISO week-based calendar 1958-W52-1} { + clock format -348019200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1958-W52-1 +} {Mon Monday 58 1958 1 51 52 1 51} +test clock-3.220 {ISO week-based calendar 1958-W52-6} { + clock format -347587200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1958-W52-6 +} {Sat Saturday 58 1958 6 51 52 6 51} +test clock-3.221 {ISO week-based calendar 1958-W52-7} { + clock format -347500800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1958-W52-7 +} {Sun Sunday 58 1958 7 52 52 0 51} +test clock-3.222 {ISO week-based calendar 1959-W01-1} { + clock format -347414400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1959-W01-1 +} {Mon Monday 59 1959 1 52 01 1 52} +test clock-3.223 {ISO week-based calendar 1959-W01-4} { + clock format -347155200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1959-W01-4 +} {Thu Thursday 59 1959 4 00 01 4 00} +test clock-3.224 {ISO week-based calendar 1959-W01-6} { + clock format -346982400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1959-W01-6 +} {Sat Saturday 59 1959 6 00 01 6 00} +test clock-3.225 {ISO week-based calendar 1959-W01-7} { + clock format -346896000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1959-W01-7 +} {Sun Sunday 59 1959 7 01 01 0 00} +test clock-3.226 {ISO week-based calendar 1959-W02-1} { + clock format -346809600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1959-W02-1 +} {Mon Monday 59 1959 1 01 02 1 01} +test clock-3.227 {ISO week-based calendar 1959-W53-1} { + clock format -315964800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1959-W53-1 +} {Mon Monday 59 1959 1 52 53 1 52} +test clock-3.228 {ISO week-based calendar 1959-W53-5} { + clock format -315619200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1959-W53-5 +} {Fri Friday 59 1959 5 00 53 5 00} +test clock-3.229 {ISO week-based calendar 1959-W53-6} { + clock format -315532800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1959-W53-6 +} {Sat Saturday 59 1959 6 00 53 6 00} +test clock-3.230 {ISO week-based calendar 1959-W53-7} { + clock format -315446400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1959-W53-7 +} {Sun Sunday 59 1959 7 01 53 0 00} +test clock-3.231 {ISO week-based calendar 1960-W01-1} { + clock format -315360000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1960-W01-1 +} {Mon Monday 60 1960 1 01 01 1 01} +test clock-3.232 {ISO week-based calendar 1960-W01-6} { + clock format -314928000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1960-W01-6 +} {Sat Saturday 60 1960 6 01 01 6 01} +test clock-3.233 {ISO week-based calendar 1960-W01-7} { + clock format -314841600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1960-W01-7 +} {Sun Sunday 60 1960 7 02 01 0 01} +test clock-3.234 {ISO week-based calendar 1960-W02-1} { + clock format -314755200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1960-W02-1 +} {Mon Monday 60 1960 1 02 02 1 02} +test clock-3.235 {ISO week-based calendar 1960-W52-1} { + clock format -284515200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1960-W52-1 +} {Mon Monday 60 1960 1 52 52 1 52} +test clock-3.236 {ISO week-based calendar 1960-W52-6} { + clock format -284083200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1960-W52-6 +} {Sat Saturday 60 1960 6 52 52 6 52} +test clock-3.237 {ISO week-based calendar 1960-W52-7} { + clock format -283996800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1960-W52-7 +} {Sun Sunday 60 1960 7 01 52 0 00} +test clock-3.238 {ISO week-based calendar 1961-W01-1} { + clock format -283910400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1961-W01-1 +} {Mon Monday 61 1961 1 01 01 1 01} +test clock-3.239 {ISO week-based calendar 1961-W01-6} { + clock format -283478400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1961-W01-6 +} {Sat Saturday 61 1961 6 01 01 6 01} +test clock-3.240 {ISO week-based calendar 1961-W01-7} { + clock format -283392000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1961-W01-7 +} {Sun Sunday 61 1961 7 02 01 0 01} +test clock-3.241 {ISO week-based calendar 1961-W02-1} { + clock format -283305600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1961-W02-1 +} {Mon Monday 61 1961 1 02 02 1 02} +test clock-3.242 {ISO week-based calendar 1961-W52-1} { + clock format -253065600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1961-W52-1 +} {Mon Monday 61 1961 1 52 52 1 52} +test clock-3.243 {ISO week-based calendar 1961-W52-6} { + clock format -252633600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1961-W52-6 +} {Sat Saturday 61 1961 6 52 52 6 52} +test clock-3.244 {ISO week-based calendar 1961-W52-7} { + clock format -252547200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1961-W52-7 +} {Sun Sunday 61 1961 7 53 52 0 52} +test clock-3.245 {ISO week-based calendar 1962-W01-1} { + clock format -252460800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1962-W01-1 +} {Mon Monday 62 1962 1 00 01 1 01} +test clock-3.246 {ISO week-based calendar 1962-W01-6} { + clock format -252028800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1962-W01-6 +} {Sat Saturday 62 1962 6 00 01 6 01} +test clock-3.247 {ISO week-based calendar 1962-W01-7} { + clock format -251942400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1962-W01-7 +} {Sun Sunday 62 1962 7 01 01 0 01} +test clock-3.248 {ISO week-based calendar 1962-W02-1} { + clock format -251856000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1962-W02-1 +} {Mon Monday 62 1962 1 01 02 1 02} +test clock-3.249 {ISO week-based calendar 1962-W52-1} { + clock format -221616000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1962-W52-1 +} {Mon Monday 62 1962 1 51 52 1 52} +test clock-3.250 {ISO week-based calendar 1962-W52-6} { + clock format -221184000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1962-W52-6 +} {Sat Saturday 62 1962 6 51 52 6 52} +test clock-3.251 {ISO week-based calendar 1962-W52-7} { + clock format -221097600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1962-W52-7 +} {Sun Sunday 62 1962 7 52 52 0 52} +test clock-3.252 {ISO week-based calendar 1963-W01-1} { + clock format -221011200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1963-W01-1 +} {Mon Monday 63 1963 1 52 01 1 53} +test clock-3.253 {ISO week-based calendar 1963-W01-2} { + clock format -220924800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1963-W01-2 +} {Tue Tuesday 63 1963 2 00 01 2 00} +test clock-3.254 {ISO week-based calendar 1963-W01-6} { + clock format -220579200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1963-W01-6 +} {Sat Saturday 63 1963 6 00 01 6 00} +test clock-3.255 {ISO week-based calendar 1963-W01-7} { + clock format -220492800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1963-W01-7 +} {Sun Sunday 63 1963 7 01 01 0 00} +test clock-3.256 {ISO week-based calendar 1963-W02-1} { + clock format -220406400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1963-W02-1 +} {Mon Monday 63 1963 1 01 02 1 01} +test clock-3.257 {ISO week-based calendar 1963-W52-1} { + clock format -190166400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1963-W52-1 +} {Mon Monday 63 1963 1 51 52 1 51} +test clock-3.258 {ISO week-based calendar 1963-W52-6} { + clock format -189734400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1963-W52-6 +} {Sat Saturday 63 1963 6 51 52 6 51} +test clock-3.259 {ISO week-based calendar 1963-W52-7} { + clock format -189648000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1963-W52-7 +} {Sun Sunday 63 1963 7 52 52 0 51} +test clock-3.260 {ISO week-based calendar 1964-W01-1} { + clock format -189561600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1964-W01-1 +} {Mon Monday 64 1964 1 52 01 1 52} +test clock-3.261 {ISO week-based calendar 1964-W01-3} { + clock format -189388800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1964-W01-3 +} {Wed Wednesday 64 1964 3 00 01 3 00} +test clock-3.262 {ISO week-based calendar 1964-W01-6} { + clock format -189129600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1964-W01-6 +} {Sat Saturday 64 1964 6 00 01 6 00} +test clock-3.263 {ISO week-based calendar 1964-W01-7} { + clock format -189043200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1964-W01-7 +} {Sun Sunday 64 1964 7 01 01 0 00} +test clock-3.264 {ISO week-based calendar 1964-W02-1} { + clock format -188956800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1964-W02-1 +} {Mon Monday 64 1964 1 01 02 1 01} +test clock-3.265 {ISO week-based calendar 1964-W53-1} { + clock format -158112000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1964-W53-1 +} {Mon Monday 64 1964 1 52 53 1 52} +test clock-3.266 {ISO week-based calendar 1964-W53-5} { + clock format -157766400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1964-W53-5 +} {Fri Friday 64 1964 5 00 53 5 00} +test clock-3.267 {ISO week-based calendar 1964-W53-6} { + clock format -157680000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1964-W53-6 +} {Sat Saturday 64 1964 6 00 53 6 00} +test clock-3.268 {ISO week-based calendar 1964-W53-7} { + clock format -157593600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1964-W53-7 +} {Sun Sunday 64 1964 7 01 53 0 00} +test clock-3.269 {ISO week-based calendar 1965-W01-1} { + clock format -157507200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1965-W01-1 +} {Mon Monday 65 1965 1 01 01 1 01} +test clock-3.270 {ISO week-based calendar 1965-W01-6} { + clock format -157075200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1965-W01-6 +} {Sat Saturday 65 1965 6 01 01 6 01} +test clock-3.271 {ISO week-based calendar 1965-W01-7} { + clock format -156988800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1965-W01-7 +} {Sun Sunday 65 1965 7 02 01 0 01} +test clock-3.272 {ISO week-based calendar 1965-W02-1} { + clock format -156902400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1965-W02-1 +} {Mon Monday 65 1965 1 02 02 1 02} +test clock-3.273 {ISO week-based calendar 1965-W52-1} { + clock format -126662400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1965-W52-1 +} {Mon Monday 65 1965 1 52 52 1 52} +test clock-3.274 {ISO week-based calendar 1965-W52-6} { + clock format -126230400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1965-W52-6 +} {Sat Saturday 65 1965 6 00 52 6 00} +test clock-3.275 {ISO week-based calendar 1965-W52-7} { + clock format -126144000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1965-W52-7 +} {Sun Sunday 65 1965 7 01 52 0 00} +test clock-3.276 {ISO week-based calendar 1966-W01-1} { + clock format -126057600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1966-W01-1 +} {Mon Monday 66 1966 1 01 01 1 01} +test clock-3.277 {ISO week-based calendar 1966-W01-6} { + clock format -125625600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1966-W01-6 +} {Sat Saturday 66 1966 6 01 01 6 01} +test clock-3.278 {ISO week-based calendar 1966-W01-7} { + clock format -125539200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1966-W01-7 +} {Sun Sunday 66 1966 7 02 01 0 01} +test clock-3.279 {ISO week-based calendar 1966-W02-1} { + clock format -125452800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1966-W02-1 +} {Mon Monday 66 1966 1 02 02 1 02} +test clock-3.280 {ISO week-based calendar 1966-W52-1} { + clock format -95212800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1966-W52-1 +} {Mon Monday 66 1966 1 52 52 1 52} +test clock-3.281 {ISO week-based calendar 1966-W52-6} { + clock format -94780800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1966-W52-6 +} {Sat Saturday 66 1966 6 52 52 6 52} +test clock-3.282 {ISO week-based calendar 1966-W52-7} { + clock format -94694400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1966-W52-7 +} {Sun Sunday 66 1966 7 01 52 0 00} +test clock-3.283 {ISO week-based calendar 1967-W01-1} { + clock format -94608000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1967-W01-1 +} {Mon Monday 67 1967 1 01 01 1 01} +test clock-3.284 {ISO week-based calendar 1967-W01-6} { + clock format -94176000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1967-W01-6 +} {Sat Saturday 67 1967 6 01 01 6 01} +test clock-3.285 {ISO week-based calendar 1967-W01-7} { + clock format -94089600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1967-W01-7 +} {Sun Sunday 67 1967 7 02 01 0 01} +test clock-3.286 {ISO week-based calendar 1967-W02-1} { + clock format -94003200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1967-W02-1 +} {Mon Monday 67 1967 1 02 02 1 02} +test clock-3.287 {ISO week-based calendar 1967-W52-1} { + clock format -63763200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1967-W52-1 +} {Mon Monday 67 1967 1 52 52 1 52} +test clock-3.288 {ISO week-based calendar 1967-W52-6} { + clock format -63331200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1967-W52-6 +} {Sat Saturday 67 1967 6 52 52 6 52} +test clock-3.289 {ISO week-based calendar 1967-W52-7} { + clock format -63244800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1967-W52-7 +} {Sun Sunday 67 1967 7 53 52 0 52} +test clock-3.290 {ISO week-based calendar 1968-W01-1} { + clock format -63158400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1968-W01-1 +} {Mon Monday 68 1968 1 00 01 1 01} +test clock-3.291 {ISO week-based calendar 1968-W01-6} { + clock format -62726400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1968-W01-6 +} {Sat Saturday 68 1968 6 00 01 6 01} +test clock-3.292 {ISO week-based calendar 1968-W01-7} { + clock format -62640000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1968-W01-7 +} {Sun Sunday 68 1968 7 01 01 0 01} +test clock-3.293 {ISO week-based calendar 1968-W02-1} { + clock format -62553600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1968-W02-1 +} {Mon Monday 68 1968 1 01 02 1 02} +test clock-3.294 {ISO week-based calendar 1968-W52-1} { + clock format -32313600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1968-W52-1 +} {Mon Monday 68 1968 1 51 52 1 52} +test clock-3.295 {ISO week-based calendar 1968-W52-6} { + clock format -31881600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1968-W52-6 +} {Sat Saturday 68 1968 6 51 52 6 52} +test clock-3.296 {ISO week-based calendar 1968-W52-7} { + clock format -31795200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1968-W52-7 +} {Sun Sunday 68 1968 7 52 52 0 52} +test clock-3.297 {ISO week-based calendar 1969-W01-1} { + clock format -31708800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1969-W01-1 +} {Mon Monday 69 1969 1 52 01 1 53} +test clock-3.298 {ISO week-based calendar 1969-W01-3} { + clock format -31536000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1969-W01-3 +} {Wed Wednesday 69 1969 3 00 01 3 00} +test clock-3.299 {ISO week-based calendar 1969-W01-6} { + clock format -31276800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1969-W01-6 +} {Sat Saturday 69 1969 6 00 01 6 00} +test clock-3.300 {ISO week-based calendar 1969-W01-7} { + clock format -31190400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1969-W01-7 +} {Sun Sunday 69 1969 7 01 01 0 00} +test clock-3.301 {ISO week-based calendar 1969-W02-1} { + clock format -31104000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1969-W02-1 +} {Mon Monday 69 1969 1 01 02 1 01} +test clock-3.302 {ISO week-based calendar 1969-W52-1} { + clock format -864000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1969-W52-1 +} {Mon Monday 69 1969 1 51 52 1 51} +test clock-3.303 {ISO week-based calendar 1969-W52-6} { + clock format -432000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1969-W52-6 +} {Sat Saturday 69 1969 6 51 52 6 51} +test clock-3.304 {ISO week-based calendar 1969-W52-7} { + clock format -345600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1969-W52-7 +} {Sun Sunday 69 1969 7 52 52 0 51} +test clock-3.305 {ISO week-based calendar 1970-W01-1} { + clock format -259200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1970-W01-1 +} {Mon Monday 70 1970 1 52 01 1 52} +test clock-3.306 {ISO week-based calendar 1970-W01-4} { + clock format 0 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1970-W01-4 +} {Thu Thursday 70 1970 4 00 01 4 00} +test clock-3.307 {ISO week-based calendar 1970-W01-6} { + clock format 172800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1970-W01-6 +} {Sat Saturday 70 1970 6 00 01 6 00} +test clock-3.308 {ISO week-based calendar 1970-W01-7} { + clock format 259200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1970-W01-7 +} {Sun Sunday 70 1970 7 01 01 0 00} +test clock-3.309 {ISO week-based calendar 1970-W02-1} { + clock format 345600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1970-W02-1 +} {Mon Monday 70 1970 1 01 02 1 01} +test clock-3.310 {ISO week-based calendar 1970-W53-1} { + clock format 31190400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1970-W53-1 +} {Mon Monday 70 1970 1 52 53 1 52} +test clock-3.311 {ISO week-based calendar 1970-W53-5} { + clock format 31536000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1970-W53-5 +} {Fri Friday 70 1970 5 00 53 5 00} +test clock-3.312 {ISO week-based calendar 1970-W53-6} { + clock format 31622400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1970-W53-6 +} {Sat Saturday 70 1970 6 00 53 6 00} +test clock-3.313 {ISO week-based calendar 1970-W53-7} { + clock format 31708800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1970-W53-7 +} {Sun Sunday 70 1970 7 01 53 0 00} +test clock-3.314 {ISO week-based calendar 1971-W01-1} { + clock format 31795200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1971-W01-1 +} {Mon Monday 71 1971 1 01 01 1 01} +test clock-3.315 {ISO week-based calendar 1971-W01-6} { + clock format 32227200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1971-W01-6 +} {Sat Saturday 71 1971 6 01 01 6 01} +test clock-3.316 {ISO week-based calendar 1971-W01-7} { + clock format 32313600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1971-W01-7 +} {Sun Sunday 71 1971 7 02 01 0 01} +test clock-3.317 {ISO week-based calendar 1971-W02-1} { + clock format 32400000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1971-W02-1 +} {Mon Monday 71 1971 1 02 02 1 02} +test clock-3.318 {ISO week-based calendar 1971-W52-1} { + clock format 62640000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1971-W52-1 +} {Mon Monday 71 1971 1 52 52 1 52} +test clock-3.319 {ISO week-based calendar 1971-W52-6} { + clock format 63072000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1971-W52-6 +} {Sat Saturday 71 1971 6 00 52 6 00} +test clock-3.320 {ISO week-based calendar 1971-W52-7} { + clock format 63158400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1971-W52-7 +} {Sun Sunday 71 1971 7 01 52 0 00} +test clock-3.321 {ISO week-based calendar 1972-W01-1} { + clock format 63244800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1972-W01-1 +} {Mon Monday 72 1972 1 01 01 1 01} +test clock-3.322 {ISO week-based calendar 1972-W01-6} { + clock format 63676800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1972-W01-6 +} {Sat Saturday 72 1972 6 01 01 6 01} +test clock-3.323 {ISO week-based calendar 1972-W01-7} { + clock format 63763200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1972-W01-7 +} {Sun Sunday 72 1972 7 02 01 0 01} +test clock-3.324 {ISO week-based calendar 1972-W02-1} { + clock format 63849600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1972-W02-1 +} {Mon Monday 72 1972 1 02 02 1 02} +test clock-3.325 {ISO week-based calendar 1972-W52-1} { + clock format 94089600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1972-W52-1 +} {Mon Monday 72 1972 1 52 52 1 52} +test clock-3.326 {ISO week-based calendar 1972-W52-6} { + clock format 94521600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1972-W52-6 +} {Sat Saturday 72 1972 6 52 52 6 52} +test clock-3.327 {ISO week-based calendar 1972-W52-7} { + clock format 94608000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1972-W52-7 +} {Sun Sunday 72 1972 7 53 52 0 52} +test clock-3.328 {ISO week-based calendar 1973-W01-1} { + clock format 94694400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1973-W01-1 +} {Mon Monday 73 1973 1 00 01 1 01} +test clock-3.329 {ISO week-based calendar 1973-W01-6} { + clock format 95126400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1973-W01-6 +} {Sat Saturday 73 1973 6 00 01 6 01} +test clock-3.330 {ISO week-based calendar 1973-W01-7} { + clock format 95212800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1973-W01-7 +} {Sun Sunday 73 1973 7 01 01 0 01} +test clock-3.331 {ISO week-based calendar 1973-W02-1} { + clock format 95299200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1973-W02-1 +} {Mon Monday 73 1973 1 01 02 1 02} +test clock-3.332 {ISO week-based calendar 1973-W52-1} { + clock format 125539200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1973-W52-1 +} {Mon Monday 73 1973 1 51 52 1 52} +test clock-3.333 {ISO week-based calendar 1973-W52-6} { + clock format 125971200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1973-W52-6 +} {Sat Saturday 73 1973 6 51 52 6 52} +test clock-3.334 {ISO week-based calendar 1973-W52-7} { + clock format 126057600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1973-W52-7 +} {Sun Sunday 73 1973 7 52 52 0 52} +test clock-3.335 {ISO week-based calendar 1974-W01-1} { + clock format 126144000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1974-W01-1 +} {Mon Monday 74 1974 1 52 01 1 53} +test clock-3.336 {ISO week-based calendar 1974-W01-2} { + clock format 126230400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1974-W01-2 +} {Tue Tuesday 74 1974 2 00 01 2 00} +test clock-3.337 {ISO week-based calendar 1974-W01-6} { + clock format 126576000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1974-W01-6 +} {Sat Saturday 74 1974 6 00 01 6 00} +test clock-3.338 {ISO week-based calendar 1974-W01-7} { + clock format 126662400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1974-W01-7 +} {Sun Sunday 74 1974 7 01 01 0 00} +test clock-3.339 {ISO week-based calendar 1974-W02-1} { + clock format 126748800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1974-W02-1 +} {Mon Monday 74 1974 1 01 02 1 01} +test clock-3.340 {ISO week-based calendar 1974-W52-1} { + clock format 156988800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1974-W52-1 +} {Mon Monday 74 1974 1 51 52 1 51} +test clock-3.341 {ISO week-based calendar 1974-W52-6} { + clock format 157420800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1974-W52-6 +} {Sat Saturday 74 1974 6 51 52 6 51} +test clock-3.342 {ISO week-based calendar 1974-W52-7} { + clock format 157507200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1974-W52-7 +} {Sun Sunday 74 1974 7 52 52 0 51} +test clock-3.343 {ISO week-based calendar 1975-W01-1} { + clock format 157593600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1975-W01-1 +} {Mon Monday 75 1975 1 52 01 1 52} +test clock-3.344 {ISO week-based calendar 1975-W01-3} { + clock format 157766400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1975-W01-3 +} {Wed Wednesday 75 1975 3 00 01 3 00} +test clock-3.345 {ISO week-based calendar 1975-W01-6} { + clock format 158025600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1975-W01-6 +} {Sat Saturday 75 1975 6 00 01 6 00} +test clock-3.346 {ISO week-based calendar 1975-W01-7} { + clock format 158112000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1975-W01-7 +} {Sun Sunday 75 1975 7 01 01 0 00} +test clock-3.347 {ISO week-based calendar 1975-W02-1} { + clock format 158198400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1975-W02-1 +} {Mon Monday 75 1975 1 01 02 1 01} +test clock-3.348 {ISO week-based calendar 1975-W52-1} { + clock format 188438400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1975-W52-1 +} {Mon Monday 75 1975 1 51 52 1 51} +test clock-3.349 {ISO week-based calendar 1975-W52-6} { + clock format 188870400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1975-W52-6 +} {Sat Saturday 75 1975 6 51 52 6 51} +test clock-3.350 {ISO week-based calendar 1975-W52-7} { + clock format 188956800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1975-W52-7 +} {Sun Sunday 75 1975 7 52 52 0 51} +test clock-3.351 {ISO week-based calendar 1976-W01-1} { + clock format 189043200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1976-W01-1 +} {Mon Monday 76 1976 1 52 01 1 52} +test clock-3.352 {ISO week-based calendar 1976-W01-4} { + clock format 189302400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1976-W01-4 +} {Thu Thursday 76 1976 4 00 01 4 00} +test clock-3.353 {ISO week-based calendar 1976-W01-6} { + clock format 189475200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1976-W01-6 +} {Sat Saturday 76 1976 6 00 01 6 00} +test clock-3.354 {ISO week-based calendar 1976-W01-7} { + clock format 189561600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1976-W01-7 +} {Sun Sunday 76 1976 7 01 01 0 00} +test clock-3.355 {ISO week-based calendar 1976-W02-1} { + clock format 189648000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1976-W02-1 +} {Mon Monday 76 1976 1 01 02 1 01} +test clock-3.356 {ISO week-based calendar 1976-W53-1} { + clock format 220492800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1976-W53-1 +} {Mon Monday 76 1976 1 52 53 1 52} +test clock-3.357 {ISO week-based calendar 1976-W53-6} { + clock format 220924800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1976-W53-6 +} {Sat Saturday 76 1976 6 00 53 6 00} +test clock-3.358 {ISO week-based calendar 1976-W53-7} { + clock format 221011200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1976-W53-7 +} {Sun Sunday 76 1976 7 01 53 0 00} +test clock-3.359 {ISO week-based calendar 1977-W01-1} { + clock format 221097600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1977-W01-1 +} {Mon Monday 77 1977 1 01 01 1 01} +test clock-3.360 {ISO week-based calendar 1977-W01-6} { + clock format 221529600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1977-W01-6 +} {Sat Saturday 77 1977 6 01 01 6 01} +test clock-3.361 {ISO week-based calendar 1977-W01-7} { + clock format 221616000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1977-W01-7 +} {Sun Sunday 77 1977 7 02 01 0 01} +test clock-3.362 {ISO week-based calendar 1977-W02-1} { + clock format 221702400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1977-W02-1 +} {Mon Monday 77 1977 1 02 02 1 02} +test clock-3.363 {ISO week-based calendar 1977-W52-1} { + clock format 251942400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1977-W52-1 +} {Mon Monday 77 1977 1 52 52 1 52} +test clock-3.364 {ISO week-based calendar 1977-W52-6} { + clock format 252374400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1977-W52-6 +} {Sat Saturday 77 1977 6 52 52 6 52} +test clock-3.365 {ISO week-based calendar 1977-W52-7} { + clock format 252460800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1977-W52-7 +} {Sun Sunday 77 1977 7 01 52 0 00} +test clock-3.366 {ISO week-based calendar 1978-W01-1} { + clock format 252547200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1978-W01-1 +} {Mon Monday 78 1978 1 01 01 1 01} +test clock-3.367 {ISO week-based calendar 1978-W01-6} { + clock format 252979200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1978-W01-6 +} {Sat Saturday 78 1978 6 01 01 6 01} +test clock-3.368 {ISO week-based calendar 1978-W01-7} { + clock format 253065600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1978-W01-7 +} {Sun Sunday 78 1978 7 02 01 0 01} +test clock-3.369 {ISO week-based calendar 1978-W02-1} { + clock format 253152000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1978-W02-1 +} {Mon Monday 78 1978 1 02 02 1 02} +test clock-3.370 {ISO week-based calendar 1978-W52-1} { + clock format 283392000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1978-W52-1 +} {Mon Monday 78 1978 1 52 52 1 52} +test clock-3.371 {ISO week-based calendar 1978-W52-6} { + clock format 283824000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1978-W52-6 +} {Sat Saturday 78 1978 6 52 52 6 52} +test clock-3.372 {ISO week-based calendar 1978-W52-7} { + clock format 283910400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1978-W52-7 +} {Sun Sunday 78 1978 7 53 52 0 52} +test clock-3.373 {ISO week-based calendar 1979-W01-1} { + clock format 283996800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1979-W01-1 +} {Mon Monday 79 1979 1 00 01 1 01} +test clock-3.374 {ISO week-based calendar 1979-W01-6} { + clock format 284428800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1979-W01-6 +} {Sat Saturday 79 1979 6 00 01 6 01} +test clock-3.375 {ISO week-based calendar 1979-W01-7} { + clock format 284515200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1979-W01-7 +} {Sun Sunday 79 1979 7 01 01 0 01} +test clock-3.376 {ISO week-based calendar 1979-W02-1} { + clock format 284601600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1979-W02-1 +} {Mon Monday 79 1979 1 01 02 1 02} +test clock-3.377 {ISO week-based calendar 1979-W52-1} { + clock format 314841600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1979-W52-1 +} {Mon Monday 79 1979 1 51 52 1 52} +test clock-3.378 {ISO week-based calendar 1979-W52-6} { + clock format 315273600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1979-W52-6 +} {Sat Saturday 79 1979 6 51 52 6 52} +test clock-3.379 {ISO week-based calendar 1979-W52-7} { + clock format 315360000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1979-W52-7 +} {Sun Sunday 79 1979 7 52 52 0 52} +test clock-3.380 {ISO week-based calendar 1980-W01-1} { + clock format 315446400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1980-W01-1 +} {Mon Monday 80 1980 1 52 01 1 53} +test clock-3.381 {ISO week-based calendar 1980-W01-2} { + clock format 315532800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1980-W01-2 +} {Tue Tuesday 80 1980 2 00 01 2 00} +test clock-3.382 {ISO week-based calendar 1980-W01-6} { + clock format 315878400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1980-W01-6 +} {Sat Saturday 80 1980 6 00 01 6 00} +test clock-3.383 {ISO week-based calendar 1980-W01-7} { + clock format 315964800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1980-W01-7 +} {Sun Sunday 80 1980 7 01 01 0 00} +test clock-3.384 {ISO week-based calendar 1980-W02-1} { + clock format 316051200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1980-W02-1 +} {Mon Monday 80 1980 1 01 02 1 01} +test clock-3.385 {ISO week-based calendar 1980-W52-1} { + clock format 346291200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1980-W52-1 +} {Mon Monday 80 1980 1 51 52 1 51} +test clock-3.386 {ISO week-based calendar 1980-W52-6} { + clock format 346723200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1980-W52-6 +} {Sat Saturday 80 1980 6 51 52 6 51} +test clock-3.387 {ISO week-based calendar 1980-W52-7} { + clock format 346809600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1980-W52-7 +} {Sun Sunday 80 1980 7 52 52 0 51} +test clock-3.388 {ISO week-based calendar 1981-W01-1} { + clock format 346896000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1981-W01-1 +} {Mon Monday 81 1981 1 52 01 1 52} +test clock-3.389 {ISO week-based calendar 1981-W01-4} { + clock format 347155200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1981-W01-4 +} {Thu Thursday 81 1981 4 00 01 4 00} +test clock-3.390 {ISO week-based calendar 1981-W01-6} { + clock format 347328000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1981-W01-6 +} {Sat Saturday 81 1981 6 00 01 6 00} +test clock-3.391 {ISO week-based calendar 1981-W01-7} { + clock format 347414400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1981-W01-7 +} {Sun Sunday 81 1981 7 01 01 0 00} +test clock-3.392 {ISO week-based calendar 1981-W02-1} { + clock format 347500800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1981-W02-1 +} {Mon Monday 81 1981 1 01 02 1 01} +test clock-3.393 {ISO week-based calendar 1983-W52-1} { + clock format 441244800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1983-W52-1 +} {Mon Monday 83 1983 1 52 52 1 52} +test clock-3.394 {ISO week-based calendar 1983-W52-6} { + clock format 441676800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1983-W52-6 +} {Sat Saturday 83 1983 6 52 52 6 52} +test clock-3.395 {ISO week-based calendar 1983-W52-7} { + clock format 441763200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1983-W52-7 +} {Sun Sunday 83 1983 7 01 52 0 00} +test clock-3.396 {ISO week-based calendar 1984-W01-1} { + clock format 441849600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1984-W01-1 +} {Mon Monday 84 1984 1 01 01 1 01} +test clock-3.397 {ISO week-based calendar 1984-W01-6} { + clock format 442281600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1984-W01-6 +} {Sat Saturday 84 1984 6 01 01 6 01} +test clock-3.398 {ISO week-based calendar 1984-W01-7} { + clock format 442368000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1984-W01-7 +} {Sun Sunday 84 1984 7 02 01 0 01} +test clock-3.399 {ISO week-based calendar 1984-W02-1} { + clock format 442454400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1984-W02-1 +} {Mon Monday 84 1984 1 02 02 1 02} +test clock-3.400 {ISO week-based calendar 1984-W52-1} { + clock format 472694400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1984-W52-1 +} {Mon Monday 84 1984 1 52 52 1 52} +test clock-3.401 {ISO week-based calendar 1984-W52-6} { + clock format 473126400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1984-W52-6 +} {Sat Saturday 84 1984 6 52 52 6 52} +test clock-3.402 {ISO week-based calendar 1984-W52-7} { + clock format 473212800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1984-W52-7 +} {Sun Sunday 84 1984 7 53 52 0 52} +test clock-3.403 {ISO week-based calendar 1985-W01-1} { + clock format 473299200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1985-W01-1 +} {Mon Monday 85 1985 1 53 01 1 53} +test clock-3.404 {ISO week-based calendar 1985-W01-2} { + clock format 473385600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1985-W01-2 +} {Tue Tuesday 85 1985 2 00 01 2 00} +test clock-3.405 {ISO week-based calendar 1985-W01-6} { + clock format 473731200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1985-W01-6 +} {Sat Saturday 85 1985 6 00 01 6 00} +test clock-3.406 {ISO week-based calendar 1985-W01-7} { + clock format 473817600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1985-W01-7 +} {Sun Sunday 85 1985 7 01 01 0 00} +test clock-3.407 {ISO week-based calendar 1985-W02-1} { + clock format 473904000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1985-W02-1 +} {Mon Monday 85 1985 1 01 02 1 01} +test clock-3.408 {ISO week-based calendar 1987-W53-1} { + clock format 567648000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1987-W53-1 +} {Mon Monday 87 1987 1 52 53 1 52} +test clock-3.409 {ISO week-based calendar 1987-W53-5} { + clock format 567993600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1987-W53-5 +} {Fri Friday 87 1987 5 00 53 5 00} +test clock-3.410 {ISO week-based calendar 1987-W53-6} { + clock format 568080000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1987-W53-6 +} {Sat Saturday 87 1987 6 00 53 6 00} +test clock-3.411 {ISO week-based calendar 1987-W53-7} { + clock format 568166400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1987-W53-7 +} {Sun Sunday 87 1987 7 01 53 0 00} +test clock-3.412 {ISO week-based calendar 1988-W01-1} { + clock format 568252800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1988-W01-1 +} {Mon Monday 88 1988 1 01 01 1 01} +test clock-3.413 {ISO week-based calendar 1988-W01-6} { + clock format 568684800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1988-W01-6 +} {Sat Saturday 88 1988 6 01 01 6 01} +test clock-3.414 {ISO week-based calendar 1988-W01-7} { + clock format 568771200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1988-W01-7 +} {Sun Sunday 88 1988 7 02 01 0 01} +test clock-3.415 {ISO week-based calendar 1988-W02-1} { + clock format 568857600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1988-W02-1 +} {Mon Monday 88 1988 1 02 02 1 02} +test clock-3.416 {ISO week-based calendar 1988-W52-1} { + clock format 599097600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1988-W52-1 +} {Mon Monday 88 1988 1 52 52 1 52} +test clock-3.417 {ISO week-based calendar 1988-W52-6} { + clock format 599529600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1988-W52-6 +} {Sat Saturday 88 1988 6 52 52 6 52} +test clock-3.418 {ISO week-based calendar 1988-W52-7} { + clock format 599616000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1988-W52-7 +} {Sun Sunday 88 1988 7 01 52 0 00} +test clock-3.419 {ISO week-based calendar 1989-W01-1} { + clock format 599702400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1989-W01-1 +} {Mon Monday 89 1989 1 01 01 1 01} +test clock-3.420 {ISO week-based calendar 1989-W01-6} { + clock format 600134400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1989-W01-6 +} {Sat Saturday 89 1989 6 01 01 6 01} +test clock-3.421 {ISO week-based calendar 1989-W01-7} { + clock format 600220800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1989-W01-7 +} {Sun Sunday 89 1989 7 02 01 0 01} +test clock-3.422 {ISO week-based calendar 1989-W02-1} { + clock format 600307200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1989-W02-1 +} {Mon Monday 89 1989 1 02 02 1 02} +test clock-3.423 {ISO week-based calendar 1991-W52-1} { + clock format 693446400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1991-W52-1 +} {Mon Monday 91 1991 1 51 52 1 51} +test clock-3.424 {ISO week-based calendar 1991-W52-6} { + clock format 693878400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1991-W52-6 +} {Sat Saturday 91 1991 6 51 52 6 51} +test clock-3.425 {ISO week-based calendar 1991-W52-7} { + clock format 693964800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1991-W52-7 +} {Sun Sunday 91 1991 7 52 52 0 51} +test clock-3.426 {ISO week-based calendar 1992-W01-1} { + clock format 694051200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1992-W01-1 +} {Mon Monday 92 1992 1 52 01 1 52} +test clock-3.427 {ISO week-based calendar 1992-W01-3} { + clock format 694224000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1992-W01-3 +} {Wed Wednesday 92 1992 3 00 01 3 00} +test clock-3.428 {ISO week-based calendar 1992-W01-6} { + clock format 694483200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1992-W01-6 +} {Sat Saturday 92 1992 6 00 01 6 00} +test clock-3.429 {ISO week-based calendar 1992-W01-7} { + clock format 694569600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1992-W01-7 +} {Sun Sunday 92 1992 7 01 01 0 00} +test clock-3.430 {ISO week-based calendar 1992-W02-1} { + clock format 694656000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1992-W02-1 +} {Mon Monday 92 1992 1 01 02 1 01} +test clock-3.431 {ISO week-based calendar 1992-W53-1} { + clock format 725500800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1992-W53-1 +} {Mon Monday 92 1992 1 52 53 1 52} +test clock-3.432 {ISO week-based calendar 1992-W53-5} { + clock format 725846400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1992-W53-5 +} {Fri Friday 92 1992 5 00 53 5 00} +test clock-3.433 {ISO week-based calendar 1992-W53-6} { + clock format 725932800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1992-W53-6 +} {Sat Saturday 92 1992 6 00 53 6 00} +test clock-3.434 {ISO week-based calendar 1992-W53-7} { + clock format 726019200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1992-W53-7 +} {Sun Sunday 92 1992 7 01 53 0 00} +test clock-3.435 {ISO week-based calendar 1993-W01-1} { + clock format 726105600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1993-W01-1 +} {Mon Monday 93 1993 1 01 01 1 01} +test clock-3.436 {ISO week-based calendar 1993-W01-6} { + clock format 726537600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1993-W01-6 +} {Sat Saturday 93 1993 6 01 01 6 01} +test clock-3.437 {ISO week-based calendar 1993-W01-7} { + clock format 726624000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1993-W01-7 +} {Sun Sunday 93 1993 7 02 01 0 01} +test clock-3.438 {ISO week-based calendar 1993-W02-1} { + clock format 726710400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1993-W02-1 +} {Mon Monday 93 1993 1 02 02 1 02} +test clock-3.439 {ISO week-based calendar 1995-W52-1} { + clock format 819849600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1995-W52-1 +} {Mon Monday 95 1995 1 52 52 1 52} +test clock-3.440 {ISO week-based calendar 1995-W52-6} { + clock format 820281600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1995-W52-6 +} {Sat Saturday 95 1995 6 52 52 6 52} +test clock-3.441 {ISO week-based calendar 1995-W52-7} { + clock format 820368000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1995-W52-7 +} {Sun Sunday 95 1995 7 53 52 0 52} +test clock-3.442 {ISO week-based calendar 1996-W01-1} { + clock format 820454400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1996-W01-1 +} {Mon Monday 96 1996 1 00 01 1 01} +test clock-3.443 {ISO week-based calendar 1996-W01-6} { + clock format 820886400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1996-W01-6 +} {Sat Saturday 96 1996 6 00 01 6 01} +test clock-3.444 {ISO week-based calendar 1996-W01-7} { + clock format 820972800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1996-W01-7 +} {Sun Sunday 96 1996 7 01 01 0 01} +test clock-3.445 {ISO week-based calendar 1996-W02-1} { + clock format 821059200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1996-W02-1 +} {Mon Monday 96 1996 1 01 02 1 02} +test clock-3.446 {ISO week-based calendar 1996-W52-1} { + clock format 851299200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1996-W52-1 +} {Mon Monday 96 1996 1 51 52 1 52} +test clock-3.447 {ISO week-based calendar 1996-W52-6} { + clock format 851731200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1996-W52-6 +} {Sat Saturday 96 1996 6 51 52 6 52} +test clock-3.448 {ISO week-based calendar 1996-W52-7} { + clock format 851817600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1996-W52-7 +} {Sun Sunday 96 1996 7 52 52 0 52} +test clock-3.449 {ISO week-based calendar 1997-W01-1} { + clock format 851904000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1997-W01-1 +} {Mon Monday 97 1997 1 52 01 1 53} +test clock-3.450 {ISO week-based calendar 1997-W01-3} { + clock format 852076800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1997-W01-3 +} {Wed Wednesday 97 1997 3 00 01 3 00} +test clock-3.451 {ISO week-based calendar 1997-W01-6} { + clock format 852336000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1997-W01-6 +} {Sat Saturday 97 1997 6 00 01 6 00} +test clock-3.452 {ISO week-based calendar 1997-W01-7} { + clock format 852422400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1997-W01-7 +} {Sun Sunday 97 1997 7 01 01 0 00} +test clock-3.453 {ISO week-based calendar 1997-W02-1} { + clock format 852508800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1997-W02-1 +} {Mon Monday 97 1997 1 01 02 1 01} +test clock-3.454 {ISO week-based calendar 1999-W52-1} { + clock format 946252800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1999-W52-1 +} {Mon Monday 99 1999 1 52 52 1 52} +test clock-3.455 {ISO week-based calendar 1999-W52-6} { + clock format 946684800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1999-W52-6 +} {Sat Saturday 99 1999 6 00 52 6 00} +test clock-3.456 {ISO week-based calendar 1999-W52-7} { + clock format 946771200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 1999-W52-7 +} {Sun Sunday 99 1999 7 01 52 0 00} +test clock-3.457 {ISO week-based calendar 2000-W01-1} { + clock format 946857600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2000-W01-1 +} {Mon Monday 00 2000 1 01 01 1 01} +test clock-3.458 {ISO week-based calendar 2000-W01-6} { + clock format 947289600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2000-W01-6 +} {Sat Saturday 00 2000 6 01 01 6 01} +test clock-3.459 {ISO week-based calendar 2000-W01-7} { + clock format 947376000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2000-W01-7 +} {Sun Sunday 00 2000 7 02 01 0 01} +test clock-3.460 {ISO week-based calendar 2000-W02-1} { + clock format 947462400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2000-W02-1 +} {Mon Monday 00 2000 1 02 02 1 02} +test clock-3.461 {ISO week-based calendar 2000-W52-1} { + clock format 977702400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2000-W52-1 +} {Mon Monday 00 2000 1 52 52 1 52} +test clock-3.462 {ISO week-based calendar 2000-W52-6} { + clock format 978134400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2000-W52-6 +} {Sat Saturday 00 2000 6 52 52 6 52} +test clock-3.463 {ISO week-based calendar 2000-W52-7} { + clock format 978220800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2000-W52-7 +} {Sun Sunday 00 2000 7 53 52 0 52} +test clock-3.464 {ISO week-based calendar 2001-W01-1} { + clock format 978307200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2001-W01-1 +} {Mon Monday 01 2001 1 00 01 1 01} +test clock-3.465 {ISO week-based calendar 2001-W01-6} { + clock format 978739200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2001-W01-6 +} {Sat Saturday 01 2001 6 00 01 6 01} +test clock-3.466 {ISO week-based calendar 2001-W01-7} { + clock format 978825600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2001-W01-7 +} {Sun Sunday 01 2001 7 01 01 0 01} +test clock-3.467 {ISO week-based calendar 2001-W02-1} { + clock format 978912000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2001-W02-1 +} {Mon Monday 01 2001 1 01 02 1 02} +test clock-3.468 {ISO week-based calendar 2001-W52-1} { + clock format 1009152000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2001-W52-1 +} {Mon Monday 01 2001 1 51 52 1 52} +test clock-3.469 {ISO week-based calendar 2001-W52-6} { + clock format 1009584000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2001-W52-6 +} {Sat Saturday 01 2001 6 51 52 6 52} +test clock-3.470 {ISO week-based calendar 2001-W52-7} { + clock format 1009670400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2001-W52-7 +} {Sun Sunday 01 2001 7 52 52 0 52} +test clock-3.471 {ISO week-based calendar 2002-W01-1} { + clock format 1009756800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2002-W01-1 +} {Mon Monday 02 2002 1 52 01 1 53} +test clock-3.472 {ISO week-based calendar 2002-W01-2} { + clock format 1009843200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2002-W01-2 +} {Tue Tuesday 02 2002 2 00 01 2 00} +test clock-3.473 {ISO week-based calendar 2002-W01-6} { + clock format 1010188800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2002-W01-6 +} {Sat Saturday 02 2002 6 00 01 6 00} +test clock-3.474 {ISO week-based calendar 2002-W01-7} { + clock format 1010275200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2002-W01-7 +} {Sun Sunday 02 2002 7 01 01 0 00} +test clock-3.475 {ISO week-based calendar 2002-W02-1} { + clock format 1010361600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2002-W02-1 +} {Mon Monday 02 2002 1 01 02 1 01} +test clock-3.476 {ISO week-based calendar 2002-W52-1} { + clock format 1040601600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2002-W52-1 +} {Mon Monday 02 2002 1 51 52 1 51} +test clock-3.477 {ISO week-based calendar 2002-W52-6} { + clock format 1041033600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2002-W52-6 +} {Sat Saturday 02 2002 6 51 52 6 51} +test clock-3.478 {ISO week-based calendar 2002-W52-7} { + clock format 1041120000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2002-W52-7 +} {Sun Sunday 02 2002 7 52 52 0 51} +test clock-3.479 {ISO week-based calendar 2003-W01-1} { + clock format 1041206400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2003-W01-1 +} {Mon Monday 03 2003 1 52 01 1 52} +test clock-3.480 {ISO week-based calendar 2003-W01-3} { + clock format 1041379200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2003-W01-3 +} {Wed Wednesday 03 2003 3 00 01 3 00} +test clock-3.481 {ISO week-based calendar 2003-W01-6} { + clock format 1041638400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2003-W01-6 +} {Sat Saturday 03 2003 6 00 01 6 00} +test clock-3.482 {ISO week-based calendar 2003-W01-7} { + clock format 1041724800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2003-W01-7 +} {Sun Sunday 03 2003 7 01 01 0 00} +test clock-3.483 {ISO week-based calendar 2003-W02-1} { + clock format 1041811200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2003-W02-1 +} {Mon Monday 03 2003 1 01 02 1 01} +test clock-3.484 {ISO week-based calendar 2003-W52-1} { + clock format 1072051200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2003-W52-1 +} {Mon Monday 03 2003 1 51 52 1 51} +test clock-3.485 {ISO week-based calendar 2003-W52-6} { + clock format 1072483200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2003-W52-6 +} {Sat Saturday 03 2003 6 51 52 6 51} +test clock-3.486 {ISO week-based calendar 2003-W52-7} { + clock format 1072569600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2003-W52-7 +} {Sun Sunday 03 2003 7 52 52 0 51} +test clock-3.487 {ISO week-based calendar 2004-W01-1} { + clock format 1072656000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2004-W01-1 +} {Mon Monday 04 2004 1 52 01 1 52} +test clock-3.488 {ISO week-based calendar 2004-W01-4} { + clock format 1072915200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2004-W01-4 +} {Thu Thursday 04 2004 4 00 01 4 00} +test clock-3.489 {ISO week-based calendar 2004-W01-6} { + clock format 1073088000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2004-W01-6 +} {Sat Saturday 04 2004 6 00 01 6 00} +test clock-3.490 {ISO week-based calendar 2004-W01-7} { + clock format 1073174400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2004-W01-7 +} {Sun Sunday 04 2004 7 01 01 0 00} +test clock-3.491 {ISO week-based calendar 2004-W02-1} { + clock format 1073260800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2004-W02-1 +} {Mon Monday 04 2004 1 01 02 1 01} +test clock-3.492 {ISO week-based calendar 2004-W53-1} { + clock format 1104105600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2004-W53-1 +} {Mon Monday 04 2004 1 52 53 1 52} +test clock-3.493 {ISO week-based calendar 2004-W53-6} { + clock format 1104537600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2004-W53-6 +} {Sat Saturday 04 2004 6 00 53 6 00} +test clock-3.494 {ISO week-based calendar 2004-W53-7} { + clock format 1104624000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2004-W53-7 +} {Sun Sunday 04 2004 7 01 53 0 00} +test clock-3.495 {ISO week-based calendar 2005-W01-1} { + clock format 1104710400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2005-W01-1 +} {Mon Monday 05 2005 1 01 01 1 01} +test clock-3.496 {ISO week-based calendar 2005-W01-6} { + clock format 1105142400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2005-W01-6 +} {Sat Saturday 05 2005 6 01 01 6 01} +test clock-3.497 {ISO week-based calendar 2005-W01-7} { + clock format 1105228800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2005-W01-7 +} {Sun Sunday 05 2005 7 02 01 0 01} +test clock-3.498 {ISO week-based calendar 2005-W02-1} { + clock format 1105315200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2005-W02-1 +} {Mon Monday 05 2005 1 02 02 1 02} +test clock-3.499 {ISO week-based calendar 2005-W52-1} { + clock format 1135555200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2005-W52-1 +} {Mon Monday 05 2005 1 52 52 1 52} +test clock-3.500 {ISO week-based calendar 2005-W52-6} { + clock format 1135987200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2005-W52-6 +} {Sat Saturday 05 2005 6 52 52 6 52} +test clock-3.501 {ISO week-based calendar 2005-W52-7} { + clock format 1136073600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2005-W52-7 +} {Sun Sunday 05 2005 7 01 52 0 00} +test clock-3.502 {ISO week-based calendar 2006-W01-1} { + clock format 1136160000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2006-W01-1 +} {Mon Monday 06 2006 1 01 01 1 01} +test clock-3.503 {ISO week-based calendar 2006-W01-6} { + clock format 1136592000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2006-W01-6 +} {Sat Saturday 06 2006 6 01 01 6 01} +test clock-3.504 {ISO week-based calendar 2006-W01-7} { + clock format 1136678400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2006-W01-7 +} {Sun Sunday 06 2006 7 02 01 0 01} +test clock-3.505 {ISO week-based calendar 2006-W02-1} { + clock format 1136764800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2006-W02-1 +} {Mon Monday 06 2006 1 02 02 1 02} +test clock-3.506 {ISO week-based calendar 2006-W52-1} { + clock format 1167004800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2006-W52-1 +} {Mon Monday 06 2006 1 52 52 1 52} +test clock-3.507 {ISO week-based calendar 2006-W52-6} { + clock format 1167436800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2006-W52-6 +} {Sat Saturday 06 2006 6 52 52 6 52} +test clock-3.508 {ISO week-based calendar 2006-W52-7} { + clock format 1167523200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2006-W52-7 +} {Sun Sunday 06 2006 7 53 52 0 52} +test clock-3.509 {ISO week-based calendar 2007-W01-1} { + clock format 1167609600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2007-W01-1 +} {Mon Monday 07 2007 1 00 01 1 01} +test clock-3.510 {ISO week-based calendar 2007-W01-6} { + clock format 1168041600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2007-W01-6 +} {Sat Saturday 07 2007 6 00 01 6 01} +test clock-3.511 {ISO week-based calendar 2007-W01-7} { + clock format 1168128000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2007-W01-7 +} {Sun Sunday 07 2007 7 01 01 0 01} +test clock-3.512 {ISO week-based calendar 2007-W02-1} { + clock format 1168214400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2007-W02-1 +} {Mon Monday 07 2007 1 01 02 1 02} +test clock-3.513 {ISO week-based calendar 2007-W52-1} { + clock format 1198454400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2007-W52-1 +} {Mon Monday 07 2007 1 51 52 1 52} +test clock-3.514 {ISO week-based calendar 2007-W52-6} { + clock format 1198886400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2007-W52-6 +} {Sat Saturday 07 2007 6 51 52 6 52} +test clock-3.515 {ISO week-based calendar 2007-W52-7} { + clock format 1198972800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2007-W52-7 +} {Sun Sunday 07 2007 7 52 52 0 52} +test clock-3.516 {ISO week-based calendar 2008-W01-1} { + clock format 1199059200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2008-W01-1 +} {Mon Monday 08 2008 1 52 01 1 53} +test clock-3.517 {ISO week-based calendar 2008-W01-2} { + clock format 1199145600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2008-W01-2 +} {Tue Tuesday 08 2008 2 00 01 2 00} +test clock-3.518 {ISO week-based calendar 2008-W01-6} { + clock format 1199491200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2008-W01-6 +} {Sat Saturday 08 2008 6 00 01 6 00} +test clock-3.519 {ISO week-based calendar 2008-W01-7} { + clock format 1199577600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2008-W01-7 +} {Sun Sunday 08 2008 7 01 01 0 00} +test clock-3.520 {ISO week-based calendar 2008-W02-1} { + clock format 1199664000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2008-W02-1 +} {Mon Monday 08 2008 1 01 02 1 01} +test clock-3.521 {ISO week-based calendar 2008-W52-1} { + clock format 1229904000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2008-W52-1 +} {Mon Monday 08 2008 1 51 52 1 51} +test clock-3.522 {ISO week-based calendar 2008-W52-6} { + clock format 1230336000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2008-W52-6 +} {Sat Saturday 08 2008 6 51 52 6 51} +test clock-3.523 {ISO week-based calendar 2008-W52-7} { + clock format 1230422400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2008-W52-7 +} {Sun Sunday 08 2008 7 52 52 0 51} +test clock-3.524 {ISO week-based calendar 2009-W01-1} { + clock format 1230508800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2009-W01-1 +} {Mon Monday 09 2009 1 52 01 1 52} +test clock-3.525 {ISO week-based calendar 2009-W01-4} { + clock format 1230768000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2009-W01-4 +} {Thu Thursday 09 2009 4 00 01 4 00} +test clock-3.526 {ISO week-based calendar 2009-W01-6} { + clock format 1230940800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2009-W01-6 +} {Sat Saturday 09 2009 6 00 01 6 00} +test clock-3.527 {ISO week-based calendar 2009-W01-7} { + clock format 1231027200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2009-W01-7 +} {Sun Sunday 09 2009 7 01 01 0 00} +test clock-3.528 {ISO week-based calendar 2009-W02-1} { + clock format 1231113600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2009-W02-1 +} {Mon Monday 09 2009 1 01 02 1 01} +test clock-3.529 {ISO week-based calendar 2009-W53-1} { + clock format 1261958400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2009-W53-1 +} {Mon Monday 09 2009 1 52 53 1 52} +test clock-3.530 {ISO week-based calendar 2009-W53-5} { + clock format 1262304000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2009-W53-5 +} {Fri Friday 09 2009 5 00 53 5 00} +test clock-3.531 {ISO week-based calendar 2009-W53-6} { + clock format 1262390400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2009-W53-6 +} {Sat Saturday 09 2009 6 00 53 6 00} +test clock-3.532 {ISO week-based calendar 2009-W53-7} { + clock format 1262476800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2009-W53-7 +} {Sun Sunday 09 2009 7 01 53 0 00} +test clock-3.533 {ISO week-based calendar 2010-W01-1} { + clock format 1262563200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2010-W01-1 +} {Mon Monday 10 2010 1 01 01 1 01} +test clock-3.534 {ISO week-based calendar 2010-W01-6} { + clock format 1262995200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2010-W01-6 +} {Sat Saturday 10 2010 6 01 01 6 01} +test clock-3.535 {ISO week-based calendar 2010-W01-7} { + clock format 1263081600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2010-W01-7 +} {Sun Sunday 10 2010 7 02 01 0 01} +test clock-3.536 {ISO week-based calendar 2010-W02-1} { + clock format 1263168000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2010-W02-1 +} {Mon Monday 10 2010 1 02 02 1 02} +test clock-3.537 {ISO week-based calendar 2010-W52-1} { + clock format 1293408000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2010-W52-1 +} {Mon Monday 10 2010 1 52 52 1 52} +test clock-3.538 {ISO week-based calendar 2010-W52-6} { + clock format 1293840000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2010-W52-6 +} {Sat Saturday 10 2010 6 00 52 6 00} +test clock-3.539 {ISO week-based calendar 2010-W52-7} { + clock format 1293926400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2010-W52-7 +} {Sun Sunday 10 2010 7 01 52 0 00} +test clock-3.540 {ISO week-based calendar 2011-W01-1} { + clock format 1294012800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2011-W01-1 +} {Mon Monday 11 2011 1 01 01 1 01} +test clock-3.541 {ISO week-based calendar 2011-W01-6} { + clock format 1294444800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2011-W01-6 +} {Sat Saturday 11 2011 6 01 01 6 01} +test clock-3.542 {ISO week-based calendar 2011-W01-7} { + clock format 1294531200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2011-W01-7 +} {Sun Sunday 11 2011 7 02 01 0 01} +test clock-3.543 {ISO week-based calendar 2011-W02-1} { + clock format 1294617600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2011-W02-1 +} {Mon Monday 11 2011 1 02 02 1 02} +test clock-3.544 {ISO week-based calendar 2011-W52-1} { + clock format 1324857600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2011-W52-1 +} {Mon Monday 11 2011 1 52 52 1 52} +test clock-3.545 {ISO week-based calendar 2011-W52-6} { + clock format 1325289600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2011-W52-6 +} {Sat Saturday 11 2011 6 52 52 6 52} +test clock-3.546 {ISO week-based calendar 2011-W52-7} { + clock format 1325376000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2011-W52-7 +} {Sun Sunday 11 2011 7 01 52 0 00} +test clock-3.547 {ISO week-based calendar 2012-W01-1} { + clock format 1325462400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2012-W01-1 +} {Mon Monday 12 2012 1 01 01 1 01} +test clock-3.548 {ISO week-based calendar 2012-W01-6} { + clock format 1325894400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2012-W01-6 +} {Sat Saturday 12 2012 6 01 01 6 01} +test clock-3.549 {ISO week-based calendar 2012-W01-7} { + clock format 1325980800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2012-W01-7 +} {Sun Sunday 12 2012 7 02 01 0 01} +test clock-3.550 {ISO week-based calendar 2012-W02-1} { + clock format 1326067200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2012-W02-1 +} {Mon Monday 12 2012 1 02 02 1 02} +test clock-3.551 {ISO week-based calendar 2012-W52-1} { + clock format 1356307200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2012-W52-1 +} {Mon Monday 12 2012 1 52 52 1 52} +test clock-3.552 {ISO week-based calendar 2012-W52-6} { + clock format 1356739200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2012-W52-6 +} {Sat Saturday 12 2012 6 52 52 6 52} +test clock-3.553 {ISO week-based calendar 2012-W52-7} { + clock format 1356825600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2012-W52-7 +} {Sun Sunday 12 2012 7 53 52 0 52} +test clock-3.554 {ISO week-based calendar 2013-W01-1} { + clock format 1356912000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2013-W01-1 +} {Mon Monday 13 2013 1 53 01 1 53} +test clock-3.555 {ISO week-based calendar 2013-W01-2} { + clock format 1356998400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2013-W01-2 +} {Tue Tuesday 13 2013 2 00 01 2 00} +test clock-3.556 {ISO week-based calendar 2013-W01-6} { + clock format 1357344000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2013-W01-6 +} {Sat Saturday 13 2013 6 00 01 6 00} +test clock-3.557 {ISO week-based calendar 2013-W01-7} { + clock format 1357430400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2013-W01-7 +} {Sun Sunday 13 2013 7 01 01 0 00} +test clock-3.558 {ISO week-based calendar 2013-W02-1} { + clock format 1357516800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2013-W02-1 +} {Mon Monday 13 2013 1 01 02 1 01} +test clock-3.559 {ISO week-based calendar 2015-W53-1} { + clock format 1451260800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2015-W53-1 +} {Mon Monday 15 2015 1 52 53 1 52} +test clock-3.560 {ISO week-based calendar 2015-W53-5} { + clock format 1451606400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2015-W53-5 +} {Fri Friday 15 2015 5 00 53 5 00} +test clock-3.561 {ISO week-based calendar 2015-W53-6} { + clock format 1451692800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2015-W53-6 +} {Sat Saturday 15 2015 6 00 53 6 00} +test clock-3.562 {ISO week-based calendar 2015-W53-7} { + clock format 1451779200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2015-W53-7 +} {Sun Sunday 15 2015 7 01 53 0 00} +test clock-3.563 {ISO week-based calendar 2016-W01-1} { + clock format 1451865600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2016-W01-1 +} {Mon Monday 16 2016 1 01 01 1 01} +test clock-3.564 {ISO week-based calendar 2016-W01-6} { + clock format 1452297600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2016-W01-6 +} {Sat Saturday 16 2016 6 01 01 6 01} +test clock-3.565 {ISO week-based calendar 2016-W01-7} { + clock format 1452384000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2016-W01-7 +} {Sun Sunday 16 2016 7 02 01 0 01} +test clock-3.566 {ISO week-based calendar 2016-W02-1} { + clock format 1452470400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2016-W02-1 +} {Mon Monday 16 2016 1 02 02 1 02} +test clock-3.567 {ISO week-based calendar 2016-W52-1} { + clock format 1482710400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2016-W52-1 +} {Mon Monday 16 2016 1 52 52 1 52} +test clock-3.568 {ISO week-based calendar 2016-W52-6} { + clock format 1483142400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2016-W52-6 +} {Sat Saturday 16 2016 6 52 52 6 52} +test clock-3.569 {ISO week-based calendar 2016-W52-7} { + clock format 1483228800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2016-W52-7 +} {Sun Sunday 16 2016 7 01 52 0 00} +test clock-3.570 {ISO week-based calendar 2017-W01-1} { + clock format 1483315200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2017-W01-1 +} {Mon Monday 17 2017 1 01 01 1 01} +test clock-3.571 {ISO week-based calendar 2017-W01-6} { + clock format 1483747200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2017-W01-6 +} {Sat Saturday 17 2017 6 01 01 6 01} +test clock-3.572 {ISO week-based calendar 2017-W01-7} { + clock format 1483833600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2017-W01-7 +} {Sun Sunday 17 2017 7 02 01 0 01} +test clock-3.573 {ISO week-based calendar 2017-W02-1} { + clock format 1483920000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2017-W02-1 +} {Mon Monday 17 2017 1 02 02 1 02} +test clock-3.574 {ISO week-based calendar 2019-W52-1} { + clock format 1577059200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2019-W52-1 +} {Mon Monday 19 2019 1 51 52 1 51} +test clock-3.575 {ISO week-based calendar 2019-W52-6} { + clock format 1577491200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2019-W52-6 +} {Sat Saturday 19 2019 6 51 52 6 51} +test clock-3.576 {ISO week-based calendar 2019-W52-7} { + clock format 1577577600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2019-W52-7 +} {Sun Sunday 19 2019 7 52 52 0 51} +test clock-3.577 {ISO week-based calendar 2020-W01-1} { + clock format 1577664000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2020-W01-1 +} {Mon Monday 20 2020 1 52 01 1 52} +test clock-3.578 {ISO week-based calendar 2020-W01-3} { + clock format 1577836800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2020-W01-3 +} {Wed Wednesday 20 2020 3 00 01 3 00} +test clock-3.579 {ISO week-based calendar 2020-W01-6} { + clock format 1578096000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2020-W01-6 +} {Sat Saturday 20 2020 6 00 01 6 00} +test clock-3.580 {ISO week-based calendar 2020-W01-7} { + clock format 1578182400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2020-W01-7 +} {Sun Sunday 20 2020 7 01 01 0 00} +test clock-3.581 {ISO week-based calendar 2020-W02-1} { + clock format 1578268800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2020-W02-1 +} {Mon Monday 20 2020 1 01 02 1 01} +test clock-3.582 {ISO week-based calendar 2020-W53-1} { + clock format 1609113600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2020-W53-1 +} {Mon Monday 20 2020 1 52 53 1 52} +test clock-3.583 {ISO week-based calendar 2020-W53-5} { + clock format 1609459200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2020-W53-5 +} {Fri Friday 20 2020 5 00 53 5 00} +test clock-3.584 {ISO week-based calendar 2020-W53-6} { + clock format 1609545600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2020-W53-6 +} {Sat Saturday 20 2020 6 00 53 6 00} +test clock-3.585 {ISO week-based calendar 2020-W53-7} { + clock format 1609632000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2020-W53-7 +} {Sun Sunday 20 2020 7 01 53 0 00} +test clock-3.586 {ISO week-based calendar 2021-W01-1} { + clock format 1609718400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2021-W01-1 +} {Mon Monday 21 2021 1 01 01 1 01} +test clock-3.587 {ISO week-based calendar 2021-W01-6} { + clock format 1610150400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2021-W01-6 +} {Sat Saturday 21 2021 6 01 01 6 01} +test clock-3.588 {ISO week-based calendar 2021-W01-7} { + clock format 1610236800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2021-W01-7 +} {Sun Sunday 21 2021 7 02 01 0 01} +test clock-3.589 {ISO week-based calendar 2021-W02-1} { + clock format 1610323200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2021-W02-1 +} {Mon Monday 21 2021 1 02 02 1 02} +test clock-3.590 {ISO week-based calendar 2023-W52-1} { + clock format 1703462400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2023-W52-1 +} {Mon Monday 23 2023 1 52 52 1 52} +test clock-3.591 {ISO week-based calendar 2023-W52-6} { + clock format 1703894400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2023-W52-6 +} {Sat Saturday 23 2023 6 52 52 6 52} +test clock-3.592 {ISO week-based calendar 2023-W52-7} { + clock format 1703980800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2023-W52-7 +} {Sun Sunday 23 2023 7 53 52 0 52} +test clock-3.593 {ISO week-based calendar 2024-W01-1} { + clock format 1704067200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2024-W01-1 +} {Mon Monday 24 2024 1 00 01 1 01} +test clock-3.594 {ISO week-based calendar 2024-W01-6} { + clock format 1704499200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2024-W01-6 +} {Sat Saturday 24 2024 6 00 01 6 01} +test clock-3.595 {ISO week-based calendar 2024-W01-7} { + clock format 1704585600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2024-W01-7 +} {Sun Sunday 24 2024 7 01 01 0 01} +test clock-3.596 {ISO week-based calendar 2024-W02-1} { + clock format 1704672000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2024-W02-1 +} {Mon Monday 24 2024 1 01 02 1 02} +test clock-3.597 {ISO week-based calendar 2024-W52-1} { + clock format 1734912000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2024-W52-1 +} {Mon Monday 24 2024 1 51 52 1 52} +test clock-3.598 {ISO week-based calendar 2024-W52-6} { + clock format 1735344000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2024-W52-6 +} {Sat Saturday 24 2024 6 51 52 6 52} +test clock-3.599 {ISO week-based calendar 2024-W52-7} { + clock format 1735430400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2024-W52-7 +} {Sun Sunday 24 2024 7 52 52 0 52} +test clock-3.600 {ISO week-based calendar 2025-W01-1} { + clock format 1735516800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2025-W01-1 +} {Mon Monday 25 2025 1 52 01 1 53} +test clock-3.601 {ISO week-based calendar 2025-W01-3} { + clock format 1735689600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2025-W01-3 +} {Wed Wednesday 25 2025 3 00 01 3 00} +test clock-3.602 {ISO week-based calendar 2025-W01-6} { + clock format 1735948800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2025-W01-6 +} {Sat Saturday 25 2025 6 00 01 6 00} +test clock-3.603 {ISO week-based calendar 2025-W01-7} { + clock format 1736035200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2025-W01-7 +} {Sun Sunday 25 2025 7 01 01 0 00} +test clock-3.604 {ISO week-based calendar 2025-W02-1} { + clock format 1736121600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2025-W02-1 +} {Mon Monday 25 2025 1 01 02 1 01} +test clock-3.605 {ISO week-based calendar 2036-W52-1} { + clock format 2113516800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2036-W52-1 +} {Mon Monday 36 2036 1 51 52 1 51} +test clock-3.606 {ISO week-based calendar 2036-W52-6} { + clock format 2113948800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2036-W52-6 +} {Sat Saturday 36 2036 6 51 52 6 51} +test clock-3.607 {ISO week-based calendar 2036-W52-7} { + clock format 2114035200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2036-W52-7 +} {Sun Sunday 36 2036 7 52 52 0 51} +test clock-3.608 {ISO week-based calendar 2037-W01-1} { + clock format 2114121600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2037-W01-1 +} {Mon Monday 37 2037 1 52 01 1 52} +test clock-3.609 {ISO week-based calendar 2037-W01-4} { + clock format 2114380800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2037-W01-4 +} {Thu Thursday 37 2037 4 00 01 4 00} +test clock-3.610 {ISO week-based calendar 2037-W01-6} { + clock format 2114553600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2037-W01-6 +} {Sat Saturday 37 2037 6 00 01 6 00} +test clock-3.611 {ISO week-based calendar 2037-W01-7} { + clock format 2114640000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2037-W01-7 +} {Sun Sunday 37 2037 7 01 01 0 00} +test clock-3.612 {ISO week-based calendar 2037-W02-1} { + clock format 2114726400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2037-W02-1 +} {Mon Monday 37 2037 1 01 02 1 01} +test clock-3.613 {ISO week-based calendar 2037-W53-1} { + clock format 2145571200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2037-W53-1 +} {Mon Monday 37 2037 1 52 53 1 52} +test clock-3.614 {ISO week-based calendar 2037-W53-5} { + clock format 2145916800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2037-W53-5 +} {Fri Friday 37 2037 5 00 53 5 00} +test clock-3.615 {ISO week-based calendar 2037-W53-6} { + clock format 2146003200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2037-W53-6 +} {Sat Saturday 37 2037 6 00 53 6 00} +test clock-3.616 {ISO week-based calendar 2037-W53-7} { + clock format 2146089600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2037-W53-7 +} {Sun Sunday 37 2037 7 01 53 0 00} +test clock-3.617 {ISO week-based calendar 2038-W01-1} { + clock format 2146176000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2038-W01-1 +} {Mon Monday 38 2038 1 01 01 1 01} +test clock-3.618 {ISO week-based calendar 2038-W01-6} { + clock format 2146608000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2038-W01-6 +} {Sat Saturday 38 2038 6 01 01 6 01} +test clock-3.619 {ISO week-based calendar 2038-W01-7} { + clock format 2146694400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2038-W01-7 +} {Sun Sunday 38 2038 7 02 01 0 01} +test clock-3.620 {ISO week-based calendar 2038-W02-1} { + clock format 2146780800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2038-W02-1 +} {Mon Monday 38 2038 1 02 02 1 02} +test clock-3.621 {ISO week-based calendar 2038-W52-1} { + clock format 2177020800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2038-W52-1 +} {Mon Monday 38 2038 1 52 52 1 52} +test clock-3.622 {ISO week-based calendar 2038-W52-6} { + clock format 2177452800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2038-W52-6 +} {Sat Saturday 38 2038 6 00 52 6 00} +test clock-3.623 {ISO week-based calendar 2038-W52-7} { + clock format 2177539200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2038-W52-7 +} {Sun Sunday 38 2038 7 01 52 0 00} +test clock-3.624 {ISO week-based calendar 2039-W01-1} { + clock format 2177625600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2039-W01-1 +} {Mon Monday 39 2039 1 01 01 1 01} +test clock-3.625 {ISO week-based calendar 2039-W01-6} { + clock format 2178057600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2039-W01-6 +} {Sat Saturday 39 2039 6 01 01 6 01} +test clock-3.626 {ISO week-based calendar 2039-W01-7} { + clock format 2178144000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2039-W01-7 +} {Sun Sunday 39 2039 7 02 01 0 01} +test clock-3.627 {ISO week-based calendar 2039-W02-1} { + clock format 2178230400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2039-W02-1 +} {Mon Monday 39 2039 1 02 02 1 02} +test clock-3.628 {ISO week-based calendar 2039-W52-1} { + clock format 2208470400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2039-W52-1 +} {Mon Monday 39 2039 1 52 52 1 52} +test clock-3.629 {ISO week-based calendar 2039-W52-6} { + clock format 2208902400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2039-W52-6 +} {Sat Saturday 39 2039 6 52 52 6 52} +test clock-3.630 {ISO week-based calendar 2039-W52-7} { + clock format 2208988800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2039-W52-7 +} {Sun Sunday 39 2039 7 01 52 0 00} +test clock-3.631 {ISO week-based calendar 2040-W01-1} { + clock format 2209075200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2040-W01-1 +} {Mon Monday 40 2040 1 01 01 1 01} +test clock-3.632 {ISO week-based calendar 2040-W01-6} { + clock format 2209507200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2040-W01-6 +} {Sat Saturday 40 2040 6 01 01 6 01} +test clock-3.633 {ISO week-based calendar 2040-W01-7} { + clock format 2209593600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2040-W01-7 +} {Sun Sunday 40 2040 7 02 01 0 01} +test clock-3.634 {ISO week-based calendar 2040-W02-1} { + clock format 2209680000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2040-W02-1 +} {Mon Monday 40 2040 1 02 02 1 02} +test clock-3.635 {ISO week-based calendar 2040-W52-1} { + clock format 2239920000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2040-W52-1 +} {Mon Monday 40 2040 1 52 52 1 52} +test clock-3.636 {ISO week-based calendar 2040-W52-6} { + clock format 2240352000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2040-W52-6 +} {Sat Saturday 40 2040 6 52 52 6 52} +test clock-3.637 {ISO week-based calendar 2040-W52-7} { + clock format 2240438400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2040-W52-7 +} {Sun Sunday 40 2040 7 53 52 0 52} +test clock-3.638 {ISO week-based calendar 2041-W01-1} { + clock format 2240524800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2041-W01-1 +} {Mon Monday 41 2041 1 53 01 1 53} +test clock-3.639 {ISO week-based calendar 2041-W01-2} { + clock format 2240611200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2041-W01-2 +} {Tue Tuesday 41 2041 2 00 01 2 00} +test clock-3.640 {ISO week-based calendar 2041-W01-6} { + clock format 2240956800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2041-W01-6 +} {Sat Saturday 41 2041 6 00 01 6 00} +test clock-3.641 {ISO week-based calendar 2041-W01-7} { + clock format 2241043200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2041-W01-7 +} {Sun Sunday 41 2041 7 01 01 0 00} +test clock-3.642 {ISO week-based calendar 2041-W02-1} { + clock format 2241129600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2041-W02-1 +} {Mon Monday 41 2041 1 01 02 1 01} +test clock-3.643 {ISO week-based calendar 2041-W52-1} { + clock format 2271369600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2041-W52-1 +} {Mon Monday 41 2041 1 51 52 1 51} +test clock-3.644 {ISO week-based calendar 2041-W52-6} { + clock format 2271801600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2041-W52-6 +} {Sat Saturday 41 2041 6 51 52 6 51} +test clock-3.645 {ISO week-based calendar 2041-W52-7} { + clock format 2271888000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2041-W52-7 +} {Sun Sunday 41 2041 7 52 52 0 51} +test clock-3.646 {ISO week-based calendar 2042-W01-1} { + clock format 2271974400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2042-W01-1 +} {Mon Monday 42 2042 1 52 01 1 52} +test clock-3.647 {ISO week-based calendar 2042-W01-3} { + clock format 2272147200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2042-W01-3 +} {Wed Wednesday 42 2042 3 00 01 3 00} +test clock-3.648 {ISO week-based calendar 2042-W01-6} { + clock format 2272406400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2042-W01-6 +} {Sat Saturday 42 2042 6 00 01 6 00} +test clock-3.649 {ISO week-based calendar 2042-W01-7} { + clock format 2272492800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2042-W01-7 +} {Sun Sunday 42 2042 7 01 01 0 00} +test clock-3.650 {ISO week-based calendar 2042-W02-1} { + clock format 2272579200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2042-W02-1 +} {Mon Monday 42 2042 1 01 02 1 01} +test clock-3.651 {ISO week-based calendar 2042-W52-1} { + clock format 2302819200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2042-W52-1 +} {Mon Monday 42 2042 1 51 52 1 51} +test clock-3.652 {ISO week-based calendar 2042-W52-6} { + clock format 2303251200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2042-W52-6 +} {Sat Saturday 42 2042 6 51 52 6 51} +test clock-3.653 {ISO week-based calendar 2042-W52-7} { + clock format 2303337600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2042-W52-7 +} {Sun Sunday 42 2042 7 52 52 0 51} +test clock-3.654 {ISO week-based calendar 2043-W01-1} { + clock format 2303424000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2043-W01-1 +} {Mon Monday 43 2043 1 52 01 1 52} +test clock-3.655 {ISO week-based calendar 2043-W01-4} { + clock format 2303683200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2043-W01-4 +} {Thu Thursday 43 2043 4 00 01 4 00} +test clock-3.656 {ISO week-based calendar 2043-W01-6} { + clock format 2303856000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2043-W01-6 +} {Sat Saturday 43 2043 6 00 01 6 00} +test clock-3.657 {ISO week-based calendar 2043-W01-7} { + clock format 2303942400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2043-W01-7 +} {Sun Sunday 43 2043 7 01 01 0 00} +test clock-3.658 {ISO week-based calendar 2043-W02-1} { + clock format 2304028800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2043-W02-1 +} {Mon Monday 43 2043 1 01 02 1 01} +test clock-3.659 {ISO week-based calendar 2043-W53-1} { + clock format 2334873600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2043-W53-1 +} {Mon Monday 43 2043 1 52 53 1 52} +test clock-3.660 {ISO week-based calendar 2043-W53-5} { + clock format 2335219200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2043-W53-5 +} {Fri Friday 43 2043 5 00 53 5 00} +test clock-3.661 {ISO week-based calendar 2043-W53-6} { + clock format 2335305600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2043-W53-6 +} {Sat Saturday 43 2043 6 00 53 6 00} +test clock-3.662 {ISO week-based calendar 2043-W53-7} { + clock format 2335392000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2043-W53-7 +} {Sun Sunday 43 2043 7 01 53 0 00} +test clock-3.663 {ISO week-based calendar 2044-W01-1} { + clock format 2335478400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2044-W01-1 +} {Mon Monday 44 2044 1 01 01 1 01} +test clock-3.664 {ISO week-based calendar 2044-W01-6} { + clock format 2335910400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2044-W01-6 +} {Sat Saturday 44 2044 6 01 01 6 01} +test clock-3.665 {ISO week-based calendar 2044-W01-7} { + clock format 2335996800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2044-W01-7 +} {Sun Sunday 44 2044 7 02 01 0 01} +test clock-3.666 {ISO week-based calendar 2044-W02-1} { + clock format 2336083200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2044-W02-1 +} {Mon Monday 44 2044 1 02 02 1 02} +test clock-3.667 {ISO week-based calendar 2044-W52-1} { + clock format 2366323200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2044-W52-1 +} {Mon Monday 44 2044 1 52 52 1 52} +test clock-3.668 {ISO week-based calendar 2044-W52-6} { + clock format 2366755200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2044-W52-6 +} {Sat Saturday 44 2044 6 52 52 6 52} +test clock-3.669 {ISO week-based calendar 2044-W52-7} { + clock format 2366841600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2044-W52-7 +} {Sun Sunday 44 2044 7 01 52 0 00} +test clock-3.670 {ISO week-based calendar 2045-W01-1} { + clock format 2366928000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2045-W01-1 +} {Mon Monday 45 2045 1 01 01 1 01} +test clock-3.671 {ISO week-based calendar 2045-W01-6} { + clock format 2367360000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2045-W01-6 +} {Sat Saturday 45 2045 6 01 01 6 01} +test clock-3.672 {ISO week-based calendar 2045-W01-7} { + clock format 2367446400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2045-W01-7 +} {Sun Sunday 45 2045 7 02 01 0 01} +test clock-3.673 {ISO week-based calendar 2045-W02-1} { + clock format 2367532800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2045-W02-1 +} {Mon Monday 45 2045 1 02 02 1 02} +test clock-3.674 {ISO week-based calendar 2045-W52-1} { + clock format 2397772800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2045-W52-1 +} {Mon Monday 45 2045 1 52 52 1 52} +test clock-3.675 {ISO week-based calendar 2045-W52-6} { + clock format 2398204800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2045-W52-6 +} {Sat Saturday 45 2045 6 52 52 6 52} +test clock-3.676 {ISO week-based calendar 2045-W52-7} { + clock format 2398291200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2045-W52-7 +} {Sun Sunday 45 2045 7 53 52 0 52} +test clock-3.677 {ISO week-based calendar 2046-W01-1} { + clock format 2398377600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2046-W01-1 +} {Mon Monday 46 2046 1 00 01 1 01} +test clock-3.678 {ISO week-based calendar 2046-W01-6} { + clock format 2398809600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2046-W01-6 +} {Sat Saturday 46 2046 6 00 01 6 01} +test clock-3.679 {ISO week-based calendar 2046-W01-7} { + clock format 2398896000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2046-W01-7 +} {Sun Sunday 46 2046 7 01 01 0 01} +test clock-3.680 {ISO week-based calendar 2046-W02-1} { + clock format 2398982400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2046-W02-1 +} {Mon Monday 46 2046 1 01 02 1 02} +test clock-3.681 {ISO week-based calendar 2046-W52-1} { + clock format 2429222400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2046-W52-1 +} {Mon Monday 46 2046 1 51 52 1 52} +test clock-3.682 {ISO week-based calendar 2046-W52-6} { + clock format 2429654400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2046-W52-6 +} {Sat Saturday 46 2046 6 51 52 6 52} +test clock-3.683 {ISO week-based calendar 2046-W52-7} { + clock format 2429740800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2046-W52-7 +} {Sun Sunday 46 2046 7 52 52 0 52} +test clock-3.684 {ISO week-based calendar 2047-W01-1} { + clock format 2429827200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2047-W01-1 +} {Mon Monday 47 2047 1 52 01 1 53} +test clock-3.685 {ISO week-based calendar 2047-W01-2} { + clock format 2429913600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2047-W01-2 +} {Tue Tuesday 47 2047 2 00 01 2 00} +test clock-3.686 {ISO week-based calendar 2047-W01-6} { + clock format 2430259200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2047-W01-6 +} {Sat Saturday 47 2047 6 00 01 6 00} +test clock-3.687 {ISO week-based calendar 2047-W01-7} { + clock format 2430345600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2047-W01-7 +} {Sun Sunday 47 2047 7 01 01 0 00} +test clock-3.688 {ISO week-based calendar 2047-W02-1} { + clock format 2430432000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2047-W02-1 +} {Mon Monday 47 2047 1 01 02 1 01} +test clock-3.689 {ISO week-based calendar 2047-W52-1} { + clock format 2460672000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2047-W52-1 +} {Mon Monday 47 2047 1 51 52 1 51} +test clock-3.690 {ISO week-based calendar 2047-W52-6} { + clock format 2461104000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2047-W52-6 +} {Sat Saturday 47 2047 6 51 52 6 51} +test clock-3.691 {ISO week-based calendar 2047-W52-7} { + clock format 2461190400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2047-W52-7 +} {Sun Sunday 47 2047 7 52 52 0 51} +test clock-3.692 {ISO week-based calendar 2048-W01-1} { + clock format 2461276800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2048-W01-1 +} {Mon Monday 48 2048 1 52 01 1 52} +test clock-3.693 {ISO week-based calendar 2048-W01-3} { + clock format 2461449600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2048-W01-3 +} {Wed Wednesday 48 2048 3 00 01 3 00} +test clock-3.694 {ISO week-based calendar 2048-W01-6} { + clock format 2461708800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2048-W01-6 +} {Sat Saturday 48 2048 6 00 01 6 00} +test clock-3.695 {ISO week-based calendar 2048-W01-7} { + clock format 2461795200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2048-W01-7 +} {Sun Sunday 48 2048 7 01 01 0 00} +test clock-3.696 {ISO week-based calendar 2048-W02-1} { + clock format 2461881600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2048-W02-1 +} {Mon Monday 48 2048 1 01 02 1 01} +test clock-3.697 {ISO week-based calendar 2048-W53-1} { + clock format 2492726400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2048-W53-1 +} {Mon Monday 48 2048 1 52 53 1 52} +test clock-3.698 {ISO week-based calendar 2048-W53-5} { + clock format 2493072000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2048-W53-5 +} {Fri Friday 48 2048 5 00 53 5 00} +test clock-3.699 {ISO week-based calendar 2048-W53-6} { + clock format 2493158400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2048-W53-6 +} {Sat Saturday 48 2048 6 00 53 6 00} +test clock-3.700 {ISO week-based calendar 2048-W53-7} { + clock format 2493244800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2048-W53-7 +} {Sun Sunday 48 2048 7 01 53 0 00} +test clock-3.701 {ISO week-based calendar 2049-W01-1} { + clock format 2493331200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2049-W01-1 +} {Mon Monday 49 2049 1 01 01 1 01} +test clock-3.702 {ISO week-based calendar 2049-W01-6} { + clock format 2493763200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2049-W01-6 +} {Sat Saturday 49 2049 6 01 01 6 01} +test clock-3.703 {ISO week-based calendar 2049-W01-7} { + clock format 2493849600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2049-W01-7 +} {Sun Sunday 49 2049 7 02 01 0 01} +test clock-3.704 {ISO week-based calendar 2049-W02-1} { + clock format 2493936000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2049-W02-1 +} {Mon Monday 49 2049 1 02 02 1 02} +test clock-3.705 {ISO week-based calendar 2051-W52-1} { + clock format 2587075200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2051-W52-1 +} {Mon Monday 51 2051 1 52 52 1 52} +test clock-3.706 {ISO week-based calendar 2051-W52-6} { + clock format 2587507200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2051-W52-6 +} {Sat Saturday 51 2051 6 52 52 6 52} +test clock-3.707 {ISO week-based calendar 2051-W52-7} { + clock format 2587593600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2051-W52-7 +} {Sun Sunday 51 2051 7 53 52 0 52} +test clock-3.708 {ISO week-based calendar 2052-W01-1} { + clock format 2587680000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2052-W01-1 +} {Mon Monday 52 2052 1 00 01 1 01} +test clock-3.709 {ISO week-based calendar 2052-W01-6} { + clock format 2588112000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2052-W01-6 +} {Sat Saturday 52 2052 6 00 01 6 01} +test clock-3.710 {ISO week-based calendar 2052-W01-7} { + clock format 2588198400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2052-W01-7 +} {Sun Sunday 52 2052 7 01 01 0 01} +test clock-3.711 {ISO week-based calendar 2052-W02-1} { + clock format 2588284800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2052-W02-1 +} {Mon Monday 52 2052 1 01 02 1 02} +test clock-3.712 {ISO week-based calendar 2052-W52-1} { + clock format 2618524800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2052-W52-1 +} {Mon Monday 52 2052 1 51 52 1 52} +test clock-3.713 {ISO week-based calendar 2052-W52-6} { + clock format 2618956800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2052-W52-6 +} {Sat Saturday 52 2052 6 51 52 6 52} +test clock-3.714 {ISO week-based calendar 2052-W52-7} { + clock format 2619043200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2052-W52-7 +} {Sun Sunday 52 2052 7 52 52 0 52} +test clock-3.715 {ISO week-based calendar 2053-W01-1} { + clock format 2619129600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2053-W01-1 +} {Mon Monday 53 2053 1 52 01 1 53} +test clock-3.716 {ISO week-based calendar 2053-W01-3} { + clock format 2619302400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2053-W01-3 +} {Wed Wednesday 53 2053 3 00 01 3 00} +test clock-3.717 {ISO week-based calendar 2053-W01-6} { + clock format 2619561600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2053-W01-6 +} {Sat Saturday 53 2053 6 00 01 6 00} +test clock-3.718 {ISO week-based calendar 2053-W01-7} { + clock format 2619648000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2053-W01-7 +} {Sun Sunday 53 2053 7 01 01 0 00} +test clock-3.719 {ISO week-based calendar 2053-W02-1} { + clock format 2619734400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2053-W02-1 +} {Mon Monday 53 2053 1 01 02 1 01} +test clock-3.720 {ISO week-based calendar 2055-W52-1} { + clock format 2713478400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2055-W52-1 +} {Mon Monday 55 2055 1 52 52 1 52} +test clock-3.721 {ISO week-based calendar 2055-W52-6} { + clock format 2713910400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2055-W52-6 +} {Sat Saturday 55 2055 6 00 52 6 00} +test clock-3.722 {ISO week-based calendar 2055-W52-7} { + clock format 2713996800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2055-W52-7 +} {Sun Sunday 55 2055 7 01 52 0 00} +test clock-3.723 {ISO week-based calendar 2056-W01-1} { + clock format 2714083200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2056-W01-1 +} {Mon Monday 56 2056 1 01 01 1 01} +test clock-3.724 {ISO week-based calendar 2056-W01-6} { + clock format 2714515200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2056-W01-6 +} {Sat Saturday 56 2056 6 01 01 6 01} +test clock-3.725 {ISO week-based calendar 2056-W01-7} { + clock format 2714601600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2056-W01-7 +} {Sun Sunday 56 2056 7 02 01 0 01} +test clock-3.726 {ISO week-based calendar 2056-W02-1} { + clock format 2714688000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2056-W02-1 +} {Mon Monday 56 2056 1 02 02 1 02} +test clock-3.727 {ISO week-based calendar 2056-W52-1} { + clock format 2744928000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2056-W52-1 +} {Mon Monday 56 2056 1 52 52 1 52} +test clock-3.728 {ISO week-based calendar 2056-W52-6} { + clock format 2745360000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2056-W52-6 +} {Sat Saturday 56 2056 6 52 52 6 52} +test clock-3.729 {ISO week-based calendar 2056-W52-7} { + clock format 2745446400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2056-W52-7 +} {Sun Sunday 56 2056 7 53 52 0 52} +test clock-3.730 {ISO week-based calendar 2057-W01-1} { + clock format 2745532800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2057-W01-1 +} {Mon Monday 57 2057 1 00 01 1 01} +test clock-3.731 {ISO week-based calendar 2057-W01-6} { + clock format 2745964800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2057-W01-6 +} {Sat Saturday 57 2057 6 00 01 6 01} +test clock-3.732 {ISO week-based calendar 2057-W01-7} { + clock format 2746051200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2057-W01-7 +} {Sun Sunday 57 2057 7 01 01 0 01} +test clock-3.733 {ISO week-based calendar 2057-W02-1} { + clock format 2746137600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2057-W02-1 +} {Mon Monday 57 2057 1 01 02 1 02} +test clock-3.734 {ISO week-based calendar 2059-W52-1} { + clock format 2839276800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2059-W52-1 +} {Mon Monday 59 2059 1 51 52 1 51} +test clock-3.735 {ISO week-based calendar 2059-W52-6} { + clock format 2839708800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2059-W52-6 +} {Sat Saturday 59 2059 6 51 52 6 51} +test clock-3.736 {ISO week-based calendar 2059-W52-7} { + clock format 2839795200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2059-W52-7 +} {Sun Sunday 59 2059 7 52 52 0 51} +test clock-3.737 {ISO week-based calendar 2060-W01-1} { + clock format 2839881600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2060-W01-1 +} {Mon Monday 60 2060 1 52 01 1 52} +test clock-3.738 {ISO week-based calendar 2060-W01-4} { + clock format 2840140800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2060-W01-4 +} {Thu Thursday 60 2060 4 00 01 4 00} +test clock-3.739 {ISO week-based calendar 2060-W01-6} { + clock format 2840313600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2060-W01-6 +} {Sat Saturday 60 2060 6 00 01 6 00} +test clock-3.740 {ISO week-based calendar 2060-W01-7} { + clock format 2840400000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2060-W01-7 +} {Sun Sunday 60 2060 7 01 01 0 00} +test clock-3.741 {ISO week-based calendar 2060-W02-1} { + clock format 2840486400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2060-W02-1 +} {Mon Monday 60 2060 1 01 02 1 01} +test clock-3.742 {ISO week-based calendar 2060-W53-1} { + clock format 2871331200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2060-W53-1 +} {Mon Monday 60 2060 1 52 53 1 52} +test clock-3.743 {ISO week-based calendar 2060-W53-6} { + clock format 2871763200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2060-W53-6 +} {Sat Saturday 60 2060 6 00 53 6 00} +test clock-3.744 {ISO week-based calendar 2060-W53-7} { + clock format 2871849600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2060-W53-7 +} {Sun Sunday 60 2060 7 01 53 0 00} +test clock-3.745 {ISO week-based calendar 2061-W01-1} { + clock format 2871936000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2061-W01-1 +} {Mon Monday 61 2061 1 01 01 1 01} +test clock-3.746 {ISO week-based calendar 2061-W01-6} { + clock format 2872368000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2061-W01-6 +} {Sat Saturday 61 2061 6 01 01 6 01} +test clock-3.747 {ISO week-based calendar 2061-W01-7} { + clock format 2872454400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2061-W01-7 +} {Sun Sunday 61 2061 7 02 01 0 01} +test clock-3.748 {ISO week-based calendar 2061-W02-1} { + clock format 2872540800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2061-W02-1 +} {Mon Monday 61 2061 1 02 02 1 02} +test clock-3.749 {ISO week-based calendar 2063-W52-1} { + clock format 2965680000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2063-W52-1 +} {Mon Monday 63 2063 1 51 52 1 52} +test clock-3.750 {ISO week-based calendar 2063-W52-6} { + clock format 2966112000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2063-W52-6 +} {Sat Saturday 63 2063 6 51 52 6 52} +test clock-3.751 {ISO week-based calendar 2063-W52-7} { + clock format 2966198400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2063-W52-7 +} {Sun Sunday 63 2063 7 52 52 0 52} +test clock-3.752 {ISO week-based calendar 2064-W01-1} { + clock format 2966284800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2064-W01-1 +} {Mon Monday 64 2064 1 52 01 1 53} +test clock-3.753 {ISO week-based calendar 2064-W01-2} { + clock format 2966371200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2064-W01-2 +} {Tue Tuesday 64 2064 2 00 01 2 00} +test clock-3.754 {ISO week-based calendar 2064-W01-6} { + clock format 2966716800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2064-W01-6 +} {Sat Saturday 64 2064 6 00 01 6 00} +test clock-3.755 {ISO week-based calendar 2064-W01-7} { + clock format 2966803200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2064-W01-7 +} {Sun Sunday 64 2064 7 01 01 0 00} +test clock-3.756 {ISO week-based calendar 2064-W02-1} { + clock format 2966889600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2064-W02-1 +} {Mon Monday 64 2064 1 01 02 1 01} +test clock-3.757 {ISO week-based calendar 2064-W52-1} { + clock format 2997129600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2064-W52-1 +} {Mon Monday 64 2064 1 51 52 1 51} +test clock-3.758 {ISO week-based calendar 2064-W52-6} { + clock format 2997561600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2064-W52-6 +} {Sat Saturday 64 2064 6 51 52 6 51} +test clock-3.759 {ISO week-based calendar 2064-W52-7} { + clock format 2997648000 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2064-W52-7 +} {Sun Sunday 64 2064 7 52 52 0 51} +test clock-3.760 {ISO week-based calendar 2065-W01-1} { + clock format 2997734400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2065-W01-1 +} {Mon Monday 65 2065 1 52 01 1 52} +test clock-3.761 {ISO week-based calendar 2065-W01-4} { + clock format 2997993600 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2065-W01-4 +} {Thu Thursday 65 2065 4 00 01 4 00} +test clock-3.762 {ISO week-based calendar 2065-W01-6} { + clock format 2998166400 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2065-W01-6 +} {Sat Saturday 65 2065 6 00 01 6 00} +test clock-3.763 {ISO week-based calendar 2065-W01-7} { + clock format 2998252800 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2065-W01-7 +} {Sun Sunday 65 2065 7 01 01 0 00} +test clock-3.764 {ISO week-based calendar 2065-W02-1} { + clock format 2998339200 -format {%a %A %g %G %u %U %V %w %W} -gmt true; # 2065-W02-1 +} {Mon Monday 65 2065 1 01 02 1 01} +# END testcases3 + +# BEGIN testcases4 + +# Test formatting of time of day +# Format groups tested: %H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+ + +test clock-4.1 { format time of day 00:00:00 } { + clock format 0 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 00 ? AM am 12:00:00 am 00:00 00 ? 00:00:00 00:00:00 ? h ? m ? s Thu Jan 1 00:00:00 GMT 1970} +test clock-4.2 { format time of day 00:00:01 } { + clock format 1 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 00 ? AM am 12:00:01 am 00:00 01 i 00:00:01 00:00:01 ? h ? m i s Thu Jan 1 00:00:01 GMT 1970} +test clock-4.3 { format time of day 00:00:58 } { + clock format 58 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 00 ? AM am 12:00:58 am 00:00 58 lviii 00:00:58 00:00:58 ? h ? m lviii s Thu Jan 1 00:00:58 GMT 1970} +test clock-4.4 { format time of day 00:00:59 } { + clock format 59 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 00 ? AM am 12:00:59 am 00:00 59 lix 00:00:59 00:00:59 ? h ? m lix s Thu Jan 1 00:00:59 GMT 1970} +test clock-4.5 { format time of day 00:01:00 } { + clock format 60 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 01 i AM am 12:01:00 am 00:01 00 ? 00:01:00 00:01:00 ? h i m ? s Thu Jan 1 00:01:00 GMT 1970} +test clock-4.6 { format time of day 00:01:01 } { + clock format 61 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 01 i AM am 12:01:01 am 00:01 01 i 00:01:01 00:01:01 ? h i m i s Thu Jan 1 00:01:01 GMT 1970} +test clock-4.7 { format time of day 00:01:58 } { + clock format 118 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 01 i AM am 12:01:58 am 00:01 58 lviii 00:01:58 00:01:58 ? h i m lviii s Thu Jan 1 00:01:58 GMT 1970} +test clock-4.8 { format time of day 00:01:59 } { + clock format 119 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 01 i AM am 12:01:59 am 00:01 59 lix 00:01:59 00:01:59 ? h i m lix s Thu Jan 1 00:01:59 GMT 1970} +test clock-4.9 { format time of day 00:58:00 } { + clock format 3480 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 58 lviii AM am 12:58:00 am 00:58 00 ? 00:58:00 00:58:00 ? h lviii m ? s Thu Jan 1 00:58:00 GMT 1970} +test clock-4.10 { format time of day 00:58:01 } { + clock format 3481 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 58 lviii AM am 12:58:01 am 00:58 01 i 00:58:01 00:58:01 ? h lviii m i s Thu Jan 1 00:58:01 GMT 1970} +test clock-4.11 { format time of day 00:58:58 } { + clock format 3538 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 58 lviii AM am 12:58:58 am 00:58 58 lviii 00:58:58 00:58:58 ? h lviii m lviii s Thu Jan 1 00:58:58 GMT 1970} +test clock-4.12 { format time of day 00:58:59 } { + clock format 3539 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 58 lviii AM am 12:58:59 am 00:58 59 lix 00:58:59 00:58:59 ? h lviii m lix s Thu Jan 1 00:58:59 GMT 1970} +test clock-4.13 { format time of day 00:59:00 } { + clock format 3540 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 59 lix AM am 12:59:00 am 00:59 00 ? 00:59:00 00:59:00 ? h lix m ? s Thu Jan 1 00:59:00 GMT 1970} +test clock-4.14 { format time of day 00:59:01 } { + clock format 3541 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 59 lix AM am 12:59:01 am 00:59 01 i 00:59:01 00:59:01 ? h lix m i s Thu Jan 1 00:59:01 GMT 1970} +test clock-4.15 { format time of day 00:59:58 } { + clock format 3598 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 59 lix AM am 12:59:58 am 00:59 58 lviii 00:59:58 00:59:58 ? h lix m lviii s Thu Jan 1 00:59:58 GMT 1970} +test clock-4.16 { format time of day 00:59:59 } { + clock format 3599 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {00 ? 12 xii 0 ? 12 xii 59 lix AM am 12:59:59 am 00:59 59 lix 00:59:59 00:59:59 ? h lix m lix s Thu Jan 1 00:59:59 GMT 1970} +test clock-4.17 { format time of day 01:00:00 } { + clock format 3600 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 00 ? AM am 01:00:00 am 01:00 00 ? 01:00:00 01:00:00 i h ? m ? s Thu Jan 1 01:00:00 GMT 1970} +test clock-4.18 { format time of day 01:00:01 } { + clock format 3601 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 00 ? AM am 01:00:01 am 01:00 01 i 01:00:01 01:00:01 i h ? m i s Thu Jan 1 01:00:01 GMT 1970} +test clock-4.19 { format time of day 01:00:58 } { + clock format 3658 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 00 ? AM am 01:00:58 am 01:00 58 lviii 01:00:58 01:00:58 i h ? m lviii s Thu Jan 1 01:00:58 GMT 1970} +test clock-4.20 { format time of day 01:00:59 } { + clock format 3659 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 00 ? AM am 01:00:59 am 01:00 59 lix 01:00:59 01:00:59 i h ? m lix s Thu Jan 1 01:00:59 GMT 1970} +test clock-4.21 { format time of day 01:01:00 } { + clock format 3660 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 01 i AM am 01:01:00 am 01:01 00 ? 01:01:00 01:01:00 i h i m ? s Thu Jan 1 01:01:00 GMT 1970} +test clock-4.22 { format time of day 01:01:01 } { + clock format 3661 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 01 i AM am 01:01:01 am 01:01 01 i 01:01:01 01:01:01 i h i m i s Thu Jan 1 01:01:01 GMT 1970} +test clock-4.23 { format time of day 01:01:58 } { + clock format 3718 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 01 i AM am 01:01:58 am 01:01 58 lviii 01:01:58 01:01:58 i h i m lviii s Thu Jan 1 01:01:58 GMT 1970} +test clock-4.24 { format time of day 01:01:59 } { + clock format 3719 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 01 i AM am 01:01:59 am 01:01 59 lix 01:01:59 01:01:59 i h i m lix s Thu Jan 1 01:01:59 GMT 1970} +test clock-4.25 { format time of day 01:58:00 } { + clock format 7080 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 58 lviii AM am 01:58:00 am 01:58 00 ? 01:58:00 01:58:00 i h lviii m ? s Thu Jan 1 01:58:00 GMT 1970} +test clock-4.26 { format time of day 01:58:01 } { + clock format 7081 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 58 lviii AM am 01:58:01 am 01:58 01 i 01:58:01 01:58:01 i h lviii m i s Thu Jan 1 01:58:01 GMT 1970} +test clock-4.27 { format time of day 01:58:58 } { + clock format 7138 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 58 lviii AM am 01:58:58 am 01:58 58 lviii 01:58:58 01:58:58 i h lviii m lviii s Thu Jan 1 01:58:58 GMT 1970} +test clock-4.28 { format time of day 01:58:59 } { + clock format 7139 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 58 lviii AM am 01:58:59 am 01:58 59 lix 01:58:59 01:58:59 i h lviii m lix s Thu Jan 1 01:58:59 GMT 1970} +test clock-4.29 { format time of day 01:59:00 } { + clock format 7140 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 59 lix AM am 01:59:00 am 01:59 00 ? 01:59:00 01:59:00 i h lix m ? s Thu Jan 1 01:59:00 GMT 1970} +test clock-4.30 { format time of day 01:59:01 } { + clock format 7141 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 59 lix AM am 01:59:01 am 01:59 01 i 01:59:01 01:59:01 i h lix m i s Thu Jan 1 01:59:01 GMT 1970} +test clock-4.31 { format time of day 01:59:58 } { + clock format 7198 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 59 lix AM am 01:59:58 am 01:59 58 lviii 01:59:58 01:59:58 i h lix m lviii s Thu Jan 1 01:59:58 GMT 1970} +test clock-4.32 { format time of day 01:59:59 } { + clock format 7199 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {01 i 01 i 1 i 1 i 59 lix AM am 01:59:59 am 01:59 59 lix 01:59:59 01:59:59 i h lix m lix s Thu Jan 1 01:59:59 GMT 1970} +test clock-4.33 { format time of day 11:00:00 } { + clock format 39600 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 00 ? AM am 11:00:00 am 11:00 00 ? 11:00:00 11:00:00 xi h ? m ? s Thu Jan 1 11:00:00 GMT 1970} +test clock-4.34 { format time of day 11:00:01 } { + clock format 39601 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 00 ? AM am 11:00:01 am 11:00 01 i 11:00:01 11:00:01 xi h ? m i s Thu Jan 1 11:00:01 GMT 1970} +test clock-4.35 { format time of day 11:00:58 } { + clock format 39658 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 00 ? AM am 11:00:58 am 11:00 58 lviii 11:00:58 11:00:58 xi h ? m lviii s Thu Jan 1 11:00:58 GMT 1970} +test clock-4.36 { format time of day 11:00:59 } { + clock format 39659 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 00 ? AM am 11:00:59 am 11:00 59 lix 11:00:59 11:00:59 xi h ? m lix s Thu Jan 1 11:00:59 GMT 1970} +test clock-4.37 { format time of day 11:01:00 } { + clock format 39660 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 01 i AM am 11:01:00 am 11:01 00 ? 11:01:00 11:01:00 xi h i m ? s Thu Jan 1 11:01:00 GMT 1970} +test clock-4.38 { format time of day 11:01:01 } { + clock format 39661 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 01 i AM am 11:01:01 am 11:01 01 i 11:01:01 11:01:01 xi h i m i s Thu Jan 1 11:01:01 GMT 1970} +test clock-4.39 { format time of day 11:01:58 } { + clock format 39718 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 01 i AM am 11:01:58 am 11:01 58 lviii 11:01:58 11:01:58 xi h i m lviii s Thu Jan 1 11:01:58 GMT 1970} +test clock-4.40 { format time of day 11:01:59 } { + clock format 39719 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 01 i AM am 11:01:59 am 11:01 59 lix 11:01:59 11:01:59 xi h i m lix s Thu Jan 1 11:01:59 GMT 1970} +test clock-4.41 { format time of day 11:58:00 } { + clock format 43080 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 58 lviii AM am 11:58:00 am 11:58 00 ? 11:58:00 11:58:00 xi h lviii m ? s Thu Jan 1 11:58:00 GMT 1970} +test clock-4.42 { format time of day 11:58:01 } { + clock format 43081 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 58 lviii AM am 11:58:01 am 11:58 01 i 11:58:01 11:58:01 xi h lviii m i s Thu Jan 1 11:58:01 GMT 1970} +test clock-4.43 { format time of day 11:58:58 } { + clock format 43138 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 58 lviii AM am 11:58:58 am 11:58 58 lviii 11:58:58 11:58:58 xi h lviii m lviii s Thu Jan 1 11:58:58 GMT 1970} +test clock-4.44 { format time of day 11:58:59 } { + clock format 43139 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 58 lviii AM am 11:58:59 am 11:58 59 lix 11:58:59 11:58:59 xi h lviii m lix s Thu Jan 1 11:58:59 GMT 1970} +test clock-4.45 { format time of day 11:59:00 } { + clock format 43140 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 59 lix AM am 11:59:00 am 11:59 00 ? 11:59:00 11:59:00 xi h lix m ? s Thu Jan 1 11:59:00 GMT 1970} +test clock-4.46 { format time of day 11:59:01 } { + clock format 43141 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 59 lix AM am 11:59:01 am 11:59 01 i 11:59:01 11:59:01 xi h lix m i s Thu Jan 1 11:59:01 GMT 1970} +test clock-4.47 { format time of day 11:59:58 } { + clock format 43198 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 59 lix AM am 11:59:58 am 11:59 58 lviii 11:59:58 11:59:58 xi h lix m lviii s Thu Jan 1 11:59:58 GMT 1970} +test clock-4.48 { format time of day 11:59:59 } { + clock format 43199 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {11 xi 11 xi 11 xi 11 xi 59 lix AM am 11:59:59 am 11:59 59 lix 11:59:59 11:59:59 xi h lix m lix s Thu Jan 1 11:59:59 GMT 1970} +test clock-4.49 { format time of day 12:00:00 } { + clock format 43200 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 00 ? PM pm 12:00:00 pm 12:00 00 ? 12:00:00 12:00:00 xii h ? m ? s Thu Jan 1 12:00:00 GMT 1970} +test clock-4.50 { format time of day 12:00:01 } { + clock format 43201 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 00 ? PM pm 12:00:01 pm 12:00 01 i 12:00:01 12:00:01 xii h ? m i s Thu Jan 1 12:00:01 GMT 1970} +test clock-4.51 { format time of day 12:00:58 } { + clock format 43258 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 00 ? PM pm 12:00:58 pm 12:00 58 lviii 12:00:58 12:00:58 xii h ? m lviii s Thu Jan 1 12:00:58 GMT 1970} +test clock-4.52 { format time of day 12:00:59 } { + clock format 43259 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 00 ? PM pm 12:00:59 pm 12:00 59 lix 12:00:59 12:00:59 xii h ? m lix s Thu Jan 1 12:00:59 GMT 1970} +test clock-4.53 { format time of day 12:01:00 } { + clock format 43260 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 01 i PM pm 12:01:00 pm 12:01 00 ? 12:01:00 12:01:00 xii h i m ? s Thu Jan 1 12:01:00 GMT 1970} +test clock-4.54 { format time of day 12:01:01 } { + clock format 43261 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 01 i PM pm 12:01:01 pm 12:01 01 i 12:01:01 12:01:01 xii h i m i s Thu Jan 1 12:01:01 GMT 1970} +test clock-4.55 { format time of day 12:01:58 } { + clock format 43318 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 01 i PM pm 12:01:58 pm 12:01 58 lviii 12:01:58 12:01:58 xii h i m lviii s Thu Jan 1 12:01:58 GMT 1970} +test clock-4.56 { format time of day 12:01:59 } { + clock format 43319 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 01 i PM pm 12:01:59 pm 12:01 59 lix 12:01:59 12:01:59 xii h i m lix s Thu Jan 1 12:01:59 GMT 1970} +test clock-4.57 { format time of day 12:58:00 } { + clock format 46680 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 58 lviii PM pm 12:58:00 pm 12:58 00 ? 12:58:00 12:58:00 xii h lviii m ? s Thu Jan 1 12:58:00 GMT 1970} +test clock-4.58 { format time of day 12:58:01 } { + clock format 46681 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 58 lviii PM pm 12:58:01 pm 12:58 01 i 12:58:01 12:58:01 xii h lviii m i s Thu Jan 1 12:58:01 GMT 1970} +test clock-4.59 { format time of day 12:58:58 } { + clock format 46738 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 58 lviii PM pm 12:58:58 pm 12:58 58 lviii 12:58:58 12:58:58 xii h lviii m lviii s Thu Jan 1 12:58:58 GMT 1970} +test clock-4.60 { format time of day 12:58:59 } { + clock format 46739 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 58 lviii PM pm 12:58:59 pm 12:58 59 lix 12:58:59 12:58:59 xii h lviii m lix s Thu Jan 1 12:58:59 GMT 1970} +test clock-4.61 { format time of day 12:59:00 } { + clock format 46740 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 59 lix PM pm 12:59:00 pm 12:59 00 ? 12:59:00 12:59:00 xii h lix m ? s Thu Jan 1 12:59:00 GMT 1970} +test clock-4.62 { format time of day 12:59:01 } { + clock format 46741 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 59 lix PM pm 12:59:01 pm 12:59 01 i 12:59:01 12:59:01 xii h lix m i s Thu Jan 1 12:59:01 GMT 1970} +test clock-4.63 { format time of day 12:59:58 } { + clock format 46798 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 59 lix PM pm 12:59:58 pm 12:59 58 lviii 12:59:58 12:59:58 xii h lix m lviii s Thu Jan 1 12:59:58 GMT 1970} +test clock-4.64 { format time of day 12:59:59 } { + clock format 46799 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {12 xii 12 xii 12 xii 12 xii 59 lix PM pm 12:59:59 pm 12:59 59 lix 12:59:59 12:59:59 xii h lix m lix s Thu Jan 1 12:59:59 GMT 1970} +test clock-4.65 { format time of day 13:00:00 } { + clock format 46800 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 00 ? PM pm 01:00:00 pm 13:00 00 ? 13:00:00 13:00:00 xiii h ? m ? s Thu Jan 1 13:00:00 GMT 1970} +test clock-4.66 { format time of day 13:00:01 } { + clock format 46801 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 00 ? PM pm 01:00:01 pm 13:00 01 i 13:00:01 13:00:01 xiii h ? m i s Thu Jan 1 13:00:01 GMT 1970} +test clock-4.67 { format time of day 13:00:58 } { + clock format 46858 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 00 ? PM pm 01:00:58 pm 13:00 58 lviii 13:00:58 13:00:58 xiii h ? m lviii s Thu Jan 1 13:00:58 GMT 1970} +test clock-4.68 { format time of day 13:00:59 } { + clock format 46859 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 00 ? PM pm 01:00:59 pm 13:00 59 lix 13:00:59 13:00:59 xiii h ? m lix s Thu Jan 1 13:00:59 GMT 1970} +test clock-4.69 { format time of day 13:01:00 } { + clock format 46860 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 01 i PM pm 01:01:00 pm 13:01 00 ? 13:01:00 13:01:00 xiii h i m ? s Thu Jan 1 13:01:00 GMT 1970} +test clock-4.70 { format time of day 13:01:01 } { + clock format 46861 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 01 i PM pm 01:01:01 pm 13:01 01 i 13:01:01 13:01:01 xiii h i m i s Thu Jan 1 13:01:01 GMT 1970} +test clock-4.71 { format time of day 13:01:58 } { + clock format 46918 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 01 i PM pm 01:01:58 pm 13:01 58 lviii 13:01:58 13:01:58 xiii h i m lviii s Thu Jan 1 13:01:58 GMT 1970} +test clock-4.72 { format time of day 13:01:59 } { + clock format 46919 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 01 i PM pm 01:01:59 pm 13:01 59 lix 13:01:59 13:01:59 xiii h i m lix s Thu Jan 1 13:01:59 GMT 1970} +test clock-4.73 { format time of day 13:58:00 } { + clock format 50280 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 58 lviii PM pm 01:58:00 pm 13:58 00 ? 13:58:00 13:58:00 xiii h lviii m ? s Thu Jan 1 13:58:00 GMT 1970} +test clock-4.74 { format time of day 13:58:01 } { + clock format 50281 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 58 lviii PM pm 01:58:01 pm 13:58 01 i 13:58:01 13:58:01 xiii h lviii m i s Thu Jan 1 13:58:01 GMT 1970} +test clock-4.75 { format time of day 13:58:58 } { + clock format 50338 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 58 lviii PM pm 01:58:58 pm 13:58 58 lviii 13:58:58 13:58:58 xiii h lviii m lviii s Thu Jan 1 13:58:58 GMT 1970} +test clock-4.76 { format time of day 13:58:59 } { + clock format 50339 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 58 lviii PM pm 01:58:59 pm 13:58 59 lix 13:58:59 13:58:59 xiii h lviii m lix s Thu Jan 1 13:58:59 GMT 1970} +test clock-4.77 { format time of day 13:59:00 } { + clock format 50340 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 59 lix PM pm 01:59:00 pm 13:59 00 ? 13:59:00 13:59:00 xiii h lix m ? s Thu Jan 1 13:59:00 GMT 1970} +test clock-4.78 { format time of day 13:59:01 } { + clock format 50341 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 59 lix PM pm 01:59:01 pm 13:59 01 i 13:59:01 13:59:01 xiii h lix m i s Thu Jan 1 13:59:01 GMT 1970} +test clock-4.79 { format time of day 13:59:58 } { + clock format 50398 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 59 lix PM pm 01:59:58 pm 13:59 58 lviii 13:59:58 13:59:58 xiii h lix m lviii s Thu Jan 1 13:59:58 GMT 1970} +test clock-4.80 { format time of day 13:59:59 } { + clock format 50399 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {13 xiii 01 i 13 xiii 1 i 59 lix PM pm 01:59:59 pm 13:59 59 lix 13:59:59 13:59:59 xiii h lix m lix s Thu Jan 1 13:59:59 GMT 1970} +test clock-4.81 { format time of day 23:00:00 } { + clock format 82800 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 00 ? PM pm 11:00:00 pm 23:00 00 ? 23:00:00 23:00:00 xxiii h ? m ? s Thu Jan 1 23:00:00 GMT 1970} +test clock-4.82 { format time of day 23:00:01 } { + clock format 82801 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 00 ? PM pm 11:00:01 pm 23:00 01 i 23:00:01 23:00:01 xxiii h ? m i s Thu Jan 1 23:00:01 GMT 1970} +test clock-4.83 { format time of day 23:00:58 } { + clock format 82858 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 00 ? PM pm 11:00:58 pm 23:00 58 lviii 23:00:58 23:00:58 xxiii h ? m lviii s Thu Jan 1 23:00:58 GMT 1970} +test clock-4.84 { format time of day 23:00:59 } { + clock format 82859 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 00 ? PM pm 11:00:59 pm 23:00 59 lix 23:00:59 23:00:59 xxiii h ? m lix s Thu Jan 1 23:00:59 GMT 1970} +test clock-4.85 { format time of day 23:01:00 } { + clock format 82860 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 01 i PM pm 11:01:00 pm 23:01 00 ? 23:01:00 23:01:00 xxiii h i m ? s Thu Jan 1 23:01:00 GMT 1970} +test clock-4.86 { format time of day 23:01:01 } { + clock format 82861 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 01 i PM pm 11:01:01 pm 23:01 01 i 23:01:01 23:01:01 xxiii h i m i s Thu Jan 1 23:01:01 GMT 1970} +test clock-4.87 { format time of day 23:01:58 } { + clock format 82918 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 01 i PM pm 11:01:58 pm 23:01 58 lviii 23:01:58 23:01:58 xxiii h i m lviii s Thu Jan 1 23:01:58 GMT 1970} +test clock-4.88 { format time of day 23:01:59 } { + clock format 82919 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 01 i PM pm 11:01:59 pm 23:01 59 lix 23:01:59 23:01:59 xxiii h i m lix s Thu Jan 1 23:01:59 GMT 1970} +test clock-4.89 { format time of day 23:58:00 } { + clock format 86280 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 58 lviii PM pm 11:58:00 pm 23:58 00 ? 23:58:00 23:58:00 xxiii h lviii m ? s Thu Jan 1 23:58:00 GMT 1970} +test clock-4.90 { format time of day 23:58:01 } { + clock format 86281 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 58 lviii PM pm 11:58:01 pm 23:58 01 i 23:58:01 23:58:01 xxiii h lviii m i s Thu Jan 1 23:58:01 GMT 1970} +test clock-4.91 { format time of day 23:58:58 } { + clock format 86338 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 58 lviii PM pm 11:58:58 pm 23:58 58 lviii 23:58:58 23:58:58 xxiii h lviii m lviii s Thu Jan 1 23:58:58 GMT 1970} +test clock-4.92 { format time of day 23:58:59 } { + clock format 86339 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 58 lviii PM pm 11:58:59 pm 23:58 59 lix 23:58:59 23:58:59 xxiii h lviii m lix s Thu Jan 1 23:58:59 GMT 1970} +test clock-4.93 { format time of day 23:59:00 } { + clock format 86340 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 59 lix PM pm 11:59:00 pm 23:59 00 ? 23:59:00 23:59:00 xxiii h lix m ? s Thu Jan 1 23:59:00 GMT 1970} +test clock-4.94 { format time of day 23:59:01 } { + clock format 86341 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 59 lix PM pm 11:59:01 pm 23:59 01 i 23:59:01 23:59:01 xxiii h lix m i s Thu Jan 1 23:59:01 GMT 1970} +test clock-4.95 { format time of day 23:59:58 } { + clock format 86398 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 59 lix PM pm 11:59:58 pm 23:59 58 lviii 23:59:58 23:59:58 xxiii h lix m lviii s Thu Jan 1 23:59:58 GMT 1970} +test clock-4.96 { format time of day 23:59:59 } { + clock format 86399 \ + -format {%H %OH %I %OI %k %Ok %l %Ol %M %OM %p %P %r %R %S %OS %T %X %EX %+} \ + -locale en_US_roman \ + -gmt true +} {23 xxiii 11 xi 23 xxiii 11 xi 59 lix PM pm 11:59:59 pm 23:59 59 lix 23:59:59 23:59:59 xxiii h lix m lix s Thu Jan 1 23:59:59 GMT 1970} +# END testcases4 + +# BEGIN testcases5 + +# Test formatting of Daylight Saving Time + +test clock-5.1 {does Detroit exist} { + clock format 0 -format {} -timezone :America/Detroit + concat +} {} +test clock-5.2 {does Detroit have a Y2038 problem} detroit { + if { [clock format 2158894800 -format %z -timezone :America/Detroit] ne {-0400} } { + concat {y2038 problem} + } else { + concat {ok} + } +} ok +test clock-5.3 {time zone boundary case 1904-12-31 23:59:59} detroit { + clock format -2051202470 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {23:59:59 -053211 LMT} +test clock-5.4 {time zone boundary case 1904-12-31 23:32:11} detroit { + clock format -2051202469 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {23:32:11 -0600 CST} +test clock-5.5 {time zone boundary case 1904-12-31 23:32:12} detroit { + clock format -2051202468 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {23:32:12 -0600 CST} +test clock-5.6 {time zone boundary case 1915-05-15 01:59:59} detroit { + clock format -1724083201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0600 CST} +test clock-5.7 {time zone boundary case 1915-05-15 03:00:00} detroit { + clock format -1724083200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0500 EST} +test clock-5.8 {time zone boundary case 1915-05-15 03:00:01} detroit { + clock format -1724083199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0500 EST} +test clock-5.9 {time zone boundary case 1941-12-31 23:59:59} detroit { + clock format -883594801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {23:59:59 -0500 EST} +test clock-5.10 {time zone boundary case 1942-01-01 00:00:00} detroit { + clock format -883594800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {00:00:00 -0500 EST} +test clock-5.11 {time zone boundary case 1942-01-01 00:00:01} detroit { + clock format -883594799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {00:00:01 -0500 EST} +test clock-5.12 {time zone boundary case 1942-02-09 01:59:59} detroit { + clock format -880218001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.13 {time zone boundary case 1942-02-09 03:00:00} detroit { + clock format -880218000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EWT} +test clock-5.14 {time zone boundary case 1942-02-09 03:00:01} detroit { + clock format -880217999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EWT} +test clock-5.15 {time zone boundary case 1945-08-14 18:59:59} detroit { + clock format -769395601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {18:59:59 -0400 EWT} +test clock-5.16 {time zone boundary case 1945-08-14 19:00:00} detroit { + clock format -769395600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {19:00:00 -0400 EPT} +test clock-5.17 {time zone boundary case 1945-08-14 19:00:01} detroit { + clock format -769395599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {19:00:01 -0400 EPT} +test clock-5.18 {time zone boundary case 1945-09-30 01:59:59} detroit { + clock format -765396001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EPT} +test clock-5.19 {time zone boundary case 1945-09-30 01:00:00} detroit { + clock format -765396000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.20 {time zone boundary case 1945-09-30 01:00:01} detroit { + clock format -765395999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.21 {time zone boundary case 1945-12-31 23:59:59} detroit { + clock format -757364401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {23:59:59 -0500 EST} +test clock-5.22 {time zone boundary case 1946-01-01 00:00:00} detroit { + clock format -757364400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {00:00:00 -0500 EST} +test clock-5.23 {time zone boundary case 1946-01-01 00:00:01} detroit { + clock format -757364399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {00:00:01 -0500 EST} +test clock-5.24 {time zone boundary case 1948-04-25 01:59:59} detroit { + clock format -684349201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.25 {time zone boundary case 1948-04-25 03:00:00} detroit { + clock format -684349200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.26 {time zone boundary case 1948-04-25 03:00:01} detroit { + clock format -684349199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.27 {time zone boundary case 1948-09-26 01:59:59} detroit { + clock format -671047201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.28 {time zone boundary case 1948-09-26 01:00:00} detroit { + clock format -671047200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.29 {time zone boundary case 1948-09-26 01:00:01} detroit { + clock format -671047199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.30 {time zone boundary case 1967-06-14 01:59:59} detroit { + clock format -80499601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.31 {time zone boundary case 1967-06-14 03:00:00} detroit { + clock format -80499600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.32 {time zone boundary case 1967-06-14 03:00:01} detroit { + clock format -80499599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.33 {time zone boundary case 1967-10-29 01:59:59} detroit { + clock format -68666401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.34 {time zone boundary case 1967-10-29 01:00:00} detroit { + clock format -68666400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.35 {time zone boundary case 1967-10-29 01:00:01} detroit { + clock format -68666399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.36 {time zone boundary case 1972-12-31 23:59:59} detroit { + clock format 94712399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {23:59:59 -0500 EST} +test clock-5.37 {time zone boundary case 1973-01-01 00:00:00} detroit { + clock format 94712400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {00:00:00 -0500 EST} +test clock-5.38 {time zone boundary case 1973-01-01 00:00:01} detroit { + clock format 94712401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {00:00:01 -0500 EST} +test clock-5.39 {time zone boundary case 1973-04-29 01:59:59} detroit { + clock format 104914799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.40 {time zone boundary case 1973-04-29 03:00:00} detroit { + clock format 104914800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.41 {time zone boundary case 1973-04-29 03:00:01} detroit { + clock format 104914801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.42 {time zone boundary case 1973-10-28 01:59:59} detroit { + clock format 120635999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.43 {time zone boundary case 1973-10-28 01:00:00} detroit { + clock format 120636000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.44 {time zone boundary case 1973-10-28 01:00:01} detroit { + clock format 120636001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.45 {time zone boundary case 1974-01-06 01:59:59} detroit { + clock format 126687599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.46 {time zone boundary case 1974-01-06 03:00:00} detroit { + clock format 126687600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.47 {time zone boundary case 1974-01-06 03:00:01} detroit { + clock format 126687601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.48 {time zone boundary case 1974-10-27 01:59:59} detroit { + clock format 152085599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.49 {time zone boundary case 1974-10-27 01:00:00} detroit { + clock format 152085600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.50 {time zone boundary case 1974-10-27 01:00:01} detroit { + clock format 152085601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.51 {time zone boundary case 1974-12-31 23:59:59} detroit { + clock format 157784399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {23:59:59 -0500 EST} +test clock-5.52 {time zone boundary case 1975-01-01 00:00:00} detroit { + clock format 157784400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {00:00:00 -0500 EST} +test clock-5.53 {time zone boundary case 1975-01-01 00:00:01} detroit { + clock format 157784401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {00:00:01 -0500 EST} +test clock-5.54 {time zone boundary case 1975-04-27 01:59:59} detroit { + clock format 167813999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.55 {time zone boundary case 1975-04-27 03:00:00} detroit { + clock format 167814000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.56 {time zone boundary case 1975-04-27 03:00:01} detroit { + clock format 167814001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.57 {time zone boundary case 1975-10-26 01:59:59} detroit { + clock format 183535199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.58 {time zone boundary case 1975-10-26 01:00:00} detroit { + clock format 183535200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.59 {time zone boundary case 1975-10-26 01:00:01} detroit { + clock format 183535201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.60 {time zone boundary case 1976-04-25 01:59:59} detroit { + clock format 199263599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.61 {time zone boundary case 1976-04-25 03:00:00} detroit { + clock format 199263600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.62 {time zone boundary case 1976-04-25 03:00:01} detroit { + clock format 199263601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.63 {time zone boundary case 1976-10-31 01:59:59} detroit { + clock format 215589599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.64 {time zone boundary case 1976-10-31 01:00:00} detroit { + clock format 215589600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.65 {time zone boundary case 1976-10-31 01:00:01} detroit { + clock format 215589601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.66 {time zone boundary case 1977-04-24 01:59:59} detroit { + clock format 230713199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.67 {time zone boundary case 1977-04-24 03:00:00} detroit { + clock format 230713200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.68 {time zone boundary case 1977-04-24 03:00:01} detroit { + clock format 230713201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.69 {time zone boundary case 1977-10-30 01:59:59} detroit { + clock format 247039199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.70 {time zone boundary case 1977-10-30 01:00:00} detroit { + clock format 247039200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.71 {time zone boundary case 1977-10-30 01:00:01} detroit { + clock format 247039201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.72 {time zone boundary case 1978-04-30 01:59:59} detroit { + clock format 262767599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.73 {time zone boundary case 1978-04-30 03:00:00} detroit { + clock format 262767600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.74 {time zone boundary case 1978-04-30 03:00:01} detroit { + clock format 262767601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.75 {time zone boundary case 1978-10-29 01:59:59} detroit { + clock format 278488799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.76 {time zone boundary case 1978-10-29 01:00:00} detroit { + clock format 278488800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.77 {time zone boundary case 1978-10-29 01:00:01} detroit { + clock format 278488801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.78 {time zone boundary case 1979-04-29 01:59:59} detroit { + clock format 294217199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.79 {time zone boundary case 1979-04-29 03:00:00} detroit { + clock format 294217200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.80 {time zone boundary case 1979-04-29 03:00:01} detroit { + clock format 294217201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.81 {time zone boundary case 1979-10-28 01:59:59} detroit { + clock format 309938399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.82 {time zone boundary case 1979-10-28 01:00:00} detroit { + clock format 309938400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.83 {time zone boundary case 1979-10-28 01:00:01} detroit { + clock format 309938401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.84 {time zone boundary case 1980-04-27 01:59:59} detroit { + clock format 325666799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.85 {time zone boundary case 1980-04-27 03:00:00} detroit { + clock format 325666800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.86 {time zone boundary case 1980-04-27 03:00:01} detroit { + clock format 325666801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.87 {time zone boundary case 1980-10-26 01:59:59} detroit { + clock format 341387999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.88 {time zone boundary case 1980-10-26 01:00:00} detroit { + clock format 341388000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.89 {time zone boundary case 1980-10-26 01:00:01} detroit { + clock format 341388001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.90 {time zone boundary case 1981-04-26 01:59:59} detroit { + clock format 357116399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.91 {time zone boundary case 1981-04-26 03:00:00} detroit { + clock format 357116400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.92 {time zone boundary case 1981-04-26 03:00:01} detroit { + clock format 357116401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.93 {time zone boundary case 1981-10-25 01:59:59} detroit { + clock format 372837599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.94 {time zone boundary case 1981-10-25 01:00:00} detroit { + clock format 372837600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.95 {time zone boundary case 1981-10-25 01:00:01} detroit { + clock format 372837601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.96 {time zone boundary case 1982-04-25 01:59:59} detroit { + clock format 388565999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.97 {time zone boundary case 1982-04-25 03:00:00} detroit { + clock format 388566000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.98 {time zone boundary case 1982-04-25 03:00:01} detroit { + clock format 388566001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.99 {time zone boundary case 1982-10-31 01:59:59} detroit { + clock format 404891999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.100 {time zone boundary case 1982-10-31 01:00:00} detroit { + clock format 404892000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.101 {time zone boundary case 1982-10-31 01:00:01} detroit { + clock format 404892001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.102 {time zone boundary case 1983-04-24 01:59:59} detroit { + clock format 420015599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.103 {time zone boundary case 1983-04-24 03:00:00} detroit { + clock format 420015600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.104 {time zone boundary case 1983-04-24 03:00:01} detroit { + clock format 420015601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.105 {time zone boundary case 1983-10-30 01:59:59} detroit { + clock format 436341599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.106 {time zone boundary case 1983-10-30 01:00:00} detroit { + clock format 436341600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.107 {time zone boundary case 1983-10-30 01:00:01} detroit { + clock format 436341601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.108 {time zone boundary case 1984-04-29 01:59:59} detroit { + clock format 452069999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.109 {time zone boundary case 1984-04-29 03:00:00} detroit { + clock format 452070000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.110 {time zone boundary case 1984-04-29 03:00:01} detroit { + clock format 452070001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.111 {time zone boundary case 1984-10-28 01:59:59} detroit { + clock format 467791199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.112 {time zone boundary case 1984-10-28 01:00:00} detroit { + clock format 467791200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.113 {time zone boundary case 1984-10-28 01:00:01} detroit { + clock format 467791201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.114 {time zone boundary case 1985-04-28 01:59:59} detroit { + clock format 483519599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.115 {time zone boundary case 1985-04-28 03:00:00} detroit { + clock format 483519600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.116 {time zone boundary case 1985-04-28 03:00:01} detroit { + clock format 483519601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.117 {time zone boundary case 1985-10-27 01:59:59} detroit { + clock format 499240799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.118 {time zone boundary case 1985-10-27 01:00:00} detroit { + clock format 499240800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.119 {time zone boundary case 1985-10-27 01:00:01} detroit { + clock format 499240801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.120 {time zone boundary case 1986-04-27 01:59:59} detroit { + clock format 514969199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.121 {time zone boundary case 1986-04-27 03:00:00} detroit { + clock format 514969200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.122 {time zone boundary case 1986-04-27 03:00:01} detroit { + clock format 514969201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.123 {time zone boundary case 1986-10-26 01:59:59} detroit { + clock format 530690399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.124 {time zone boundary case 1986-10-26 01:00:00} detroit { + clock format 530690400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.125 {time zone boundary case 1986-10-26 01:00:01} detroit { + clock format 530690401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.126 {time zone boundary case 1987-04-05 01:59:59} detroit { + clock format 544604399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.127 {time zone boundary case 1987-04-05 03:00:00} detroit { + clock format 544604400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.128 {time zone boundary case 1987-04-05 03:00:01} detroit { + clock format 544604401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.129 {time zone boundary case 1987-10-25 01:59:59} detroit { + clock format 562139999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.130 {time zone boundary case 1987-10-25 01:00:00} detroit { + clock format 562140000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.131 {time zone boundary case 1987-10-25 01:00:01} detroit { + clock format 562140001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.132 {time zone boundary case 1988-04-03 01:59:59} detroit { + clock format 576053999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.133 {time zone boundary case 1988-04-03 03:00:00} detroit { + clock format 576054000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.134 {time zone boundary case 1988-04-03 03:00:01} detroit { + clock format 576054001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.135 {time zone boundary case 1988-10-30 01:59:59} detroit { + clock format 594194399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.136 {time zone boundary case 1988-10-30 01:00:00} detroit { + clock format 594194400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.137 {time zone boundary case 1988-10-30 01:00:01} detroit { + clock format 594194401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.138 {time zone boundary case 1989-04-02 01:59:59} detroit { + clock format 607503599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.139 {time zone boundary case 1989-04-02 03:00:00} detroit { + clock format 607503600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.140 {time zone boundary case 1989-04-02 03:00:01} detroit { + clock format 607503601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.141 {time zone boundary case 1989-10-29 01:59:59} detroit { + clock format 625643999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.142 {time zone boundary case 1989-10-29 01:00:00} detroit { + clock format 625644000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.143 {time zone boundary case 1989-10-29 01:00:01} detroit { + clock format 625644001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.144 {time zone boundary case 1990-04-01 01:59:59} detroit { + clock format 638953199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.145 {time zone boundary case 1990-04-01 03:00:00} detroit { + clock format 638953200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.146 {time zone boundary case 1990-04-01 03:00:01} detroit { + clock format 638953201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.147 {time zone boundary case 1990-10-28 01:59:59} detroit { + clock format 657093599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.148 {time zone boundary case 1990-10-28 01:00:00} detroit { + clock format 657093600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.149 {time zone boundary case 1990-10-28 01:00:01} detroit { + clock format 657093601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.150 {time zone boundary case 1991-04-07 01:59:59} detroit { + clock format 671007599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.151 {time zone boundary case 1991-04-07 03:00:00} detroit { + clock format 671007600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.152 {time zone boundary case 1991-04-07 03:00:01} detroit { + clock format 671007601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.153 {time zone boundary case 1991-10-27 01:59:59} detroit { + clock format 688543199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.154 {time zone boundary case 1991-10-27 01:00:00} detroit { + clock format 688543200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.155 {time zone boundary case 1991-10-27 01:00:01} detroit { + clock format 688543201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.156 {time zone boundary case 1992-04-05 01:59:59} detroit { + clock format 702457199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.157 {time zone boundary case 1992-04-05 03:00:00} detroit { + clock format 702457200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.158 {time zone boundary case 1992-04-05 03:00:01} detroit { + clock format 702457201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.159 {time zone boundary case 1992-10-25 01:59:59} detroit { + clock format 719992799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.160 {time zone boundary case 1992-10-25 01:00:00} detroit { + clock format 719992800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.161 {time zone boundary case 1992-10-25 01:00:01} detroit { + clock format 719992801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.162 {time zone boundary case 1993-04-04 01:59:59} detroit { + clock format 733906799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.163 {time zone boundary case 1993-04-04 03:00:00} detroit { + clock format 733906800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.164 {time zone boundary case 1993-04-04 03:00:01} detroit { + clock format 733906801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.165 {time zone boundary case 1993-10-31 01:59:59} detroit { + clock format 752047199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.166 {time zone boundary case 1993-10-31 01:00:00} detroit { + clock format 752047200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.167 {time zone boundary case 1993-10-31 01:00:01} detroit { + clock format 752047201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.168 {time zone boundary case 1994-04-03 01:59:59} detroit { + clock format 765356399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.169 {time zone boundary case 1994-04-03 03:00:00} detroit { + clock format 765356400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.170 {time zone boundary case 1994-04-03 03:00:01} detroit { + clock format 765356401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.171 {time zone boundary case 1994-10-30 01:59:59} detroit { + clock format 783496799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.172 {time zone boundary case 1994-10-30 01:00:00} detroit { + clock format 783496800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.173 {time zone boundary case 1994-10-30 01:00:01} detroit { + clock format 783496801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.174 {time zone boundary case 1995-04-02 01:59:59} detroit { + clock format 796805999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.175 {time zone boundary case 1995-04-02 03:00:00} detroit { + clock format 796806000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.176 {time zone boundary case 1995-04-02 03:00:01} detroit { + clock format 796806001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.177 {time zone boundary case 1995-10-29 01:59:59} detroit { + clock format 814946399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.178 {time zone boundary case 1995-10-29 01:00:00} detroit { + clock format 814946400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.179 {time zone boundary case 1995-10-29 01:00:01} detroit { + clock format 814946401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.180 {time zone boundary case 1996-04-07 01:59:59} detroit { + clock format 828860399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.181 {time zone boundary case 1996-04-07 03:00:00} detroit { + clock format 828860400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.182 {time zone boundary case 1996-04-07 03:00:01} detroit { + clock format 828860401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.183 {time zone boundary case 1996-10-27 01:59:59} detroit { + clock format 846395999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.184 {time zone boundary case 1996-10-27 01:00:00} detroit { + clock format 846396000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.185 {time zone boundary case 1996-10-27 01:00:01} detroit { + clock format 846396001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.186 {time zone boundary case 1997-04-06 01:59:59} detroit { + clock format 860309999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.187 {time zone boundary case 1997-04-06 03:00:00} detroit { + clock format 860310000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.188 {time zone boundary case 1997-04-06 03:00:01} detroit { + clock format 860310001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.189 {time zone boundary case 1997-10-26 01:59:59} detroit { + clock format 877845599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.190 {time zone boundary case 1997-10-26 01:00:00} detroit { + clock format 877845600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.191 {time zone boundary case 1997-10-26 01:00:01} detroit { + clock format 877845601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.192 {time zone boundary case 1998-04-05 01:59:59} detroit { + clock format 891759599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.193 {time zone boundary case 1998-04-05 03:00:00} detroit { + clock format 891759600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.194 {time zone boundary case 1998-04-05 03:00:01} detroit { + clock format 891759601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.195 {time zone boundary case 1998-10-25 01:59:59} detroit { + clock format 909295199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.196 {time zone boundary case 1998-10-25 01:00:00} detroit { + clock format 909295200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.197 {time zone boundary case 1998-10-25 01:00:01} detroit { + clock format 909295201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.198 {time zone boundary case 1999-04-04 01:59:59} detroit { + clock format 923209199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.199 {time zone boundary case 1999-04-04 03:00:00} detroit { + clock format 923209200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.200 {time zone boundary case 1999-04-04 03:00:01} detroit { + clock format 923209201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.201 {time zone boundary case 1999-10-31 01:59:59} detroit { + clock format 941349599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.202 {time zone boundary case 1999-10-31 01:00:00} detroit { + clock format 941349600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.203 {time zone boundary case 1999-10-31 01:00:01} detroit { + clock format 941349601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.204 {time zone boundary case 2000-04-02 01:59:59} detroit { + clock format 954658799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.205 {time zone boundary case 2000-04-02 03:00:00} detroit { + clock format 954658800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.206 {time zone boundary case 2000-04-02 03:00:01} detroit { + clock format 954658801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.207 {time zone boundary case 2000-10-29 01:59:59} detroit { + clock format 972799199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.208 {time zone boundary case 2000-10-29 01:00:00} detroit { + clock format 972799200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.209 {time zone boundary case 2000-10-29 01:00:01} detroit { + clock format 972799201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.210 {time zone boundary case 2001-04-01 01:59:59} detroit { + clock format 986108399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.211 {time zone boundary case 2001-04-01 03:00:00} detroit { + clock format 986108400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.212 {time zone boundary case 2001-04-01 03:00:01} detroit { + clock format 986108401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.213 {time zone boundary case 2001-10-28 01:59:59} detroit { + clock format 1004248799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.214 {time zone boundary case 2001-10-28 01:00:00} detroit { + clock format 1004248800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.215 {time zone boundary case 2001-10-28 01:00:01} detroit { + clock format 1004248801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.216 {time zone boundary case 2002-04-07 01:59:59} detroit { + clock format 1018162799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.217 {time zone boundary case 2002-04-07 03:00:00} detroit { + clock format 1018162800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.218 {time zone boundary case 2002-04-07 03:00:01} detroit { + clock format 1018162801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.219 {time zone boundary case 2002-10-27 01:59:59} detroit { + clock format 1035698399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.220 {time zone boundary case 2002-10-27 01:00:00} detroit { + clock format 1035698400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.221 {time zone boundary case 2002-10-27 01:00:01} detroit { + clock format 1035698401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.222 {time zone boundary case 2003-04-06 01:59:59} detroit { + clock format 1049612399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.223 {time zone boundary case 2003-04-06 03:00:00} detroit { + clock format 1049612400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.224 {time zone boundary case 2003-04-06 03:00:01} detroit { + clock format 1049612401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.225 {time zone boundary case 2003-10-26 01:59:59} detroit { + clock format 1067147999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.226 {time zone boundary case 2003-10-26 01:00:00} detroit { + clock format 1067148000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.227 {time zone boundary case 2003-10-26 01:00:01} detroit { + clock format 1067148001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.228 {time zone boundary case 2004-04-04 01:59:59} detroit { + clock format 1081061999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.229 {time zone boundary case 2004-04-04 03:00:00} detroit { + clock format 1081062000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.230 {time zone boundary case 2004-04-04 03:00:01} detroit { + clock format 1081062001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.231 {time zone boundary case 2004-10-31 01:59:59} detroit { + clock format 1099202399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.232 {time zone boundary case 2004-10-31 01:00:00} detroit { + clock format 1099202400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.233 {time zone boundary case 2004-10-31 01:00:01} detroit { + clock format 1099202401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.234 {time zone boundary case 2005-04-03 01:59:59} detroit { + clock format 1112511599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.235 {time zone boundary case 2005-04-03 03:00:00} detroit { + clock format 1112511600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.236 {time zone boundary case 2005-04-03 03:00:01} detroit { + clock format 1112511601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.237 {time zone boundary case 2005-10-30 01:59:59} detroit { + clock format 1130651999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.238 {time zone boundary case 2005-10-30 01:00:00} detroit { + clock format 1130652000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.239 {time zone boundary case 2005-10-30 01:00:01} detroit { + clock format 1130652001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.240 {time zone boundary case 2006-04-02 01:59:59} detroit { + clock format 1143961199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.241 {time zone boundary case 2006-04-02 03:00:00} detroit { + clock format 1143961200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.242 {time zone boundary case 2006-04-02 03:00:01} detroit { + clock format 1143961201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.243 {time zone boundary case 2006-10-29 01:59:59} detroit { + clock format 1162101599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.244 {time zone boundary case 2006-10-29 01:00:00} detroit { + clock format 1162101600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.245 {time zone boundary case 2006-10-29 01:00:01} detroit { + clock format 1162101601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.246 {time zone boundary case 2007-03-11 01:59:59} detroit { + clock format 1173596399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.247 {time zone boundary case 2007-03-11 03:00:00} detroit { + clock format 1173596400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.248 {time zone boundary case 2007-03-11 03:00:01} detroit { + clock format 1173596401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.249 {time zone boundary case 2007-11-04 01:59:59} detroit { + clock format 1194155999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.250 {time zone boundary case 2007-11-04 01:00:00} detroit { + clock format 1194156000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.251 {time zone boundary case 2007-11-04 01:00:01} detroit { + clock format 1194156001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.252 {time zone boundary case 2008-03-09 01:59:59} detroit { + clock format 1205045999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.253 {time zone boundary case 2008-03-09 03:00:00} detroit { + clock format 1205046000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.254 {time zone boundary case 2008-03-09 03:00:01} detroit { + clock format 1205046001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.255 {time zone boundary case 2008-11-02 01:59:59} detroit { + clock format 1225605599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.256 {time zone boundary case 2008-11-02 01:00:00} detroit { + clock format 1225605600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.257 {time zone boundary case 2008-11-02 01:00:01} detroit { + clock format 1225605601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.258 {time zone boundary case 2009-03-08 01:59:59} detroit { + clock format 1236495599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.259 {time zone boundary case 2009-03-08 03:00:00} detroit { + clock format 1236495600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.260 {time zone boundary case 2009-03-08 03:00:01} detroit { + clock format 1236495601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.261 {time zone boundary case 2009-11-01 01:59:59} detroit { + clock format 1257055199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.262 {time zone boundary case 2009-11-01 01:00:00} detroit { + clock format 1257055200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.263 {time zone boundary case 2009-11-01 01:00:01} detroit { + clock format 1257055201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.264 {time zone boundary case 2010-03-14 01:59:59} detroit { + clock format 1268549999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.265 {time zone boundary case 2010-03-14 03:00:00} detroit { + clock format 1268550000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.266 {time zone boundary case 2010-03-14 03:00:01} detroit { + clock format 1268550001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.267 {time zone boundary case 2010-11-07 01:59:59} detroit { + clock format 1289109599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.268 {time zone boundary case 2010-11-07 01:00:00} detroit { + clock format 1289109600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.269 {time zone boundary case 2010-11-07 01:00:01} detroit { + clock format 1289109601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.270 {time zone boundary case 2011-03-13 01:59:59} detroit { + clock format 1299999599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.271 {time zone boundary case 2011-03-13 03:00:00} detroit { + clock format 1299999600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.272 {time zone boundary case 2011-03-13 03:00:01} detroit { + clock format 1299999601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.273 {time zone boundary case 2011-11-06 01:59:59} detroit { + clock format 1320559199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.274 {time zone boundary case 2011-11-06 01:00:00} detroit { + clock format 1320559200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.275 {time zone boundary case 2011-11-06 01:00:01} detroit { + clock format 1320559201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.276 {time zone boundary case 2012-03-11 01:59:59} detroit { + clock format 1331449199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.277 {time zone boundary case 2012-03-11 03:00:00} detroit { + clock format 1331449200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.278 {time zone boundary case 2012-03-11 03:00:01} detroit { + clock format 1331449201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.279 {time zone boundary case 2012-11-04 01:59:59} detroit { + clock format 1352008799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.280 {time zone boundary case 2012-11-04 01:00:00} detroit { + clock format 1352008800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.281 {time zone boundary case 2012-11-04 01:00:01} detroit { + clock format 1352008801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.282 {time zone boundary case 2013-03-10 01:59:59} detroit { + clock format 1362898799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.283 {time zone boundary case 2013-03-10 03:00:00} detroit { + clock format 1362898800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.284 {time zone boundary case 2013-03-10 03:00:01} detroit { + clock format 1362898801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.285 {time zone boundary case 2013-11-03 01:59:59} detroit { + clock format 1383458399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.286 {time zone boundary case 2013-11-03 01:00:00} detroit { + clock format 1383458400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.287 {time zone boundary case 2013-11-03 01:00:01} detroit { + clock format 1383458401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.288 {time zone boundary case 2014-03-09 01:59:59} detroit { + clock format 1394348399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.289 {time zone boundary case 2014-03-09 03:00:00} detroit { + clock format 1394348400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.290 {time zone boundary case 2014-03-09 03:00:01} detroit { + clock format 1394348401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.291 {time zone boundary case 2014-11-02 01:59:59} detroit { + clock format 1414907999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.292 {time zone boundary case 2014-11-02 01:00:00} detroit { + clock format 1414908000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.293 {time zone boundary case 2014-11-02 01:00:01} detroit { + clock format 1414908001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.294 {time zone boundary case 2015-03-08 01:59:59} detroit { + clock format 1425797999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.295 {time zone boundary case 2015-03-08 03:00:00} detroit { + clock format 1425798000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.296 {time zone boundary case 2015-03-08 03:00:01} detroit { + clock format 1425798001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.297 {time zone boundary case 2015-11-01 01:59:59} detroit { + clock format 1446357599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.298 {time zone boundary case 2015-11-01 01:00:00} detroit { + clock format 1446357600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.299 {time zone boundary case 2015-11-01 01:00:01} detroit { + clock format 1446357601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.300 {time zone boundary case 2016-03-13 01:59:59} detroit { + clock format 1457852399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.301 {time zone boundary case 2016-03-13 03:00:00} detroit { + clock format 1457852400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.302 {time zone boundary case 2016-03-13 03:00:01} detroit { + clock format 1457852401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.303 {time zone boundary case 2016-11-06 01:59:59} detroit { + clock format 1478411999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.304 {time zone boundary case 2016-11-06 01:00:00} detroit { + clock format 1478412000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.305 {time zone boundary case 2016-11-06 01:00:01} detroit { + clock format 1478412001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.306 {time zone boundary case 2017-03-12 01:59:59} detroit { + clock format 1489301999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.307 {time zone boundary case 2017-03-12 03:00:00} detroit { + clock format 1489302000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.308 {time zone boundary case 2017-03-12 03:00:01} detroit { + clock format 1489302001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.309 {time zone boundary case 2017-11-05 01:59:59} detroit { + clock format 1509861599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.310 {time zone boundary case 2017-11-05 01:00:00} detroit { + clock format 1509861600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.311 {time zone boundary case 2017-11-05 01:00:01} detroit { + clock format 1509861601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.312 {time zone boundary case 2018-03-11 01:59:59} detroit { + clock format 1520751599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.313 {time zone boundary case 2018-03-11 03:00:00} detroit { + clock format 1520751600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.314 {time zone boundary case 2018-03-11 03:00:01} detroit { + clock format 1520751601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.315 {time zone boundary case 2018-11-04 01:59:59} detroit { + clock format 1541311199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.316 {time zone boundary case 2018-11-04 01:00:00} detroit { + clock format 1541311200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.317 {time zone boundary case 2018-11-04 01:00:01} detroit { + clock format 1541311201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.318 {time zone boundary case 2019-03-10 01:59:59} detroit { + clock format 1552201199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.319 {time zone boundary case 2019-03-10 03:00:00} detroit { + clock format 1552201200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.320 {time zone boundary case 2019-03-10 03:00:01} detroit { + clock format 1552201201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.321 {time zone boundary case 2019-11-03 01:59:59} detroit { + clock format 1572760799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.322 {time zone boundary case 2019-11-03 01:00:00} detroit { + clock format 1572760800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.323 {time zone boundary case 2019-11-03 01:00:01} detroit { + clock format 1572760801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.324 {time zone boundary case 2020-03-08 01:59:59} detroit { + clock format 1583650799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.325 {time zone boundary case 2020-03-08 03:00:00} detroit { + clock format 1583650800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.326 {time zone boundary case 2020-03-08 03:00:01} detroit { + clock format 1583650801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.327 {time zone boundary case 2020-11-01 01:59:59} detroit { + clock format 1604210399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.328 {time zone boundary case 2020-11-01 01:00:00} detroit { + clock format 1604210400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.329 {time zone boundary case 2020-11-01 01:00:01} detroit { + clock format 1604210401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.330 {time zone boundary case 2021-03-14 01:59:59} detroit { + clock format 1615705199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.331 {time zone boundary case 2021-03-14 03:00:00} detroit { + clock format 1615705200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.332 {time zone boundary case 2021-03-14 03:00:01} detroit { + clock format 1615705201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.333 {time zone boundary case 2021-11-07 01:59:59} detroit { + clock format 1636264799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.334 {time zone boundary case 2021-11-07 01:00:00} detroit { + clock format 1636264800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.335 {time zone boundary case 2021-11-07 01:00:01} detroit { + clock format 1636264801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.336 {time zone boundary case 2022-03-13 01:59:59} detroit { + clock format 1647154799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.337 {time zone boundary case 2022-03-13 03:00:00} detroit { + clock format 1647154800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.338 {time zone boundary case 2022-03-13 03:00:01} detroit { + clock format 1647154801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.339 {time zone boundary case 2022-11-06 01:59:59} detroit { + clock format 1667714399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.340 {time zone boundary case 2022-11-06 01:00:00} detroit { + clock format 1667714400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.341 {time zone boundary case 2022-11-06 01:00:01} detroit { + clock format 1667714401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.342 {time zone boundary case 2023-03-12 01:59:59} detroit { + clock format 1678604399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.343 {time zone boundary case 2023-03-12 03:00:00} detroit { + clock format 1678604400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.344 {time zone boundary case 2023-03-12 03:00:01} detroit { + clock format 1678604401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.345 {time zone boundary case 2023-11-05 01:59:59} detroit { + clock format 1699163999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.346 {time zone boundary case 2023-11-05 01:00:00} detroit { + clock format 1699164000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.347 {time zone boundary case 2023-11-05 01:00:01} detroit { + clock format 1699164001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.348 {time zone boundary case 2024-03-10 01:59:59} detroit { + clock format 1710053999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.349 {time zone boundary case 2024-03-10 03:00:00} detroit { + clock format 1710054000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.350 {time zone boundary case 2024-03-10 03:00:01} detroit { + clock format 1710054001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.351 {time zone boundary case 2024-11-03 01:59:59} detroit { + clock format 1730613599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.352 {time zone boundary case 2024-11-03 01:00:00} detroit { + clock format 1730613600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.353 {time zone boundary case 2024-11-03 01:00:01} detroit { + clock format 1730613601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.354 {time zone boundary case 2025-03-09 01:59:59} detroit { + clock format 1741503599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.355 {time zone boundary case 2025-03-09 03:00:00} detroit { + clock format 1741503600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.356 {time zone boundary case 2025-03-09 03:00:01} detroit { + clock format 1741503601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.357 {time zone boundary case 2025-11-02 01:59:59} detroit { + clock format 1762063199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.358 {time zone boundary case 2025-11-02 01:00:00} detroit { + clock format 1762063200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.359 {time zone boundary case 2025-11-02 01:00:01} detroit { + clock format 1762063201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.360 {time zone boundary case 2026-03-08 01:59:59} detroit { + clock format 1772953199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.361 {time zone boundary case 2026-03-08 03:00:00} detroit { + clock format 1772953200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.362 {time zone boundary case 2026-03-08 03:00:01} detroit { + clock format 1772953201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.363 {time zone boundary case 2026-11-01 01:59:59} detroit { + clock format 1793512799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.364 {time zone boundary case 2026-11-01 01:00:00} detroit { + clock format 1793512800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.365 {time zone boundary case 2026-11-01 01:00:01} detroit { + clock format 1793512801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.366 {time zone boundary case 2027-03-14 01:59:59} detroit { + clock format 1805007599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.367 {time zone boundary case 2027-03-14 03:00:00} detroit { + clock format 1805007600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.368 {time zone boundary case 2027-03-14 03:00:01} detroit { + clock format 1805007601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.369 {time zone boundary case 2027-11-07 01:59:59} detroit { + clock format 1825567199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.370 {time zone boundary case 2027-11-07 01:00:00} detroit { + clock format 1825567200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.371 {time zone boundary case 2027-11-07 01:00:01} detroit { + clock format 1825567201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.372 {time zone boundary case 2028-03-12 01:59:59} detroit { + clock format 1836457199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.373 {time zone boundary case 2028-03-12 03:00:00} detroit { + clock format 1836457200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.374 {time zone boundary case 2028-03-12 03:00:01} detroit { + clock format 1836457201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.375 {time zone boundary case 2028-11-05 01:59:59} detroit { + clock format 1857016799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.376 {time zone boundary case 2028-11-05 01:00:00} detroit { + clock format 1857016800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.377 {time zone boundary case 2028-11-05 01:00:01} detroit { + clock format 1857016801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.378 {time zone boundary case 2029-03-11 01:59:59} detroit { + clock format 1867906799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.379 {time zone boundary case 2029-03-11 03:00:00} detroit { + clock format 1867906800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.380 {time zone boundary case 2029-03-11 03:00:01} detroit { + clock format 1867906801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.381 {time zone boundary case 2029-11-04 01:59:59} detroit { + clock format 1888466399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.382 {time zone boundary case 2029-11-04 01:00:00} detroit { + clock format 1888466400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.383 {time zone boundary case 2029-11-04 01:00:01} detroit { + clock format 1888466401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.384 {time zone boundary case 2030-03-10 01:59:59} detroit { + clock format 1899356399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.385 {time zone boundary case 2030-03-10 03:00:00} detroit { + clock format 1899356400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.386 {time zone boundary case 2030-03-10 03:00:01} detroit { + clock format 1899356401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.387 {time zone boundary case 2030-11-03 01:59:59} detroit { + clock format 1919915999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.388 {time zone boundary case 2030-11-03 01:00:00} detroit { + clock format 1919916000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.389 {time zone boundary case 2030-11-03 01:00:01} detroit { + clock format 1919916001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.390 {time zone boundary case 2031-03-09 01:59:59} detroit { + clock format 1930805999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.391 {time zone boundary case 2031-03-09 03:00:00} detroit { + clock format 1930806000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.392 {time zone boundary case 2031-03-09 03:00:01} detroit { + clock format 1930806001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.393 {time zone boundary case 2031-11-02 01:59:59} detroit { + clock format 1951365599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.394 {time zone boundary case 2031-11-02 01:00:00} detroit { + clock format 1951365600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.395 {time zone boundary case 2031-11-02 01:00:01} detroit { + clock format 1951365601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.396 {time zone boundary case 2032-03-14 01:59:59} detroit { + clock format 1962860399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.397 {time zone boundary case 2032-03-14 03:00:00} detroit { + clock format 1962860400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.398 {time zone boundary case 2032-03-14 03:00:01} detroit { + clock format 1962860401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.399 {time zone boundary case 2032-11-07 01:59:59} detroit { + clock format 1983419999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.400 {time zone boundary case 2032-11-07 01:00:00} detroit { + clock format 1983420000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.401 {time zone boundary case 2032-11-07 01:00:01} detroit { + clock format 1983420001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.402 {time zone boundary case 2033-03-13 01:59:59} detroit { + clock format 1994309999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.403 {time zone boundary case 2033-03-13 03:00:00} detroit { + clock format 1994310000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.404 {time zone boundary case 2033-03-13 03:00:01} detroit { + clock format 1994310001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.405 {time zone boundary case 2033-11-06 01:59:59} detroit { + clock format 2014869599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.406 {time zone boundary case 2033-11-06 01:00:00} detroit { + clock format 2014869600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.407 {time zone boundary case 2033-11-06 01:00:01} detroit { + clock format 2014869601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.408 {time zone boundary case 2034-03-12 01:59:59} detroit { + clock format 2025759599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.409 {time zone boundary case 2034-03-12 03:00:00} detroit { + clock format 2025759600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.410 {time zone boundary case 2034-03-12 03:00:01} detroit { + clock format 2025759601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.411 {time zone boundary case 2034-11-05 01:59:59} detroit { + clock format 2046319199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.412 {time zone boundary case 2034-11-05 01:00:00} detroit { + clock format 2046319200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.413 {time zone boundary case 2034-11-05 01:00:01} detroit { + clock format 2046319201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.414 {time zone boundary case 2035-03-11 01:59:59} detroit { + clock format 2057209199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.415 {time zone boundary case 2035-03-11 03:00:00} detroit { + clock format 2057209200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.416 {time zone boundary case 2035-03-11 03:00:01} detroit { + clock format 2057209201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.417 {time zone boundary case 2035-11-04 01:59:59} detroit { + clock format 2077768799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.418 {time zone boundary case 2035-11-04 01:00:00} detroit { + clock format 2077768800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.419 {time zone boundary case 2035-11-04 01:00:01} detroit { + clock format 2077768801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.420 {time zone boundary case 2036-03-09 01:59:59} detroit { + clock format 2088658799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.421 {time zone boundary case 2036-03-09 03:00:00} detroit { + clock format 2088658800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.422 {time zone boundary case 2036-03-09 03:00:01} detroit { + clock format 2088658801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.423 {time zone boundary case 2036-11-02 01:59:59} detroit { + clock format 2109218399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.424 {time zone boundary case 2036-11-02 01:00:00} detroit { + clock format 2109218400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.425 {time zone boundary case 2036-11-02 01:00:01} detroit { + clock format 2109218401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.426 {time zone boundary case 2037-03-08 01:59:59} detroit { + clock format 2120108399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.427 {time zone boundary case 2037-03-08 03:00:00} detroit { + clock format 2120108400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.428 {time zone boundary case 2037-03-08 03:00:01} detroit { + clock format 2120108401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.429 {time zone boundary case 2037-11-01 01:59:59} detroit { + clock format 2140667999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.430 {time zone boundary case 2037-11-01 01:00:00} detroit { + clock format 2140668000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.431 {time zone boundary case 2037-11-01 01:00:01} detroit { + clock format 2140668001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.432 {time zone boundary case 2038-03-14 01:59:59} {detroit y2038} { + clock format 2152162799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.433 {time zone boundary case 2038-03-14 03:00:00} {detroit y2038} { + clock format 2152162800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.434 {time zone boundary case 2038-03-14 03:00:01} {detroit y2038} { + clock format 2152162801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.435 {time zone boundary case 2038-11-07 01:59:59} {detroit y2038} { + clock format 2172722399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.436 {time zone boundary case 2038-11-07 01:00:00} {detroit y2038} { + clock format 2172722400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.437 {time zone boundary case 2038-11-07 01:00:01} {detroit y2038} { + clock format 2172722401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.438 {time zone boundary case 2039-03-13 01:59:59} {detroit y2038} { + clock format 2183612399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.439 {time zone boundary case 2039-03-13 03:00:00} {detroit y2038} { + clock format 2183612400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.440 {time zone boundary case 2039-03-13 03:00:01} {detroit y2038} { + clock format 2183612401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.441 {time zone boundary case 2039-11-06 01:59:59} {detroit y2038} { + clock format 2204171999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.442 {time zone boundary case 2039-11-06 01:00:00} {detroit y2038} { + clock format 2204172000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.443 {time zone boundary case 2039-11-06 01:00:01} {detroit y2038} { + clock format 2204172001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.444 {time zone boundary case 2040-03-11 01:59:59} {detroit y2038} { + clock format 2215061999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.445 {time zone boundary case 2040-03-11 03:00:00} {detroit y2038} { + clock format 2215062000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.446 {time zone boundary case 2040-03-11 03:00:01} {detroit y2038} { + clock format 2215062001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.447 {time zone boundary case 2040-11-04 01:59:59} {detroit y2038} { + clock format 2235621599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.448 {time zone boundary case 2040-11-04 01:00:00} {detroit y2038} { + clock format 2235621600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.449 {time zone boundary case 2040-11-04 01:00:01} {detroit y2038} { + clock format 2235621601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.450 {time zone boundary case 2041-03-10 01:59:59} {detroit y2038} { + clock format 2246511599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.451 {time zone boundary case 2041-03-10 03:00:00} {detroit y2038} { + clock format 2246511600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.452 {time zone boundary case 2041-03-10 03:00:01} {detroit y2038} { + clock format 2246511601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.453 {time zone boundary case 2041-11-03 01:59:59} {detroit y2038} { + clock format 2267071199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.454 {time zone boundary case 2041-11-03 01:00:00} {detroit y2038} { + clock format 2267071200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.455 {time zone boundary case 2041-11-03 01:00:01} {detroit y2038} { + clock format 2267071201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.456 {time zone boundary case 2042-03-09 01:59:59} {detroit y2038} { + clock format 2277961199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.457 {time zone boundary case 2042-03-09 03:00:00} {detroit y2038} { + clock format 2277961200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.458 {time zone boundary case 2042-03-09 03:00:01} {detroit y2038} { + clock format 2277961201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.459 {time zone boundary case 2042-11-02 01:59:59} {detroit y2038} { + clock format 2298520799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.460 {time zone boundary case 2042-11-02 01:00:00} {detroit y2038} { + clock format 2298520800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.461 {time zone boundary case 2042-11-02 01:00:01} {detroit y2038} { + clock format 2298520801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.462 {time zone boundary case 2043-03-08 01:59:59} {detroit y2038} { + clock format 2309410799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.463 {time zone boundary case 2043-03-08 03:00:00} {detroit y2038} { + clock format 2309410800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.464 {time zone boundary case 2043-03-08 03:00:01} {detroit y2038} { + clock format 2309410801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.465 {time zone boundary case 2043-11-01 01:59:59} {detroit y2038} { + clock format 2329970399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.466 {time zone boundary case 2043-11-01 01:00:00} {detroit y2038} { + clock format 2329970400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.467 {time zone boundary case 2043-11-01 01:00:01} {detroit y2038} { + clock format 2329970401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.468 {time zone boundary case 2044-03-13 01:59:59} {detroit y2038} { + clock format 2341465199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.469 {time zone boundary case 2044-03-13 03:00:00} {detroit y2038} { + clock format 2341465200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.470 {time zone boundary case 2044-03-13 03:00:01} {detroit y2038} { + clock format 2341465201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.471 {time zone boundary case 2044-11-06 01:59:59} {detroit y2038} { + clock format 2362024799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.472 {time zone boundary case 2044-11-06 01:00:00} {detroit y2038} { + clock format 2362024800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.473 {time zone boundary case 2044-11-06 01:00:01} {detroit y2038} { + clock format 2362024801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.474 {time zone boundary case 2045-03-12 01:59:59} {detroit y2038} { + clock format 2372914799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.475 {time zone boundary case 2045-03-12 03:00:00} {detroit y2038} { + clock format 2372914800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.476 {time zone boundary case 2045-03-12 03:00:01} {detroit y2038} { + clock format 2372914801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.477 {time zone boundary case 2045-11-05 01:59:59} {detroit y2038} { + clock format 2393474399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.478 {time zone boundary case 2045-11-05 01:00:00} {detroit y2038} { + clock format 2393474400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.479 {time zone boundary case 2045-11-05 01:00:01} {detroit y2038} { + clock format 2393474401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.480 {time zone boundary case 2046-03-11 01:59:59} {detroit y2038} { + clock format 2404364399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.481 {time zone boundary case 2046-03-11 03:00:00} {detroit y2038} { + clock format 2404364400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.482 {time zone boundary case 2046-03-11 03:00:01} {detroit y2038} { + clock format 2404364401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.483 {time zone boundary case 2046-11-04 01:59:59} {detroit y2038} { + clock format 2424923999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.484 {time zone boundary case 2046-11-04 01:00:00} {detroit y2038} { + clock format 2424924000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.485 {time zone boundary case 2046-11-04 01:00:01} {detroit y2038} { + clock format 2424924001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.486 {time zone boundary case 2047-03-10 01:59:59} {detroit y2038} { + clock format 2435813999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.487 {time zone boundary case 2047-03-10 03:00:00} {detroit y2038} { + clock format 2435814000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.488 {time zone boundary case 2047-03-10 03:00:01} {detroit y2038} { + clock format 2435814001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.489 {time zone boundary case 2047-11-03 01:59:59} {detroit y2038} { + clock format 2456373599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.490 {time zone boundary case 2047-11-03 01:00:00} {detroit y2038} { + clock format 2456373600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.491 {time zone boundary case 2047-11-03 01:00:01} {detroit y2038} { + clock format 2456373601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.492 {time zone boundary case 2048-03-08 01:59:59} {detroit y2038} { + clock format 2467263599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.493 {time zone boundary case 2048-03-08 03:00:00} {detroit y2038} { + clock format 2467263600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.494 {time zone boundary case 2048-03-08 03:00:01} {detroit y2038} { + clock format 2467263601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.495 {time zone boundary case 2048-11-01 01:59:59} {detroit y2038} { + clock format 2487823199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.496 {time zone boundary case 2048-11-01 01:00:00} {detroit y2038} { + clock format 2487823200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.497 {time zone boundary case 2048-11-01 01:00:01} {detroit y2038} { + clock format 2487823201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.498 {time zone boundary case 2049-03-14 01:59:59} {detroit y2038} { + clock format 2499317999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.499 {time zone boundary case 2049-03-14 03:00:00} {detroit y2038} { + clock format 2499318000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.500 {time zone boundary case 2049-03-14 03:00:01} {detroit y2038} { + clock format 2499318001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.501 {time zone boundary case 2049-11-07 01:59:59} {detroit y2038} { + clock format 2519877599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.502 {time zone boundary case 2049-11-07 01:00:00} {detroit y2038} { + clock format 2519877600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.503 {time zone boundary case 2049-11-07 01:00:01} {detroit y2038} { + clock format 2519877601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.504 {time zone boundary case 2050-03-13 01:59:59} {detroit y2038} { + clock format 2530767599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.505 {time zone boundary case 2050-03-13 03:00:00} {detroit y2038} { + clock format 2530767600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.506 {time zone boundary case 2050-03-13 03:00:01} {detroit y2038} { + clock format 2530767601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.507 {time zone boundary case 2050-11-06 01:59:59} {detroit y2038} { + clock format 2551327199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.508 {time zone boundary case 2050-11-06 01:00:00} {detroit y2038} { + clock format 2551327200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.509 {time zone boundary case 2050-11-06 01:00:01} {detroit y2038} { + clock format 2551327201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.510 {time zone boundary case 2051-03-12 01:59:59} {detroit y2038} { + clock format 2562217199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.511 {time zone boundary case 2051-03-12 03:00:00} {detroit y2038} { + clock format 2562217200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.512 {time zone boundary case 2051-03-12 03:00:01} {detroit y2038} { + clock format 2562217201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.513 {time zone boundary case 2051-11-05 01:59:59} {detroit y2038} { + clock format 2582776799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.514 {time zone boundary case 2051-11-05 01:00:00} {detroit y2038} { + clock format 2582776800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.515 {time zone boundary case 2051-11-05 01:00:01} {detroit y2038} { + clock format 2582776801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.516 {time zone boundary case 2052-03-10 01:59:59} {detroit y2038} { + clock format 2593666799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.517 {time zone boundary case 2052-03-10 03:00:00} {detroit y2038} { + clock format 2593666800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.518 {time zone boundary case 2052-03-10 03:00:01} {detroit y2038} { + clock format 2593666801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.519 {time zone boundary case 2052-11-03 01:59:59} {detroit y2038} { + clock format 2614226399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.520 {time zone boundary case 2052-11-03 01:00:00} {detroit y2038} { + clock format 2614226400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.521 {time zone boundary case 2052-11-03 01:00:01} {detroit y2038} { + clock format 2614226401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.522 {time zone boundary case 2053-03-09 01:59:59} {detroit y2038} { + clock format 2625116399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.523 {time zone boundary case 2053-03-09 03:00:00} {detroit y2038} { + clock format 2625116400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.524 {time zone boundary case 2053-03-09 03:00:01} {detroit y2038} { + clock format 2625116401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.525 {time zone boundary case 2053-11-02 01:59:59} {detroit y2038} { + clock format 2645675999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.526 {time zone boundary case 2053-11-02 01:00:00} {detroit y2038} { + clock format 2645676000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.527 {time zone boundary case 2053-11-02 01:00:01} {detroit y2038} { + clock format 2645676001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.528 {time zone boundary case 2054-03-08 01:59:59} {detroit y2038} { + clock format 2656565999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.529 {time zone boundary case 2054-03-08 03:00:00} {detroit y2038} { + clock format 2656566000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.530 {time zone boundary case 2054-03-08 03:00:01} {detroit y2038} { + clock format 2656566001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.531 {time zone boundary case 2054-11-01 01:59:59} {detroit y2038} { + clock format 2677125599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.532 {time zone boundary case 2054-11-01 01:00:00} {detroit y2038} { + clock format 2677125600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.533 {time zone boundary case 2054-11-01 01:00:01} {detroit y2038} { + clock format 2677125601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.534 {time zone boundary case 2055-03-14 01:59:59} {detroit y2038} { + clock format 2688620399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.535 {time zone boundary case 2055-03-14 03:00:00} {detroit y2038} { + clock format 2688620400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.536 {time zone boundary case 2055-03-14 03:00:01} {detroit y2038} { + clock format 2688620401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.537 {time zone boundary case 2055-11-07 01:59:59} {detroit y2038} { + clock format 2709179999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.538 {time zone boundary case 2055-11-07 01:00:00} {detroit y2038} { + clock format 2709180000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.539 {time zone boundary case 2055-11-07 01:00:01} {detroit y2038} { + clock format 2709180001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.540 {time zone boundary case 2056-03-12 01:59:59} {detroit y2038} { + clock format 2720069999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.541 {time zone boundary case 2056-03-12 03:00:00} {detroit y2038} { + clock format 2720070000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.542 {time zone boundary case 2056-03-12 03:00:01} {detroit y2038} { + clock format 2720070001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.543 {time zone boundary case 2056-11-05 01:59:59} {detroit y2038} { + clock format 2740629599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.544 {time zone boundary case 2056-11-05 01:00:00} {detroit y2038} { + clock format 2740629600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.545 {time zone boundary case 2056-11-05 01:00:01} {detroit y2038} { + clock format 2740629601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.546 {time zone boundary case 2057-03-11 01:59:59} {detroit y2038} { + clock format 2751519599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.547 {time zone boundary case 2057-03-11 03:00:00} {detroit y2038} { + clock format 2751519600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.548 {time zone boundary case 2057-03-11 03:00:01} {detroit y2038} { + clock format 2751519601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.549 {time zone boundary case 2057-11-04 01:59:59} {detroit y2038} { + clock format 2772079199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.550 {time zone boundary case 2057-11-04 01:00:00} {detroit y2038} { + clock format 2772079200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.551 {time zone boundary case 2057-11-04 01:00:01} {detroit y2038} { + clock format 2772079201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.552 {time zone boundary case 2058-03-10 01:59:59} {detroit y2038} { + clock format 2782969199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.553 {time zone boundary case 2058-03-10 03:00:00} {detroit y2038} { + clock format 2782969200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.554 {time zone boundary case 2058-03-10 03:00:01} {detroit y2038} { + clock format 2782969201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.555 {time zone boundary case 2058-11-03 01:59:59} {detroit y2038} { + clock format 2803528799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.556 {time zone boundary case 2058-11-03 01:00:00} {detroit y2038} { + clock format 2803528800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.557 {time zone boundary case 2058-11-03 01:00:01} {detroit y2038} { + clock format 2803528801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.558 {time zone boundary case 2059-03-09 01:59:59} {detroit y2038} { + clock format 2814418799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.559 {time zone boundary case 2059-03-09 03:00:00} {detroit y2038} { + clock format 2814418800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.560 {time zone boundary case 2059-03-09 03:00:01} {detroit y2038} { + clock format 2814418801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.561 {time zone boundary case 2059-11-02 01:59:59} {detroit y2038} { + clock format 2834978399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.562 {time zone boundary case 2059-11-02 01:00:00} {detroit y2038} { + clock format 2834978400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.563 {time zone boundary case 2059-11-02 01:00:01} {detroit y2038} { + clock format 2834978401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.564 {time zone boundary case 2060-03-14 01:59:59} {detroit y2038} { + clock format 2846473199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.565 {time zone boundary case 2060-03-14 03:00:00} {detroit y2038} { + clock format 2846473200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.566 {time zone boundary case 2060-03-14 03:00:01} {detroit y2038} { + clock format 2846473201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.567 {time zone boundary case 2060-11-07 01:59:59} {detroit y2038} { + clock format 2867032799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.568 {time zone boundary case 2060-11-07 01:00:00} {detroit y2038} { + clock format 2867032800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.569 {time zone boundary case 2060-11-07 01:00:01} {detroit y2038} { + clock format 2867032801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.570 {time zone boundary case 2061-03-13 01:59:59} {detroit y2038} { + clock format 2877922799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.571 {time zone boundary case 2061-03-13 03:00:00} {detroit y2038} { + clock format 2877922800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.572 {time zone boundary case 2061-03-13 03:00:01} {detroit y2038} { + clock format 2877922801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.573 {time zone boundary case 2061-11-06 01:59:59} {detroit y2038} { + clock format 2898482399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.574 {time zone boundary case 2061-11-06 01:00:00} {detroit y2038} { + clock format 2898482400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.575 {time zone boundary case 2061-11-06 01:00:01} {detroit y2038} { + clock format 2898482401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.576 {time zone boundary case 2062-03-12 01:59:59} {detroit y2038} { + clock format 2909372399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.577 {time zone boundary case 2062-03-12 03:00:00} {detroit y2038} { + clock format 2909372400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.578 {time zone boundary case 2062-03-12 03:00:01} {detroit y2038} { + clock format 2909372401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.579 {time zone boundary case 2062-11-05 01:59:59} {detroit y2038} { + clock format 2929931999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.580 {time zone boundary case 2062-11-05 01:00:00} {detroit y2038} { + clock format 2929932000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.581 {time zone boundary case 2062-11-05 01:00:01} {detroit y2038} { + clock format 2929932001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.582 {time zone boundary case 2063-03-11 01:59:59} {detroit y2038} { + clock format 2940821999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.583 {time zone boundary case 2063-03-11 03:00:00} {detroit y2038} { + clock format 2940822000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.584 {time zone boundary case 2063-03-11 03:00:01} {detroit y2038} { + clock format 2940822001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.585 {time zone boundary case 2063-11-04 01:59:59} {detroit y2038} { + clock format 2961381599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.586 {time zone boundary case 2063-11-04 01:00:00} {detroit y2038} { + clock format 2961381600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.587 {time zone boundary case 2063-11-04 01:00:01} {detroit y2038} { + clock format 2961381601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.588 {time zone boundary case 2064-03-09 01:59:59} {detroit y2038} { + clock format 2972271599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.589 {time zone boundary case 2064-03-09 03:00:00} {detroit y2038} { + clock format 2972271600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.590 {time zone boundary case 2064-03-09 03:00:01} {detroit y2038} { + clock format 2972271601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.591 {time zone boundary case 2064-11-02 01:59:59} {detroit y2038} { + clock format 2992831199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.592 {time zone boundary case 2064-11-02 01:00:00} {detroit y2038} { + clock format 2992831200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.593 {time zone boundary case 2064-11-02 01:00:01} {detroit y2038} { + clock format 2992831201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.594 {time zone boundary case 2065-03-08 01:59:59} {detroit y2038} { + clock format 3003721199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.595 {time zone boundary case 2065-03-08 03:00:00} {detroit y2038} { + clock format 3003721200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.596 {time zone boundary case 2065-03-08 03:00:01} {detroit y2038} { + clock format 3003721201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.597 {time zone boundary case 2065-11-01 01:59:59} {detroit y2038} { + clock format 3024280799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.598 {time zone boundary case 2065-11-01 01:00:00} {detroit y2038} { + clock format 3024280800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.599 {time zone boundary case 2065-11-01 01:00:01} {detroit y2038} { + clock format 3024280801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.600 {time zone boundary case 2066-03-14 01:59:59} {detroit y2038} { + clock format 3035775599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.601 {time zone boundary case 2066-03-14 03:00:00} {detroit y2038} { + clock format 3035775600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.602 {time zone boundary case 2066-03-14 03:00:01} {detroit y2038} { + clock format 3035775601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.603 {time zone boundary case 2066-11-07 01:59:59} {detroit y2038} { + clock format 3056335199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.604 {time zone boundary case 2066-11-07 01:00:00} {detroit y2038} { + clock format 3056335200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.605 {time zone boundary case 2066-11-07 01:00:01} {detroit y2038} { + clock format 3056335201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.606 {time zone boundary case 2067-03-13 01:59:59} {detroit y2038} { + clock format 3067225199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.607 {time zone boundary case 2067-03-13 03:00:00} {detroit y2038} { + clock format 3067225200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.608 {time zone boundary case 2067-03-13 03:00:01} {detroit y2038} { + clock format 3067225201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.609 {time zone boundary case 2067-11-06 01:59:59} {detroit y2038} { + clock format 3087784799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.610 {time zone boundary case 2067-11-06 01:00:00} {detroit y2038} { + clock format 3087784800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.611 {time zone boundary case 2067-11-06 01:00:01} {detroit y2038} { + clock format 3087784801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.612 {time zone boundary case 2068-03-11 01:59:59} {detroit y2038} { + clock format 3098674799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.613 {time zone boundary case 2068-03-11 03:00:00} {detroit y2038} { + clock format 3098674800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.614 {time zone boundary case 2068-03-11 03:00:01} {detroit y2038} { + clock format 3098674801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.615 {time zone boundary case 2068-11-04 01:59:59} {detroit y2038} { + clock format 3119234399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.616 {time zone boundary case 2068-11-04 01:00:00} {detroit y2038} { + clock format 3119234400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.617 {time zone boundary case 2068-11-04 01:00:01} {detroit y2038} { + clock format 3119234401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.618 {time zone boundary case 2069-03-10 01:59:59} {detroit y2038} { + clock format 3130124399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.619 {time zone boundary case 2069-03-10 03:00:00} {detroit y2038} { + clock format 3130124400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.620 {time zone boundary case 2069-03-10 03:00:01} {detroit y2038} { + clock format 3130124401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.621 {time zone boundary case 2069-11-03 01:59:59} {detroit y2038} { + clock format 3150683999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.622 {time zone boundary case 2069-11-03 01:00:00} {detroit y2038} { + clock format 3150684000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.623 {time zone boundary case 2069-11-03 01:00:01} {detroit y2038} { + clock format 3150684001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.624 {time zone boundary case 2070-03-09 01:59:59} {detroit y2038} { + clock format 3161573999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.625 {time zone boundary case 2070-03-09 03:00:00} {detroit y2038} { + clock format 3161574000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.626 {time zone boundary case 2070-03-09 03:00:01} {detroit y2038} { + clock format 3161574001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.627 {time zone boundary case 2070-11-02 01:59:59} {detroit y2038} { + clock format 3182133599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.628 {time zone boundary case 2070-11-02 01:00:00} {detroit y2038} { + clock format 3182133600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.629 {time zone boundary case 2070-11-02 01:00:01} {detroit y2038} { + clock format 3182133601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.630 {time zone boundary case 2071-03-08 01:59:59} {detroit y2038} { + clock format 3193023599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.631 {time zone boundary case 2071-03-08 03:00:00} {detroit y2038} { + clock format 3193023600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.632 {time zone boundary case 2071-03-08 03:00:01} {detroit y2038} { + clock format 3193023601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.633 {time zone boundary case 2071-11-01 01:59:59} {detroit y2038} { + clock format 3213583199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.634 {time zone boundary case 2071-11-01 01:00:00} {detroit y2038} { + clock format 3213583200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.635 {time zone boundary case 2071-11-01 01:00:01} {detroit y2038} { + clock format 3213583201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.636 {time zone boundary case 2072-03-13 01:59:59} {detroit y2038} { + clock format 3225077999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.637 {time zone boundary case 2072-03-13 03:00:00} {detroit y2038} { + clock format 3225078000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.638 {time zone boundary case 2072-03-13 03:00:01} {detroit y2038} { + clock format 3225078001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.639 {time zone boundary case 2072-11-06 01:59:59} {detroit y2038} { + clock format 3245637599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.640 {time zone boundary case 2072-11-06 01:00:00} {detroit y2038} { + clock format 3245637600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.641 {time zone boundary case 2072-11-06 01:00:01} {detroit y2038} { + clock format 3245637601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.642 {time zone boundary case 2073-03-12 01:59:59} {detroit y2038} { + clock format 3256527599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.643 {time zone boundary case 2073-03-12 03:00:00} {detroit y2038} { + clock format 3256527600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.644 {time zone boundary case 2073-03-12 03:00:01} {detroit y2038} { + clock format 3256527601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.645 {time zone boundary case 2073-11-05 01:59:59} {detroit y2038} { + clock format 3277087199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.646 {time zone boundary case 2073-11-05 01:00:00} {detroit y2038} { + clock format 3277087200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.647 {time zone boundary case 2073-11-05 01:00:01} {detroit y2038} { + clock format 3277087201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.648 {time zone boundary case 2074-03-11 01:59:59} {detroit y2038} { + clock format 3287977199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.649 {time zone boundary case 2074-03-11 03:00:00} {detroit y2038} { + clock format 3287977200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.650 {time zone boundary case 2074-03-11 03:00:01} {detroit y2038} { + clock format 3287977201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.651 {time zone boundary case 2074-11-04 01:59:59} {detroit y2038} { + clock format 3308536799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.652 {time zone boundary case 2074-11-04 01:00:00} {detroit y2038} { + clock format 3308536800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.653 {time zone boundary case 2074-11-04 01:00:01} {detroit y2038} { + clock format 3308536801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.654 {time zone boundary case 2075-03-10 01:59:59} {detroit y2038} { + clock format 3319426799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.655 {time zone boundary case 2075-03-10 03:00:00} {detroit y2038} { + clock format 3319426800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.656 {time zone boundary case 2075-03-10 03:00:01} {detroit y2038} { + clock format 3319426801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.657 {time zone boundary case 2075-11-03 01:59:59} {detroit y2038} { + clock format 3339986399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.658 {time zone boundary case 2075-11-03 01:00:00} {detroit y2038} { + clock format 3339986400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.659 {time zone boundary case 2075-11-03 01:00:01} {detroit y2038} { + clock format 3339986401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.660 {time zone boundary case 2076-03-08 01:59:59} {detroit y2038} { + clock format 3350876399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.661 {time zone boundary case 2076-03-08 03:00:00} {detroit y2038} { + clock format 3350876400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.662 {time zone boundary case 2076-03-08 03:00:01} {detroit y2038} { + clock format 3350876401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.663 {time zone boundary case 2076-11-01 01:59:59} {detroit y2038} { + clock format 3371435999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.664 {time zone boundary case 2076-11-01 01:00:00} {detroit y2038} { + clock format 3371436000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.665 {time zone boundary case 2076-11-01 01:00:01} {detroit y2038} { + clock format 3371436001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.666 {time zone boundary case 2077-03-14 01:59:59} {detroit y2038} { + clock format 3382930799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.667 {time zone boundary case 2077-03-14 03:00:00} {detroit y2038} { + clock format 3382930800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.668 {time zone boundary case 2077-03-14 03:00:01} {detroit y2038} { + clock format 3382930801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.669 {time zone boundary case 2077-11-07 01:59:59} {detroit y2038} { + clock format 3403490399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.670 {time zone boundary case 2077-11-07 01:00:00} {detroit y2038} { + clock format 3403490400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.671 {time zone boundary case 2077-11-07 01:00:01} {detroit y2038} { + clock format 3403490401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.672 {time zone boundary case 2078-03-13 01:59:59} {detroit y2038} { + clock format 3414380399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.673 {time zone boundary case 2078-03-13 03:00:00} {detroit y2038} { + clock format 3414380400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.674 {time zone boundary case 2078-03-13 03:00:01} {detroit y2038} { + clock format 3414380401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.675 {time zone boundary case 2078-11-06 01:59:59} {detroit y2038} { + clock format 3434939999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.676 {time zone boundary case 2078-11-06 01:00:00} {detroit y2038} { + clock format 3434940000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.677 {time zone boundary case 2078-11-06 01:00:01} {detroit y2038} { + clock format 3434940001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.678 {time zone boundary case 2079-03-12 01:59:59} {detroit y2038} { + clock format 3445829999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.679 {time zone boundary case 2079-03-12 03:00:00} {detroit y2038} { + clock format 3445830000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.680 {time zone boundary case 2079-03-12 03:00:01} {detroit y2038} { + clock format 3445830001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.681 {time zone boundary case 2079-11-05 01:59:59} {detroit y2038} { + clock format 3466389599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.682 {time zone boundary case 2079-11-05 01:00:00} {detroit y2038} { + clock format 3466389600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.683 {time zone boundary case 2079-11-05 01:00:01} {detroit y2038} { + clock format 3466389601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.684 {time zone boundary case 2080-03-10 01:59:59} {detroit y2038} { + clock format 3477279599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.685 {time zone boundary case 2080-03-10 03:00:00} {detroit y2038} { + clock format 3477279600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.686 {time zone boundary case 2080-03-10 03:00:01} {detroit y2038} { + clock format 3477279601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.687 {time zone boundary case 2080-11-03 01:59:59} {detroit y2038} { + clock format 3497839199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.688 {time zone boundary case 2080-11-03 01:00:00} {detroit y2038} { + clock format 3497839200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.689 {time zone boundary case 2080-11-03 01:00:01} {detroit y2038} { + clock format 3497839201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.690 {time zone boundary case 2081-03-09 01:59:59} {detroit y2038} { + clock format 3508729199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.691 {time zone boundary case 2081-03-09 03:00:00} {detroit y2038} { + clock format 3508729200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.692 {time zone boundary case 2081-03-09 03:00:01} {detroit y2038} { + clock format 3508729201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.693 {time zone boundary case 2081-11-02 01:59:59} {detroit y2038} { + clock format 3529288799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.694 {time zone boundary case 2081-11-02 01:00:00} {detroit y2038} { + clock format 3529288800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.695 {time zone boundary case 2081-11-02 01:00:01} {detroit y2038} { + clock format 3529288801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.696 {time zone boundary case 2082-03-08 01:59:59} {detroit y2038} { + clock format 3540178799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.697 {time zone boundary case 2082-03-08 03:00:00} {detroit y2038} { + clock format 3540178800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.698 {time zone boundary case 2082-03-08 03:00:01} {detroit y2038} { + clock format 3540178801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.699 {time zone boundary case 2082-11-01 01:59:59} {detroit y2038} { + clock format 3560738399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.700 {time zone boundary case 2082-11-01 01:00:00} {detroit y2038} { + clock format 3560738400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.701 {time zone boundary case 2082-11-01 01:00:01} {detroit y2038} { + clock format 3560738401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.702 {time zone boundary case 2083-03-14 01:59:59} {detroit y2038} { + clock format 3572233199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.703 {time zone boundary case 2083-03-14 03:00:00} {detroit y2038} { + clock format 3572233200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.704 {time zone boundary case 2083-03-14 03:00:01} {detroit y2038} { + clock format 3572233201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.705 {time zone boundary case 2083-11-07 01:59:59} {detroit y2038} { + clock format 3592792799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.706 {time zone boundary case 2083-11-07 01:00:00} {detroit y2038} { + clock format 3592792800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.707 {time zone boundary case 2083-11-07 01:00:01} {detroit y2038} { + clock format 3592792801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.708 {time zone boundary case 2084-03-12 01:59:59} {detroit y2038} { + clock format 3603682799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.709 {time zone boundary case 2084-03-12 03:00:00} {detroit y2038} { + clock format 3603682800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.710 {time zone boundary case 2084-03-12 03:00:01} {detroit y2038} { + clock format 3603682801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.711 {time zone boundary case 2084-11-05 01:59:59} {detroit y2038} { + clock format 3624242399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.712 {time zone boundary case 2084-11-05 01:00:00} {detroit y2038} { + clock format 3624242400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.713 {time zone boundary case 2084-11-05 01:00:01} {detroit y2038} { + clock format 3624242401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.714 {time zone boundary case 2085-03-11 01:59:59} {detroit y2038} { + clock format 3635132399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.715 {time zone boundary case 2085-03-11 03:00:00} {detroit y2038} { + clock format 3635132400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.716 {time zone boundary case 2085-03-11 03:00:01} {detroit y2038} { + clock format 3635132401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.717 {time zone boundary case 2085-11-04 01:59:59} {detroit y2038} { + clock format 3655691999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.718 {time zone boundary case 2085-11-04 01:00:00} {detroit y2038} { + clock format 3655692000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.719 {time zone boundary case 2085-11-04 01:00:01} {detroit y2038} { + clock format 3655692001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.720 {time zone boundary case 2086-03-10 01:59:59} {detroit y2038} { + clock format 3666581999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.721 {time zone boundary case 2086-03-10 03:00:00} {detroit y2038} { + clock format 3666582000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.722 {time zone boundary case 2086-03-10 03:00:01} {detroit y2038} { + clock format 3666582001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.723 {time zone boundary case 2086-11-03 01:59:59} {detroit y2038} { + clock format 3687141599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.724 {time zone boundary case 2086-11-03 01:00:00} {detroit y2038} { + clock format 3687141600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.725 {time zone boundary case 2086-11-03 01:00:01} {detroit y2038} { + clock format 3687141601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.726 {time zone boundary case 2087-03-09 01:59:59} {detroit y2038} { + clock format 3698031599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.727 {time zone boundary case 2087-03-09 03:00:00} {detroit y2038} { + clock format 3698031600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.728 {time zone boundary case 2087-03-09 03:00:01} {detroit y2038} { + clock format 3698031601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.729 {time zone boundary case 2087-11-02 01:59:59} {detroit y2038} { + clock format 3718591199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.730 {time zone boundary case 2087-11-02 01:00:00} {detroit y2038} { + clock format 3718591200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.731 {time zone boundary case 2087-11-02 01:00:01} {detroit y2038} { + clock format 3718591201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.732 {time zone boundary case 2088-03-14 01:59:59} {detroit y2038} { + clock format 3730085999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.733 {time zone boundary case 2088-03-14 03:00:00} {detroit y2038} { + clock format 3730086000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.734 {time zone boundary case 2088-03-14 03:00:01} {detroit y2038} { + clock format 3730086001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.735 {time zone boundary case 2088-11-07 01:59:59} {detroit y2038} { + clock format 3750645599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.736 {time zone boundary case 2088-11-07 01:00:00} {detroit y2038} { + clock format 3750645600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.737 {time zone boundary case 2088-11-07 01:00:01} {detroit y2038} { + clock format 3750645601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.738 {time zone boundary case 2089-03-13 01:59:59} {detroit y2038} { + clock format 3761535599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.739 {time zone boundary case 2089-03-13 03:00:00} {detroit y2038} { + clock format 3761535600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.740 {time zone boundary case 2089-03-13 03:00:01} {detroit y2038} { + clock format 3761535601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.741 {time zone boundary case 2089-11-06 01:59:59} {detroit y2038} { + clock format 3782095199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.742 {time zone boundary case 2089-11-06 01:00:00} {detroit y2038} { + clock format 3782095200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.743 {time zone boundary case 2089-11-06 01:00:01} {detroit y2038} { + clock format 3782095201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.744 {time zone boundary case 2090-03-12 01:59:59} {detroit y2038} { + clock format 3792985199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.745 {time zone boundary case 2090-03-12 03:00:00} {detroit y2038} { + clock format 3792985200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.746 {time zone boundary case 2090-03-12 03:00:01} {detroit y2038} { + clock format 3792985201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.747 {time zone boundary case 2090-11-05 01:59:59} {detroit y2038} { + clock format 3813544799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.748 {time zone boundary case 2090-11-05 01:00:00} {detroit y2038} { + clock format 3813544800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.749 {time zone boundary case 2090-11-05 01:00:01} {detroit y2038} { + clock format 3813544801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.750 {time zone boundary case 2091-03-11 01:59:59} {detroit y2038} { + clock format 3824434799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.751 {time zone boundary case 2091-03-11 03:00:00} {detroit y2038} { + clock format 3824434800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.752 {time zone boundary case 2091-03-11 03:00:01} {detroit y2038} { + clock format 3824434801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.753 {time zone boundary case 2091-11-04 01:59:59} {detroit y2038} { + clock format 3844994399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.754 {time zone boundary case 2091-11-04 01:00:00} {detroit y2038} { + clock format 3844994400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.755 {time zone boundary case 2091-11-04 01:00:01} {detroit y2038} { + clock format 3844994401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.756 {time zone boundary case 2092-03-09 01:59:59} {detroit y2038} { + clock format 3855884399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.757 {time zone boundary case 2092-03-09 03:00:00} {detroit y2038} { + clock format 3855884400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.758 {time zone boundary case 2092-03-09 03:00:01} {detroit y2038} { + clock format 3855884401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.759 {time zone boundary case 2092-11-02 01:59:59} {detroit y2038} { + clock format 3876443999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.760 {time zone boundary case 2092-11-02 01:00:00} {detroit y2038} { + clock format 3876444000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.761 {time zone boundary case 2092-11-02 01:00:01} {detroit y2038} { + clock format 3876444001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.762 {time zone boundary case 2093-03-08 01:59:59} {detroit y2038} { + clock format 3887333999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.763 {time zone boundary case 2093-03-08 03:00:00} {detroit y2038} { + clock format 3887334000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.764 {time zone boundary case 2093-03-08 03:00:01} {detroit y2038} { + clock format 3887334001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.765 {time zone boundary case 2093-11-01 01:59:59} {detroit y2038} { + clock format 3907893599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.766 {time zone boundary case 2093-11-01 01:00:00} {detroit y2038} { + clock format 3907893600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.767 {time zone boundary case 2093-11-01 01:00:01} {detroit y2038} { + clock format 3907893601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.768 {time zone boundary case 2094-03-14 01:59:59} {detroit y2038} { + clock format 3919388399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.769 {time zone boundary case 2094-03-14 03:00:00} {detroit y2038} { + clock format 3919388400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.770 {time zone boundary case 2094-03-14 03:00:01} {detroit y2038} { + clock format 3919388401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.771 {time zone boundary case 2094-11-07 01:59:59} {detroit y2038} { + clock format 3939947999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.772 {time zone boundary case 2094-11-07 01:00:00} {detroit y2038} { + clock format 3939948000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.773 {time zone boundary case 2094-11-07 01:00:01} {detroit y2038} { + clock format 3939948001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.774 {time zone boundary case 2095-03-13 01:59:59} {detroit y2038} { + clock format 3950837999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.775 {time zone boundary case 2095-03-13 03:00:00} {detroit y2038} { + clock format 3950838000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.776 {time zone boundary case 2095-03-13 03:00:01} {detroit y2038} { + clock format 3950838001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.777 {time zone boundary case 2095-11-06 01:59:59} {detroit y2038} { + clock format 3971397599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.778 {time zone boundary case 2095-11-06 01:00:00} {detroit y2038} { + clock format 3971397600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.779 {time zone boundary case 2095-11-06 01:00:01} {detroit y2038} { + clock format 3971397601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.780 {time zone boundary case 2096-03-11 01:59:59} {detroit y2038} { + clock format 3982287599 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.781 {time zone boundary case 2096-03-11 03:00:00} {detroit y2038} { + clock format 3982287600 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.782 {time zone boundary case 2096-03-11 03:00:01} {detroit y2038} { + clock format 3982287601 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.783 {time zone boundary case 2096-11-04 01:59:59} {detroit y2038} { + clock format 4002847199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.784 {time zone boundary case 2096-11-04 01:00:00} {detroit y2038} { + clock format 4002847200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.785 {time zone boundary case 2096-11-04 01:00:01} {detroit y2038} { + clock format 4002847201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.786 {time zone boundary case 2097-03-10 01:59:59} {detroit y2038} { + clock format 4013737199 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.787 {time zone boundary case 2097-03-10 03:00:00} {detroit y2038} { + clock format 4013737200 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.788 {time zone boundary case 2097-03-10 03:00:01} {detroit y2038} { + clock format 4013737201 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.789 {time zone boundary case 2097-11-03 01:59:59} {detroit y2038} { + clock format 4034296799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.790 {time zone boundary case 2097-11-03 01:00:00} {detroit y2038} { + clock format 4034296800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.791 {time zone boundary case 2097-11-03 01:00:01} {detroit y2038} { + clock format 4034296801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.792 {time zone boundary case 2098-03-09 01:59:59} {detroit y2038} { + clock format 4045186799 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.793 {time zone boundary case 2098-03-09 03:00:00} {detroit y2038} { + clock format 4045186800 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.794 {time zone boundary case 2098-03-09 03:00:01} {detroit y2038} { + clock format 4045186801 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.795 {time zone boundary case 2098-11-02 01:59:59} {detroit y2038} { + clock format 4065746399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.796 {time zone boundary case 2098-11-02 01:00:00} {detroit y2038} { + clock format 4065746400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.797 {time zone boundary case 2098-11-02 01:00:01} {detroit y2038} { + clock format 4065746401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +test clock-5.798 {time zone boundary case 2099-03-08 01:59:59} {detroit y2038} { + clock format 4076636399 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0500 EST} +test clock-5.799 {time zone boundary case 2099-03-08 03:00:00} {detroit y2038} { + clock format 4076636400 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:00 -0400 EDT} +test clock-5.800 {time zone boundary case 2099-03-08 03:00:01} {detroit y2038} { + clock format 4076636401 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {03:00:01 -0400 EDT} +test clock-5.801 {time zone boundary case 2099-11-01 01:59:59} {detroit y2038} { + clock format 4097195999 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:59:59 -0400 EDT} +test clock-5.802 {time zone boundary case 2099-11-01 01:00:00} {detroit y2038} { + clock format 4097196000 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:00 -0500 EST} +test clock-5.803 {time zone boundary case 2099-11-01 01:00:01} {detroit y2038} { + clock format 4097196001 -format {%H:%M:%S %z %Z} \ + -timezone :America/Detroit +} {01:00:01 -0500 EST} +# END testcases5 + +# Test input conversions. + +test clock-6.0 {input of seconds} { + clock scan {-9223372036854775808} -format %s -gmt true +} -9223372036854775808 + +test clock-6.1 {input of seconds} { + clock scan {-2147483649} -format %s -gmt true +} -2147483649 + +test clock-6.2 {input of seconds} { + clock scan {-2147483648} -format %s -gmt true +} -2147483648 + +test clock-6.3 {input of seconds} { + clock scan {-1} -format %s -gmt true +} -1 + +test clock-6.4 {input of seconds} { + clock scan {0} -format %s -gmt true +} 0 + +test clock-6.5 {input of seconds} { + clock scan {1} -format %s -gmt true +} 1 + +test clock-6.6 {input of seconds} { + clock scan {2147483647} -format %s -gmt true +} 2147483647 + +test clock-6.7 {input of seconds} { + clock scan {2147483648} -format %s -gmt true +} 2147483648 + +test clock-6.8 {input of seconds} { + clock scan {9223372036854775807} -format %s -gmt true +} 9223372036854775807 + +test clock-6.9 {input of seconds - overflow} { + list [catch {clock scan -9223372036854775809 -format %s -gmt true} result] $result +} {1 {integer value too large to represent}} + +test clock-6.10 {input of seconds - overflow} { + list [catch {clock scan 9223372036854775808 -format %s -gmt true} result] $result +} {1 {integer value too large to represent}} + +test clock-6.11 {input of seconds - two values} { + clock scan {1 2} -format {%s %s} -gmt true +} 2 + +test clock-7.1 {Julian Day} { + clock scan 0 -format %J -gmt true +} -210866803200 + +test clock-7.2 {Julian Day} { + clock format [clock scan 2440588 -format %J -gmt true] \ + -format %Y-%m-%d -gmt true +} 1970-01-01 + +test clock-7.3 {Julian Day} { + clock format [clock scan 2451545 -format %J -gmt true] \ + -format %Y-%m-%d -gmt true +} 2000-01-01 + +test clock-7.3.1 {Julian Day} { + clock format [clock scan 2488070 -format %J -gmt true] \ + -format %Y-%m-%d -gmt true +} 2100-01-01 + +test clock-7.4 {Julian Day} { + clock format [clock scan 5373484 -format %J -gmt true] \ + -format %Y-%m-%d -gmt true +} 9999-12-31 + +test clock-7.5 {Julian Day, bad} { + list [catch { + clock scan bogus -format %J + } result] $result $errorCode +} {1 {input string does not match supplied format} {CLOCK badInputString}} + +test clock-7.6 {Julian Day, overflow} { + list [catch { + clock scan 5373485 -format %J + } result] $result $errorCode +} {1 {requested date too large to represent} {CLOCK dateTooLarge}} + +test clock-7.7 {Julian Day, overflow} { + list [catch { + clock scan 2147483648 -format %J + } result] $result $errorCode +} {1 {requested date too large to represent} {CLOCK dateTooLarge}} + +test clock-7.8 {Julian Day, precedence below seconds} { + list [clock scan {2440588 86400} -format {%J %s} -gmt true] \ + [clock scan {2440589 0} -format {%J %s} -gmt true] \ + [clock scan {86400 2440588} -format {%s %J} -gmt true] \ + [clock scan {0 2440589} -format {%s %J} -gmt true] +} {86400 0 86400 0} + +test clock-7.9 {Julian Day, two values} { + clock scan {2440588 2440589} -format {%J %J} -gmt true +} 86400 + +# BEGIN testcases8 + +# Test parsing of ccyymmdd + +test clock-8.1 {parse ccyymmdd} { + clock scan {1970 Jan 02} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.2 {parse ccyymmdd} { + clock scan {1970 Jan ii} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.3 {parse ccyymmdd} { + clock scan {1970 Jan 2} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.4 {parse ccyymmdd} { + clock scan {1970 Jan ii} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.5 {parse ccyymmdd} { + clock scan {1970 January 02} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.6 {parse ccyymmdd} { + clock scan {1970 January ii} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.7 {parse ccyymmdd} { + clock scan {1970 January 2} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.8 {parse ccyymmdd} { + clock scan {1970 January ii} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.9 {parse ccyymmdd} { + clock scan {1970 Jan 02} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.10 {parse ccyymmdd} { + clock scan {1970 Jan ii} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.11 {parse ccyymmdd} { + clock scan {1970 Jan 2} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.12 {parse ccyymmdd} { + clock scan {1970 Jan ii} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.13 {parse ccyymmdd} { + clock scan {1970 01 02} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.14 {parse ccyymmdd} { + clock scan {1970 01 ii} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.15 {parse ccyymmdd} { + clock scan {1970 01 2} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.16 {parse ccyymmdd} { + clock scan {1970 01 ii} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.17 {parse ccyymmdd} { + clock scan {1970 i 02} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.18 {parse ccyymmdd} { + clock scan {1970 i ii} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.19 {parse ccyymmdd} { + clock scan {1970 i 2} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.20 {parse ccyymmdd} { + clock scan {1970 i ii} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.21 {parse ccyymmdd} { + clock scan {1970 1 02} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.22 {parse ccyymmdd} { + clock scan {1970 1 ii} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.23 {parse ccyymmdd} { + clock scan {1970 1 2} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.24 {parse ccyymmdd} { + clock scan {1970 1 ii} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.25 {parse ccyymmdd} { + clock scan {1970 Jan 02} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.26 {parse ccyymmdd} { + clock scan {1970 Jan ii} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.27 {parse ccyymmdd} { + clock scan {1970 Jan 2} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.28 {parse ccyymmdd} { + clock scan {1970 Jan ii} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.29 {parse ccyymmdd} { + clock scan {1970 January 02} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.30 {parse ccyymmdd} { + clock scan {1970 January ii} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.31 {parse ccyymmdd} { + clock scan {1970 January 2} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.32 {parse ccyymmdd} { + clock scan {1970 January ii} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.33 {parse ccyymmdd} { + clock scan {1970 Jan 02} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.34 {parse ccyymmdd} { + clock scan {1970 Jan ii} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.35 {parse ccyymmdd} { + clock scan {1970 Jan 2} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.36 {parse ccyymmdd} { + clock scan {1970 Jan ii} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.37 {parse ccyymmdd} { + clock scan {1970 01 02} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.38 {parse ccyymmdd} { + clock scan {1970 01 ii} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.39 {parse ccyymmdd} { + clock scan {1970 01 2} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.40 {parse ccyymmdd} { + clock scan {1970 01 ii} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.41 {parse ccyymmdd} { + clock scan {1970 i 02} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.42 {parse ccyymmdd} { + clock scan {1970 i ii} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.43 {parse ccyymmdd} { + clock scan {1970 i 2} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.44 {parse ccyymmdd} { + clock scan {1970 i ii} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.45 {parse ccyymmdd} { + clock scan {1970 1 02} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.46 {parse ccyymmdd} { + clock scan {1970 1 ii} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.47 {parse ccyymmdd} { + clock scan {1970 1 2} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.48 {parse ccyymmdd} { + clock scan {1970 1 ii} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-8.49 {parse ccyymmdd} { + clock scan 01/02/1970 -format %x -locale en_US_roman -gmt 1 +} 86400 +test clock-8.50 {parse ccyymmdd} { + clock scan 01/02/1970 -format %D -locale en_US_roman -gmt 1 +} 86400 +test clock-8.51 {parse ccyymmdd} { + clock scan {1970 Jan 31} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.52 {parse ccyymmdd} { + clock scan {1970 Jan xxxi} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.53 {parse ccyymmdd} { + clock scan {1970 Jan 31} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.54 {parse ccyymmdd} { + clock scan {1970 Jan xxxi} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.55 {parse ccyymmdd} { + clock scan {1970 January 31} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.56 {parse ccyymmdd} { + clock scan {1970 January xxxi} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.57 {parse ccyymmdd} { + clock scan {1970 January 31} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.58 {parse ccyymmdd} { + clock scan {1970 January xxxi} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.59 {parse ccyymmdd} { + clock scan {1970 Jan 31} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.60 {parse ccyymmdd} { + clock scan {1970 Jan xxxi} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.61 {parse ccyymmdd} { + clock scan {1970 Jan 31} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.62 {parse ccyymmdd} { + clock scan {1970 Jan xxxi} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.63 {parse ccyymmdd} { + clock scan {1970 01 31} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.64 {parse ccyymmdd} { + clock scan {1970 01 xxxi} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.65 {parse ccyymmdd} { + clock scan {1970 01 31} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.66 {parse ccyymmdd} { + clock scan {1970 01 xxxi} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.67 {parse ccyymmdd} { + clock scan {1970 i 31} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.68 {parse ccyymmdd} { + clock scan {1970 i xxxi} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.69 {parse ccyymmdd} { + clock scan {1970 i 31} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.70 {parse ccyymmdd} { + clock scan {1970 i xxxi} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.71 {parse ccyymmdd} { + clock scan {1970 1 31} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.72 {parse ccyymmdd} { + clock scan {1970 1 xxxi} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.73 {parse ccyymmdd} { + clock scan {1970 1 31} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.74 {parse ccyymmdd} { + clock scan {1970 1 xxxi} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.75 {parse ccyymmdd} { + clock scan {1970 Jan 31} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.76 {parse ccyymmdd} { + clock scan {1970 Jan xxxi} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.77 {parse ccyymmdd} { + clock scan {1970 Jan 31} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.78 {parse ccyymmdd} { + clock scan {1970 Jan xxxi} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.79 {parse ccyymmdd} { + clock scan {1970 January 31} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.80 {parse ccyymmdd} { + clock scan {1970 January xxxi} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.81 {parse ccyymmdd} { + clock scan {1970 January 31} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.82 {parse ccyymmdd} { + clock scan {1970 January xxxi} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.83 {parse ccyymmdd} { + clock scan {1970 Jan 31} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.84 {parse ccyymmdd} { + clock scan {1970 Jan xxxi} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.85 {parse ccyymmdd} { + clock scan {1970 Jan 31} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.86 {parse ccyymmdd} { + clock scan {1970 Jan xxxi} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.87 {parse ccyymmdd} { + clock scan {1970 01 31} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.88 {parse ccyymmdd} { + clock scan {1970 01 xxxi} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.89 {parse ccyymmdd} { + clock scan {1970 01 31} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.90 {parse ccyymmdd} { + clock scan {1970 01 xxxi} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.91 {parse ccyymmdd} { + clock scan {1970 i 31} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.92 {parse ccyymmdd} { + clock scan {1970 i xxxi} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.93 {parse ccyymmdd} { + clock scan {1970 i 31} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.94 {parse ccyymmdd} { + clock scan {1970 i xxxi} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.95 {parse ccyymmdd} { + clock scan {1970 1 31} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.96 {parse ccyymmdd} { + clock scan {1970 1 xxxi} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.97 {parse ccyymmdd} { + clock scan {1970 1 31} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.98 {parse ccyymmdd} { + clock scan {1970 1 xxxi} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.99 {parse ccyymmdd} { + clock scan 01/31/1970 -format %x -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.100 {parse ccyymmdd} { + clock scan 01/31/1970 -format %D -locale en_US_roman -gmt 1 +} 2592000 +test clock-8.101 {parse ccyymmdd} { + clock scan {1970 Dec 02} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.102 {parse ccyymmdd} { + clock scan {1970 Dec ii} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.103 {parse ccyymmdd} { + clock scan {1970 Dec 2} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.104 {parse ccyymmdd} { + clock scan {1970 Dec ii} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.105 {parse ccyymmdd} { + clock scan {1970 December 02} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.106 {parse ccyymmdd} { + clock scan {1970 December ii} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.107 {parse ccyymmdd} { + clock scan {1970 December 2} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.108 {parse ccyymmdd} { + clock scan {1970 December ii} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.109 {parse ccyymmdd} { + clock scan {1970 Dec 02} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.110 {parse ccyymmdd} { + clock scan {1970 Dec ii} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.111 {parse ccyymmdd} { + clock scan {1970 Dec 2} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.112 {parse ccyymmdd} { + clock scan {1970 Dec ii} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.113 {parse ccyymmdd} { + clock scan {1970 12 02} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.114 {parse ccyymmdd} { + clock scan {1970 12 ii} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.115 {parse ccyymmdd} { + clock scan {1970 12 2} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.116 {parse ccyymmdd} { + clock scan {1970 12 ii} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.117 {parse ccyymmdd} { + clock scan {1970 xii 02} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.118 {parse ccyymmdd} { + clock scan {1970 xii ii} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.119 {parse ccyymmdd} { + clock scan {1970 xii 2} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.120 {parse ccyymmdd} { + clock scan {1970 xii ii} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.121 {parse ccyymmdd} { + clock scan {1970 12 02} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.122 {parse ccyymmdd} { + clock scan {1970 12 ii} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.123 {parse ccyymmdd} { + clock scan {1970 12 2} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.124 {parse ccyymmdd} { + clock scan {1970 12 ii} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.125 {parse ccyymmdd} { + clock scan {1970 Dec 02} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.126 {parse ccyymmdd} { + clock scan {1970 Dec ii} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.127 {parse ccyymmdd} { + clock scan {1970 Dec 2} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.128 {parse ccyymmdd} { + clock scan {1970 Dec ii} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.129 {parse ccyymmdd} { + clock scan {1970 December 02} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.130 {parse ccyymmdd} { + clock scan {1970 December ii} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.131 {parse ccyymmdd} { + clock scan {1970 December 2} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.132 {parse ccyymmdd} { + clock scan {1970 December ii} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.133 {parse ccyymmdd} { + clock scan {1970 Dec 02} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.134 {parse ccyymmdd} { + clock scan {1970 Dec ii} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.135 {parse ccyymmdd} { + clock scan {1970 Dec 2} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.136 {parse ccyymmdd} { + clock scan {1970 Dec ii} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.137 {parse ccyymmdd} { + clock scan {1970 12 02} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.138 {parse ccyymmdd} { + clock scan {1970 12 ii} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.139 {parse ccyymmdd} { + clock scan {1970 12 2} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.140 {parse ccyymmdd} { + clock scan {1970 12 ii} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.141 {parse ccyymmdd} { + clock scan {1970 xii 02} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.142 {parse ccyymmdd} { + clock scan {1970 xii ii} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.143 {parse ccyymmdd} { + clock scan {1970 xii 2} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.144 {parse ccyymmdd} { + clock scan {1970 xii ii} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.145 {parse ccyymmdd} { + clock scan {1970 12 02} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.146 {parse ccyymmdd} { + clock scan {1970 12 ii} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.147 {parse ccyymmdd} { + clock scan {1970 12 2} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.148 {parse ccyymmdd} { + clock scan {1970 12 ii} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.149 {parse ccyymmdd} { + clock scan 12/02/1970 -format %x -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.150 {parse ccyymmdd} { + clock scan 12/02/1970 -format %D -locale en_US_roman -gmt 1 +} 28944000 +test clock-8.151 {parse ccyymmdd} { + clock scan {1970 Dec 31} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.152 {parse ccyymmdd} { + clock scan {1970 Dec xxxi} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.153 {parse ccyymmdd} { + clock scan {1970 Dec 31} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.154 {parse ccyymmdd} { + clock scan {1970 Dec xxxi} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.155 {parse ccyymmdd} { + clock scan {1970 December 31} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.156 {parse ccyymmdd} { + clock scan {1970 December xxxi} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.157 {parse ccyymmdd} { + clock scan {1970 December 31} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.158 {parse ccyymmdd} { + clock scan {1970 December xxxi} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.159 {parse ccyymmdd} { + clock scan {1970 Dec 31} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.160 {parse ccyymmdd} { + clock scan {1970 Dec xxxi} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.161 {parse ccyymmdd} { + clock scan {1970 Dec 31} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.162 {parse ccyymmdd} { + clock scan {1970 Dec xxxi} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.163 {parse ccyymmdd} { + clock scan {1970 12 31} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.164 {parse ccyymmdd} { + clock scan {1970 12 xxxi} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.165 {parse ccyymmdd} { + clock scan {1970 12 31} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.166 {parse ccyymmdd} { + clock scan {1970 12 xxxi} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.167 {parse ccyymmdd} { + clock scan {1970 xii 31} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.168 {parse ccyymmdd} { + clock scan {1970 xii xxxi} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.169 {parse ccyymmdd} { + clock scan {1970 xii 31} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.170 {parse ccyymmdd} { + clock scan {1970 xii xxxi} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.171 {parse ccyymmdd} { + clock scan {1970 12 31} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.172 {parse ccyymmdd} { + clock scan {1970 12 xxxi} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.173 {parse ccyymmdd} { + clock scan {1970 12 31} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.174 {parse ccyymmdd} { + clock scan {1970 12 xxxi} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.175 {parse ccyymmdd} { + clock scan {1970 Dec 31} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.176 {parse ccyymmdd} { + clock scan {1970 Dec xxxi} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.177 {parse ccyymmdd} { + clock scan {1970 Dec 31} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.178 {parse ccyymmdd} { + clock scan {1970 Dec xxxi} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.179 {parse ccyymmdd} { + clock scan {1970 December 31} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.180 {parse ccyymmdd} { + clock scan {1970 December xxxi} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.181 {parse ccyymmdd} { + clock scan {1970 December 31} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.182 {parse ccyymmdd} { + clock scan {1970 December xxxi} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.183 {parse ccyymmdd} { + clock scan {1970 Dec 31} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.184 {parse ccyymmdd} { + clock scan {1970 Dec xxxi} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.185 {parse ccyymmdd} { + clock scan {1970 Dec 31} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.186 {parse ccyymmdd} { + clock scan {1970 Dec xxxi} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.187 {parse ccyymmdd} { + clock scan {1970 12 31} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.188 {parse ccyymmdd} { + clock scan {1970 12 xxxi} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.189 {parse ccyymmdd} { + clock scan {1970 12 31} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.190 {parse ccyymmdd} { + clock scan {1970 12 xxxi} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.191 {parse ccyymmdd} { + clock scan {1970 xii 31} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.192 {parse ccyymmdd} { + clock scan {1970 xii xxxi} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.193 {parse ccyymmdd} { + clock scan {1970 xii 31} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.194 {parse ccyymmdd} { + clock scan {1970 xii xxxi} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.195 {parse ccyymmdd} { + clock scan {1970 12 31} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.196 {parse ccyymmdd} { + clock scan {1970 12 xxxi} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.197 {parse ccyymmdd} { + clock scan {1970 12 31} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.198 {parse ccyymmdd} { + clock scan {1970 12 xxxi} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.199 {parse ccyymmdd} { + clock scan 12/31/1970 -format %x -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.200 {parse ccyymmdd} { + clock scan 12/31/1970 -format %D -locale en_US_roman -gmt 1 +} 31449600 +test clock-8.201 {parse ccyymmdd} { + clock scan {1971 Jan 02} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.202 {parse ccyymmdd} { + clock scan {1971 Jan ii} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.203 {parse ccyymmdd} { + clock scan {1971 Jan 2} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.204 {parse ccyymmdd} { + clock scan {1971 Jan ii} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.205 {parse ccyymmdd} { + clock scan {1971 January 02} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.206 {parse ccyymmdd} { + clock scan {1971 January ii} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.207 {parse ccyymmdd} { + clock scan {1971 January 2} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.208 {parse ccyymmdd} { + clock scan {1971 January ii} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.209 {parse ccyymmdd} { + clock scan {1971 Jan 02} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.210 {parse ccyymmdd} { + clock scan {1971 Jan ii} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.211 {parse ccyymmdd} { + clock scan {1971 Jan 2} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.212 {parse ccyymmdd} { + clock scan {1971 Jan ii} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.213 {parse ccyymmdd} { + clock scan {1971 01 02} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.214 {parse ccyymmdd} { + clock scan {1971 01 ii} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.215 {parse ccyymmdd} { + clock scan {1971 01 2} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.216 {parse ccyymmdd} { + clock scan {1971 01 ii} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.217 {parse ccyymmdd} { + clock scan {1971 i 02} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.218 {parse ccyymmdd} { + clock scan {1971 i ii} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.219 {parse ccyymmdd} { + clock scan {1971 i 2} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.220 {parse ccyymmdd} { + clock scan {1971 i ii} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.221 {parse ccyymmdd} { + clock scan {1971 1 02} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.222 {parse ccyymmdd} { + clock scan {1971 1 ii} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.223 {parse ccyymmdd} { + clock scan {1971 1 2} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.224 {parse ccyymmdd} { + clock scan {1971 1 ii} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.225 {parse ccyymmdd} { + clock scan {1971 Jan 02} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.226 {parse ccyymmdd} { + clock scan {1971 Jan ii} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.227 {parse ccyymmdd} { + clock scan {1971 Jan 2} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.228 {parse ccyymmdd} { + clock scan {1971 Jan ii} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.229 {parse ccyymmdd} { + clock scan {1971 January 02} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.230 {parse ccyymmdd} { + clock scan {1971 January ii} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.231 {parse ccyymmdd} { + clock scan {1971 January 2} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.232 {parse ccyymmdd} { + clock scan {1971 January ii} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.233 {parse ccyymmdd} { + clock scan {1971 Jan 02} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.234 {parse ccyymmdd} { + clock scan {1971 Jan ii} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.235 {parse ccyymmdd} { + clock scan {1971 Jan 2} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.236 {parse ccyymmdd} { + clock scan {1971 Jan ii} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.237 {parse ccyymmdd} { + clock scan {1971 01 02} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.238 {parse ccyymmdd} { + clock scan {1971 01 ii} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.239 {parse ccyymmdd} { + clock scan {1971 01 2} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.240 {parse ccyymmdd} { + clock scan {1971 01 ii} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.241 {parse ccyymmdd} { + clock scan {1971 i 02} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.242 {parse ccyymmdd} { + clock scan {1971 i ii} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.243 {parse ccyymmdd} { + clock scan {1971 i 2} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.244 {parse ccyymmdd} { + clock scan {1971 i ii} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.245 {parse ccyymmdd} { + clock scan {1971 1 02} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.246 {parse ccyymmdd} { + clock scan {1971 1 ii} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.247 {parse ccyymmdd} { + clock scan {1971 1 2} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.248 {parse ccyymmdd} { + clock scan {1971 1 ii} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.249 {parse ccyymmdd} { + clock scan 01/02/1971 -format %x -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.250 {parse ccyymmdd} { + clock scan 01/02/1971 -format %D -locale en_US_roman -gmt 1 +} 31622400 +test clock-8.251 {parse ccyymmdd} { + clock scan {1971 Jan 31} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.252 {parse ccyymmdd} { + clock scan {1971 Jan xxxi} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.253 {parse ccyymmdd} { + clock scan {1971 Jan 31} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.254 {parse ccyymmdd} { + clock scan {1971 Jan xxxi} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.255 {parse ccyymmdd} { + clock scan {1971 January 31} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.256 {parse ccyymmdd} { + clock scan {1971 January xxxi} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.257 {parse ccyymmdd} { + clock scan {1971 January 31} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.258 {parse ccyymmdd} { + clock scan {1971 January xxxi} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.259 {parse ccyymmdd} { + clock scan {1971 Jan 31} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.260 {parse ccyymmdd} { + clock scan {1971 Jan xxxi} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.261 {parse ccyymmdd} { + clock scan {1971 Jan 31} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.262 {parse ccyymmdd} { + clock scan {1971 Jan xxxi} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.263 {parse ccyymmdd} { + clock scan {1971 01 31} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.264 {parse ccyymmdd} { + clock scan {1971 01 xxxi} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.265 {parse ccyymmdd} { + clock scan {1971 01 31} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.266 {parse ccyymmdd} { + clock scan {1971 01 xxxi} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.267 {parse ccyymmdd} { + clock scan {1971 i 31} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.268 {parse ccyymmdd} { + clock scan {1971 i xxxi} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.269 {parse ccyymmdd} { + clock scan {1971 i 31} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.270 {parse ccyymmdd} { + clock scan {1971 i xxxi} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.271 {parse ccyymmdd} { + clock scan {1971 1 31} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.272 {parse ccyymmdd} { + clock scan {1971 1 xxxi} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.273 {parse ccyymmdd} { + clock scan {1971 1 31} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.274 {parse ccyymmdd} { + clock scan {1971 1 xxxi} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.275 {parse ccyymmdd} { + clock scan {1971 Jan 31} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.276 {parse ccyymmdd} { + clock scan {1971 Jan xxxi} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.277 {parse ccyymmdd} { + clock scan {1971 Jan 31} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.278 {parse ccyymmdd} { + clock scan {1971 Jan xxxi} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.279 {parse ccyymmdd} { + clock scan {1971 January 31} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.280 {parse ccyymmdd} { + clock scan {1971 January xxxi} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.281 {parse ccyymmdd} { + clock scan {1971 January 31} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.282 {parse ccyymmdd} { + clock scan {1971 January xxxi} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.283 {parse ccyymmdd} { + clock scan {1971 Jan 31} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.284 {parse ccyymmdd} { + clock scan {1971 Jan xxxi} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.285 {parse ccyymmdd} { + clock scan {1971 Jan 31} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.286 {parse ccyymmdd} { + clock scan {1971 Jan xxxi} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.287 {parse ccyymmdd} { + clock scan {1971 01 31} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.288 {parse ccyymmdd} { + clock scan {1971 01 xxxi} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.289 {parse ccyymmdd} { + clock scan {1971 01 31} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.290 {parse ccyymmdd} { + clock scan {1971 01 xxxi} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.291 {parse ccyymmdd} { + clock scan {1971 i 31} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.292 {parse ccyymmdd} { + clock scan {1971 i xxxi} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.293 {parse ccyymmdd} { + clock scan {1971 i 31} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.294 {parse ccyymmdd} { + clock scan {1971 i xxxi} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.295 {parse ccyymmdd} { + clock scan {1971 1 31} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.296 {parse ccyymmdd} { + clock scan {1971 1 xxxi} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.297 {parse ccyymmdd} { + clock scan {1971 1 31} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.298 {parse ccyymmdd} { + clock scan {1971 1 xxxi} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.299 {parse ccyymmdd} { + clock scan 01/31/1971 -format %x -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.300 {parse ccyymmdd} { + clock scan 01/31/1971 -format %D -locale en_US_roman -gmt 1 +} 34128000 +test clock-8.301 {parse ccyymmdd} { + clock scan {1971 Dec 02} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.302 {parse ccyymmdd} { + clock scan {1971 Dec ii} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.303 {parse ccyymmdd} { + clock scan {1971 Dec 2} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.304 {parse ccyymmdd} { + clock scan {1971 Dec ii} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.305 {parse ccyymmdd} { + clock scan {1971 December 02} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.306 {parse ccyymmdd} { + clock scan {1971 December ii} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.307 {parse ccyymmdd} { + clock scan {1971 December 2} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.308 {parse ccyymmdd} { + clock scan {1971 December ii} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.309 {parse ccyymmdd} { + clock scan {1971 Dec 02} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.310 {parse ccyymmdd} { + clock scan {1971 Dec ii} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.311 {parse ccyymmdd} { + clock scan {1971 Dec 2} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.312 {parse ccyymmdd} { + clock scan {1971 Dec ii} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.313 {parse ccyymmdd} { + clock scan {1971 12 02} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.314 {parse ccyymmdd} { + clock scan {1971 12 ii} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.315 {parse ccyymmdd} { + clock scan {1971 12 2} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.316 {parse ccyymmdd} { + clock scan {1971 12 ii} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.317 {parse ccyymmdd} { + clock scan {1971 xii 02} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.318 {parse ccyymmdd} { + clock scan {1971 xii ii} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.319 {parse ccyymmdd} { + clock scan {1971 xii 2} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.320 {parse ccyymmdd} { + clock scan {1971 xii ii} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.321 {parse ccyymmdd} { + clock scan {1971 12 02} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.322 {parse ccyymmdd} { + clock scan {1971 12 ii} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.323 {parse ccyymmdd} { + clock scan {1971 12 2} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.324 {parse ccyymmdd} { + clock scan {1971 12 ii} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.325 {parse ccyymmdd} { + clock scan {1971 Dec 02} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.326 {parse ccyymmdd} { + clock scan {1971 Dec ii} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.327 {parse ccyymmdd} { + clock scan {1971 Dec 2} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.328 {parse ccyymmdd} { + clock scan {1971 Dec ii} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.329 {parse ccyymmdd} { + clock scan {1971 December 02} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.330 {parse ccyymmdd} { + clock scan {1971 December ii} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.331 {parse ccyymmdd} { + clock scan {1971 December 2} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.332 {parse ccyymmdd} { + clock scan {1971 December ii} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.333 {parse ccyymmdd} { + clock scan {1971 Dec 02} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.334 {parse ccyymmdd} { + clock scan {1971 Dec ii} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.335 {parse ccyymmdd} { + clock scan {1971 Dec 2} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.336 {parse ccyymmdd} { + clock scan {1971 Dec ii} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.337 {parse ccyymmdd} { + clock scan {1971 12 02} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.338 {parse ccyymmdd} { + clock scan {1971 12 ii} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.339 {parse ccyymmdd} { + clock scan {1971 12 2} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.340 {parse ccyymmdd} { + clock scan {1971 12 ii} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.341 {parse ccyymmdd} { + clock scan {1971 xii 02} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.342 {parse ccyymmdd} { + clock scan {1971 xii ii} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.343 {parse ccyymmdd} { + clock scan {1971 xii 2} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.344 {parse ccyymmdd} { + clock scan {1971 xii ii} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.345 {parse ccyymmdd} { + clock scan {1971 12 02} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.346 {parse ccyymmdd} { + clock scan {1971 12 ii} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.347 {parse ccyymmdd} { + clock scan {1971 12 2} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.348 {parse ccyymmdd} { + clock scan {1971 12 ii} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.349 {parse ccyymmdd} { + clock scan 12/02/1971 -format %x -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.350 {parse ccyymmdd} { + clock scan 12/02/1971 -format %D -locale en_US_roman -gmt 1 +} 60480000 +test clock-8.351 {parse ccyymmdd} { + clock scan {1971 Dec 31} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.352 {parse ccyymmdd} { + clock scan {1971 Dec xxxi} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.353 {parse ccyymmdd} { + clock scan {1971 Dec 31} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.354 {parse ccyymmdd} { + clock scan {1971 Dec xxxi} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.355 {parse ccyymmdd} { + clock scan {1971 December 31} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.356 {parse ccyymmdd} { + clock scan {1971 December xxxi} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.357 {parse ccyymmdd} { + clock scan {1971 December 31} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.358 {parse ccyymmdd} { + clock scan {1971 December xxxi} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.359 {parse ccyymmdd} { + clock scan {1971 Dec 31} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.360 {parse ccyymmdd} { + clock scan {1971 Dec xxxi} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.361 {parse ccyymmdd} { + clock scan {1971 Dec 31} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.362 {parse ccyymmdd} { + clock scan {1971 Dec xxxi} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.363 {parse ccyymmdd} { + clock scan {1971 12 31} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.364 {parse ccyymmdd} { + clock scan {1971 12 xxxi} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.365 {parse ccyymmdd} { + clock scan {1971 12 31} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.366 {parse ccyymmdd} { + clock scan {1971 12 xxxi} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.367 {parse ccyymmdd} { + clock scan {1971 xii 31} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.368 {parse ccyymmdd} { + clock scan {1971 xii xxxi} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.369 {parse ccyymmdd} { + clock scan {1971 xii 31} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.370 {parse ccyymmdd} { + clock scan {1971 xii xxxi} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.371 {parse ccyymmdd} { + clock scan {1971 12 31} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.372 {parse ccyymmdd} { + clock scan {1971 12 xxxi} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.373 {parse ccyymmdd} { + clock scan {1971 12 31} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.374 {parse ccyymmdd} { + clock scan {1971 12 xxxi} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.375 {parse ccyymmdd} { + clock scan {1971 Dec 31} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.376 {parse ccyymmdd} { + clock scan {1971 Dec xxxi} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.377 {parse ccyymmdd} { + clock scan {1971 Dec 31} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.378 {parse ccyymmdd} { + clock scan {1971 Dec xxxi} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.379 {parse ccyymmdd} { + clock scan {1971 December 31} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.380 {parse ccyymmdd} { + clock scan {1971 December xxxi} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.381 {parse ccyymmdd} { + clock scan {1971 December 31} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.382 {parse ccyymmdd} { + clock scan {1971 December xxxi} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.383 {parse ccyymmdd} { + clock scan {1971 Dec 31} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.384 {parse ccyymmdd} { + clock scan {1971 Dec xxxi} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.385 {parse ccyymmdd} { + clock scan {1971 Dec 31} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.386 {parse ccyymmdd} { + clock scan {1971 Dec xxxi} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.387 {parse ccyymmdd} { + clock scan {1971 12 31} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.388 {parse ccyymmdd} { + clock scan {1971 12 xxxi} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.389 {parse ccyymmdd} { + clock scan {1971 12 31} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.390 {parse ccyymmdd} { + clock scan {1971 12 xxxi} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.391 {parse ccyymmdd} { + clock scan {1971 xii 31} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.392 {parse ccyymmdd} { + clock scan {1971 xii xxxi} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.393 {parse ccyymmdd} { + clock scan {1971 xii 31} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.394 {parse ccyymmdd} { + clock scan {1971 xii xxxi} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.395 {parse ccyymmdd} { + clock scan {1971 12 31} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.396 {parse ccyymmdd} { + clock scan {1971 12 xxxi} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.397 {parse ccyymmdd} { + clock scan {1971 12 31} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.398 {parse ccyymmdd} { + clock scan {1971 12 xxxi} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.399 {parse ccyymmdd} { + clock scan 12/31/1971 -format %x -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.400 {parse ccyymmdd} { + clock scan 12/31/1971 -format %D -locale en_US_roman -gmt 1 +} 62985600 +test clock-8.401 {parse ccyymmdd} { + clock scan {2000 Jan 02} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.402 {parse ccyymmdd} { + clock scan {2000 Jan ii} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.403 {parse ccyymmdd} { + clock scan {2000 Jan 2} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.404 {parse ccyymmdd} { + clock scan {2000 Jan ii} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.405 {parse ccyymmdd} { + clock scan {2000 January 02} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.406 {parse ccyymmdd} { + clock scan {2000 January ii} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.407 {parse ccyymmdd} { + clock scan {2000 January 2} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.408 {parse ccyymmdd} { + clock scan {2000 January ii} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.409 {parse ccyymmdd} { + clock scan {2000 Jan 02} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.410 {parse ccyymmdd} { + clock scan {2000 Jan ii} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.411 {parse ccyymmdd} { + clock scan {2000 Jan 2} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.412 {parse ccyymmdd} { + clock scan {2000 Jan ii} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.413 {parse ccyymmdd} { + clock scan {2000 01 02} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.414 {parse ccyymmdd} { + clock scan {2000 01 ii} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.415 {parse ccyymmdd} { + clock scan {2000 01 2} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.416 {parse ccyymmdd} { + clock scan {2000 01 ii} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.417 {parse ccyymmdd} { + clock scan {2000 i 02} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.418 {parse ccyymmdd} { + clock scan {2000 i ii} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.419 {parse ccyymmdd} { + clock scan {2000 i 2} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.420 {parse ccyymmdd} { + clock scan {2000 i ii} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.421 {parse ccyymmdd} { + clock scan {2000 1 02} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.422 {parse ccyymmdd} { + clock scan {2000 1 ii} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.423 {parse ccyymmdd} { + clock scan {2000 1 2} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.424 {parse ccyymmdd} { + clock scan {2000 1 ii} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.425 {parse ccyymmdd} { + clock scan {2000 Jan 02} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.426 {parse ccyymmdd} { + clock scan {2000 Jan ii} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.427 {parse ccyymmdd} { + clock scan {2000 Jan 2} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.428 {parse ccyymmdd} { + clock scan {2000 Jan ii} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.429 {parse ccyymmdd} { + clock scan {2000 January 02} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.430 {parse ccyymmdd} { + clock scan {2000 January ii} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.431 {parse ccyymmdd} { + clock scan {2000 January 2} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.432 {parse ccyymmdd} { + clock scan {2000 January ii} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.433 {parse ccyymmdd} { + clock scan {2000 Jan 02} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.434 {parse ccyymmdd} { + clock scan {2000 Jan ii} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.435 {parse ccyymmdd} { + clock scan {2000 Jan 2} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.436 {parse ccyymmdd} { + clock scan {2000 Jan ii} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.437 {parse ccyymmdd} { + clock scan {2000 01 02} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.438 {parse ccyymmdd} { + clock scan {2000 01 ii} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.439 {parse ccyymmdd} { + clock scan {2000 01 2} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.440 {parse ccyymmdd} { + clock scan {2000 01 ii} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.441 {parse ccyymmdd} { + clock scan {2000 i 02} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.442 {parse ccyymmdd} { + clock scan {2000 i ii} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.443 {parse ccyymmdd} { + clock scan {2000 i 2} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.444 {parse ccyymmdd} { + clock scan {2000 i ii} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.445 {parse ccyymmdd} { + clock scan {2000 1 02} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.446 {parse ccyymmdd} { + clock scan {2000 1 ii} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.447 {parse ccyymmdd} { + clock scan {2000 1 2} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.448 {parse ccyymmdd} { + clock scan {2000 1 ii} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.449 {parse ccyymmdd} { + clock scan 01/02/2000 -format %x -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.450 {parse ccyymmdd} { + clock scan 01/02/2000 -format %D -locale en_US_roman -gmt 1 +} 946771200 +test clock-8.451 {parse ccyymmdd} { + clock scan {2000 Jan 31} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.452 {parse ccyymmdd} { + clock scan {2000 Jan xxxi} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.453 {parse ccyymmdd} { + clock scan {2000 Jan 31} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.454 {parse ccyymmdd} { + clock scan {2000 Jan xxxi} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.455 {parse ccyymmdd} { + clock scan {2000 January 31} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.456 {parse ccyymmdd} { + clock scan {2000 January xxxi} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.457 {parse ccyymmdd} { + clock scan {2000 January 31} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.458 {parse ccyymmdd} { + clock scan {2000 January xxxi} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.459 {parse ccyymmdd} { + clock scan {2000 Jan 31} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.460 {parse ccyymmdd} { + clock scan {2000 Jan xxxi} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.461 {parse ccyymmdd} { + clock scan {2000 Jan 31} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.462 {parse ccyymmdd} { + clock scan {2000 Jan xxxi} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.463 {parse ccyymmdd} { + clock scan {2000 01 31} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.464 {parse ccyymmdd} { + clock scan {2000 01 xxxi} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.465 {parse ccyymmdd} { + clock scan {2000 01 31} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.466 {parse ccyymmdd} { + clock scan {2000 01 xxxi} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.467 {parse ccyymmdd} { + clock scan {2000 i 31} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.468 {parse ccyymmdd} { + clock scan {2000 i xxxi} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.469 {parse ccyymmdd} { + clock scan {2000 i 31} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.470 {parse ccyymmdd} { + clock scan {2000 i xxxi} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.471 {parse ccyymmdd} { + clock scan {2000 1 31} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.472 {parse ccyymmdd} { + clock scan {2000 1 xxxi} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.473 {parse ccyymmdd} { + clock scan {2000 1 31} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.474 {parse ccyymmdd} { + clock scan {2000 1 xxxi} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.475 {parse ccyymmdd} { + clock scan {2000 Jan 31} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.476 {parse ccyymmdd} { + clock scan {2000 Jan xxxi} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.477 {parse ccyymmdd} { + clock scan {2000 Jan 31} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.478 {parse ccyymmdd} { + clock scan {2000 Jan xxxi} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.479 {parse ccyymmdd} { + clock scan {2000 January 31} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.480 {parse ccyymmdd} { + clock scan {2000 January xxxi} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.481 {parse ccyymmdd} { + clock scan {2000 January 31} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.482 {parse ccyymmdd} { + clock scan {2000 January xxxi} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.483 {parse ccyymmdd} { + clock scan {2000 Jan 31} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.484 {parse ccyymmdd} { + clock scan {2000 Jan xxxi} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.485 {parse ccyymmdd} { + clock scan {2000 Jan 31} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.486 {parse ccyymmdd} { + clock scan {2000 Jan xxxi} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.487 {parse ccyymmdd} { + clock scan {2000 01 31} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.488 {parse ccyymmdd} { + clock scan {2000 01 xxxi} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.489 {parse ccyymmdd} { + clock scan {2000 01 31} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.490 {parse ccyymmdd} { + clock scan {2000 01 xxxi} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.491 {parse ccyymmdd} { + clock scan {2000 i 31} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.492 {parse ccyymmdd} { + clock scan {2000 i xxxi} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.493 {parse ccyymmdd} { + clock scan {2000 i 31} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.494 {parse ccyymmdd} { + clock scan {2000 i xxxi} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.495 {parse ccyymmdd} { + clock scan {2000 1 31} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.496 {parse ccyymmdd} { + clock scan {2000 1 xxxi} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.497 {parse ccyymmdd} { + clock scan {2000 1 31} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.498 {parse ccyymmdd} { + clock scan {2000 1 xxxi} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.499 {parse ccyymmdd} { + clock scan 01/31/2000 -format %x -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.500 {parse ccyymmdd} { + clock scan 01/31/2000 -format %D -locale en_US_roman -gmt 1 +} 949276800 +test clock-8.501 {parse ccyymmdd} { + clock scan {2000 Dec 02} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.502 {parse ccyymmdd} { + clock scan {2000 Dec ii} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.503 {parse ccyymmdd} { + clock scan {2000 Dec 2} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.504 {parse ccyymmdd} { + clock scan {2000 Dec ii} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.505 {parse ccyymmdd} { + clock scan {2000 December 02} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.506 {parse ccyymmdd} { + clock scan {2000 December ii} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.507 {parse ccyymmdd} { + clock scan {2000 December 2} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.508 {parse ccyymmdd} { + clock scan {2000 December ii} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.509 {parse ccyymmdd} { + clock scan {2000 Dec 02} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.510 {parse ccyymmdd} { + clock scan {2000 Dec ii} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.511 {parse ccyymmdd} { + clock scan {2000 Dec 2} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.512 {parse ccyymmdd} { + clock scan {2000 Dec ii} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.513 {parse ccyymmdd} { + clock scan {2000 12 02} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.514 {parse ccyymmdd} { + clock scan {2000 12 ii} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.515 {parse ccyymmdd} { + clock scan {2000 12 2} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.516 {parse ccyymmdd} { + clock scan {2000 12 ii} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.517 {parse ccyymmdd} { + clock scan {2000 xii 02} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.518 {parse ccyymmdd} { + clock scan {2000 xii ii} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.519 {parse ccyymmdd} { + clock scan {2000 xii 2} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.520 {parse ccyymmdd} { + clock scan {2000 xii ii} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.521 {parse ccyymmdd} { + clock scan {2000 12 02} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.522 {parse ccyymmdd} { + clock scan {2000 12 ii} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.523 {parse ccyymmdd} { + clock scan {2000 12 2} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.524 {parse ccyymmdd} { + clock scan {2000 12 ii} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.525 {parse ccyymmdd} { + clock scan {2000 Dec 02} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.526 {parse ccyymmdd} { + clock scan {2000 Dec ii} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.527 {parse ccyymmdd} { + clock scan {2000 Dec 2} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.528 {parse ccyymmdd} { + clock scan {2000 Dec ii} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.529 {parse ccyymmdd} { + clock scan {2000 December 02} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.530 {parse ccyymmdd} { + clock scan {2000 December ii} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.531 {parse ccyymmdd} { + clock scan {2000 December 2} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.532 {parse ccyymmdd} { + clock scan {2000 December ii} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.533 {parse ccyymmdd} { + clock scan {2000 Dec 02} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.534 {parse ccyymmdd} { + clock scan {2000 Dec ii} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.535 {parse ccyymmdd} { + clock scan {2000 Dec 2} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.536 {parse ccyymmdd} { + clock scan {2000 Dec ii} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.537 {parse ccyymmdd} { + clock scan {2000 12 02} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.538 {parse ccyymmdd} { + clock scan {2000 12 ii} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.539 {parse ccyymmdd} { + clock scan {2000 12 2} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.540 {parse ccyymmdd} { + clock scan {2000 12 ii} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.541 {parse ccyymmdd} { + clock scan {2000 xii 02} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.542 {parse ccyymmdd} { + clock scan {2000 xii ii} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.543 {parse ccyymmdd} { + clock scan {2000 xii 2} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.544 {parse ccyymmdd} { + clock scan {2000 xii ii} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.545 {parse ccyymmdd} { + clock scan {2000 12 02} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.546 {parse ccyymmdd} { + clock scan {2000 12 ii} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.547 {parse ccyymmdd} { + clock scan {2000 12 2} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.548 {parse ccyymmdd} { + clock scan {2000 12 ii} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.549 {parse ccyymmdd} { + clock scan 12/02/2000 -format %x -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.550 {parse ccyymmdd} { + clock scan 12/02/2000 -format %D -locale en_US_roman -gmt 1 +} 975715200 +test clock-8.551 {parse ccyymmdd} { + clock scan {2000 Dec 31} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.552 {parse ccyymmdd} { + clock scan {2000 Dec xxxi} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.553 {parse ccyymmdd} { + clock scan {2000 Dec 31} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.554 {parse ccyymmdd} { + clock scan {2000 Dec xxxi} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.555 {parse ccyymmdd} { + clock scan {2000 December 31} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.556 {parse ccyymmdd} { + clock scan {2000 December xxxi} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.557 {parse ccyymmdd} { + clock scan {2000 December 31} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.558 {parse ccyymmdd} { + clock scan {2000 December xxxi} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.559 {parse ccyymmdd} { + clock scan {2000 Dec 31} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.560 {parse ccyymmdd} { + clock scan {2000 Dec xxxi} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.561 {parse ccyymmdd} { + clock scan {2000 Dec 31} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.562 {parse ccyymmdd} { + clock scan {2000 Dec xxxi} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.563 {parse ccyymmdd} { + clock scan {2000 12 31} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.564 {parse ccyymmdd} { + clock scan {2000 12 xxxi} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.565 {parse ccyymmdd} { + clock scan {2000 12 31} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.566 {parse ccyymmdd} { + clock scan {2000 12 xxxi} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.567 {parse ccyymmdd} { + clock scan {2000 xii 31} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.568 {parse ccyymmdd} { + clock scan {2000 xii xxxi} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.569 {parse ccyymmdd} { + clock scan {2000 xii 31} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.570 {parse ccyymmdd} { + clock scan {2000 xii xxxi} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.571 {parse ccyymmdd} { + clock scan {2000 12 31} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.572 {parse ccyymmdd} { + clock scan {2000 12 xxxi} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.573 {parse ccyymmdd} { + clock scan {2000 12 31} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.574 {parse ccyymmdd} { + clock scan {2000 12 xxxi} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.575 {parse ccyymmdd} { + clock scan {2000 Dec 31} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.576 {parse ccyymmdd} { + clock scan {2000 Dec xxxi} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.577 {parse ccyymmdd} { + clock scan {2000 Dec 31} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.578 {parse ccyymmdd} { + clock scan {2000 Dec xxxi} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.579 {parse ccyymmdd} { + clock scan {2000 December 31} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.580 {parse ccyymmdd} { + clock scan {2000 December xxxi} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.581 {parse ccyymmdd} { + clock scan {2000 December 31} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.582 {parse ccyymmdd} { + clock scan {2000 December xxxi} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.583 {parse ccyymmdd} { + clock scan {2000 Dec 31} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.584 {parse ccyymmdd} { + clock scan {2000 Dec xxxi} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.585 {parse ccyymmdd} { + clock scan {2000 Dec 31} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.586 {parse ccyymmdd} { + clock scan {2000 Dec xxxi} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.587 {parse ccyymmdd} { + clock scan {2000 12 31} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.588 {parse ccyymmdd} { + clock scan {2000 12 xxxi} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.589 {parse ccyymmdd} { + clock scan {2000 12 31} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.590 {parse ccyymmdd} { + clock scan {2000 12 xxxi} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.591 {parse ccyymmdd} { + clock scan {2000 xii 31} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.592 {parse ccyymmdd} { + clock scan {2000 xii xxxi} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.593 {parse ccyymmdd} { + clock scan {2000 xii 31} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.594 {parse ccyymmdd} { + clock scan {2000 xii xxxi} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.595 {parse ccyymmdd} { + clock scan {2000 12 31} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.596 {parse ccyymmdd} { + clock scan {2000 12 xxxi} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.597 {parse ccyymmdd} { + clock scan {2000 12 31} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.598 {parse ccyymmdd} { + clock scan {2000 12 xxxi} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.599 {parse ccyymmdd} { + clock scan 12/31/2000 -format %x -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.600 {parse ccyymmdd} { + clock scan 12/31/2000 -format %D -locale en_US_roman -gmt 1 +} 978220800 +test clock-8.601 {parse ccyymmdd} { + clock scan {2001 Jan 02} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.602 {parse ccyymmdd} { + clock scan {2001 Jan ii} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.603 {parse ccyymmdd} { + clock scan {2001 Jan 2} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.604 {parse ccyymmdd} { + clock scan {2001 Jan ii} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.605 {parse ccyymmdd} { + clock scan {2001 January 02} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.606 {parse ccyymmdd} { + clock scan {2001 January ii} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.607 {parse ccyymmdd} { + clock scan {2001 January 2} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.608 {parse ccyymmdd} { + clock scan {2001 January ii} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.609 {parse ccyymmdd} { + clock scan {2001 Jan 02} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.610 {parse ccyymmdd} { + clock scan {2001 Jan ii} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.611 {parse ccyymmdd} { + clock scan {2001 Jan 2} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.612 {parse ccyymmdd} { + clock scan {2001 Jan ii} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.613 {parse ccyymmdd} { + clock scan {2001 01 02} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.614 {parse ccyymmdd} { + clock scan {2001 01 ii} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.615 {parse ccyymmdd} { + clock scan {2001 01 2} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.616 {parse ccyymmdd} { + clock scan {2001 01 ii} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.617 {parse ccyymmdd} { + clock scan {2001 i 02} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.618 {parse ccyymmdd} { + clock scan {2001 i ii} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.619 {parse ccyymmdd} { + clock scan {2001 i 2} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.620 {parse ccyymmdd} { + clock scan {2001 i ii} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.621 {parse ccyymmdd} { + clock scan {2001 1 02} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.622 {parse ccyymmdd} { + clock scan {2001 1 ii} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.623 {parse ccyymmdd} { + clock scan {2001 1 2} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.624 {parse ccyymmdd} { + clock scan {2001 1 ii} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.625 {parse ccyymmdd} { + clock scan {2001 Jan 02} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.626 {parse ccyymmdd} { + clock scan {2001 Jan ii} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.627 {parse ccyymmdd} { + clock scan {2001 Jan 2} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.628 {parse ccyymmdd} { + clock scan {2001 Jan ii} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.629 {parse ccyymmdd} { + clock scan {2001 January 02} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.630 {parse ccyymmdd} { + clock scan {2001 January ii} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.631 {parse ccyymmdd} { + clock scan {2001 January 2} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.632 {parse ccyymmdd} { + clock scan {2001 January ii} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.633 {parse ccyymmdd} { + clock scan {2001 Jan 02} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.634 {parse ccyymmdd} { + clock scan {2001 Jan ii} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.635 {parse ccyymmdd} { + clock scan {2001 Jan 2} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.636 {parse ccyymmdd} { + clock scan {2001 Jan ii} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.637 {parse ccyymmdd} { + clock scan {2001 01 02} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.638 {parse ccyymmdd} { + clock scan {2001 01 ii} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.639 {parse ccyymmdd} { + clock scan {2001 01 2} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.640 {parse ccyymmdd} { + clock scan {2001 01 ii} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.641 {parse ccyymmdd} { + clock scan {2001 i 02} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.642 {parse ccyymmdd} { + clock scan {2001 i ii} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.643 {parse ccyymmdd} { + clock scan {2001 i 2} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.644 {parse ccyymmdd} { + clock scan {2001 i ii} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.645 {parse ccyymmdd} { + clock scan {2001 1 02} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.646 {parse ccyymmdd} { + clock scan {2001 1 ii} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.647 {parse ccyymmdd} { + clock scan {2001 1 2} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.648 {parse ccyymmdd} { + clock scan {2001 1 ii} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.649 {parse ccyymmdd} { + clock scan 01/02/2001 -format %x -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.650 {parse ccyymmdd} { + clock scan 01/02/2001 -format %D -locale en_US_roman -gmt 1 +} 978393600 +test clock-8.651 {parse ccyymmdd} { + clock scan {2001 Jan 31} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.652 {parse ccyymmdd} { + clock scan {2001 Jan xxxi} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.653 {parse ccyymmdd} { + clock scan {2001 Jan 31} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.654 {parse ccyymmdd} { + clock scan {2001 Jan xxxi} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.655 {parse ccyymmdd} { + clock scan {2001 January 31} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.656 {parse ccyymmdd} { + clock scan {2001 January xxxi} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.657 {parse ccyymmdd} { + clock scan {2001 January 31} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.658 {parse ccyymmdd} { + clock scan {2001 January xxxi} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.659 {parse ccyymmdd} { + clock scan {2001 Jan 31} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.660 {parse ccyymmdd} { + clock scan {2001 Jan xxxi} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.661 {parse ccyymmdd} { + clock scan {2001 Jan 31} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.662 {parse ccyymmdd} { + clock scan {2001 Jan xxxi} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.663 {parse ccyymmdd} { + clock scan {2001 01 31} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.664 {parse ccyymmdd} { + clock scan {2001 01 xxxi} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.665 {parse ccyymmdd} { + clock scan {2001 01 31} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.666 {parse ccyymmdd} { + clock scan {2001 01 xxxi} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.667 {parse ccyymmdd} { + clock scan {2001 i 31} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.668 {parse ccyymmdd} { + clock scan {2001 i xxxi} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.669 {parse ccyymmdd} { + clock scan {2001 i 31} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.670 {parse ccyymmdd} { + clock scan {2001 i xxxi} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.671 {parse ccyymmdd} { + clock scan {2001 1 31} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.672 {parse ccyymmdd} { + clock scan {2001 1 xxxi} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.673 {parse ccyymmdd} { + clock scan {2001 1 31} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.674 {parse ccyymmdd} { + clock scan {2001 1 xxxi} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.675 {parse ccyymmdd} { + clock scan {2001 Jan 31} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.676 {parse ccyymmdd} { + clock scan {2001 Jan xxxi} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.677 {parse ccyymmdd} { + clock scan {2001 Jan 31} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.678 {parse ccyymmdd} { + clock scan {2001 Jan xxxi} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.679 {parse ccyymmdd} { + clock scan {2001 January 31} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.680 {parse ccyymmdd} { + clock scan {2001 January xxxi} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.681 {parse ccyymmdd} { + clock scan {2001 January 31} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.682 {parse ccyymmdd} { + clock scan {2001 January xxxi} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.683 {parse ccyymmdd} { + clock scan {2001 Jan 31} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.684 {parse ccyymmdd} { + clock scan {2001 Jan xxxi} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.685 {parse ccyymmdd} { + clock scan {2001 Jan 31} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.686 {parse ccyymmdd} { + clock scan {2001 Jan xxxi} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.687 {parse ccyymmdd} { + clock scan {2001 01 31} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.688 {parse ccyymmdd} { + clock scan {2001 01 xxxi} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.689 {parse ccyymmdd} { + clock scan {2001 01 31} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.690 {parse ccyymmdd} { + clock scan {2001 01 xxxi} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.691 {parse ccyymmdd} { + clock scan {2001 i 31} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.692 {parse ccyymmdd} { + clock scan {2001 i xxxi} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.693 {parse ccyymmdd} { + clock scan {2001 i 31} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.694 {parse ccyymmdd} { + clock scan {2001 i xxxi} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.695 {parse ccyymmdd} { + clock scan {2001 1 31} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.696 {parse ccyymmdd} { + clock scan {2001 1 xxxi} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.697 {parse ccyymmdd} { + clock scan {2001 1 31} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.698 {parse ccyymmdd} { + clock scan {2001 1 xxxi} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.699 {parse ccyymmdd} { + clock scan 01/31/2001 -format %x -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.700 {parse ccyymmdd} { + clock scan 01/31/2001 -format %D -locale en_US_roman -gmt 1 +} 980899200 +test clock-8.701 {parse ccyymmdd} { + clock scan {2001 Dec 02} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.702 {parse ccyymmdd} { + clock scan {2001 Dec ii} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.703 {parse ccyymmdd} { + clock scan {2001 Dec 2} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.704 {parse ccyymmdd} { + clock scan {2001 Dec ii} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.705 {parse ccyymmdd} { + clock scan {2001 December 02} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.706 {parse ccyymmdd} { + clock scan {2001 December ii} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.707 {parse ccyymmdd} { + clock scan {2001 December 2} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.708 {parse ccyymmdd} { + clock scan {2001 December ii} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.709 {parse ccyymmdd} { + clock scan {2001 Dec 02} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.710 {parse ccyymmdd} { + clock scan {2001 Dec ii} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.711 {parse ccyymmdd} { + clock scan {2001 Dec 2} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.712 {parse ccyymmdd} { + clock scan {2001 Dec ii} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.713 {parse ccyymmdd} { + clock scan {2001 12 02} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.714 {parse ccyymmdd} { + clock scan {2001 12 ii} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.715 {parse ccyymmdd} { + clock scan {2001 12 2} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.716 {parse ccyymmdd} { + clock scan {2001 12 ii} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.717 {parse ccyymmdd} { + clock scan {2001 xii 02} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.718 {parse ccyymmdd} { + clock scan {2001 xii ii} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.719 {parse ccyymmdd} { + clock scan {2001 xii 2} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.720 {parse ccyymmdd} { + clock scan {2001 xii ii} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.721 {parse ccyymmdd} { + clock scan {2001 12 02} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.722 {parse ccyymmdd} { + clock scan {2001 12 ii} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.723 {parse ccyymmdd} { + clock scan {2001 12 2} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.724 {parse ccyymmdd} { + clock scan {2001 12 ii} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.725 {parse ccyymmdd} { + clock scan {2001 Dec 02} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.726 {parse ccyymmdd} { + clock scan {2001 Dec ii} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.727 {parse ccyymmdd} { + clock scan {2001 Dec 2} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.728 {parse ccyymmdd} { + clock scan {2001 Dec ii} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.729 {parse ccyymmdd} { + clock scan {2001 December 02} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.730 {parse ccyymmdd} { + clock scan {2001 December ii} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.731 {parse ccyymmdd} { + clock scan {2001 December 2} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.732 {parse ccyymmdd} { + clock scan {2001 December ii} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.733 {parse ccyymmdd} { + clock scan {2001 Dec 02} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.734 {parse ccyymmdd} { + clock scan {2001 Dec ii} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.735 {parse ccyymmdd} { + clock scan {2001 Dec 2} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.736 {parse ccyymmdd} { + clock scan {2001 Dec ii} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.737 {parse ccyymmdd} { + clock scan {2001 12 02} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.738 {parse ccyymmdd} { + clock scan {2001 12 ii} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.739 {parse ccyymmdd} { + clock scan {2001 12 2} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.740 {parse ccyymmdd} { + clock scan {2001 12 ii} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.741 {parse ccyymmdd} { + clock scan {2001 xii 02} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.742 {parse ccyymmdd} { + clock scan {2001 xii ii} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.743 {parse ccyymmdd} { + clock scan {2001 xii 2} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.744 {parse ccyymmdd} { + clock scan {2001 xii ii} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.745 {parse ccyymmdd} { + clock scan {2001 12 02} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.746 {parse ccyymmdd} { + clock scan {2001 12 ii} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.747 {parse ccyymmdd} { + clock scan {2001 12 2} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.748 {parse ccyymmdd} { + clock scan {2001 12 ii} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.749 {parse ccyymmdd} { + clock scan 12/02/2001 -format %x -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.750 {parse ccyymmdd} { + clock scan 12/02/2001 -format %D -locale en_US_roman -gmt 1 +} 1007251200 +test clock-8.751 {parse ccyymmdd} { + clock scan {2001 Dec 31} -format {%C%y %b %d} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.752 {parse ccyymmdd} { + clock scan {2001 Dec xxxi} -format {%C%y %b %Od} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.753 {parse ccyymmdd} { + clock scan {2001 Dec 31} -format {%C%y %b %e} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.754 {parse ccyymmdd} { + clock scan {2001 Dec xxxi} -format {%C%y %b %Oe} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.755 {parse ccyymmdd} { + clock scan {2001 December 31} -format {%C%y %B %d} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.756 {parse ccyymmdd} { + clock scan {2001 December xxxi} -format {%C%y %B %Od} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.757 {parse ccyymmdd} { + clock scan {2001 December 31} -format {%C%y %B %e} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.758 {parse ccyymmdd} { + clock scan {2001 December xxxi} -format {%C%y %B %Oe} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.759 {parse ccyymmdd} { + clock scan {2001 Dec 31} -format {%C%y %h %d} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.760 {parse ccyymmdd} { + clock scan {2001 Dec xxxi} -format {%C%y %h %Od} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.761 {parse ccyymmdd} { + clock scan {2001 Dec 31} -format {%C%y %h %e} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.762 {parse ccyymmdd} { + clock scan {2001 Dec xxxi} -format {%C%y %h %Oe} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.763 {parse ccyymmdd} { + clock scan {2001 12 31} -format {%C%y %m %d} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.764 {parse ccyymmdd} { + clock scan {2001 12 xxxi} -format {%C%y %m %Od} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.765 {parse ccyymmdd} { + clock scan {2001 12 31} -format {%C%y %m %e} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.766 {parse ccyymmdd} { + clock scan {2001 12 xxxi} -format {%C%y %m %Oe} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.767 {parse ccyymmdd} { + clock scan {2001 xii 31} -format {%C%y %Om %d} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.768 {parse ccyymmdd} { + clock scan {2001 xii xxxi} -format {%C%y %Om %Od} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.769 {parse ccyymmdd} { + clock scan {2001 xii 31} -format {%C%y %Om %e} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.770 {parse ccyymmdd} { + clock scan {2001 xii xxxi} -format {%C%y %Om %Oe} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.771 {parse ccyymmdd} { + clock scan {2001 12 31} -format {%C%y %N %d} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.772 {parse ccyymmdd} { + clock scan {2001 12 xxxi} -format {%C%y %N %Od} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.773 {parse ccyymmdd} { + clock scan {2001 12 31} -format {%C%y %N %e} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.774 {parse ccyymmdd} { + clock scan {2001 12 xxxi} -format {%C%y %N %Oe} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.775 {parse ccyymmdd} { + clock scan {2001 Dec 31} -format {%Y %b %d} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.776 {parse ccyymmdd} { + clock scan {2001 Dec xxxi} -format {%Y %b %Od} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.777 {parse ccyymmdd} { + clock scan {2001 Dec 31} -format {%Y %b %e} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.778 {parse ccyymmdd} { + clock scan {2001 Dec xxxi} -format {%Y %b %Oe} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.779 {parse ccyymmdd} { + clock scan {2001 December 31} -format {%Y %B %d} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.780 {parse ccyymmdd} { + clock scan {2001 December xxxi} -format {%Y %B %Od} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.781 {parse ccyymmdd} { + clock scan {2001 December 31} -format {%Y %B %e} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.782 {parse ccyymmdd} { + clock scan {2001 December xxxi} -format {%Y %B %Oe} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.783 {parse ccyymmdd} { + clock scan {2001 Dec 31} -format {%Y %h %d} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.784 {parse ccyymmdd} { + clock scan {2001 Dec xxxi} -format {%Y %h %Od} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.785 {parse ccyymmdd} { + clock scan {2001 Dec 31} -format {%Y %h %e} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.786 {parse ccyymmdd} { + clock scan {2001 Dec xxxi} -format {%Y %h %Oe} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.787 {parse ccyymmdd} { + clock scan {2001 12 31} -format {%Y %m %d} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.788 {parse ccyymmdd} { + clock scan {2001 12 xxxi} -format {%Y %m %Od} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.789 {parse ccyymmdd} { + clock scan {2001 12 31} -format {%Y %m %e} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.790 {parse ccyymmdd} { + clock scan {2001 12 xxxi} -format {%Y %m %Oe} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.791 {parse ccyymmdd} { + clock scan {2001 xii 31} -format {%Y %Om %d} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.792 {parse ccyymmdd} { + clock scan {2001 xii xxxi} -format {%Y %Om %Od} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.793 {parse ccyymmdd} { + clock scan {2001 xii 31} -format {%Y %Om %e} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.794 {parse ccyymmdd} { + clock scan {2001 xii xxxi} -format {%Y %Om %Oe} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.795 {parse ccyymmdd} { + clock scan {2001 12 31} -format {%Y %N %d} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.796 {parse ccyymmdd} { + clock scan {2001 12 xxxi} -format {%Y %N %Od} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.797 {parse ccyymmdd} { + clock scan {2001 12 31} -format {%Y %N %e} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.798 {parse ccyymmdd} { + clock scan {2001 12 xxxi} -format {%Y %N %Oe} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.799 {parse ccyymmdd} { + clock scan 12/31/2001 -format %x -locale en_US_roman -gmt 1 +} 1009756800 +test clock-8.800 {parse ccyymmdd} { + clock scan 12/31/2001 -format %D -locale en_US_roman -gmt 1 +} 1009756800 +# END testcases8 + +test clock-9.1 {seconds take precedence over ccyymmdd} { + clock scan {0 20000101} -format {%s %Y%m%d} -gmt true +} 0 + +test clock-9.2 {Julian day takes precedence over ccyymmdd} { + clock scan {2440588 20000101} -format {%J %Y%m%d} -gmt true +} 0 + +# Test parsing of ccyyddd + +test clock-10.1 {parse ccyyddd} { + clock scan {1970 001} -format {%Y %j} -locale en_US_roman -gmt 1 +} 0 +test clock-10.2 {parse ccyyddd} { + clock scan {1970 365} -format {%Y %j} -locale en_US_roman -gmt 1 +} 31449600 +test clock-10.3 {parse ccyyddd} { + clock scan {1971 001} -format {%Y %j} -locale en_US_roman -gmt 1 +} 31536000 +test clock-10.4 {parse ccyyddd} { + clock scan {1971 365} -format {%Y %j} -locale en_US_roman -gmt 1 +} 62985600 +test clock-10.5 {parse ccyyddd} { + clock scan {2000 001} -format {%Y %j} -locale en_US_roman -gmt 1 +} 946684800 +test clock-10.6 {parse ccyyddd} { + clock scan {2000 365} -format {%Y %j} -locale en_US_roman -gmt 1 +} 978134400 +test clock-10.7 {parse ccyyddd} { + clock scan {2001 001} -format {%Y %j} -locale en_US_roman -gmt 1 +} 978307200 +test clock-10.8 {parse ccyyddd} { + clock scan {2001 365} -format {%Y %j} -locale en_US_roman -gmt 1 +} 1009756800 + + +test clock-10.9 {seconds take precedence over ccyyddd} { + list [clock scan {0 2000001} -format {%s %Y%j} -gmt true] \ + [clock scan {2000001 0} -format {%Y%j %s} -gmt true] +} {0 0} +test clock-10.10 {julian day takes precedence over ccyyddd} { + list [clock scan {2440588 2000001} -format {%J %Y%j} -gmt true] \ + [clock scan {2000001 2440588} -format {%Y%j %J} -gmt true] +} {0 0} + +# BEGIN testcases11 + +# Test precedence among yyyymmdd and yyyyddd + +test clock-11.1 {precedence of ccyyddd and ccyymmdd} { + clock scan 19700101002 -format %Y%m%d%j -gmt 1 +} 86400 +test clock-11.2 {precedence of ccyyddd and ccyymmdd} { + clock scan 01197001002 -format %m%Y%d%j -gmt 1 +} 86400 +test clock-11.3 {precedence of ccyyddd and ccyymmdd} { + clock scan 01197001002 -format %d%Y%m%j -gmt 1 +} 86400 +test clock-11.4 {precedence of ccyyddd and ccyymmdd} { + clock scan 00219700101 -format %j%Y%m%d -gmt 1 +} 0 +test clock-11.5 {precedence of ccyyddd and ccyymmdd} { + clock scan 19700100201 -format %Y%m%j%d -gmt 1 +} 0 +test clock-11.6 {precedence of ccyyddd and ccyymmdd} { + clock scan 01197000201 -format %m%Y%j%d -gmt 1 +} 0 +test clock-11.7 {precedence of ccyyddd and ccyymmdd} { + clock scan 01197000201 -format %d%Y%j%m -gmt 1 +} 0 +test clock-11.8 {precedence of ccyyddd and ccyymmdd} { + clock scan 00219700101 -format %j%Y%d%m -gmt 1 +} 0 +test clock-11.9 {precedence of ccyyddd and ccyymmdd} { + clock scan 19700101002 -format %Y%d%m%j -gmt 1 +} 86400 +test clock-11.10 {precedence of ccyyddd and ccyymmdd} { + clock scan 01011970002 -format %m%d%Y%j -gmt 1 +} 86400 +test clock-11.11 {precedence of ccyyddd and ccyymmdd} { + clock scan 01011970002 -format %d%m%Y%j -gmt 1 +} 86400 +test clock-11.12 {precedence of ccyyddd and ccyymmdd} { + clock scan 00201197001 -format %j%m%Y%d -gmt 1 +} 0 +test clock-11.13 {precedence of ccyyddd and ccyymmdd} { + clock scan 19700100201 -format %Y%d%j%m -gmt 1 +} 0 +test clock-11.14 {precedence of ccyyddd and ccyymmdd} { + clock scan 01010021970 -format %m%d%j%Y -gmt 1 +} 86400 +test clock-11.15 {precedence of ccyyddd and ccyymmdd} { + clock scan 01010021970 -format %d%m%j%Y -gmt 1 +} 86400 +test clock-11.16 {precedence of ccyyddd and ccyymmdd} { + clock scan 00201011970 -format %j%m%d%Y -gmt 1 +} 0 +test clock-11.17 {precedence of ccyyddd and ccyymmdd} { + clock scan 19700020101 -format %Y%j%m%d -gmt 1 +} 0 +test clock-11.18 {precedence of ccyyddd and ccyymmdd} { + clock scan 01002197001 -format %m%j%Y%d -gmt 1 +} 0 +test clock-11.19 {precedence of ccyyddd and ccyymmdd} { + clock scan 01002197001 -format %d%j%Y%m -gmt 1 +} 0 +test clock-11.20 {precedence of ccyyddd and ccyymmdd} { + clock scan 00201197001 -format %j%d%Y%m -gmt 1 +} 0 +test clock-11.21 {precedence of ccyyddd and ccyymmdd} { + clock scan 19700020101 -format %Y%j%d%m -gmt 1 +} 0 +test clock-11.22 {precedence of ccyyddd and ccyymmdd} { + clock scan 01002011970 -format %m%j%d%Y -gmt 1 +} 0 +test clock-11.23 {precedence of ccyyddd and ccyymmdd} { + clock scan 01002011970 -format %d%j%m%Y -gmt 1 +} 0 +test clock-11.24 {precedence of ccyyddd and ccyymmdd} { + clock scan 00201011970 -format %j%d%m%Y -gmt 1 +} 0 +# END testcases11 + +# BEGIN testcases12 + +# Test parsing of ccyyWwwd + +test clock-12.1 {parse ccyyWwwd} { + clock scan {1970 W01 Fri} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 86400 +test clock-12.2 {parse ccyyWwwd} { + clock scan {1970 W01 Friday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 86400 +test clock-12.3 {parse ccyyWwwd} { + clock scan {1970 W01 5} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 86400 +test clock-12.4 {parse ccyyWwwd} { + clock scan {1970 W01 5} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 86400 +test clock-12.5 {parse ccyyWwwd} { + clock scan {1970 W01 v} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 86400 +test clock-12.6 {parse ccyyWwwd} { + clock scan {1970 W01 v} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 86400 +test clock-12.7 {parse ccyyWwwd} { + clock scan {1970 W05 Sat} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 2592000 +test clock-12.8 {parse ccyyWwwd} { + clock scan {1970 W05 Saturday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 2592000 +test clock-12.9 {parse ccyyWwwd} { + clock scan {1970 W05 6} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 2592000 +test clock-12.10 {parse ccyyWwwd} { + clock scan {1970 W05 6} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 2592000 +test clock-12.11 {parse ccyyWwwd} { + clock scan {1970 W05 vi} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 2592000 +test clock-12.12 {parse ccyyWwwd} { + clock scan {1970 W05 vi} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 2592000 +test clock-12.13 {parse ccyyWwwd} { + clock scan {1970 W49 Wed} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 28944000 +test clock-12.14 {parse ccyyWwwd} { + clock scan {1970 W49 Wednesday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 28944000 +test clock-12.15 {parse ccyyWwwd} { + clock scan {1970 W49 3} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 28944000 +test clock-12.16 {parse ccyyWwwd} { + clock scan {1970 W49 3} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 28944000 +test clock-12.17 {parse ccyyWwwd} { + clock scan {1970 W49 iii} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 28944000 +test clock-12.18 {parse ccyyWwwd} { + clock scan {1970 W49 iii} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 28944000 +test clock-12.19 {parse ccyyWwwd} { + clock scan {1970 W53 Thu} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 31449600 +test clock-12.20 {parse ccyyWwwd} { + clock scan {1970 W53 Thursday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 31449600 +test clock-12.21 {parse ccyyWwwd} { + clock scan {1970 W53 4} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 31449600 +test clock-12.22 {parse ccyyWwwd} { + clock scan {1970 W53 4} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 31449600 +test clock-12.23 {parse ccyyWwwd} { + clock scan {1970 W53 iv} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 31449600 +test clock-12.24 {parse ccyyWwwd} { + clock scan {1970 W53 iv} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 31449600 +test clock-12.25 {parse ccyyWwwd} { + clock scan {1970 W53 Sat} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 31622400 +test clock-12.26 {parse ccyyWwwd} { + clock scan {1970 W53 Saturday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 31622400 +test clock-12.27 {parse ccyyWwwd} { + clock scan {1970 W53 6} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 31622400 +test clock-12.28 {parse ccyyWwwd} { + clock scan {1970 W53 6} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 31622400 +test clock-12.29 {parse ccyyWwwd} { + clock scan {1970 W53 vi} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 31622400 +test clock-12.30 {parse ccyyWwwd} { + clock scan {1970 W53 vi} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 31622400 +test clock-12.31 {parse ccyyWwwd} { + clock scan {1971 W04 Sun} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 34128000 +test clock-12.32 {parse ccyyWwwd} { + clock scan {1971 W04 Sunday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 34128000 +test clock-12.33 {parse ccyyWwwd} { + clock scan {1971 W04 7} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 34128000 +test clock-12.34 {parse ccyyWwwd} { + clock scan {1971 W04 0} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 34128000 +test clock-12.35 {parse ccyyWwwd} { + clock scan {1971 W04 vii} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 34128000 +test clock-12.36 {parse ccyyWwwd} { + clock scan {1971 W04 ?} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 34128000 +test clock-12.37 {parse ccyyWwwd} { + clock scan {1971 W48 Thu} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 60480000 +test clock-12.38 {parse ccyyWwwd} { + clock scan {1971 W48 Thursday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 60480000 +test clock-12.39 {parse ccyyWwwd} { + clock scan {1971 W48 4} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 60480000 +test clock-12.40 {parse ccyyWwwd} { + clock scan {1971 W48 4} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 60480000 +test clock-12.41 {parse ccyyWwwd} { + clock scan {1971 W48 iv} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 60480000 +test clock-12.42 {parse ccyyWwwd} { + clock scan {1971 W48 iv} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 60480000 +test clock-12.43 {parse ccyyWwwd} { + clock scan {1971 W52 Fri} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 62985600 +test clock-12.44 {parse ccyyWwwd} { + clock scan {1971 W52 Friday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 62985600 +test clock-12.45 {parse ccyyWwwd} { + clock scan {1971 W52 5} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 62985600 +test clock-12.46 {parse ccyyWwwd} { + clock scan {1971 W52 5} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 62985600 +test clock-12.47 {parse ccyyWwwd} { + clock scan {1971 W52 v} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 62985600 +test clock-12.48 {parse ccyyWwwd} { + clock scan {1971 W52 v} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 62985600 +test clock-12.49 {parse ccyyWwwd} { + clock scan {1999 W52 Sun} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 946771200 +test clock-12.50 {parse ccyyWwwd} { + clock scan {1999 W52 Sunday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 946771200 +test clock-12.51 {parse ccyyWwwd} { + clock scan {1999 W52 7} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 946771200 +test clock-12.52 {parse ccyyWwwd} { + clock scan {1999 W52 0} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 946771200 +test clock-12.53 {parse ccyyWwwd} { + clock scan {1999 W52 vii} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 946771200 +test clock-12.54 {parse ccyyWwwd} { + clock scan {1999 W52 ?} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 946771200 +test clock-12.55 {parse ccyyWwwd} { + clock scan {2000 W05 Mon} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 949276800 +test clock-12.56 {parse ccyyWwwd} { + clock scan {2000 W05 Monday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 949276800 +test clock-12.57 {parse ccyyWwwd} { + clock scan {2000 W05 1} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 949276800 +test clock-12.58 {parse ccyyWwwd} { + clock scan {2000 W05 1} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 949276800 +test clock-12.59 {parse ccyyWwwd} { + clock scan {2000 W05 i} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 949276800 +test clock-12.60 {parse ccyyWwwd} { + clock scan {2000 W05 i} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 949276800 +test clock-12.61 {parse ccyyWwwd} { + clock scan {2000 W48 Sat} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 975715200 +test clock-12.62 {parse ccyyWwwd} { + clock scan {2000 W48 Saturday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 975715200 +test clock-12.63 {parse ccyyWwwd} { + clock scan {2000 W48 6} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 975715200 +test clock-12.64 {parse ccyyWwwd} { + clock scan {2000 W48 6} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 975715200 +test clock-12.65 {parse ccyyWwwd} { + clock scan {2000 W48 vi} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 975715200 +test clock-12.66 {parse ccyyWwwd} { + clock scan {2000 W48 vi} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 975715200 +test clock-12.67 {parse ccyyWwwd} { + clock scan {2000 W52 Sun} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 978220800 +test clock-12.68 {parse ccyyWwwd} { + clock scan {2000 W52 Sunday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 978220800 +test clock-12.69 {parse ccyyWwwd} { + clock scan {2000 W52 7} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 978220800 +test clock-12.70 {parse ccyyWwwd} { + clock scan {2000 W52 0} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 978220800 +test clock-12.71 {parse ccyyWwwd} { + clock scan {2000 W52 vii} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 978220800 +test clock-12.72 {parse ccyyWwwd} { + clock scan {2000 W52 ?} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 978220800 +test clock-12.73 {parse ccyyWwwd} { + clock scan {2001 W01 Tue} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 978393600 +test clock-12.74 {parse ccyyWwwd} { + clock scan {2001 W01 Tuesday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 978393600 +test clock-12.75 {parse ccyyWwwd} { + clock scan {2001 W01 2} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 978393600 +test clock-12.76 {parse ccyyWwwd} { + clock scan {2001 W01 2} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 978393600 +test clock-12.77 {parse ccyyWwwd} { + clock scan {2001 W01 ii} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 978393600 +test clock-12.78 {parse ccyyWwwd} { + clock scan {2001 W01 ii} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 978393600 +test clock-12.79 {parse ccyyWwwd} { + clock scan {2001 W05 Wed} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 980899200 +test clock-12.80 {parse ccyyWwwd} { + clock scan {2001 W05 Wednesday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 980899200 +test clock-12.81 {parse ccyyWwwd} { + clock scan {2001 W05 3} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 980899200 +test clock-12.82 {parse ccyyWwwd} { + clock scan {2001 W05 3} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 980899200 +test clock-12.83 {parse ccyyWwwd} { + clock scan {2001 W05 iii} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 980899200 +test clock-12.84 {parse ccyyWwwd} { + clock scan {2001 W05 iii} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 980899200 +test clock-12.85 {parse ccyyWwwd} { + clock scan {2001 W48 Sun} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-12.86 {parse ccyyWwwd} { + clock scan {2001 W48 Sunday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-12.87 {parse ccyyWwwd} { + clock scan {2001 W48 7} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-12.88 {parse ccyyWwwd} { + clock scan {2001 W48 0} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-12.89 {parse ccyyWwwd} { + clock scan {2001 W48 vii} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-12.90 {parse ccyyWwwd} { + clock scan {2001 W48 ?} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-12.91 {parse ccyyWwwd} { + clock scan {2002 W01 Mon} -format {%G W%V %a} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-12.92 {parse ccyyWwwd} { + clock scan {2002 W01 Monday} -format {%G W%V %A} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-12.93 {parse ccyyWwwd} { + clock scan {2002 W01 1} -format {%G W%V %u} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-12.94 {parse ccyyWwwd} { + clock scan {2002 W01 1} -format {%G W%V %w} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-12.95 {parse ccyyWwwd} { + clock scan {2002 W01 i} -format {%G W%V %Ou} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-12.96 {parse ccyyWwwd} { + clock scan {2002 W01 i} -format {%G W%V %Ow} -locale en_US_roman -gmt 1 +} 1009756800 +# END testcases12 + +test clock-13.1 {test that %s takes precedence over ccyyWwwd} { + list [clock scan {0 2000W011} -format {%s %GW%V%u} -gmt true] \ + [clock scan {2000W011 0} -format {%GW%V%u %s} -gmt true] +} {0 0} +test clock-13.2 {test that %J takes precedence over ccyyWwwd} { + list [clock scan {2440588 2000W011} -format {%J %GW%V%u} -gmt true] \ + [clock scan {2000W011 2440588} -format {%GW%V%u %J} -gmt true] +} {0 0} +test clock-13.3 {invalid weekday} { + catch {clock scan 2000W018 -format %GW%V%u -gmt true} result + list $result $::errorCode +} {{day of week is greater than 7} {CLOCK badDayOfWeek}} +test clock-13.4 {invalid weekday} { + catch { + clock scan {2000 W01 viii} \ + -format {%G W%V %Ou} -gmt true -locale en_US_roman + } result + list $result $::errorCode +} {{day of week is greater than 7} {CLOCK badDayOfWeek}} + +# BEGIN testcases14 + +# Test parsing of yymmdd + +test clock-14.1 {parse yymmdd} { + clock scan {38 Jan 02} -format {%y %b %d} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.2 {parse yymmdd} { + clock scan {38 Jan ii} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.3 {parse yymmdd} { + clock scan {38 Jan 2} -format {%y %b %e} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.4 {parse yymmdd} { + clock scan {38 Jan ii} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.5 {parse yymmdd} { + clock scan {38 January 02} -format {%y %B %d} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.6 {parse yymmdd} { + clock scan {38 January ii} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.7 {parse yymmdd} { + clock scan {38 January 2} -format {%y %B %e} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.8 {parse yymmdd} { + clock scan {38 January ii} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.9 {parse yymmdd} { + clock scan {38 Jan 02} -format {%y %h %d} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.10 {parse yymmdd} { + clock scan {38 Jan ii} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.11 {parse yymmdd} { + clock scan {38 Jan 2} -format {%y %h %e} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.12 {parse yymmdd} { + clock scan {38 Jan ii} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.13 {parse yymmdd} { + clock scan {38 01 02} -format {%y %m %d} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.14 {parse yymmdd} { + clock scan {38 01 ii} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.15 {parse yymmdd} { + clock scan {38 01 2} -format {%y %m %e} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.16 {parse yymmdd} { + clock scan {38 01 ii} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.17 {parse yymmdd} { + clock scan {38 i 02} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.18 {parse yymmdd} { + clock scan {38 i ii} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.19 {parse yymmdd} { + clock scan {38 i 2} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.20 {parse yymmdd} { + clock scan {38 i ii} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.21 {parse yymmdd} { + clock scan {38 1 02} -format {%y %N %d} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.22 {parse yymmdd} { + clock scan {38 1 ii} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.23 {parse yymmdd} { + clock scan {38 1 2} -format {%y %N %e} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.24 {parse yymmdd} { + clock scan {38 1 ii} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.25 {parse yymmdd} { + clock scan {xxxviii Jan 02} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.26 {parse yymmdd} { + clock scan {xxxviii Jan ii} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.27 {parse yymmdd} { + clock scan {xxxviii Jan 2} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.28 {parse yymmdd} { + clock scan {xxxviii Jan ii} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.29 {parse yymmdd} { + clock scan {xxxviii January 02} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.30 {parse yymmdd} { + clock scan {xxxviii January ii} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.31 {parse yymmdd} { + clock scan {xxxviii January 2} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.32 {parse yymmdd} { + clock scan {xxxviii January ii} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.33 {parse yymmdd} { + clock scan {xxxviii Jan 02} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.34 {parse yymmdd} { + clock scan {xxxviii Jan ii} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.35 {parse yymmdd} { + clock scan {xxxviii Jan 2} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.36 {parse yymmdd} { + clock scan {xxxviii Jan ii} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.37 {parse yymmdd} { + clock scan {xxxviii 01 02} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.38 {parse yymmdd} { + clock scan {xxxviii 01 ii} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.39 {parse yymmdd} { + clock scan {xxxviii 01 2} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.40 {parse yymmdd} { + clock scan {xxxviii 01 ii} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.41 {parse yymmdd} { + clock scan {xxxviii i 02} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.42 {parse yymmdd} { + clock scan {xxxviii i ii} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.43 {parse yymmdd} { + clock scan {xxxviii i 2} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.44 {parse yymmdd} { + clock scan {xxxviii i ii} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.45 {parse yymmdd} { + clock scan {xxxviii 1 02} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.46 {parse yymmdd} { + clock scan {xxxviii 1 ii} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.47 {parse yymmdd} { + clock scan {xxxviii 1 2} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.48 {parse yymmdd} { + clock scan {xxxviii 1 ii} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} -1009756800 +test clock-14.49 {parse yymmdd} { + clock scan {38 Jan 31} -format {%y %b %d} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.50 {parse yymmdd} { + clock scan {38 Jan xxxi} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.51 {parse yymmdd} { + clock scan {38 Jan 31} -format {%y %b %e} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.52 {parse yymmdd} { + clock scan {38 Jan xxxi} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.53 {parse yymmdd} { + clock scan {38 January 31} -format {%y %B %d} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.54 {parse yymmdd} { + clock scan {38 January xxxi} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.55 {parse yymmdd} { + clock scan {38 January 31} -format {%y %B %e} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.56 {parse yymmdd} { + clock scan {38 January xxxi} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.57 {parse yymmdd} { + clock scan {38 Jan 31} -format {%y %h %d} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.58 {parse yymmdd} { + clock scan {38 Jan xxxi} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.59 {parse yymmdd} { + clock scan {38 Jan 31} -format {%y %h %e} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.60 {parse yymmdd} { + clock scan {38 Jan xxxi} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.61 {parse yymmdd} { + clock scan {38 01 31} -format {%y %m %d} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.62 {parse yymmdd} { + clock scan {38 01 xxxi} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.63 {parse yymmdd} { + clock scan {38 01 31} -format {%y %m %e} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.64 {parse yymmdd} { + clock scan {38 01 xxxi} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.65 {parse yymmdd} { + clock scan {38 i 31} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.66 {parse yymmdd} { + clock scan {38 i xxxi} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.67 {parse yymmdd} { + clock scan {38 i 31} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.68 {parse yymmdd} { + clock scan {38 i xxxi} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.69 {parse yymmdd} { + clock scan {38 1 31} -format {%y %N %d} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.70 {parse yymmdd} { + clock scan {38 1 xxxi} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.71 {parse yymmdd} { + clock scan {38 1 31} -format {%y %N %e} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.72 {parse yymmdd} { + clock scan {38 1 xxxi} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.73 {parse yymmdd} { + clock scan {xxxviii Jan 31} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.74 {parse yymmdd} { + clock scan {xxxviii Jan xxxi} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.75 {parse yymmdd} { + clock scan {xxxviii Jan 31} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.76 {parse yymmdd} { + clock scan {xxxviii Jan xxxi} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.77 {parse yymmdd} { + clock scan {xxxviii January 31} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.78 {parse yymmdd} { + clock scan {xxxviii January xxxi} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.79 {parse yymmdd} { + clock scan {xxxviii January 31} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.80 {parse yymmdd} { + clock scan {xxxviii January xxxi} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.81 {parse yymmdd} { + clock scan {xxxviii Jan 31} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.82 {parse yymmdd} { + clock scan {xxxviii Jan xxxi} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.83 {parse yymmdd} { + clock scan {xxxviii Jan 31} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.84 {parse yymmdd} { + clock scan {xxxviii Jan xxxi} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.85 {parse yymmdd} { + clock scan {xxxviii 01 31} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.86 {parse yymmdd} { + clock scan {xxxviii 01 xxxi} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.87 {parse yymmdd} { + clock scan {xxxviii 01 31} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.88 {parse yymmdd} { + clock scan {xxxviii 01 xxxi} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.89 {parse yymmdd} { + clock scan {xxxviii i 31} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.90 {parse yymmdd} { + clock scan {xxxviii i xxxi} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.91 {parse yymmdd} { + clock scan {xxxviii i 31} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.92 {parse yymmdd} { + clock scan {xxxviii i xxxi} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.93 {parse yymmdd} { + clock scan {xxxviii 1 31} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.94 {parse yymmdd} { + clock scan {xxxviii 1 xxxi} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.95 {parse yymmdd} { + clock scan {xxxviii 1 31} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.96 {parse yymmdd} { + clock scan {xxxviii 1 xxxi} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} -1007251200 +test clock-14.97 {parse yymmdd} { + clock scan {38 Dec 02} -format {%y %b %d} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.98 {parse yymmdd} { + clock scan {38 Dec ii} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.99 {parse yymmdd} { + clock scan {38 Dec 2} -format {%y %b %e} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.100 {parse yymmdd} { + clock scan {38 Dec ii} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.101 {parse yymmdd} { + clock scan {38 December 02} -format {%y %B %d} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.102 {parse yymmdd} { + clock scan {38 December ii} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.103 {parse yymmdd} { + clock scan {38 December 2} -format {%y %B %e} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.104 {parse yymmdd} { + clock scan {38 December ii} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.105 {parse yymmdd} { + clock scan {38 Dec 02} -format {%y %h %d} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.106 {parse yymmdd} { + clock scan {38 Dec ii} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.107 {parse yymmdd} { + clock scan {38 Dec 2} -format {%y %h %e} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.108 {parse yymmdd} { + clock scan {38 Dec ii} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.109 {parse yymmdd} { + clock scan {38 12 02} -format {%y %m %d} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.110 {parse yymmdd} { + clock scan {38 12 ii} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.111 {parse yymmdd} { + clock scan {38 12 2} -format {%y %m %e} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.112 {parse yymmdd} { + clock scan {38 12 ii} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.113 {parse yymmdd} { + clock scan {38 xii 02} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.114 {parse yymmdd} { + clock scan {38 xii ii} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.115 {parse yymmdd} { + clock scan {38 xii 2} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.116 {parse yymmdd} { + clock scan {38 xii ii} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.117 {parse yymmdd} { + clock scan {38 12 02} -format {%y %N %d} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.118 {parse yymmdd} { + clock scan {38 12 ii} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.119 {parse yymmdd} { + clock scan {38 12 2} -format {%y %N %e} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.120 {parse yymmdd} { + clock scan {38 12 ii} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.121 {parse yymmdd} { + clock scan {xxxviii Dec 02} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.122 {parse yymmdd} { + clock scan {xxxviii Dec ii} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.123 {parse yymmdd} { + clock scan {xxxviii Dec 2} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.124 {parse yymmdd} { + clock scan {xxxviii Dec ii} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.125 {parse yymmdd} { + clock scan {xxxviii December 02} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.126 {parse yymmdd} { + clock scan {xxxviii December ii} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.127 {parse yymmdd} { + clock scan {xxxviii December 2} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.128 {parse yymmdd} { + clock scan {xxxviii December ii} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.129 {parse yymmdd} { + clock scan {xxxviii Dec 02} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.130 {parse yymmdd} { + clock scan {xxxviii Dec ii} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.131 {parse yymmdd} { + clock scan {xxxviii Dec 2} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.132 {parse yymmdd} { + clock scan {xxxviii Dec ii} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.133 {parse yymmdd} { + clock scan {xxxviii 12 02} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.134 {parse yymmdd} { + clock scan {xxxviii 12 ii} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.135 {parse yymmdd} { + clock scan {xxxviii 12 2} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.136 {parse yymmdd} { + clock scan {xxxviii 12 ii} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.137 {parse yymmdd} { + clock scan {xxxviii xii 02} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.138 {parse yymmdd} { + clock scan {xxxviii xii ii} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.139 {parse yymmdd} { + clock scan {xxxviii xii 2} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.140 {parse yymmdd} { + clock scan {xxxviii xii ii} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.141 {parse yymmdd} { + clock scan {xxxviii 12 02} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.142 {parse yymmdd} { + clock scan {xxxviii 12 ii} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.143 {parse yymmdd} { + clock scan {xxxviii 12 2} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.144 {parse yymmdd} { + clock scan {xxxviii 12 ii} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} -980899200 +test clock-14.145 {parse yymmdd} { + clock scan {38 Dec 31} -format {%y %b %d} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.146 {parse yymmdd} { + clock scan {38 Dec xxxi} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.147 {parse yymmdd} { + clock scan {38 Dec 31} -format {%y %b %e} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.148 {parse yymmdd} { + clock scan {38 Dec xxxi} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.149 {parse yymmdd} { + clock scan {38 December 31} -format {%y %B %d} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.150 {parse yymmdd} { + clock scan {38 December xxxi} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.151 {parse yymmdd} { + clock scan {38 December 31} -format {%y %B %e} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.152 {parse yymmdd} { + clock scan {38 December xxxi} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.153 {parse yymmdd} { + clock scan {38 Dec 31} -format {%y %h %d} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.154 {parse yymmdd} { + clock scan {38 Dec xxxi} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.155 {parse yymmdd} { + clock scan {38 Dec 31} -format {%y %h %e} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.156 {parse yymmdd} { + clock scan {38 Dec xxxi} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.157 {parse yymmdd} { + clock scan {38 12 31} -format {%y %m %d} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.158 {parse yymmdd} { + clock scan {38 12 xxxi} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.159 {parse yymmdd} { + clock scan {38 12 31} -format {%y %m %e} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.160 {parse yymmdd} { + clock scan {38 12 xxxi} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.161 {parse yymmdd} { + clock scan {38 xii 31} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.162 {parse yymmdd} { + clock scan {38 xii xxxi} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.163 {parse yymmdd} { + clock scan {38 xii 31} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.164 {parse yymmdd} { + clock scan {38 xii xxxi} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.165 {parse yymmdd} { + clock scan {38 12 31} -format {%y %N %d} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.166 {parse yymmdd} { + clock scan {38 12 xxxi} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.167 {parse yymmdd} { + clock scan {38 12 31} -format {%y %N %e} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.168 {parse yymmdd} { + clock scan {38 12 xxxi} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.169 {parse yymmdd} { + clock scan {xxxviii Dec 31} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.170 {parse yymmdd} { + clock scan {xxxviii Dec xxxi} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.171 {parse yymmdd} { + clock scan {xxxviii Dec 31} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.172 {parse yymmdd} { + clock scan {xxxviii Dec xxxi} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.173 {parse yymmdd} { + clock scan {xxxviii December 31} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.174 {parse yymmdd} { + clock scan {xxxviii December xxxi} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.175 {parse yymmdd} { + clock scan {xxxviii December 31} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.176 {parse yymmdd} { + clock scan {xxxviii December xxxi} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.177 {parse yymmdd} { + clock scan {xxxviii Dec 31} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.178 {parse yymmdd} { + clock scan {xxxviii Dec xxxi} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.179 {parse yymmdd} { + clock scan {xxxviii Dec 31} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.180 {parse yymmdd} { + clock scan {xxxviii Dec xxxi} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.181 {parse yymmdd} { + clock scan {xxxviii 12 31} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.182 {parse yymmdd} { + clock scan {xxxviii 12 xxxi} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.183 {parse yymmdd} { + clock scan {xxxviii 12 31} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.184 {parse yymmdd} { + clock scan {xxxviii 12 xxxi} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.185 {parse yymmdd} { + clock scan {xxxviii xii 31} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.186 {parse yymmdd} { + clock scan {xxxviii xii xxxi} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.187 {parse yymmdd} { + clock scan {xxxviii xii 31} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.188 {parse yymmdd} { + clock scan {xxxviii xii xxxi} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.189 {parse yymmdd} { + clock scan {xxxviii 12 31} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.190 {parse yymmdd} { + clock scan {xxxviii 12 xxxi} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.191 {parse yymmdd} { + clock scan {xxxviii 12 31} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.192 {parse yymmdd} { + clock scan {xxxviii 12 xxxi} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} -978393600 +test clock-14.193 {parse yymmdd} { + clock scan {70 Jan 02} -format {%y %b %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.194 {parse yymmdd} { + clock scan {70 Jan ii} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.195 {parse yymmdd} { + clock scan {70 Jan 2} -format {%y %b %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.196 {parse yymmdd} { + clock scan {70 Jan ii} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.197 {parse yymmdd} { + clock scan {70 January 02} -format {%y %B %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.198 {parse yymmdd} { + clock scan {70 January ii} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.199 {parse yymmdd} { + clock scan {70 January 2} -format {%y %B %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.200 {parse yymmdd} { + clock scan {70 January ii} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.201 {parse yymmdd} { + clock scan {70 Jan 02} -format {%y %h %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.202 {parse yymmdd} { + clock scan {70 Jan ii} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.203 {parse yymmdd} { + clock scan {70 Jan 2} -format {%y %h %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.204 {parse yymmdd} { + clock scan {70 Jan ii} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.205 {parse yymmdd} { + clock scan {70 01 02} -format {%y %m %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.206 {parse yymmdd} { + clock scan {70 01 ii} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.207 {parse yymmdd} { + clock scan {70 01 2} -format {%y %m %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.208 {parse yymmdd} { + clock scan {70 01 ii} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.209 {parse yymmdd} { + clock scan {70 i 02} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.210 {parse yymmdd} { + clock scan {70 i ii} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.211 {parse yymmdd} { + clock scan {70 i 2} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.212 {parse yymmdd} { + clock scan {70 i ii} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.213 {parse yymmdd} { + clock scan {70 1 02} -format {%y %N %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.214 {parse yymmdd} { + clock scan {70 1 ii} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.215 {parse yymmdd} { + clock scan {70 1 2} -format {%y %N %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.216 {parse yymmdd} { + clock scan {70 1 ii} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.217 {parse yymmdd} { + clock scan {lxx Jan 02} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.218 {parse yymmdd} { + clock scan {lxx Jan ii} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.219 {parse yymmdd} { + clock scan {lxx Jan 2} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.220 {parse yymmdd} { + clock scan {lxx Jan ii} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.221 {parse yymmdd} { + clock scan {lxx January 02} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.222 {parse yymmdd} { + clock scan {lxx January ii} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.223 {parse yymmdd} { + clock scan {lxx January 2} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.224 {parse yymmdd} { + clock scan {lxx January ii} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.225 {parse yymmdd} { + clock scan {lxx Jan 02} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.226 {parse yymmdd} { + clock scan {lxx Jan ii} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.227 {parse yymmdd} { + clock scan {lxx Jan 2} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.228 {parse yymmdd} { + clock scan {lxx Jan ii} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.229 {parse yymmdd} { + clock scan {lxx 01 02} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.230 {parse yymmdd} { + clock scan {lxx 01 ii} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.231 {parse yymmdd} { + clock scan {lxx 01 2} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.232 {parse yymmdd} { + clock scan {lxx 01 ii} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.233 {parse yymmdd} { + clock scan {lxx i 02} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.234 {parse yymmdd} { + clock scan {lxx i ii} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.235 {parse yymmdd} { + clock scan {lxx i 2} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.236 {parse yymmdd} { + clock scan {lxx i ii} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.237 {parse yymmdd} { + clock scan {lxx 1 02} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.238 {parse yymmdd} { + clock scan {lxx 1 ii} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.239 {parse yymmdd} { + clock scan {lxx 1 2} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.240 {parse yymmdd} { + clock scan {lxx 1 ii} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} 86400 +test clock-14.241 {parse yymmdd} { + clock scan {70 Jan 31} -format {%y %b %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.242 {parse yymmdd} { + clock scan {70 Jan xxxi} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.243 {parse yymmdd} { + clock scan {70 Jan 31} -format {%y %b %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.244 {parse yymmdd} { + clock scan {70 Jan xxxi} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.245 {parse yymmdd} { + clock scan {70 January 31} -format {%y %B %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.246 {parse yymmdd} { + clock scan {70 January xxxi} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.247 {parse yymmdd} { + clock scan {70 January 31} -format {%y %B %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.248 {parse yymmdd} { + clock scan {70 January xxxi} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.249 {parse yymmdd} { + clock scan {70 Jan 31} -format {%y %h %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.250 {parse yymmdd} { + clock scan {70 Jan xxxi} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.251 {parse yymmdd} { + clock scan {70 Jan 31} -format {%y %h %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.252 {parse yymmdd} { + clock scan {70 Jan xxxi} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.253 {parse yymmdd} { + clock scan {70 01 31} -format {%y %m %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.254 {parse yymmdd} { + clock scan {70 01 xxxi} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.255 {parse yymmdd} { + clock scan {70 01 31} -format {%y %m %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.256 {parse yymmdd} { + clock scan {70 01 xxxi} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.257 {parse yymmdd} { + clock scan {70 i 31} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.258 {parse yymmdd} { + clock scan {70 i xxxi} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.259 {parse yymmdd} { + clock scan {70 i 31} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.260 {parse yymmdd} { + clock scan {70 i xxxi} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.261 {parse yymmdd} { + clock scan {70 1 31} -format {%y %N %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.262 {parse yymmdd} { + clock scan {70 1 xxxi} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.263 {parse yymmdd} { + clock scan {70 1 31} -format {%y %N %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.264 {parse yymmdd} { + clock scan {70 1 xxxi} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.265 {parse yymmdd} { + clock scan {lxx Jan 31} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.266 {parse yymmdd} { + clock scan {lxx Jan xxxi} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.267 {parse yymmdd} { + clock scan {lxx Jan 31} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.268 {parse yymmdd} { + clock scan {lxx Jan xxxi} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.269 {parse yymmdd} { + clock scan {lxx January 31} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.270 {parse yymmdd} { + clock scan {lxx January xxxi} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.271 {parse yymmdd} { + clock scan {lxx January 31} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.272 {parse yymmdd} { + clock scan {lxx January xxxi} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.273 {parse yymmdd} { + clock scan {lxx Jan 31} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.274 {parse yymmdd} { + clock scan {lxx Jan xxxi} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.275 {parse yymmdd} { + clock scan {lxx Jan 31} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.276 {parse yymmdd} { + clock scan {lxx Jan xxxi} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.277 {parse yymmdd} { + clock scan {lxx 01 31} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.278 {parse yymmdd} { + clock scan {lxx 01 xxxi} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.279 {parse yymmdd} { + clock scan {lxx 01 31} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.280 {parse yymmdd} { + clock scan {lxx 01 xxxi} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.281 {parse yymmdd} { + clock scan {lxx i 31} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.282 {parse yymmdd} { + clock scan {lxx i xxxi} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.283 {parse yymmdd} { + clock scan {lxx i 31} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.284 {parse yymmdd} { + clock scan {lxx i xxxi} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.285 {parse yymmdd} { + clock scan {lxx 1 31} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.286 {parse yymmdd} { + clock scan {lxx 1 xxxi} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.287 {parse yymmdd} { + clock scan {lxx 1 31} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.288 {parse yymmdd} { + clock scan {lxx 1 xxxi} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} 2592000 +test clock-14.289 {parse yymmdd} { + clock scan {70 Dec 02} -format {%y %b %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.290 {parse yymmdd} { + clock scan {70 Dec ii} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.291 {parse yymmdd} { + clock scan {70 Dec 2} -format {%y %b %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.292 {parse yymmdd} { + clock scan {70 Dec ii} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.293 {parse yymmdd} { + clock scan {70 December 02} -format {%y %B %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.294 {parse yymmdd} { + clock scan {70 December ii} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.295 {parse yymmdd} { + clock scan {70 December 2} -format {%y %B %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.296 {parse yymmdd} { + clock scan {70 December ii} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.297 {parse yymmdd} { + clock scan {70 Dec 02} -format {%y %h %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.298 {parse yymmdd} { + clock scan {70 Dec ii} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.299 {parse yymmdd} { + clock scan {70 Dec 2} -format {%y %h %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.300 {parse yymmdd} { + clock scan {70 Dec ii} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.301 {parse yymmdd} { + clock scan {70 12 02} -format {%y %m %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.302 {parse yymmdd} { + clock scan {70 12 ii} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.303 {parse yymmdd} { + clock scan {70 12 2} -format {%y %m %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.304 {parse yymmdd} { + clock scan {70 12 ii} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.305 {parse yymmdd} { + clock scan {70 xii 02} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.306 {parse yymmdd} { + clock scan {70 xii ii} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.307 {parse yymmdd} { + clock scan {70 xii 2} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.308 {parse yymmdd} { + clock scan {70 xii ii} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.309 {parse yymmdd} { + clock scan {70 12 02} -format {%y %N %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.310 {parse yymmdd} { + clock scan {70 12 ii} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.311 {parse yymmdd} { + clock scan {70 12 2} -format {%y %N %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.312 {parse yymmdd} { + clock scan {70 12 ii} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.313 {parse yymmdd} { + clock scan {lxx Dec 02} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.314 {parse yymmdd} { + clock scan {lxx Dec ii} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.315 {parse yymmdd} { + clock scan {lxx Dec 2} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.316 {parse yymmdd} { + clock scan {lxx Dec ii} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.317 {parse yymmdd} { + clock scan {lxx December 02} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.318 {parse yymmdd} { + clock scan {lxx December ii} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.319 {parse yymmdd} { + clock scan {lxx December 2} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.320 {parse yymmdd} { + clock scan {lxx December ii} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.321 {parse yymmdd} { + clock scan {lxx Dec 02} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.322 {parse yymmdd} { + clock scan {lxx Dec ii} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.323 {parse yymmdd} { + clock scan {lxx Dec 2} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.324 {parse yymmdd} { + clock scan {lxx Dec ii} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.325 {parse yymmdd} { + clock scan {lxx 12 02} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.326 {parse yymmdd} { + clock scan {lxx 12 ii} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.327 {parse yymmdd} { + clock scan {lxx 12 2} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.328 {parse yymmdd} { + clock scan {lxx 12 ii} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.329 {parse yymmdd} { + clock scan {lxx xii 02} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.330 {parse yymmdd} { + clock scan {lxx xii ii} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.331 {parse yymmdd} { + clock scan {lxx xii 2} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.332 {parse yymmdd} { + clock scan {lxx xii ii} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.333 {parse yymmdd} { + clock scan {lxx 12 02} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.334 {parse yymmdd} { + clock scan {lxx 12 ii} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.335 {parse yymmdd} { + clock scan {lxx 12 2} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.336 {parse yymmdd} { + clock scan {lxx 12 ii} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} 28944000 +test clock-14.337 {parse yymmdd} { + clock scan {70 Dec 31} -format {%y %b %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.338 {parse yymmdd} { + clock scan {70 Dec xxxi} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.339 {parse yymmdd} { + clock scan {70 Dec 31} -format {%y %b %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.340 {parse yymmdd} { + clock scan {70 Dec xxxi} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.341 {parse yymmdd} { + clock scan {70 December 31} -format {%y %B %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.342 {parse yymmdd} { + clock scan {70 December xxxi} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.343 {parse yymmdd} { + clock scan {70 December 31} -format {%y %B %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.344 {parse yymmdd} { + clock scan {70 December xxxi} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.345 {parse yymmdd} { + clock scan {70 Dec 31} -format {%y %h %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.346 {parse yymmdd} { + clock scan {70 Dec xxxi} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.347 {parse yymmdd} { + clock scan {70 Dec 31} -format {%y %h %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.348 {parse yymmdd} { + clock scan {70 Dec xxxi} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.349 {parse yymmdd} { + clock scan {70 12 31} -format {%y %m %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.350 {parse yymmdd} { + clock scan {70 12 xxxi} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.351 {parse yymmdd} { + clock scan {70 12 31} -format {%y %m %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.352 {parse yymmdd} { + clock scan {70 12 xxxi} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.353 {parse yymmdd} { + clock scan {70 xii 31} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.354 {parse yymmdd} { + clock scan {70 xii xxxi} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.355 {parse yymmdd} { + clock scan {70 xii 31} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.356 {parse yymmdd} { + clock scan {70 xii xxxi} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.357 {parse yymmdd} { + clock scan {70 12 31} -format {%y %N %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.358 {parse yymmdd} { + clock scan {70 12 xxxi} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.359 {parse yymmdd} { + clock scan {70 12 31} -format {%y %N %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.360 {parse yymmdd} { + clock scan {70 12 xxxi} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.361 {parse yymmdd} { + clock scan {lxx Dec 31} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.362 {parse yymmdd} { + clock scan {lxx Dec xxxi} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.363 {parse yymmdd} { + clock scan {lxx Dec 31} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.364 {parse yymmdd} { + clock scan {lxx Dec xxxi} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.365 {parse yymmdd} { + clock scan {lxx December 31} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.366 {parse yymmdd} { + clock scan {lxx December xxxi} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.367 {parse yymmdd} { + clock scan {lxx December 31} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.368 {parse yymmdd} { + clock scan {lxx December xxxi} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.369 {parse yymmdd} { + clock scan {lxx Dec 31} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.370 {parse yymmdd} { + clock scan {lxx Dec xxxi} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.371 {parse yymmdd} { + clock scan {lxx Dec 31} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.372 {parse yymmdd} { + clock scan {lxx Dec xxxi} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.373 {parse yymmdd} { + clock scan {lxx 12 31} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.374 {parse yymmdd} { + clock scan {lxx 12 xxxi} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.375 {parse yymmdd} { + clock scan {lxx 12 31} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.376 {parse yymmdd} { + clock scan {lxx 12 xxxi} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.377 {parse yymmdd} { + clock scan {lxx xii 31} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.378 {parse yymmdd} { + clock scan {lxx xii xxxi} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.379 {parse yymmdd} { + clock scan {lxx xii 31} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.380 {parse yymmdd} { + clock scan {lxx xii xxxi} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.381 {parse yymmdd} { + clock scan {lxx 12 31} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.382 {parse yymmdd} { + clock scan {lxx 12 xxxi} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.383 {parse yymmdd} { + clock scan {lxx 12 31} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.384 {parse yymmdd} { + clock scan {lxx 12 xxxi} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} 31449600 +test clock-14.385 {parse yymmdd} { + clock scan {00 Jan 02} -format {%y %b %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.386 {parse yymmdd} { + clock scan {00 Jan ii} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.387 {parse yymmdd} { + clock scan {00 Jan 2} -format {%y %b %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.388 {parse yymmdd} { + clock scan {00 Jan ii} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.389 {parse yymmdd} { + clock scan {00 January 02} -format {%y %B %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.390 {parse yymmdd} { + clock scan {00 January ii} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.391 {parse yymmdd} { + clock scan {00 January 2} -format {%y %B %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.392 {parse yymmdd} { + clock scan {00 January ii} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.393 {parse yymmdd} { + clock scan {00 Jan 02} -format {%y %h %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.394 {parse yymmdd} { + clock scan {00 Jan ii} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.395 {parse yymmdd} { + clock scan {00 Jan 2} -format {%y %h %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.396 {parse yymmdd} { + clock scan {00 Jan ii} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.397 {parse yymmdd} { + clock scan {00 01 02} -format {%y %m %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.398 {parse yymmdd} { + clock scan {00 01 ii} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.399 {parse yymmdd} { + clock scan {00 01 2} -format {%y %m %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.400 {parse yymmdd} { + clock scan {00 01 ii} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.401 {parse yymmdd} { + clock scan {00 i 02} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.402 {parse yymmdd} { + clock scan {00 i ii} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.403 {parse yymmdd} { + clock scan {00 i 2} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.404 {parse yymmdd} { + clock scan {00 i ii} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.405 {parse yymmdd} { + clock scan {00 1 02} -format {%y %N %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.406 {parse yymmdd} { + clock scan {00 1 ii} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.407 {parse yymmdd} { + clock scan {00 1 2} -format {%y %N %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.408 {parse yymmdd} { + clock scan {00 1 ii} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.409 {parse yymmdd} { + clock scan {? Jan 02} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.410 {parse yymmdd} { + clock scan {? Jan ii} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.411 {parse yymmdd} { + clock scan {? Jan 2} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.412 {parse yymmdd} { + clock scan {? Jan ii} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.413 {parse yymmdd} { + clock scan {? January 02} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.414 {parse yymmdd} { + clock scan {? January ii} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.415 {parse yymmdd} { + clock scan {? January 2} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.416 {parse yymmdd} { + clock scan {? January ii} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.417 {parse yymmdd} { + clock scan {? Jan 02} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.418 {parse yymmdd} { + clock scan {? Jan ii} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.419 {parse yymmdd} { + clock scan {? Jan 2} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.420 {parse yymmdd} { + clock scan {? Jan ii} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.421 {parse yymmdd} { + clock scan {? 01 02} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.422 {parse yymmdd} { + clock scan {? 01 ii} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.423 {parse yymmdd} { + clock scan {? 01 2} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.424 {parse yymmdd} { + clock scan {? 01 ii} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.425 {parse yymmdd} { + clock scan {? i 02} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.426 {parse yymmdd} { + clock scan {? i ii} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.427 {parse yymmdd} { + clock scan {? i 2} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.428 {parse yymmdd} { + clock scan {? i ii} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.429 {parse yymmdd} { + clock scan {? 1 02} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.430 {parse yymmdd} { + clock scan {? 1 ii} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.431 {parse yymmdd} { + clock scan {? 1 2} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.432 {parse yymmdd} { + clock scan {? 1 ii} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} 946771200 +test clock-14.433 {parse yymmdd} { + clock scan {00 Jan 31} -format {%y %b %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.434 {parse yymmdd} { + clock scan {00 Jan xxxi} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.435 {parse yymmdd} { + clock scan {00 Jan 31} -format {%y %b %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.436 {parse yymmdd} { + clock scan {00 Jan xxxi} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.437 {parse yymmdd} { + clock scan {00 January 31} -format {%y %B %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.438 {parse yymmdd} { + clock scan {00 January xxxi} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.439 {parse yymmdd} { + clock scan {00 January 31} -format {%y %B %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.440 {parse yymmdd} { + clock scan {00 January xxxi} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.441 {parse yymmdd} { + clock scan {00 Jan 31} -format {%y %h %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.442 {parse yymmdd} { + clock scan {00 Jan xxxi} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.443 {parse yymmdd} { + clock scan {00 Jan 31} -format {%y %h %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.444 {parse yymmdd} { + clock scan {00 Jan xxxi} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.445 {parse yymmdd} { + clock scan {00 01 31} -format {%y %m %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.446 {parse yymmdd} { + clock scan {00 01 xxxi} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.447 {parse yymmdd} { + clock scan {00 01 31} -format {%y %m %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.448 {parse yymmdd} { + clock scan {00 01 xxxi} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.449 {parse yymmdd} { + clock scan {00 i 31} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.450 {parse yymmdd} { + clock scan {00 i xxxi} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.451 {parse yymmdd} { + clock scan {00 i 31} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.452 {parse yymmdd} { + clock scan {00 i xxxi} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.453 {parse yymmdd} { + clock scan {00 1 31} -format {%y %N %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.454 {parse yymmdd} { + clock scan {00 1 xxxi} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.455 {parse yymmdd} { + clock scan {00 1 31} -format {%y %N %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.456 {parse yymmdd} { + clock scan {00 1 xxxi} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.457 {parse yymmdd} { + clock scan {? Jan 31} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.458 {parse yymmdd} { + clock scan {? Jan xxxi} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.459 {parse yymmdd} { + clock scan {? Jan 31} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.460 {parse yymmdd} { + clock scan {? Jan xxxi} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.461 {parse yymmdd} { + clock scan {? January 31} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.462 {parse yymmdd} { + clock scan {? January xxxi} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.463 {parse yymmdd} { + clock scan {? January 31} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.464 {parse yymmdd} { + clock scan {? January xxxi} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.465 {parse yymmdd} { + clock scan {? Jan 31} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.466 {parse yymmdd} { + clock scan {? Jan xxxi} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.467 {parse yymmdd} { + clock scan {? Jan 31} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.468 {parse yymmdd} { + clock scan {? Jan xxxi} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.469 {parse yymmdd} { + clock scan {? 01 31} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.470 {parse yymmdd} { + clock scan {? 01 xxxi} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.471 {parse yymmdd} { + clock scan {? 01 31} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.472 {parse yymmdd} { + clock scan {? 01 xxxi} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.473 {parse yymmdd} { + clock scan {? i 31} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.474 {parse yymmdd} { + clock scan {? i xxxi} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.475 {parse yymmdd} { + clock scan {? i 31} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.476 {parse yymmdd} { + clock scan {? i xxxi} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.477 {parse yymmdd} { + clock scan {? 1 31} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.478 {parse yymmdd} { + clock scan {? 1 xxxi} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.479 {parse yymmdd} { + clock scan {? 1 31} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.480 {parse yymmdd} { + clock scan {? 1 xxxi} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} 949276800 +test clock-14.481 {parse yymmdd} { + clock scan {00 Dec 02} -format {%y %b %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.482 {parse yymmdd} { + clock scan {00 Dec ii} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.483 {parse yymmdd} { + clock scan {00 Dec 2} -format {%y %b %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.484 {parse yymmdd} { + clock scan {00 Dec ii} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.485 {parse yymmdd} { + clock scan {00 December 02} -format {%y %B %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.486 {parse yymmdd} { + clock scan {00 December ii} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.487 {parse yymmdd} { + clock scan {00 December 2} -format {%y %B %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.488 {parse yymmdd} { + clock scan {00 December ii} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.489 {parse yymmdd} { + clock scan {00 Dec 02} -format {%y %h %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.490 {parse yymmdd} { + clock scan {00 Dec ii} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.491 {parse yymmdd} { + clock scan {00 Dec 2} -format {%y %h %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.492 {parse yymmdd} { + clock scan {00 Dec ii} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.493 {parse yymmdd} { + clock scan {00 12 02} -format {%y %m %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.494 {parse yymmdd} { + clock scan {00 12 ii} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.495 {parse yymmdd} { + clock scan {00 12 2} -format {%y %m %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.496 {parse yymmdd} { + clock scan {00 12 ii} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.497 {parse yymmdd} { + clock scan {00 xii 02} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.498 {parse yymmdd} { + clock scan {00 xii ii} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.499 {parse yymmdd} { + clock scan {00 xii 2} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.500 {parse yymmdd} { + clock scan {00 xii ii} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.501 {parse yymmdd} { + clock scan {00 12 02} -format {%y %N %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.502 {parse yymmdd} { + clock scan {00 12 ii} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.503 {parse yymmdd} { + clock scan {00 12 2} -format {%y %N %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.504 {parse yymmdd} { + clock scan {00 12 ii} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.505 {parse yymmdd} { + clock scan {? Dec 02} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.506 {parse yymmdd} { + clock scan {? Dec ii} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.507 {parse yymmdd} { + clock scan {? Dec 2} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.508 {parse yymmdd} { + clock scan {? Dec ii} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.509 {parse yymmdd} { + clock scan {? December 02} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.510 {parse yymmdd} { + clock scan {? December ii} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.511 {parse yymmdd} { + clock scan {? December 2} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.512 {parse yymmdd} { + clock scan {? December ii} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.513 {parse yymmdd} { + clock scan {? Dec 02} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.514 {parse yymmdd} { + clock scan {? Dec ii} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.515 {parse yymmdd} { + clock scan {? Dec 2} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.516 {parse yymmdd} { + clock scan {? Dec ii} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.517 {parse yymmdd} { + clock scan {? 12 02} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.518 {parse yymmdd} { + clock scan {? 12 ii} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.519 {parse yymmdd} { + clock scan {? 12 2} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.520 {parse yymmdd} { + clock scan {? 12 ii} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.521 {parse yymmdd} { + clock scan {? xii 02} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.522 {parse yymmdd} { + clock scan {? xii ii} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.523 {parse yymmdd} { + clock scan {? xii 2} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.524 {parse yymmdd} { + clock scan {? xii ii} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.525 {parse yymmdd} { + clock scan {? 12 02} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.526 {parse yymmdd} { + clock scan {? 12 ii} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.527 {parse yymmdd} { + clock scan {? 12 2} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.528 {parse yymmdd} { + clock scan {? 12 ii} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} 975715200 +test clock-14.529 {parse yymmdd} { + clock scan {00 Dec 31} -format {%y %b %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.530 {parse yymmdd} { + clock scan {00 Dec xxxi} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.531 {parse yymmdd} { + clock scan {00 Dec 31} -format {%y %b %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.532 {parse yymmdd} { + clock scan {00 Dec xxxi} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.533 {parse yymmdd} { + clock scan {00 December 31} -format {%y %B %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.534 {parse yymmdd} { + clock scan {00 December xxxi} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.535 {parse yymmdd} { + clock scan {00 December 31} -format {%y %B %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.536 {parse yymmdd} { + clock scan {00 December xxxi} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.537 {parse yymmdd} { + clock scan {00 Dec 31} -format {%y %h %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.538 {parse yymmdd} { + clock scan {00 Dec xxxi} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.539 {parse yymmdd} { + clock scan {00 Dec 31} -format {%y %h %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.540 {parse yymmdd} { + clock scan {00 Dec xxxi} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.541 {parse yymmdd} { + clock scan {00 12 31} -format {%y %m %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.542 {parse yymmdd} { + clock scan {00 12 xxxi} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.543 {parse yymmdd} { + clock scan {00 12 31} -format {%y %m %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.544 {parse yymmdd} { + clock scan {00 12 xxxi} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.545 {parse yymmdd} { + clock scan {00 xii 31} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.546 {parse yymmdd} { + clock scan {00 xii xxxi} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.547 {parse yymmdd} { + clock scan {00 xii 31} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.548 {parse yymmdd} { + clock scan {00 xii xxxi} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.549 {parse yymmdd} { + clock scan {00 12 31} -format {%y %N %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.550 {parse yymmdd} { + clock scan {00 12 xxxi} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.551 {parse yymmdd} { + clock scan {00 12 31} -format {%y %N %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.552 {parse yymmdd} { + clock scan {00 12 xxxi} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.553 {parse yymmdd} { + clock scan {? Dec 31} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.554 {parse yymmdd} { + clock scan {? Dec xxxi} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.555 {parse yymmdd} { + clock scan {? Dec 31} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.556 {parse yymmdd} { + clock scan {? Dec xxxi} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.557 {parse yymmdd} { + clock scan {? December 31} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.558 {parse yymmdd} { + clock scan {? December xxxi} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.559 {parse yymmdd} { + clock scan {? December 31} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.560 {parse yymmdd} { + clock scan {? December xxxi} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.561 {parse yymmdd} { + clock scan {? Dec 31} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.562 {parse yymmdd} { + clock scan {? Dec xxxi} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.563 {parse yymmdd} { + clock scan {? Dec 31} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.564 {parse yymmdd} { + clock scan {? Dec xxxi} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.565 {parse yymmdd} { + clock scan {? 12 31} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.566 {parse yymmdd} { + clock scan {? 12 xxxi} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.567 {parse yymmdd} { + clock scan {? 12 31} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.568 {parse yymmdd} { + clock scan {? 12 xxxi} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.569 {parse yymmdd} { + clock scan {? xii 31} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.570 {parse yymmdd} { + clock scan {? xii xxxi} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.571 {parse yymmdd} { + clock scan {? xii 31} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.572 {parse yymmdd} { + clock scan {? xii xxxi} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.573 {parse yymmdd} { + clock scan {? 12 31} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.574 {parse yymmdd} { + clock scan {? 12 xxxi} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.575 {parse yymmdd} { + clock scan {? 12 31} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.576 {parse yymmdd} { + clock scan {? 12 xxxi} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} 978220800 +test clock-14.577 {parse yymmdd} { + clock scan {37 Jan 02} -format {%y %b %d} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.578 {parse yymmdd} { + clock scan {37 Jan ii} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.579 {parse yymmdd} { + clock scan {37 Jan 2} -format {%y %b %e} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.580 {parse yymmdd} { + clock scan {37 Jan ii} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.581 {parse yymmdd} { + clock scan {37 January 02} -format {%y %B %d} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.582 {parse yymmdd} { + clock scan {37 January ii} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.583 {parse yymmdd} { + clock scan {37 January 2} -format {%y %B %e} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.584 {parse yymmdd} { + clock scan {37 January ii} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.585 {parse yymmdd} { + clock scan {37 Jan 02} -format {%y %h %d} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.586 {parse yymmdd} { + clock scan {37 Jan ii} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.587 {parse yymmdd} { + clock scan {37 Jan 2} -format {%y %h %e} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.588 {parse yymmdd} { + clock scan {37 Jan ii} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.589 {parse yymmdd} { + clock scan {37 01 02} -format {%y %m %d} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.590 {parse yymmdd} { + clock scan {37 01 ii} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.591 {parse yymmdd} { + clock scan {37 01 2} -format {%y %m %e} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.592 {parse yymmdd} { + clock scan {37 01 ii} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.593 {parse yymmdd} { + clock scan {37 i 02} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.594 {parse yymmdd} { + clock scan {37 i ii} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.595 {parse yymmdd} { + clock scan {37 i 2} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.596 {parse yymmdd} { + clock scan {37 i ii} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.597 {parse yymmdd} { + clock scan {37 1 02} -format {%y %N %d} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.598 {parse yymmdd} { + clock scan {37 1 ii} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.599 {parse yymmdd} { + clock scan {37 1 2} -format {%y %N %e} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.600 {parse yymmdd} { + clock scan {37 1 ii} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.601 {parse yymmdd} { + clock scan {xxxvii Jan 02} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.602 {parse yymmdd} { + clock scan {xxxvii Jan ii} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.603 {parse yymmdd} { + clock scan {xxxvii Jan 2} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.604 {parse yymmdd} { + clock scan {xxxvii Jan ii} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.605 {parse yymmdd} { + clock scan {xxxvii January 02} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.606 {parse yymmdd} { + clock scan {xxxvii January ii} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.607 {parse yymmdd} { + clock scan {xxxvii January 2} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.608 {parse yymmdd} { + clock scan {xxxvii January ii} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.609 {parse yymmdd} { + clock scan {xxxvii Jan 02} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.610 {parse yymmdd} { + clock scan {xxxvii Jan ii} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.611 {parse yymmdd} { + clock scan {xxxvii Jan 2} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.612 {parse yymmdd} { + clock scan {xxxvii Jan ii} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.613 {parse yymmdd} { + clock scan {xxxvii 01 02} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.614 {parse yymmdd} { + clock scan {xxxvii 01 ii} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.615 {parse yymmdd} { + clock scan {xxxvii 01 2} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.616 {parse yymmdd} { + clock scan {xxxvii 01 ii} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.617 {parse yymmdd} { + clock scan {xxxvii i 02} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.618 {parse yymmdd} { + clock scan {xxxvii i ii} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.619 {parse yymmdd} { + clock scan {xxxvii i 2} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.620 {parse yymmdd} { + clock scan {xxxvii i ii} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.621 {parse yymmdd} { + clock scan {xxxvii 1 02} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.622 {parse yymmdd} { + clock scan {xxxvii 1 ii} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.623 {parse yymmdd} { + clock scan {xxxvii 1 2} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.624 {parse yymmdd} { + clock scan {xxxvii 1 ii} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} 2114467200 +test clock-14.625 {parse yymmdd} { + clock scan {37 Jan 31} -format {%y %b %d} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.626 {parse yymmdd} { + clock scan {37 Jan xxxi} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.627 {parse yymmdd} { + clock scan {37 Jan 31} -format {%y %b %e} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.628 {parse yymmdd} { + clock scan {37 Jan xxxi} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.629 {parse yymmdd} { + clock scan {37 January 31} -format {%y %B %d} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.630 {parse yymmdd} { + clock scan {37 January xxxi} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.631 {parse yymmdd} { + clock scan {37 January 31} -format {%y %B %e} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.632 {parse yymmdd} { + clock scan {37 January xxxi} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.633 {parse yymmdd} { + clock scan {37 Jan 31} -format {%y %h %d} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.634 {parse yymmdd} { + clock scan {37 Jan xxxi} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.635 {parse yymmdd} { + clock scan {37 Jan 31} -format {%y %h %e} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.636 {parse yymmdd} { + clock scan {37 Jan xxxi} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.637 {parse yymmdd} { + clock scan {37 01 31} -format {%y %m %d} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.638 {parse yymmdd} { + clock scan {37 01 xxxi} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.639 {parse yymmdd} { + clock scan {37 01 31} -format {%y %m %e} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.640 {parse yymmdd} { + clock scan {37 01 xxxi} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.641 {parse yymmdd} { + clock scan {37 i 31} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.642 {parse yymmdd} { + clock scan {37 i xxxi} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.643 {parse yymmdd} { + clock scan {37 i 31} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.644 {parse yymmdd} { + clock scan {37 i xxxi} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.645 {parse yymmdd} { + clock scan {37 1 31} -format {%y %N %d} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.646 {parse yymmdd} { + clock scan {37 1 xxxi} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.647 {parse yymmdd} { + clock scan {37 1 31} -format {%y %N %e} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.648 {parse yymmdd} { + clock scan {37 1 xxxi} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.649 {parse yymmdd} { + clock scan {xxxvii Jan 31} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.650 {parse yymmdd} { + clock scan {xxxvii Jan xxxi} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.651 {parse yymmdd} { + clock scan {xxxvii Jan 31} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.652 {parse yymmdd} { + clock scan {xxxvii Jan xxxi} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.653 {parse yymmdd} { + clock scan {xxxvii January 31} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.654 {parse yymmdd} { + clock scan {xxxvii January xxxi} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.655 {parse yymmdd} { + clock scan {xxxvii January 31} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.656 {parse yymmdd} { + clock scan {xxxvii January xxxi} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.657 {parse yymmdd} { + clock scan {xxxvii Jan 31} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.658 {parse yymmdd} { + clock scan {xxxvii Jan xxxi} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.659 {parse yymmdd} { + clock scan {xxxvii Jan 31} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.660 {parse yymmdd} { + clock scan {xxxvii Jan xxxi} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.661 {parse yymmdd} { + clock scan {xxxvii 01 31} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.662 {parse yymmdd} { + clock scan {xxxvii 01 xxxi} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.663 {parse yymmdd} { + clock scan {xxxvii 01 31} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.664 {parse yymmdd} { + clock scan {xxxvii 01 xxxi} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.665 {parse yymmdd} { + clock scan {xxxvii i 31} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.666 {parse yymmdd} { + clock scan {xxxvii i xxxi} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.667 {parse yymmdd} { + clock scan {xxxvii i 31} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.668 {parse yymmdd} { + clock scan {xxxvii i xxxi} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.669 {parse yymmdd} { + clock scan {xxxvii 1 31} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.670 {parse yymmdd} { + clock scan {xxxvii 1 xxxi} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.671 {parse yymmdd} { + clock scan {xxxvii 1 31} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.672 {parse yymmdd} { + clock scan {xxxvii 1 xxxi} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} 2116972800 +test clock-14.673 {parse yymmdd} { + clock scan {37 Dec 02} -format {%y %b %d} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.674 {parse yymmdd} { + clock scan {37 Dec ii} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.675 {parse yymmdd} { + clock scan {37 Dec 2} -format {%y %b %e} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.676 {parse yymmdd} { + clock scan {37 Dec ii} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.677 {parse yymmdd} { + clock scan {37 December 02} -format {%y %B %d} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.678 {parse yymmdd} { + clock scan {37 December ii} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.679 {parse yymmdd} { + clock scan {37 December 2} -format {%y %B %e} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.680 {parse yymmdd} { + clock scan {37 December ii} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.681 {parse yymmdd} { + clock scan {37 Dec 02} -format {%y %h %d} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.682 {parse yymmdd} { + clock scan {37 Dec ii} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.683 {parse yymmdd} { + clock scan {37 Dec 2} -format {%y %h %e} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.684 {parse yymmdd} { + clock scan {37 Dec ii} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.685 {parse yymmdd} { + clock scan {37 12 02} -format {%y %m %d} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.686 {parse yymmdd} { + clock scan {37 12 ii} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.687 {parse yymmdd} { + clock scan {37 12 2} -format {%y %m %e} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.688 {parse yymmdd} { + clock scan {37 12 ii} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.689 {parse yymmdd} { + clock scan {37 xii 02} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.690 {parse yymmdd} { + clock scan {37 xii ii} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.691 {parse yymmdd} { + clock scan {37 xii 2} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.692 {parse yymmdd} { + clock scan {37 xii ii} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.693 {parse yymmdd} { + clock scan {37 12 02} -format {%y %N %d} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.694 {parse yymmdd} { + clock scan {37 12 ii} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.695 {parse yymmdd} { + clock scan {37 12 2} -format {%y %N %e} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.696 {parse yymmdd} { + clock scan {37 12 ii} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.697 {parse yymmdd} { + clock scan {xxxvii Dec 02} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.698 {parse yymmdd} { + clock scan {xxxvii Dec ii} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.699 {parse yymmdd} { + clock scan {xxxvii Dec 2} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.700 {parse yymmdd} { + clock scan {xxxvii Dec ii} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.701 {parse yymmdd} { + clock scan {xxxvii December 02} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.702 {parse yymmdd} { + clock scan {xxxvii December ii} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.703 {parse yymmdd} { + clock scan {xxxvii December 2} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.704 {parse yymmdd} { + clock scan {xxxvii December ii} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.705 {parse yymmdd} { + clock scan {xxxvii Dec 02} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.706 {parse yymmdd} { + clock scan {xxxvii Dec ii} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.707 {parse yymmdd} { + clock scan {xxxvii Dec 2} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.708 {parse yymmdd} { + clock scan {xxxvii Dec ii} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.709 {parse yymmdd} { + clock scan {xxxvii 12 02} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.710 {parse yymmdd} { + clock scan {xxxvii 12 ii} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.711 {parse yymmdd} { + clock scan {xxxvii 12 2} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.712 {parse yymmdd} { + clock scan {xxxvii 12 ii} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.713 {parse yymmdd} { + clock scan {xxxvii xii 02} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.714 {parse yymmdd} { + clock scan {xxxvii xii ii} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.715 {parse yymmdd} { + clock scan {xxxvii xii 2} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.716 {parse yymmdd} { + clock scan {xxxvii xii ii} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.717 {parse yymmdd} { + clock scan {xxxvii 12 02} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.718 {parse yymmdd} { + clock scan {xxxvii 12 ii} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.719 {parse yymmdd} { + clock scan {xxxvii 12 2} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.720 {parse yymmdd} { + clock scan {xxxvii 12 ii} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} 2143324800 +test clock-14.721 {parse yymmdd} { + clock scan {37 Dec 31} -format {%y %b %d} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.722 {parse yymmdd} { + clock scan {37 Dec xxxi} -format {%y %b %Od} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.723 {parse yymmdd} { + clock scan {37 Dec 31} -format {%y %b %e} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.724 {parse yymmdd} { + clock scan {37 Dec xxxi} -format {%y %b %Oe} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.725 {parse yymmdd} { + clock scan {37 December 31} -format {%y %B %d} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.726 {parse yymmdd} { + clock scan {37 December xxxi} -format {%y %B %Od} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.727 {parse yymmdd} { + clock scan {37 December 31} -format {%y %B %e} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.728 {parse yymmdd} { + clock scan {37 December xxxi} -format {%y %B %Oe} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.729 {parse yymmdd} { + clock scan {37 Dec 31} -format {%y %h %d} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.730 {parse yymmdd} { + clock scan {37 Dec xxxi} -format {%y %h %Od} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.731 {parse yymmdd} { + clock scan {37 Dec 31} -format {%y %h %e} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.732 {parse yymmdd} { + clock scan {37 Dec xxxi} -format {%y %h %Oe} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.733 {parse yymmdd} { + clock scan {37 12 31} -format {%y %m %d} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.734 {parse yymmdd} { + clock scan {37 12 xxxi} -format {%y %m %Od} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.735 {parse yymmdd} { + clock scan {37 12 31} -format {%y %m %e} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.736 {parse yymmdd} { + clock scan {37 12 xxxi} -format {%y %m %Oe} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.737 {parse yymmdd} { + clock scan {37 xii 31} -format {%y %Om %d} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.738 {parse yymmdd} { + clock scan {37 xii xxxi} -format {%y %Om %Od} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.739 {parse yymmdd} { + clock scan {37 xii 31} -format {%y %Om %e} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.740 {parse yymmdd} { + clock scan {37 xii xxxi} -format {%y %Om %Oe} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.741 {parse yymmdd} { + clock scan {37 12 31} -format {%y %N %d} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.742 {parse yymmdd} { + clock scan {37 12 xxxi} -format {%y %N %Od} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.743 {parse yymmdd} { + clock scan {37 12 31} -format {%y %N %e} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.744 {parse yymmdd} { + clock scan {37 12 xxxi} -format {%y %N %Oe} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.745 {parse yymmdd} { + clock scan {xxxvii Dec 31} -format {%Oy %b %d} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.746 {parse yymmdd} { + clock scan {xxxvii Dec xxxi} -format {%Oy %b %Od} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.747 {parse yymmdd} { + clock scan {xxxvii Dec 31} -format {%Oy %b %e} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.748 {parse yymmdd} { + clock scan {xxxvii Dec xxxi} -format {%Oy %b %Oe} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.749 {parse yymmdd} { + clock scan {xxxvii December 31} -format {%Oy %B %d} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.750 {parse yymmdd} { + clock scan {xxxvii December xxxi} -format {%Oy %B %Od} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.751 {parse yymmdd} { + clock scan {xxxvii December 31} -format {%Oy %B %e} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.752 {parse yymmdd} { + clock scan {xxxvii December xxxi} -format {%Oy %B %Oe} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.753 {parse yymmdd} { + clock scan {xxxvii Dec 31} -format {%Oy %h %d} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.754 {parse yymmdd} { + clock scan {xxxvii Dec xxxi} -format {%Oy %h %Od} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.755 {parse yymmdd} { + clock scan {xxxvii Dec 31} -format {%Oy %h %e} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.756 {parse yymmdd} { + clock scan {xxxvii Dec xxxi} -format {%Oy %h %Oe} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.757 {parse yymmdd} { + clock scan {xxxvii 12 31} -format {%Oy %m %d} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.758 {parse yymmdd} { + clock scan {xxxvii 12 xxxi} -format {%Oy %m %Od} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.759 {parse yymmdd} { + clock scan {xxxvii 12 31} -format {%Oy %m %e} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.760 {parse yymmdd} { + clock scan {xxxvii 12 xxxi} -format {%Oy %m %Oe} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.761 {parse yymmdd} { + clock scan {xxxvii xii 31} -format {%Oy %Om %d} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.762 {parse yymmdd} { + clock scan {xxxvii xii xxxi} -format {%Oy %Om %Od} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.763 {parse yymmdd} { + clock scan {xxxvii xii 31} -format {%Oy %Om %e} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.764 {parse yymmdd} { + clock scan {xxxvii xii xxxi} -format {%Oy %Om %Oe} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.765 {parse yymmdd} { + clock scan {xxxvii 12 31} -format {%Oy %N %d} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.766 {parse yymmdd} { + clock scan {xxxvii 12 xxxi} -format {%Oy %N %Od} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.767 {parse yymmdd} { + clock scan {xxxvii 12 31} -format {%Oy %N %e} -locale en_US_roman -gmt 1 +} 2145830400 +test clock-14.768 {parse yymmdd} { + clock scan {xxxvii 12 xxxi} -format {%Oy %N %Oe} -locale en_US_roman -gmt 1 +} 2145830400 +# END testcases14 + +test clock-15.1 {yymmdd precedence below seconds} { + list [clock scan {0 000101} -format {%s %y%m%d} -gmt true] \ + [clock scan {000101 0} -format {%y%m%d %s} -gmt true] +} {0 0} + +test clock-15.2 {yymmdd precedence below julian day} { + list [clock scan {2440588 000101} -format {%J %y%m%d} -gmt true] \ + [clock scan {000101 2440588} -format {%y%m%d %J} -gmt true] +} {0 0} + +test clock-15.3 {yymmdd precedence below yyyyWwwd} { + list [clock scan {1970W014000101} -format {%GW%V%u%y%m%d} -gmt true] \ + [clock scan {0001011970W014} -format {%y%m%d%GW%V%u} -gmt true] +} {0 0} + +# Test parsing of yyddd + +test clock-16.1 {parse yyddd} { + clock scan {70 001} -format {%y %j} -locale en_US_roman -gmt 1 +} 0 +test clock-16.2 {parse yyddd} { + clock scan {70 365} -format {%y %j} -locale en_US_roman -gmt 1 +} 31449600 +test clock-16.3 {parse yyddd} { + clock scan {71 001} -format {%y %j} -locale en_US_roman -gmt 1 +} 31536000 +test clock-16.4 {parse yyddd} { + clock scan {71 365} -format {%y %j} -locale en_US_roman -gmt 1 +} 62985600 +test clock-16.5 {parse yyddd} { + clock scan {00 001} -format {%y %j} -locale en_US_roman -gmt 1 +} 946684800 +test clock-16.6 {parse yyddd} { + clock scan {00 365} -format {%y %j} -locale en_US_roman -gmt 1 +} 978134400 +test clock-16.7 {parse yyddd} { + clock scan {01 001} -format {%y %j} -locale en_US_roman -gmt 1 +} 978307200 +test clock-16.8 {parse yyddd} { + clock scan {01 365} -format {%y %j} -locale en_US_roman -gmt 1 +} 1009756800 + +test clock-16.9 {seconds take precedence over yyddd} { + list [clock scan {0 00001} -format {%s %y%j} -gmt true] \ + [clock scan {00001 0} -format {%y%j %s} -gmt true] +} {0 0} +test clock-16.10 {julian day takes precedence over yyddd} { + list [clock scan {2440588 00001} -format {%J %y%j} -gmt true] \ + [clock scan {00001 2440588} -format {%Y%j %J} -gmt true] +} {0 0} +test clock-16.11 {yyddd precedence below yyyyWwwd} { + list [clock scan {1970W01400001} -format {%GW%V%u%y%j} -gmt true] \ + [clock scan {000011970W014} -format {%y%j%GW%V%u} -gmt true] +} {0 0} + +# BEGIN testcases17 + +# Test parsing of yyWwwd + +test clock-17.1 {parse yyWwwd} { + clock scan {70 W01 Fri} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 86400 +test clock-17.2 {parse yyWwwd} { + clock scan {70 W01 Friday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 86400 +test clock-17.3 {parse yyWwwd} { + clock scan {70 W01 5} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 86400 +test clock-17.4 {parse yyWwwd} { + clock scan {70 W01 5} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 86400 +test clock-17.5 {parse yyWwwd} { + clock scan {70 W01 v} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 86400 +test clock-17.6 {parse yyWwwd} { + clock scan {70 W01 v} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 86400 +test clock-17.7 {parse yyWwwd} { + clock scan {70 W05 Sat} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 2592000 +test clock-17.8 {parse yyWwwd} { + clock scan {70 W05 Saturday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 2592000 +test clock-17.9 {parse yyWwwd} { + clock scan {70 W05 6} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 2592000 +test clock-17.10 {parse yyWwwd} { + clock scan {70 W05 6} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 2592000 +test clock-17.11 {parse yyWwwd} { + clock scan {70 W05 vi} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 2592000 +test clock-17.12 {parse yyWwwd} { + clock scan {70 W05 vi} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 2592000 +test clock-17.13 {parse yyWwwd} { + clock scan {70 W49 Wed} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 28944000 +test clock-17.14 {parse yyWwwd} { + clock scan {70 W49 Wednesday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 28944000 +test clock-17.15 {parse yyWwwd} { + clock scan {70 W49 3} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 28944000 +test clock-17.16 {parse yyWwwd} { + clock scan {70 W49 3} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 28944000 +test clock-17.17 {parse yyWwwd} { + clock scan {70 W49 iii} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 28944000 +test clock-17.18 {parse yyWwwd} { + clock scan {70 W49 iii} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 28944000 +test clock-17.19 {parse yyWwwd} { + clock scan {70 W53 Thu} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 31449600 +test clock-17.20 {parse yyWwwd} { + clock scan {70 W53 Thursday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 31449600 +test clock-17.21 {parse yyWwwd} { + clock scan {70 W53 4} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 31449600 +test clock-17.22 {parse yyWwwd} { + clock scan {70 W53 4} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 31449600 +test clock-17.23 {parse yyWwwd} { + clock scan {70 W53 iv} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 31449600 +test clock-17.24 {parse yyWwwd} { + clock scan {70 W53 iv} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 31449600 +test clock-17.25 {parse yyWwwd} { + clock scan {70 W53 Sat} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 31622400 +test clock-17.26 {parse yyWwwd} { + clock scan {70 W53 Saturday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 31622400 +test clock-17.27 {parse yyWwwd} { + clock scan {70 W53 6} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 31622400 +test clock-17.28 {parse yyWwwd} { + clock scan {70 W53 6} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 31622400 +test clock-17.29 {parse yyWwwd} { + clock scan {70 W53 vi} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 31622400 +test clock-17.30 {parse yyWwwd} { + clock scan {70 W53 vi} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 31622400 +test clock-17.31 {parse yyWwwd} { + clock scan {71 W04 Sun} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 34128000 +test clock-17.32 {parse yyWwwd} { + clock scan {71 W04 Sunday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 34128000 +test clock-17.33 {parse yyWwwd} { + clock scan {71 W04 7} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 34128000 +test clock-17.34 {parse yyWwwd} { + clock scan {71 W04 0} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 34128000 +test clock-17.35 {parse yyWwwd} { + clock scan {71 W04 vii} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 34128000 +test clock-17.36 {parse yyWwwd} { + clock scan {71 W04 ?} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 34128000 +test clock-17.37 {parse yyWwwd} { + clock scan {71 W48 Thu} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 60480000 +test clock-17.38 {parse yyWwwd} { + clock scan {71 W48 Thursday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 60480000 +test clock-17.39 {parse yyWwwd} { + clock scan {71 W48 4} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 60480000 +test clock-17.40 {parse yyWwwd} { + clock scan {71 W48 4} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 60480000 +test clock-17.41 {parse yyWwwd} { + clock scan {71 W48 iv} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 60480000 +test clock-17.42 {parse yyWwwd} { + clock scan {71 W48 iv} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 60480000 +test clock-17.43 {parse yyWwwd} { + clock scan {71 W52 Fri} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 62985600 +test clock-17.44 {parse yyWwwd} { + clock scan {71 W52 Friday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 62985600 +test clock-17.45 {parse yyWwwd} { + clock scan {71 W52 5} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 62985600 +test clock-17.46 {parse yyWwwd} { + clock scan {71 W52 5} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 62985600 +test clock-17.47 {parse yyWwwd} { + clock scan {71 W52 v} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 62985600 +test clock-17.48 {parse yyWwwd} { + clock scan {71 W52 v} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 62985600 +test clock-17.49 {parse yyWwwd} { + clock scan {99 W52 Sun} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 946771200 +test clock-17.50 {parse yyWwwd} { + clock scan {99 W52 Sunday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 946771200 +test clock-17.51 {parse yyWwwd} { + clock scan {99 W52 7} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 946771200 +test clock-17.52 {parse yyWwwd} { + clock scan {99 W52 0} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 946771200 +test clock-17.53 {parse yyWwwd} { + clock scan {99 W52 vii} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 946771200 +test clock-17.54 {parse yyWwwd} { + clock scan {99 W52 ?} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 946771200 +test clock-17.55 {parse yyWwwd} { + clock scan {00 W05 Mon} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 949276800 +test clock-17.56 {parse yyWwwd} { + clock scan {00 W05 Monday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 949276800 +test clock-17.57 {parse yyWwwd} { + clock scan {00 W05 1} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 949276800 +test clock-17.58 {parse yyWwwd} { + clock scan {00 W05 1} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 949276800 +test clock-17.59 {parse yyWwwd} { + clock scan {00 W05 i} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 949276800 +test clock-17.60 {parse yyWwwd} { + clock scan {00 W05 i} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 949276800 +test clock-17.61 {parse yyWwwd} { + clock scan {00 W48 Sat} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 975715200 +test clock-17.62 {parse yyWwwd} { + clock scan {00 W48 Saturday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 975715200 +test clock-17.63 {parse yyWwwd} { + clock scan {00 W48 6} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 975715200 +test clock-17.64 {parse yyWwwd} { + clock scan {00 W48 6} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 975715200 +test clock-17.65 {parse yyWwwd} { + clock scan {00 W48 vi} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 975715200 +test clock-17.66 {parse yyWwwd} { + clock scan {00 W48 vi} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 975715200 +test clock-17.67 {parse yyWwwd} { + clock scan {00 W52 Sun} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 978220800 +test clock-17.68 {parse yyWwwd} { + clock scan {00 W52 Sunday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 978220800 +test clock-17.69 {parse yyWwwd} { + clock scan {00 W52 7} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 978220800 +test clock-17.70 {parse yyWwwd} { + clock scan {00 W52 0} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 978220800 +test clock-17.71 {parse yyWwwd} { + clock scan {00 W52 vii} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 978220800 +test clock-17.72 {parse yyWwwd} { + clock scan {00 W52 ?} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 978220800 +test clock-17.73 {parse yyWwwd} { + clock scan {01 W01 Tue} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 978393600 +test clock-17.74 {parse yyWwwd} { + clock scan {01 W01 Tuesday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 978393600 +test clock-17.75 {parse yyWwwd} { + clock scan {01 W01 2} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 978393600 +test clock-17.76 {parse yyWwwd} { + clock scan {01 W01 2} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 978393600 +test clock-17.77 {parse yyWwwd} { + clock scan {01 W01 ii} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 978393600 +test clock-17.78 {parse yyWwwd} { + clock scan {01 W01 ii} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 978393600 +test clock-17.79 {parse yyWwwd} { + clock scan {01 W05 Wed} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 980899200 +test clock-17.80 {parse yyWwwd} { + clock scan {01 W05 Wednesday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 980899200 +test clock-17.81 {parse yyWwwd} { + clock scan {01 W05 3} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 980899200 +test clock-17.82 {parse yyWwwd} { + clock scan {01 W05 3} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 980899200 +test clock-17.83 {parse yyWwwd} { + clock scan {01 W05 iii} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 980899200 +test clock-17.84 {parse yyWwwd} { + clock scan {01 W05 iii} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 980899200 +test clock-17.85 {parse yyWwwd} { + clock scan {01 W48 Sun} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-17.86 {parse yyWwwd} { + clock scan {01 W48 Sunday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-17.87 {parse yyWwwd} { + clock scan {01 W48 7} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-17.88 {parse yyWwwd} { + clock scan {01 W48 0} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-17.89 {parse yyWwwd} { + clock scan {01 W48 vii} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-17.90 {parse yyWwwd} { + clock scan {01 W48 ?} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 1007251200 +test clock-17.91 {parse yyWwwd} { + clock scan {02 W01 Mon} -format {%g W%V %a} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-17.92 {parse yyWwwd} { + clock scan {02 W01 Monday} -format {%g W%V %A} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-17.93 {parse yyWwwd} { + clock scan {02 W01 1} -format {%g W%V %u} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-17.94 {parse yyWwwd} { + clock scan {02 W01 1} -format {%g W%V %w} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-17.95 {parse yyWwwd} { + clock scan {02 W01 i} -format {%g W%V %Ou} -locale en_US_roman -gmt 1 +} 1009756800 +test clock-17.96 {parse yyWwwd} { + clock scan {02 W01 i} -format {%g W%V %Ow} -locale en_US_roman -gmt 1 +} 1009756800 +# END testcases17 + +# Test precedence of yyWwwd + +test clock-18.1 {seconds take precedence over yyWwwd} { + list [clock scan {0 00W014} -format {%s %gW%V%u} -gmt true] \ + [clock scan {00W014 0} -format {%gW%V%u %s} -gmt true] +} {0 0} +test clock-18.2 {julian day takes precedence over yyddd} { + list [clock scan {2440588 00W014} -format {%J %gW%V%u} -gmt true] \ + [clock scan {00W014 2440588} -format {%gW%V%u %J} -gmt true] +} {0 0} +test clock-18.3 {yyWwwd precedence below yyyymmdd} { + list [clock scan {19700101 00W014} -format {%Y%m%d %gW%V%u} -gmt true] \ + [clock scan {00W014 19700101} -format {%gW%V%u %Y%m%d} -gmt true] +} {0 0} +test clock-18.4 {yyWwwd precedence below yyyyddd} { + list [clock scan {1970001 00W014} -format {%Y%j %gW%V%u} -gmt true] \ + [clock scan {00W014 1970001} -format {%gW%V%u %Y%j} -gmt true] +} {0 0} + +# BEGIN testcases19 + +# Test parsing of mmdd + +test clock-19.1 {parse mmdd} { + clock scan {Jan 02} -format {%b %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.2 {parse mmdd} { + clock scan {Jan ii} -format {%b %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.3 {parse mmdd} { + clock scan {Jan 2} -format {%b %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.4 {parse mmdd} { + clock scan {Jan ii} -format {%b %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.5 {parse mmdd} { + clock scan {January 02} -format {%B %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.6 {parse mmdd} { + clock scan {January ii} -format {%B %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.7 {parse mmdd} { + clock scan {January 2} -format {%B %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.8 {parse mmdd} { + clock scan {January ii} -format {%B %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.9 {parse mmdd} { + clock scan {Jan 02} -format {%h %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.10 {parse mmdd} { + clock scan {Jan ii} -format {%h %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.11 {parse mmdd} { + clock scan {Jan 2} -format {%h %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.12 {parse mmdd} { + clock scan {Jan ii} -format {%h %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.13 {parse mmdd} { + clock scan {01 02} -format {%m %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.14 {parse mmdd} { + clock scan {01 ii} -format {%m %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.15 {parse mmdd} { + clock scan {01 2} -format {%m %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.16 {parse mmdd} { + clock scan {01 ii} -format {%m %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.17 {parse mmdd} { + clock scan {i 02} -format {%Om %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.18 {parse mmdd} { + clock scan {i ii} -format {%Om %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.19 {parse mmdd} { + clock scan {i 2} -format {%Om %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.20 {parse mmdd} { + clock scan {i ii} -format {%Om %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.21 {parse mmdd} { + clock scan { 1 02} -format {%N %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.22 {parse mmdd} { + clock scan { 1 ii} -format {%N %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.23 {parse mmdd} { + clock scan { 1 2} -format {%N %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.24 {parse mmdd} { + clock scan { 1 ii} -format {%N %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -1009756800 +test clock-19.25 {parse mmdd} { + clock scan {Jan 31} -format {%b %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.26 {parse mmdd} { + clock scan {Jan xxxi} -format {%b %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.27 {parse mmdd} { + clock scan {Jan 31} -format {%b %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.28 {parse mmdd} { + clock scan {Jan xxxi} -format {%b %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.29 {parse mmdd} { + clock scan {January 31} -format {%B %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.30 {parse mmdd} { + clock scan {January xxxi} -format {%B %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.31 {parse mmdd} { + clock scan {January 31} -format {%B %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.32 {parse mmdd} { + clock scan {January xxxi} -format {%B %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.33 {parse mmdd} { + clock scan {Jan 31} -format {%h %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.34 {parse mmdd} { + clock scan {Jan xxxi} -format {%h %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.35 {parse mmdd} { + clock scan {Jan 31} -format {%h %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.36 {parse mmdd} { + clock scan {Jan xxxi} -format {%h %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.37 {parse mmdd} { + clock scan {01 31} -format {%m %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.38 {parse mmdd} { + clock scan {01 xxxi} -format {%m %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.39 {parse mmdd} { + clock scan {01 31} -format {%m %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.40 {parse mmdd} { + clock scan {01 xxxi} -format {%m %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.41 {parse mmdd} { + clock scan {i 31} -format {%Om %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.42 {parse mmdd} { + clock scan {i xxxi} -format {%Om %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.43 {parse mmdd} { + clock scan {i 31} -format {%Om %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.44 {parse mmdd} { + clock scan {i xxxi} -format {%Om %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.45 {parse mmdd} { + clock scan { 1 31} -format {%N %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.46 {parse mmdd} { + clock scan { 1 xxxi} -format {%N %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.47 {parse mmdd} { + clock scan { 1 31} -format {%N %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.48 {parse mmdd} { + clock scan { 1 xxxi} -format {%N %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -1007251200 +test clock-19.49 {parse mmdd} { + clock scan {Dec 02} -format {%b %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.50 {parse mmdd} { + clock scan {Dec ii} -format {%b %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.51 {parse mmdd} { + clock scan {Dec 2} -format {%b %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.52 {parse mmdd} { + clock scan {Dec ii} -format {%b %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.53 {parse mmdd} { + clock scan {December 02} -format {%B %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.54 {parse mmdd} { + clock scan {December ii} -format {%B %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.55 {parse mmdd} { + clock scan {December 2} -format {%B %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.56 {parse mmdd} { + clock scan {December ii} -format {%B %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.57 {parse mmdd} { + clock scan {Dec 02} -format {%h %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.58 {parse mmdd} { + clock scan {Dec ii} -format {%h %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.59 {parse mmdd} { + clock scan {Dec 2} -format {%h %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.60 {parse mmdd} { + clock scan {Dec ii} -format {%h %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.61 {parse mmdd} { + clock scan {12 02} -format {%m %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.62 {parse mmdd} { + clock scan {12 ii} -format {%m %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.63 {parse mmdd} { + clock scan {12 2} -format {%m %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.64 {parse mmdd} { + clock scan {12 ii} -format {%m %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.65 {parse mmdd} { + clock scan {xii 02} -format {%Om %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.66 {parse mmdd} { + clock scan {xii ii} -format {%Om %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.67 {parse mmdd} { + clock scan {xii 2} -format {%Om %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.68 {parse mmdd} { + clock scan {xii ii} -format {%Om %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.69 {parse mmdd} { + clock scan {12 02} -format {%N %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.70 {parse mmdd} { + clock scan {12 ii} -format {%N %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.71 {parse mmdd} { + clock scan {12 2} -format {%N %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.72 {parse mmdd} { + clock scan {12 ii} -format {%N %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -980899200 +test clock-19.73 {parse mmdd} { + clock scan {Dec 31} -format {%b %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.74 {parse mmdd} { + clock scan {Dec xxxi} -format {%b %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.75 {parse mmdd} { + clock scan {Dec 31} -format {%b %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.76 {parse mmdd} { + clock scan {Dec xxxi} -format {%b %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.77 {parse mmdd} { + clock scan {December 31} -format {%B %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.78 {parse mmdd} { + clock scan {December xxxi} -format {%B %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.79 {parse mmdd} { + clock scan {December 31} -format {%B %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.80 {parse mmdd} { + clock scan {December xxxi} -format {%B %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.81 {parse mmdd} { + clock scan {Dec 31} -format {%h %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.82 {parse mmdd} { + clock scan {Dec xxxi} -format {%h %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.83 {parse mmdd} { + clock scan {Dec 31} -format {%h %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.84 {parse mmdd} { + clock scan {Dec xxxi} -format {%h %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.85 {parse mmdd} { + clock scan {12 31} -format {%m %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.86 {parse mmdd} { + clock scan {12 xxxi} -format {%m %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.87 {parse mmdd} { + clock scan {12 31} -format {%m %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.88 {parse mmdd} { + clock scan {12 xxxi} -format {%m %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.89 {parse mmdd} { + clock scan {xii 31} -format {%Om %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.90 {parse mmdd} { + clock scan {xii xxxi} -format {%Om %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.91 {parse mmdd} { + clock scan {xii 31} -format {%Om %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.92 {parse mmdd} { + clock scan {xii xxxi} -format {%Om %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.93 {parse mmdd} { + clock scan {12 31} -format {%N %d} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.94 {parse mmdd} { + clock scan {12 xxxi} -format {%N %Od} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.95 {parse mmdd} { + clock scan {12 31} -format {%N %e} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.96 {parse mmdd} { + clock scan {12 xxxi} -format {%N %Oe} -locale en_US_roman -base -1009843200 -gmt 1 +} -978393600 +test clock-19.97 {parse mmdd} { + clock scan {Jan 02} -format {%b %d} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.98 {parse mmdd} { + clock scan {Jan ii} -format {%b %Od} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.99 {parse mmdd} { + clock scan {Jan 2} -format {%b %e} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.100 {parse mmdd} { + clock scan {Jan ii} -format {%b %Oe} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.101 {parse mmdd} { + clock scan {January 02} -format {%B %d} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.102 {parse mmdd} { + clock scan {January ii} -format {%B %Od} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.103 {parse mmdd} { + clock scan {January 2} -format {%B %e} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.104 {parse mmdd} { + clock scan {January ii} -format {%B %Oe} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.105 {parse mmdd} { + clock scan {Jan 02} -format {%h %d} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.106 {parse mmdd} { + clock scan {Jan ii} -format {%h %Od} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.107 {parse mmdd} { + clock scan {Jan 2} -format {%h %e} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.108 {parse mmdd} { + clock scan {Jan ii} -format {%h %Oe} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.109 {parse mmdd} { + clock scan {01 02} -format {%m %d} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.110 {parse mmdd} { + clock scan {01 ii} -format {%m %Od} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.111 {parse mmdd} { + clock scan {01 2} -format {%m %e} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.112 {parse mmdd} { + clock scan {01 ii} -format {%m %Oe} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.113 {parse mmdd} { + clock scan {i 02} -format {%Om %d} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.114 {parse mmdd} { + clock scan {i ii} -format {%Om %Od} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.115 {parse mmdd} { + clock scan {i 2} -format {%Om %e} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.116 {parse mmdd} { + clock scan {i ii} -format {%Om %Oe} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.117 {parse mmdd} { + clock scan { 1 02} -format {%N %d} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.118 {parse mmdd} { + clock scan { 1 ii} -format {%N %Od} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.119 {parse mmdd} { + clock scan { 1 2} -format {%N %e} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.120 {parse mmdd} { + clock scan { 1 ii} -format {%N %Oe} -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-19.121 {parse mmdd} { + clock scan {Jan 31} -format {%b %d} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.122 {parse mmdd} { + clock scan {Jan xxxi} -format {%b %Od} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.123 {parse mmdd} { + clock scan {Jan 31} -format {%b %e} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.124 {parse mmdd} { + clock scan {Jan xxxi} -format {%b %Oe} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.125 {parse mmdd} { + clock scan {January 31} -format {%B %d} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.126 {parse mmdd} { + clock scan {January xxxi} -format {%B %Od} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.127 {parse mmdd} { + clock scan {January 31} -format {%B %e} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.128 {parse mmdd} { + clock scan {January xxxi} -format {%B %Oe} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.129 {parse mmdd} { + clock scan {Jan 31} -format {%h %d} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.130 {parse mmdd} { + clock scan {Jan xxxi} -format {%h %Od} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.131 {parse mmdd} { + clock scan {Jan 31} -format {%h %e} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.132 {parse mmdd} { + clock scan {Jan xxxi} -format {%h %Oe} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.133 {parse mmdd} { + clock scan {01 31} -format {%m %d} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.134 {parse mmdd} { + clock scan {01 xxxi} -format {%m %Od} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.135 {parse mmdd} { + clock scan {01 31} -format {%m %e} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.136 {parse mmdd} { + clock scan {01 xxxi} -format {%m %Oe} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.137 {parse mmdd} { + clock scan {i 31} -format {%Om %d} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.138 {parse mmdd} { + clock scan {i xxxi} -format {%Om %Od} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.139 {parse mmdd} { + clock scan {i 31} -format {%Om %e} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.140 {parse mmdd} { + clock scan {i xxxi} -format {%Om %Oe} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.141 {parse mmdd} { + clock scan { 1 31} -format {%N %d} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.142 {parse mmdd} { + clock scan { 1 xxxi} -format {%N %Od} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.143 {parse mmdd} { + clock scan { 1 31} -format {%N %e} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.144 {parse mmdd} { + clock scan { 1 xxxi} -format {%N %Oe} -locale en_US_roman -base 0 -gmt 1 +} 2592000 +test clock-19.145 {parse mmdd} { + clock scan {Dec 02} -format {%b %d} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.146 {parse mmdd} { + clock scan {Dec ii} -format {%b %Od} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.147 {parse mmdd} { + clock scan {Dec 2} -format {%b %e} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.148 {parse mmdd} { + clock scan {Dec ii} -format {%b %Oe} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.149 {parse mmdd} { + clock scan {December 02} -format {%B %d} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.150 {parse mmdd} { + clock scan {December ii} -format {%B %Od} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.151 {parse mmdd} { + clock scan {December 2} -format {%B %e} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.152 {parse mmdd} { + clock scan {December ii} -format {%B %Oe} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.153 {parse mmdd} { + clock scan {Dec 02} -format {%h %d} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.154 {parse mmdd} { + clock scan {Dec ii} -format {%h %Od} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.155 {parse mmdd} { + clock scan {Dec 2} -format {%h %e} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.156 {parse mmdd} { + clock scan {Dec ii} -format {%h %Oe} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.157 {parse mmdd} { + clock scan {12 02} -format {%m %d} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.158 {parse mmdd} { + clock scan {12 ii} -format {%m %Od} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.159 {parse mmdd} { + clock scan {12 2} -format {%m %e} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.160 {parse mmdd} { + clock scan {12 ii} -format {%m %Oe} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.161 {parse mmdd} { + clock scan {xii 02} -format {%Om %d} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.162 {parse mmdd} { + clock scan {xii ii} -format {%Om %Od} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.163 {parse mmdd} { + clock scan {xii 2} -format {%Om %e} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.164 {parse mmdd} { + clock scan {xii ii} -format {%Om %Oe} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.165 {parse mmdd} { + clock scan {12 02} -format {%N %d} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.166 {parse mmdd} { + clock scan {12 ii} -format {%N %Od} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.167 {parse mmdd} { + clock scan {12 2} -format {%N %e} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.168 {parse mmdd} { + clock scan {12 ii} -format {%N %Oe} -locale en_US_roman -base 0 -gmt 1 +} 28944000 +test clock-19.169 {parse mmdd} { + clock scan {Dec 31} -format {%b %d} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.170 {parse mmdd} { + clock scan {Dec xxxi} -format {%b %Od} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.171 {parse mmdd} { + clock scan {Dec 31} -format {%b %e} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.172 {parse mmdd} { + clock scan {Dec xxxi} -format {%b %Oe} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.173 {parse mmdd} { + clock scan {December 31} -format {%B %d} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.174 {parse mmdd} { + clock scan {December xxxi} -format {%B %Od} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.175 {parse mmdd} { + clock scan {December 31} -format {%B %e} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.176 {parse mmdd} { + clock scan {December xxxi} -format {%B %Oe} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.177 {parse mmdd} { + clock scan {Dec 31} -format {%h %d} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.178 {parse mmdd} { + clock scan {Dec xxxi} -format {%h %Od} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.179 {parse mmdd} { + clock scan {Dec 31} -format {%h %e} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.180 {parse mmdd} { + clock scan {Dec xxxi} -format {%h %Oe} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.181 {parse mmdd} { + clock scan {12 31} -format {%m %d} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.182 {parse mmdd} { + clock scan {12 xxxi} -format {%m %Od} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.183 {parse mmdd} { + clock scan {12 31} -format {%m %e} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.184 {parse mmdd} { + clock scan {12 xxxi} -format {%m %Oe} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.185 {parse mmdd} { + clock scan {xii 31} -format {%Om %d} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.186 {parse mmdd} { + clock scan {xii xxxi} -format {%Om %Od} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.187 {parse mmdd} { + clock scan {xii 31} -format {%Om %e} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.188 {parse mmdd} { + clock scan {xii xxxi} -format {%Om %Oe} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.189 {parse mmdd} { + clock scan {12 31} -format {%N %d} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.190 {parse mmdd} { + clock scan {12 xxxi} -format {%N %Od} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.191 {parse mmdd} { + clock scan {12 31} -format {%N %e} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.192 {parse mmdd} { + clock scan {12 xxxi} -format {%N %Oe} -locale en_US_roman -base 0 -gmt 1 +} 31449600 +test clock-19.193 {parse mmdd} { + clock scan {Jan 02} -format {%b %d} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.194 {parse mmdd} { + clock scan {Jan ii} -format {%b %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.195 {parse mmdd} { + clock scan {Jan 2} -format {%b %e} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.196 {parse mmdd} { + clock scan {Jan ii} -format {%b %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.197 {parse mmdd} { + clock scan {January 02} -format {%B %d} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.198 {parse mmdd} { + clock scan {January ii} -format {%B %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.199 {parse mmdd} { + clock scan {January 2} -format {%B %e} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.200 {parse mmdd} { + clock scan {January ii} -format {%B %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.201 {parse mmdd} { + clock scan {Jan 02} -format {%h %d} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.202 {parse mmdd} { + clock scan {Jan ii} -format {%h %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.203 {parse mmdd} { + clock scan {Jan 2} -format {%h %e} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.204 {parse mmdd} { + clock scan {Jan ii} -format {%h %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.205 {parse mmdd} { + clock scan {01 02} -format {%m %d} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.206 {parse mmdd} { + clock scan {01 ii} -format {%m %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.207 {parse mmdd} { + clock scan {01 2} -format {%m %e} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.208 {parse mmdd} { + clock scan {01 ii} -format {%m %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.209 {parse mmdd} { + clock scan {i 02} -format {%Om %d} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.210 {parse mmdd} { + clock scan {i ii} -format {%Om %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.211 {parse mmdd} { + clock scan {i 2} -format {%Om %e} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.212 {parse mmdd} { + clock scan {i ii} -format {%Om %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.213 {parse mmdd} { + clock scan { 1 02} -format {%N %d} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.214 {parse mmdd} { + clock scan { 1 ii} -format {%N %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.215 {parse mmdd} { + clock scan { 1 2} -format {%N %e} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.216 {parse mmdd} { + clock scan { 1 ii} -format {%N %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-19.217 {parse mmdd} { + clock scan {Jan 31} -format {%b %d} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.218 {parse mmdd} { + clock scan {Jan xxxi} -format {%b %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.219 {parse mmdd} { + clock scan {Jan 31} -format {%b %e} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.220 {parse mmdd} { + clock scan {Jan xxxi} -format {%b %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.221 {parse mmdd} { + clock scan {January 31} -format {%B %d} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.222 {parse mmdd} { + clock scan {January xxxi} -format {%B %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.223 {parse mmdd} { + clock scan {January 31} -format {%B %e} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.224 {parse mmdd} { + clock scan {January xxxi} -format {%B %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.225 {parse mmdd} { + clock scan {Jan 31} -format {%h %d} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.226 {parse mmdd} { + clock scan {Jan xxxi} -format {%h %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.227 {parse mmdd} { + clock scan {Jan 31} -format {%h %e} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.228 {parse mmdd} { + clock scan {Jan xxxi} -format {%h %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.229 {parse mmdd} { + clock scan {01 31} -format {%m %d} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.230 {parse mmdd} { + clock scan {01 xxxi} -format {%m %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.231 {parse mmdd} { + clock scan {01 31} -format {%m %e} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.232 {parse mmdd} { + clock scan {01 xxxi} -format {%m %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.233 {parse mmdd} { + clock scan {i 31} -format {%Om %d} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.234 {parse mmdd} { + clock scan {i xxxi} -format {%Om %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.235 {parse mmdd} { + clock scan {i 31} -format {%Om %e} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.236 {parse mmdd} { + clock scan {i xxxi} -format {%Om %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.237 {parse mmdd} { + clock scan { 1 31} -format {%N %d} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.238 {parse mmdd} { + clock scan { 1 xxxi} -format {%N %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.239 {parse mmdd} { + clock scan { 1 31} -format {%N %e} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.240 {parse mmdd} { + clock scan { 1 xxxi} -format {%N %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 949276800 +test clock-19.241 {parse mmdd} { + clock scan {Dec 02} -format {%b %d} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.242 {parse mmdd} { + clock scan {Dec ii} -format {%b %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.243 {parse mmdd} { + clock scan {Dec 2} -format {%b %e} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.244 {parse mmdd} { + clock scan {Dec ii} -format {%b %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.245 {parse mmdd} { + clock scan {December 02} -format {%B %d} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.246 {parse mmdd} { + clock scan {December ii} -format {%B %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.247 {parse mmdd} { + clock scan {December 2} -format {%B %e} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.248 {parse mmdd} { + clock scan {December ii} -format {%B %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.249 {parse mmdd} { + clock scan {Dec 02} -format {%h %d} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.250 {parse mmdd} { + clock scan {Dec ii} -format {%h %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.251 {parse mmdd} { + clock scan {Dec 2} -format {%h %e} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.252 {parse mmdd} { + clock scan {Dec ii} -format {%h %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.253 {parse mmdd} { + clock scan {12 02} -format {%m %d} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.254 {parse mmdd} { + clock scan {12 ii} -format {%m %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.255 {parse mmdd} { + clock scan {12 2} -format {%m %e} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.256 {parse mmdd} { + clock scan {12 ii} -format {%m %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.257 {parse mmdd} { + clock scan {xii 02} -format {%Om %d} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.258 {parse mmdd} { + clock scan {xii ii} -format {%Om %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.259 {parse mmdd} { + clock scan {xii 2} -format {%Om %e} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.260 {parse mmdd} { + clock scan {xii ii} -format {%Om %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.261 {parse mmdd} { + clock scan {12 02} -format {%N %d} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.262 {parse mmdd} { + clock scan {12 ii} -format {%N %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.263 {parse mmdd} { + clock scan {12 2} -format {%N %e} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.264 {parse mmdd} { + clock scan {12 ii} -format {%N %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 975715200 +test clock-19.265 {parse mmdd} { + clock scan {Dec 31} -format {%b %d} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.266 {parse mmdd} { + clock scan {Dec xxxi} -format {%b %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.267 {parse mmdd} { + clock scan {Dec 31} -format {%b %e} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.268 {parse mmdd} { + clock scan {Dec xxxi} -format {%b %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.269 {parse mmdd} { + clock scan {December 31} -format {%B %d} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.270 {parse mmdd} { + clock scan {December xxxi} -format {%B %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.271 {parse mmdd} { + clock scan {December 31} -format {%B %e} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.272 {parse mmdd} { + clock scan {December xxxi} -format {%B %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.273 {parse mmdd} { + clock scan {Dec 31} -format {%h %d} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.274 {parse mmdd} { + clock scan {Dec xxxi} -format {%h %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.275 {parse mmdd} { + clock scan {Dec 31} -format {%h %e} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.276 {parse mmdd} { + clock scan {Dec xxxi} -format {%h %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.277 {parse mmdd} { + clock scan {12 31} -format {%m %d} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.278 {parse mmdd} { + clock scan {12 xxxi} -format {%m %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.279 {parse mmdd} { + clock scan {12 31} -format {%m %e} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.280 {parse mmdd} { + clock scan {12 xxxi} -format {%m %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.281 {parse mmdd} { + clock scan {xii 31} -format {%Om %d} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.282 {parse mmdd} { + clock scan {xii xxxi} -format {%Om %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.283 {parse mmdd} { + clock scan {xii 31} -format {%Om %e} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.284 {parse mmdd} { + clock scan {xii xxxi} -format {%Om %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.285 {parse mmdd} { + clock scan {12 31} -format {%N %d} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.286 {parse mmdd} { + clock scan {12 xxxi} -format {%N %Od} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.287 {parse mmdd} { + clock scan {12 31} -format {%N %e} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.288 {parse mmdd} { + clock scan {12 xxxi} -format {%N %Oe} -locale en_US_roman -base 946684800 -gmt 1 +} 978220800 +test clock-19.289 {parse mmdd} { + clock scan {Jan 02} -format {%b %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.290 {parse mmdd} { + clock scan {Jan ii} -format {%b %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.291 {parse mmdd} { + clock scan {Jan 2} -format {%b %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.292 {parse mmdd} { + clock scan {Jan ii} -format {%b %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.293 {parse mmdd} { + clock scan {January 02} -format {%B %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.294 {parse mmdd} { + clock scan {January ii} -format {%B %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.295 {parse mmdd} { + clock scan {January 2} -format {%B %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.296 {parse mmdd} { + clock scan {January ii} -format {%B %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.297 {parse mmdd} { + clock scan {Jan 02} -format {%h %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.298 {parse mmdd} { + clock scan {Jan ii} -format {%h %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.299 {parse mmdd} { + clock scan {Jan 2} -format {%h %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.300 {parse mmdd} { + clock scan {Jan ii} -format {%h %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.301 {parse mmdd} { + clock scan {01 02} -format {%m %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.302 {parse mmdd} { + clock scan {01 ii} -format {%m %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.303 {parse mmdd} { + clock scan {01 2} -format {%m %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.304 {parse mmdd} { + clock scan {01 ii} -format {%m %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.305 {parse mmdd} { + clock scan {i 02} -format {%Om %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.306 {parse mmdd} { + clock scan {i ii} -format {%Om %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.307 {parse mmdd} { + clock scan {i 2} -format {%Om %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.308 {parse mmdd} { + clock scan {i ii} -format {%Om %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.309 {parse mmdd} { + clock scan { 1 02} -format {%N %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.310 {parse mmdd} { + clock scan { 1 ii} -format {%N %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.311 {parse mmdd} { + clock scan { 1 2} -format {%N %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.312 {parse mmdd} { + clock scan { 1 ii} -format {%N %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2114467200 +test clock-19.313 {parse mmdd} { + clock scan {Jan 31} -format {%b %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.314 {parse mmdd} { + clock scan {Jan xxxi} -format {%b %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.315 {parse mmdd} { + clock scan {Jan 31} -format {%b %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.316 {parse mmdd} { + clock scan {Jan xxxi} -format {%b %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.317 {parse mmdd} { + clock scan {January 31} -format {%B %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.318 {parse mmdd} { + clock scan {January xxxi} -format {%B %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.319 {parse mmdd} { + clock scan {January 31} -format {%B %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.320 {parse mmdd} { + clock scan {January xxxi} -format {%B %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.321 {parse mmdd} { + clock scan {Jan 31} -format {%h %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.322 {parse mmdd} { + clock scan {Jan xxxi} -format {%h %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.323 {parse mmdd} { + clock scan {Jan 31} -format {%h %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.324 {parse mmdd} { + clock scan {Jan xxxi} -format {%h %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.325 {parse mmdd} { + clock scan {01 31} -format {%m %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.326 {parse mmdd} { + clock scan {01 xxxi} -format {%m %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.327 {parse mmdd} { + clock scan {01 31} -format {%m %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.328 {parse mmdd} { + clock scan {01 xxxi} -format {%m %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.329 {parse mmdd} { + clock scan {i 31} -format {%Om %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.330 {parse mmdd} { + clock scan {i xxxi} -format {%Om %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.331 {parse mmdd} { + clock scan {i 31} -format {%Om %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.332 {parse mmdd} { + clock scan {i xxxi} -format {%Om %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.333 {parse mmdd} { + clock scan { 1 31} -format {%N %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.334 {parse mmdd} { + clock scan { 1 xxxi} -format {%N %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.335 {parse mmdd} { + clock scan { 1 31} -format {%N %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.336 {parse mmdd} { + clock scan { 1 xxxi} -format {%N %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2116972800 +test clock-19.337 {parse mmdd} { + clock scan {Dec 02} -format {%b %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.338 {parse mmdd} { + clock scan {Dec ii} -format {%b %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.339 {parse mmdd} { + clock scan {Dec 2} -format {%b %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.340 {parse mmdd} { + clock scan {Dec ii} -format {%b %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.341 {parse mmdd} { + clock scan {December 02} -format {%B %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.342 {parse mmdd} { + clock scan {December ii} -format {%B %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.343 {parse mmdd} { + clock scan {December 2} -format {%B %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.344 {parse mmdd} { + clock scan {December ii} -format {%B %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.345 {parse mmdd} { + clock scan {Dec 02} -format {%h %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.346 {parse mmdd} { + clock scan {Dec ii} -format {%h %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.347 {parse mmdd} { + clock scan {Dec 2} -format {%h %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.348 {parse mmdd} { + clock scan {Dec ii} -format {%h %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.349 {parse mmdd} { + clock scan {12 02} -format {%m %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.350 {parse mmdd} { + clock scan {12 ii} -format {%m %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.351 {parse mmdd} { + clock scan {12 2} -format {%m %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.352 {parse mmdd} { + clock scan {12 ii} -format {%m %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.353 {parse mmdd} { + clock scan {xii 02} -format {%Om %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.354 {parse mmdd} { + clock scan {xii ii} -format {%Om %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.355 {parse mmdd} { + clock scan {xii 2} -format {%Om %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.356 {parse mmdd} { + clock scan {xii ii} -format {%Om %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.357 {parse mmdd} { + clock scan {12 02} -format {%N %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.358 {parse mmdd} { + clock scan {12 ii} -format {%N %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.359 {parse mmdd} { + clock scan {12 2} -format {%N %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.360 {parse mmdd} { + clock scan {12 ii} -format {%N %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2143324800 +test clock-19.361 {parse mmdd} { + clock scan {Dec 31} -format {%b %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.362 {parse mmdd} { + clock scan {Dec xxxi} -format {%b %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.363 {parse mmdd} { + clock scan {Dec 31} -format {%b %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.364 {parse mmdd} { + clock scan {Dec xxxi} -format {%b %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.365 {parse mmdd} { + clock scan {December 31} -format {%B %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.366 {parse mmdd} { + clock scan {December xxxi} -format {%B %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.367 {parse mmdd} { + clock scan {December 31} -format {%B %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.368 {parse mmdd} { + clock scan {December xxxi} -format {%B %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.369 {parse mmdd} { + clock scan {Dec 31} -format {%h %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.370 {parse mmdd} { + clock scan {Dec xxxi} -format {%h %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.371 {parse mmdd} { + clock scan {Dec 31} -format {%h %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.372 {parse mmdd} { + clock scan {Dec xxxi} -format {%h %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.373 {parse mmdd} { + clock scan {12 31} -format {%m %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.374 {parse mmdd} { + clock scan {12 xxxi} -format {%m %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.375 {parse mmdd} { + clock scan {12 31} -format {%m %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.376 {parse mmdd} { + clock scan {12 xxxi} -format {%m %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.377 {parse mmdd} { + clock scan {xii 31} -format {%Om %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.378 {parse mmdd} { + clock scan {xii xxxi} -format {%Om %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.379 {parse mmdd} { + clock scan {xii 31} -format {%Om %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.380 {parse mmdd} { + clock scan {xii xxxi} -format {%Om %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.381 {parse mmdd} { + clock scan {12 31} -format {%N %d} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.382 {parse mmdd} { + clock scan {12 xxxi} -format {%N %Od} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.383 {parse mmdd} { + clock scan {12 31} -format {%N %e} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +test clock-19.384 {parse mmdd} { + clock scan {12 xxxi} -format {%N %Oe} -locale en_US_roman -base 2114380800 -gmt 1 +} 2145830400 +# END testcases19 + +test clock-20.1 {seconds take precedence over mmdd} { + list [clock scan {0 0201} -format {%s %m%d} -gmt true -base 0] \ + [clock scan {0201 0} -format {%m%d %s} -gmt true -base 0] +} {0 0} +test clock-20.2 {julian day takes precedence over yyddd} { + list [clock scan {2440588 0201} -format {%J %m%d} -gmt true -base 0] \ + [clock scan {0201 2440588} -format {%m%d %J} -gmt true -base 0] +} {0 0} +test clock-20.3 {yyyyWwwd over mmdd} { + list [clock scan {1970W014 0201} -format {%GW%V%u %m%d} -gmt true -base 0] \ + [clock scan {0201 1970W014} -format {%m%d %GW%V%u} -gmt true -base 0] +} {0 0} +test clock-20.4 {yyWwwd over mmdd} { + list [clock scan {70W014 0201} -format {%gW%V%u %m%d} -gmt true -base 0] \ + [clock scan {0201 70W014} -format {%m%d %gW%V%u} -gmt true -base 0] +} {0 0} + +# Test parsing of ddd + +test clock-21.1 {parse ddd} { + clock scan {001} -format {%j} -locale en_US_roman -gmt 1 -base 0 +} 0 +test clock-21.2 {parse ddd} { + clock scan {365} -format {%j} -locale en_US_roman -gmt 1 -base 0 +} 31449600 +test clock-21.3 {parse ddd} { + clock scan {001} -format {%j} -locale en_US_roman -gmt 1 -base 31536000 +} 31536000 +test clock-21.4 {parse ddd} { + clock scan {365} -format {%j} -locale en_US_roman -gmt 1 -base 31536000 +} 62985600 +test clock-21.5 {seconds take precedence over ddd} { + list [clock scan {0 002} -format {%s %j} -gmt true -base 0] \ + [clock scan {002 0} -format {%j %s} -gmt true -base 0] +} {0 0} +test clock-21.6 {julian day takes precedence over yyddd} { + list [clock scan {2440588 002} -format {%J %j} -gmt true -base 0] \ + [clock scan {002 2440588} -format {%j %J} -gmt true -base 0] +} {0 0} +test clock-21.7 {yyyyWwwd over ddd} { + list [clock scan {1970W014 002} -format {%GW%V%u %j} -gmt true -base 0] \ + [clock scan {002 1970W014} -format {%j %GW%V%u} -gmt true -base 0] +} {0 0} +test clock-21.8 {yyWwwd over ddd} { + list [clock scan {70W014 002} -format {%gW%V%u %j} -gmt true -base 0] \ + [clock scan {002 70W014} -format {%j %gW%V%u} -gmt true -base 0] +} {0 0} + +# BEGIN testcases22 + +# Test parsing of Wwwd + +test clock-22.1 {parse Wwwd} { + clock scan {W09 Sun} -format {W%V %a} -locale en_US_roman -gmt 1 -base 259200 +} 5097600 +test clock-22.2 {parse Wwwd} { + clock scan {W09 Sunday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 259200 +} 5097600 +test clock-22.3 {parse Wwwd} { + clock scan {W09 7} -format {W%V %u} -locale en_US_roman -gmt 1 -base 259200 +} 5097600 +test clock-22.4 {parse Wwwd} { + clock scan {W09 0} -format {W%V %w} -locale en_US_roman -gmt 1 -base 259200 +} 5097600 +test clock-22.5 {parse Wwwd} { + clock scan {W09 vii} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 259200 +} 5097600 +test clock-22.6 {parse Wwwd} { + clock scan {W09 ?} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 259200 +} 5097600 +test clock-22.7 {parse Wwwd} { + clock scan {W14 Tue} -format {W%V %a} -locale en_US_roman -gmt 1 -base 259200 +} 7689600 +test clock-22.8 {parse Wwwd} { + clock scan {W14 Tuesday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 259200 +} 7689600 +test clock-22.9 {parse Wwwd} { + clock scan {W14 2} -format {W%V %u} -locale en_US_roman -gmt 1 -base 259200 +} 7689600 +test clock-22.10 {parse Wwwd} { + clock scan {W14 2} -format {W%V %w} -locale en_US_roman -gmt 1 -base 259200 +} 7689600 +test clock-22.11 {parse Wwwd} { + clock scan {W14 ii} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 259200 +} 7689600 +test clock-22.12 {parse Wwwd} { + clock scan {W14 ii} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 259200 +} 7689600 +test clock-22.13 {parse Wwwd} { + clock scan {W40 Thu} -format {W%V %a} -locale en_US_roman -gmt 1 -base 259200 +} 23587200 +test clock-22.14 {parse Wwwd} { + clock scan {W40 Thursday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 259200 +} 23587200 +test clock-22.15 {parse Wwwd} { + clock scan {W40 4} -format {W%V %u} -locale en_US_roman -gmt 1 -base 259200 +} 23587200 +test clock-22.16 {parse Wwwd} { + clock scan {W40 4} -format {W%V %w} -locale en_US_roman -gmt 1 -base 259200 +} 23587200 +test clock-22.17 {parse Wwwd} { + clock scan {W40 iv} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 259200 +} 23587200 +test clock-22.18 {parse Wwwd} { + clock scan {W40 iv} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 259200 +} 23587200 +test clock-22.19 {parse Wwwd} { + clock scan {W44 Sat} -format {W%V %a} -locale en_US_roman -gmt 1 -base 259200 +} 26179200 +test clock-22.20 {parse Wwwd} { + clock scan {W44 Saturday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 259200 +} 26179200 +test clock-22.21 {parse Wwwd} { + clock scan {W44 6} -format {W%V %u} -locale en_US_roman -gmt 1 -base 259200 +} 26179200 +test clock-22.22 {parse Wwwd} { + clock scan {W44 6} -format {W%V %w} -locale en_US_roman -gmt 1 -base 259200 +} 26179200 +test clock-22.23 {parse Wwwd} { + clock scan {W44 vi} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 259200 +} 26179200 +test clock-22.24 {parse Wwwd} { + clock scan {W44 vi} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 259200 +} 26179200 +test clock-22.25 {parse Wwwd} { + clock scan {W09 Mon} -format {W%V %a} -locale en_US_roman -gmt 1 -base 31795200 +} 36633600 +test clock-22.26 {parse Wwwd} { + clock scan {W09 Monday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 31795200 +} 36633600 +test clock-22.27 {parse Wwwd} { + clock scan {W09 1} -format {W%V %u} -locale en_US_roman -gmt 1 -base 31795200 +} 36633600 +test clock-22.28 {parse Wwwd} { + clock scan {W09 1} -format {W%V %w} -locale en_US_roman -gmt 1 -base 31795200 +} 36633600 +test clock-22.29 {parse Wwwd} { + clock scan {W09 i} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 31795200 +} 36633600 +test clock-22.30 {parse Wwwd} { + clock scan {W09 i} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 31795200 +} 36633600 +test clock-22.31 {parse Wwwd} { + clock scan {W13 Wed} -format {W%V %a} -locale en_US_roman -gmt 1 -base 31795200 +} 39225600 +test clock-22.32 {parse Wwwd} { + clock scan {W13 Wednesday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 31795200 +} 39225600 +test clock-22.33 {parse Wwwd} { + clock scan {W13 3} -format {W%V %u} -locale en_US_roman -gmt 1 -base 31795200 +} 39225600 +test clock-22.34 {parse Wwwd} { + clock scan {W13 3} -format {W%V %w} -locale en_US_roman -gmt 1 -base 31795200 +} 39225600 +test clock-22.35 {parse Wwwd} { + clock scan {W13 iii} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 31795200 +} 39225600 +test clock-22.36 {parse Wwwd} { + clock scan {W13 iii} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 31795200 +} 39225600 +test clock-22.37 {parse Wwwd} { + clock scan {W39 Fri} -format {W%V %a} -locale en_US_roman -gmt 1 -base 31795200 +} 55123200 +test clock-22.38 {parse Wwwd} { + clock scan {W39 Friday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 31795200 +} 55123200 +test clock-22.39 {parse Wwwd} { + clock scan {W39 5} -format {W%V %u} -locale en_US_roman -gmt 1 -base 31795200 +} 55123200 +test clock-22.40 {parse Wwwd} { + clock scan {W39 5} -format {W%V %w} -locale en_US_roman -gmt 1 -base 31795200 +} 55123200 +test clock-22.41 {parse Wwwd} { + clock scan {W39 v} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 31795200 +} 55123200 +test clock-22.42 {parse Wwwd} { + clock scan {W39 v} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 31795200 +} 55123200 +test clock-22.43 {parse Wwwd} { + clock scan {W43 Sun} -format {W%V %a} -locale en_US_roman -gmt 1 -base 31795200 +} 57715200 +test clock-22.44 {parse Wwwd} { + clock scan {W43 Sunday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 31795200 +} 57715200 +test clock-22.45 {parse Wwwd} { + clock scan {W43 7} -format {W%V %u} -locale en_US_roman -gmt 1 -base 31795200 +} 57715200 +test clock-22.46 {parse Wwwd} { + clock scan {W43 0} -format {W%V %w} -locale en_US_roman -gmt 1 -base 31795200 +} 57715200 +test clock-22.47 {parse Wwwd} { + clock scan {W43 vii} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 31795200 +} 57715200 +test clock-22.48 {parse Wwwd} { + clock scan {W43 ?} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 31795200 +} 57715200 +test clock-22.49 {parse Wwwd} { + clock scan {W09 Wed} -format {W%V %a} -locale en_US_roman -gmt 1 -base 946944000 +} 951868800 +test clock-22.50 {parse Wwwd} { + clock scan {W09 Wednesday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 946944000 +} 951868800 +test clock-22.51 {parse Wwwd} { + clock scan {W09 3} -format {W%V %u} -locale en_US_roman -gmt 1 -base 946944000 +} 951868800 +test clock-22.52 {parse Wwwd} { + clock scan {W09 3} -format {W%V %w} -locale en_US_roman -gmt 1 -base 946944000 +} 951868800 +test clock-22.53 {parse Wwwd} { + clock scan {W09 iii} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 946944000 +} 951868800 +test clock-22.54 {parse Wwwd} { + clock scan {W09 iii} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 946944000 +} 951868800 +test clock-22.55 {parse Wwwd} { + clock scan {W13 Fri} -format {W%V %a} -locale en_US_roman -gmt 1 -base 946944000 +} 954460800 +test clock-22.56 {parse Wwwd} { + clock scan {W13 Friday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 946944000 +} 954460800 +test clock-22.57 {parse Wwwd} { + clock scan {W13 5} -format {W%V %u} -locale en_US_roman -gmt 1 -base 946944000 +} 954460800 +test clock-22.58 {parse Wwwd} { + clock scan {W13 5} -format {W%V %w} -locale en_US_roman -gmt 1 -base 946944000 +} 954460800 +test clock-22.59 {parse Wwwd} { + clock scan {W13 v} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 946944000 +} 954460800 +test clock-22.60 {parse Wwwd} { + clock scan {W13 v} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 946944000 +} 954460800 +test clock-22.61 {parse Wwwd} { + clock scan {W39 Sun} -format {W%V %a} -locale en_US_roman -gmt 1 -base 946944000 +} 970358400 +test clock-22.62 {parse Wwwd} { + clock scan {W39 Sunday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 946944000 +} 970358400 +test clock-22.63 {parse Wwwd} { + clock scan {W39 7} -format {W%V %u} -locale en_US_roman -gmt 1 -base 946944000 +} 970358400 +test clock-22.64 {parse Wwwd} { + clock scan {W39 0} -format {W%V %w} -locale en_US_roman -gmt 1 -base 946944000 +} 970358400 +test clock-22.65 {parse Wwwd} { + clock scan {W39 vii} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 946944000 +} 970358400 +test clock-22.66 {parse Wwwd} { + clock scan {W39 ?} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 946944000 +} 970358400 +test clock-22.67 {parse Wwwd} { + clock scan {W44 Tue} -format {W%V %a} -locale en_US_roman -gmt 1 -base 946944000 +} 972950400 +test clock-22.68 {parse Wwwd} { + clock scan {W44 Tuesday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 946944000 +} 972950400 +test clock-22.69 {parse Wwwd} { + clock scan {W44 2} -format {W%V %u} -locale en_US_roman -gmt 1 -base 946944000 +} 972950400 +test clock-22.70 {parse Wwwd} { + clock scan {W44 2} -format {W%V %w} -locale en_US_roman -gmt 1 -base 946944000 +} 972950400 +test clock-22.71 {parse Wwwd} { + clock scan {W44 ii} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 946944000 +} 972950400 +test clock-22.72 {parse Wwwd} { + clock scan {W44 ii} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 946944000 +} 972950400 +test clock-22.73 {parse Wwwd} { + clock scan {W09 Thu} -format {W%V %a} -locale en_US_roman -gmt 1 -base 978566400 +} 983404800 +test clock-22.74 {parse Wwwd} { + clock scan {W09 Thursday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 978566400 +} 983404800 +test clock-22.75 {parse Wwwd} { + clock scan {W09 4} -format {W%V %u} -locale en_US_roman -gmt 1 -base 978566400 +} 983404800 +test clock-22.76 {parse Wwwd} { + clock scan {W09 4} -format {W%V %w} -locale en_US_roman -gmt 1 -base 978566400 +} 983404800 +test clock-22.77 {parse Wwwd} { + clock scan {W09 iv} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 978566400 +} 983404800 +test clock-22.78 {parse Wwwd} { + clock scan {W09 iv} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 978566400 +} 983404800 +test clock-22.79 {parse Wwwd} { + clock scan {W13 Sat} -format {W%V %a} -locale en_US_roman -gmt 1 -base 978566400 +} 985996800 +test clock-22.80 {parse Wwwd} { + clock scan {W13 Saturday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 978566400 +} 985996800 +test clock-22.81 {parse Wwwd} { + clock scan {W13 6} -format {W%V %u} -locale en_US_roman -gmt 1 -base 978566400 +} 985996800 +test clock-22.82 {parse Wwwd} { + clock scan {W13 6} -format {W%V %w} -locale en_US_roman -gmt 1 -base 978566400 +} 985996800 +test clock-22.83 {parse Wwwd} { + clock scan {W13 vi} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 978566400 +} 985996800 +test clock-22.84 {parse Wwwd} { + clock scan {W13 vi} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 978566400 +} 985996800 +test clock-22.85 {parse Wwwd} { + clock scan {W40 Mon} -format {W%V %a} -locale en_US_roman -gmt 1 -base 978566400 +} 1001894400 +test clock-22.86 {parse Wwwd} { + clock scan {W40 Monday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 978566400 +} 1001894400 +test clock-22.87 {parse Wwwd} { + clock scan {W40 1} -format {W%V %u} -locale en_US_roman -gmt 1 -base 978566400 +} 1001894400 +test clock-22.88 {parse Wwwd} { + clock scan {W40 1} -format {W%V %w} -locale en_US_roman -gmt 1 -base 978566400 +} 1001894400 +test clock-22.89 {parse Wwwd} { + clock scan {W40 i} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 978566400 +} 1001894400 +test clock-22.90 {parse Wwwd} { + clock scan {W40 i} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 978566400 +} 1001894400 +test clock-22.91 {parse Wwwd} { + clock scan {W44 Wed} -format {W%V %a} -locale en_US_roman -gmt 1 -base 978566400 +} 1004486400 +test clock-22.92 {parse Wwwd} { + clock scan {W44 Wednesday} -format {W%V %A} -locale en_US_roman -gmt 1 -base 978566400 +} 1004486400 +test clock-22.93 {parse Wwwd} { + clock scan {W44 3} -format {W%V %u} -locale en_US_roman -gmt 1 -base 978566400 +} 1004486400 +test clock-22.94 {parse Wwwd} { + clock scan {W44 3} -format {W%V %w} -locale en_US_roman -gmt 1 -base 978566400 +} 1004486400 +test clock-22.95 {parse Wwwd} { + clock scan {W44 iii} -format {W%V %Ou} -locale en_US_roman -gmt 1 -base 978566400 +} 1004486400 +test clock-22.96 {parse Wwwd} { + clock scan {W44 iii} -format {W%V %Ow} -locale en_US_roman -gmt 1 -base 978566400 +} 1004486400 +# END testcases22 + +# Test precedence of Wwwd +test clock-23.1 {seconds take precedence over Wwwd} { + list [clock scan {0 W024} -format {%s W%V%u} -gmt true -base 0] \ + [clock scan {W024 0} -format {W%V%u %s} -gmt true -base 0] +} {0 0} +test clock-23.2 {julian day takes precedence over Wwwd} { + list [clock scan {2440588 W024} -format {%J W%V%u} -gmt true -base 0] \ + [clock scan {W024 2440588} -format {W%V%u %J} -gmt true -base 0] +} {0 0} +test clock-23.3 {Wwwd precedence below yyyymmdd} { + list [clock scan {19700101 W014} -format {%Y%m%d W%V%u} -gmt true -base 0] \ + [clock scan {W014 19700101} -format {W%V%u %Y%m%d} -gmt true -base 0] +} {0 0} +test clock-23.4 {Wwwd precedence below yyyyddd} { + list [clock scan {1970001 W014} -format {%Y%j W%V%u} -gmt true -base 0] \ + [clock scan {W014 1970001} -format {W%V%u %Y%j} -gmt true -base 0] +} {0 0} +test clock-23.5 {Wwwd precedence below yymmdd} { + list [clock scan {700101 W014} -format {%y%m%d W%V%u} -gmt true -base 0] \ + [clock scan {W014 700101} -format {W%V%u %y%m%d} -gmt true -base 0] +} {0 0} +test clock-23.6 {Wwwd precedence below yyddd} { + list [clock scan {70001 W014} -format {%y%j W%V%u} -gmt true -base 0] \ + [clock scan {W014 70001} -format {W%V%u %y%j} -gmt true -base 0] +} {0 0} + +# BEGIN testcases24 + +# Test parsing of naked day-of-month + +test clock-24.1 {parse naked day of month} { + clock scan 02 -format %d -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-24.2 {parse naked day of month} { + clock scan ii -format %Od -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-24.3 {parse naked day of month} { + clock scan { 2} -format %e -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-24.4 {parse naked day of month} { + clock scan ii -format %Oe -locale en_US_roman -base 0 -gmt 1 +} 86400 +test clock-24.5 {parse naked day of month} { + clock scan 28 -format %d -locale en_US_roman -base 0 -gmt 1 +} 2332800 +test clock-24.6 {parse naked day of month} { + clock scan xxviii -format %Od -locale en_US_roman -base 0 -gmt 1 +} 2332800 +test clock-24.7 {parse naked day of month} { + clock scan 28 -format %e -locale en_US_roman -base 0 -gmt 1 +} 2332800 +test clock-24.8 {parse naked day of month} { + clock scan xxviii -format %Oe -locale en_US_roman -base 0 -gmt 1 +} 2332800 +test clock-24.9 {parse naked day of month} { + clock scan 02 -format %d -locale en_US_roman -base 28857600 -gmt 1 +} 28944000 +test clock-24.10 {parse naked day of month} { + clock scan ii -format %Od -locale en_US_roman -base 28857600 -gmt 1 +} 28944000 +test clock-24.11 {parse naked day of month} { + clock scan { 2} -format %e -locale en_US_roman -base 28857600 -gmt 1 +} 28944000 +test clock-24.12 {parse naked day of month} { + clock scan ii -format %Oe -locale en_US_roman -base 28857600 -gmt 1 +} 28944000 +test clock-24.13 {parse naked day of month} { + clock scan 28 -format %d -locale en_US_roman -base 28857600 -gmt 1 +} 31190400 +test clock-24.14 {parse naked day of month} { + clock scan xxviii -format %Od -locale en_US_roman -base 28857600 -gmt 1 +} 31190400 +test clock-24.15 {parse naked day of month} { + clock scan 28 -format %e -locale en_US_roman -base 28857600 -gmt 1 +} 31190400 +test clock-24.16 {parse naked day of month} { + clock scan xxviii -format %Oe -locale en_US_roman -base 28857600 -gmt 1 +} 31190400 +test clock-24.17 {parse naked day of month} { + clock scan 02 -format %d -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-24.18 {parse naked day of month} { + clock scan ii -format %Od -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-24.19 {parse naked day of month} { + clock scan { 2} -format %e -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-24.20 {parse naked day of month} { + clock scan ii -format %Oe -locale en_US_roman -base 946684800 -gmt 1 +} 946771200 +test clock-24.21 {parse naked day of month} { + clock scan 28 -format %d -locale en_US_roman -base 946684800 -gmt 1 +} 949017600 +test clock-24.22 {parse naked day of month} { + clock scan xxviii -format %Od -locale en_US_roman -base 946684800 -gmt 1 +} 949017600 +test clock-24.23 {parse naked day of month} { + clock scan 28 -format %e -locale en_US_roman -base 946684800 -gmt 1 +} 949017600 +test clock-24.24 {parse naked day of month} { + clock scan xxviii -format %Oe -locale en_US_roman -base 946684800 -gmt 1 +} 949017600 +test clock-24.25 {parse naked day of month} { + clock scan 02 -format %d -locale en_US_roman -base 975628800 -gmt 1 +} 975715200 +test clock-24.26 {parse naked day of month} { + clock scan ii -format %Od -locale en_US_roman -base 975628800 -gmt 1 +} 975715200 +test clock-24.27 {parse naked day of month} { + clock scan { 2} -format %e -locale en_US_roman -base 975628800 -gmt 1 +} 975715200 +test clock-24.28 {parse naked day of month} { + clock scan ii -format %Oe -locale en_US_roman -base 975628800 -gmt 1 +} 975715200 +test clock-24.29 {parse naked day of month} { + clock scan 28 -format %d -locale en_US_roman -base 975628800 -gmt 1 +} 977961600 +test clock-24.30 {parse naked day of month} { + clock scan xxviii -format %Od -locale en_US_roman -base 975628800 -gmt 1 +} 977961600 +test clock-24.31 {parse naked day of month} { + clock scan 28 -format %e -locale en_US_roman -base 975628800 -gmt 1 +} 977961600 +test clock-24.32 {parse naked day of month} { + clock scan xxviii -format %Oe -locale en_US_roman -base 975628800 -gmt 1 +} 977961600 +# END testcases24 + +test clock-25.1 {seconds take precedence over dd} { + list [clock scan {0 02} -format {%s %d} -gmt true -base 0] \ + [clock scan {02 0} -format {%d %s} -gmt true -base 0] +} {0 0} +test clock-25.2 {julian day takes precedence over dd} { + list [clock scan {2440588 02} -format {%J %d} -gmt true -base 0] \ + [clock scan {02 2440588} -format {%d %J} -gmt true -base 0] +} {0 0} +test clock-25.3 {yyyyddd over dd} { + list [clock scan {1970001 02} -format {%Y%j %d} -gmt true -base 0] \ + [clock scan {02 1970001} -format {%d %Y%j} -gmt true -base 0] +} {0 0} +test clock-25.4 {yyyyWwwd over dd} { + list [clock scan {1970W014 02} -format {%GW%V%u %d} -gmt true -base 0] \ + [clock scan {02 1970W014} -format {%d %GW%V%u} -gmt true -base 0] +} {0 0} +test clock-25.5 {yyWwwd over dd} { + list [clock scan {70W014 02} -format {%gW%V%u %d} -gmt true -base 0] \ + [clock scan {02 70W014} -format {%d %gW%V%u} -gmt true -base 0] +} {0 0} +test clock-25.6 {yyddd over dd} { + list [clock scan {70001 02} -format {%y%j %d} -gmt true -base 0] \ + [clock scan {02 70001} -format {%d %y%j} -gmt true -base 0] +} {0 0} +test clock-25.7 {ddd over dd} { + list [clock scan {001 02} -format {%j %d} -gmt true -base 0] \ + [clock scan {02 001} -format {%d %j} -gmt true -base 0] +} {0 0} + +# BEGIN testcases26 + +# Test parsing of naked day of week + +test clock-26.1 {parse naked day of week} { + clock scan Mon -format %a -locale en_US_roman -gmt 1 -base 0 +} -259200 +test clock-26.2 {parse naked day of week} { + clock scan Monday -format %A -locale en_US_roman -gmt 1 -base 0 +} -259200 +test clock-26.3 {parse naked day of week} { + clock scan 1 -format %u -locale en_US_roman -gmt 1 -base 0 +} -259200 +test clock-26.4 {parse naked day of week} { + clock scan 1 -format %w -locale en_US_roman -gmt 1 -base 0 +} -259200 +test clock-26.5 {parse naked day of week} { + clock scan i -format %Ou -locale en_US_roman -gmt 1 -base 0 +} -259200 +test clock-26.6 {parse naked day of week} { + clock scan i -format %Ow -locale en_US_roman -gmt 1 -base 0 +} -259200 +test clock-26.7 {parse naked day of week} { + clock scan Sun -format %a -locale en_US_roman -gmt 1 -base 0 +} 259200 +test clock-26.8 {parse naked day of week} { + clock scan Sunday -format %A -locale en_US_roman -gmt 1 -base 0 +} 259200 +test clock-26.9 {parse naked day of week} { + clock scan 7 -format %u -locale en_US_roman -gmt 1 -base 0 +} 259200 +test clock-26.10 {parse naked day of week} { + clock scan 0 -format %w -locale en_US_roman -gmt 1 -base 0 +} 259200 +test clock-26.11 {parse naked day of week} { + clock scan vii -format %Ou -locale en_US_roman -gmt 1 -base 0 +} 259200 +test clock-26.12 {parse naked day of week} { + clock scan ? -format %Ow -locale en_US_roman -gmt 1 -base 0 +} 259200 +test clock-26.13 {parse naked day of week} { + clock scan Mon -format %a -locale en_US_roman -gmt 1 -base 30844800 +} 30585600 +test clock-26.14 {parse naked day of week} { + clock scan Monday -format %A -locale en_US_roman -gmt 1 -base 30844800 +} 30585600 +test clock-26.15 {parse naked day of week} { + clock scan 1 -format %u -locale en_US_roman -gmt 1 -base 30844800 +} 30585600 +test clock-26.16 {parse naked day of week} { + clock scan 1 -format %w -locale en_US_roman -gmt 1 -base 30844800 +} 30585600 +test clock-26.17 {parse naked day of week} { + clock scan i -format %Ou -locale en_US_roman -gmt 1 -base 30844800 +} 30585600 +test clock-26.18 {parse naked day of week} { + clock scan i -format %Ow -locale en_US_roman -gmt 1 -base 30844800 +} 30585600 +test clock-26.19 {parse naked day of week} { + clock scan Sun -format %a -locale en_US_roman -gmt 1 -base 30844800 +} 31104000 +test clock-26.20 {parse naked day of week} { + clock scan Sunday -format %A -locale en_US_roman -gmt 1 -base 30844800 +} 31104000 +test clock-26.21 {parse naked day of week} { + clock scan 7 -format %u -locale en_US_roman -gmt 1 -base 30844800 +} 31104000 +test clock-26.22 {parse naked day of week} { + clock scan 0 -format %w -locale en_US_roman -gmt 1 -base 30844800 +} 31104000 +test clock-26.23 {parse naked day of week} { + clock scan vii -format %Ou -locale en_US_roman -gmt 1 -base 30844800 +} 31104000 +test clock-26.24 {parse naked day of week} { + clock scan ? -format %Ow -locale en_US_roman -gmt 1 -base 30844800 +} 31104000 +test clock-26.25 {parse naked day of week} { + clock scan Mon -format %a -locale en_US_roman -gmt 1 -base 978566400 +} 978307200 +test clock-26.26 {parse naked day of week} { + clock scan Monday -format %A -locale en_US_roman -gmt 1 -base 978566400 +} 978307200 +test clock-26.27 {parse naked day of week} { + clock scan 1 -format %u -locale en_US_roman -gmt 1 -base 978566400 +} 978307200 +test clock-26.28 {parse naked day of week} { + clock scan 1 -format %w -locale en_US_roman -gmt 1 -base 978566400 +} 978307200 +test clock-26.29 {parse naked day of week} { + clock scan i -format %Ou -locale en_US_roman -gmt 1 -base 978566400 +} 978307200 +test clock-26.30 {parse naked day of week} { + clock scan i -format %Ow -locale en_US_roman -gmt 1 -base 978566400 +} 978307200 +test clock-26.31 {parse naked day of week} { + clock scan Sun -format %a -locale en_US_roman -gmt 1 -base 978566400 +} 978825600 +test clock-26.32 {parse naked day of week} { + clock scan Sunday -format %A -locale en_US_roman -gmt 1 -base 978566400 +} 978825600 +test clock-26.33 {parse naked day of week} { + clock scan 7 -format %u -locale en_US_roman -gmt 1 -base 978566400 +} 978825600 +test clock-26.34 {parse naked day of week} { + clock scan 0 -format %w -locale en_US_roman -gmt 1 -base 978566400 +} 978825600 +test clock-26.35 {parse naked day of week} { + clock scan vii -format %Ou -locale en_US_roman -gmt 1 -base 978566400 +} 978825600 +test clock-26.36 {parse naked day of week} { + clock scan ? -format %Ow -locale en_US_roman -gmt 1 -base 978566400 +} 978825600 +test clock-26.37 {parse naked day of week} { + clock scan Mon -format %a -locale en_US_roman -gmt 1 -base 1009411200 +} 1009152000 +test clock-26.38 {parse naked day of week} { + clock scan Monday -format %A -locale en_US_roman -gmt 1 -base 1009411200 +} 1009152000 +test clock-26.39 {parse naked day of week} { + clock scan 1 -format %u -locale en_US_roman -gmt 1 -base 1009411200 +} 1009152000 +test clock-26.40 {parse naked day of week} { + clock scan 1 -format %w -locale en_US_roman -gmt 1 -base 1009411200 +} 1009152000 +test clock-26.41 {parse naked day of week} { + clock scan i -format %Ou -locale en_US_roman -gmt 1 -base 1009411200 +} 1009152000 +test clock-26.42 {parse naked day of week} { + clock scan i -format %Ow -locale en_US_roman -gmt 1 -base 1009411200 +} 1009152000 +test clock-26.43 {parse naked day of week} { + clock scan Sun -format %a -locale en_US_roman -gmt 1 -base 1009411200 +} 1009670400 +test clock-26.44 {parse naked day of week} { + clock scan Sunday -format %A -locale en_US_roman -gmt 1 -base 1009411200 +} 1009670400 +test clock-26.45 {parse naked day of week} { + clock scan 7 -format %u -locale en_US_roman -gmt 1 -base 1009411200 +} 1009670400 +test clock-26.46 {parse naked day of week} { + clock scan 0 -format %w -locale en_US_roman -gmt 1 -base 1009411200 +} 1009670400 +test clock-26.47 {parse naked day of week} { + clock scan vii -format %Ou -locale en_US_roman -gmt 1 -base 1009411200 +} 1009670400 +test clock-26.48 {parse naked day of week} { + clock scan ? -format %Ow -locale en_US_roman -gmt 1 -base 1009411200 +} 1009670400 +# END testcases26 + +test clock-27.1 {seconds take precedence over naked weekday} { + list [clock scan {0 1} -format {%s %u} -gmt true -base 0] \ + [clock scan {1 0} -format {%u %s} -gmt true -base 0] +} {0 0} +test clock-27.2 {julian day takes precedence over naked weekday} { + list [clock scan {2440588 1} -format {%J %u} -gmt true -base 0] \ + [clock scan {1 2440588} -format {%u %J} -gmt true -base 0] +} {0 0} +test clock-27.3 {yyyymmdd over naked weekday} { + list [clock scan {19700101 1} -format {%Y%m%d %u} -gmt true -base 0] \ + [clock scan {1 19700101} -format {%u %Y%m%d} -gmt true -base 0] +} {0 0} +test clock-27.4 {yyyyddd over naked weekday} { + list [clock scan {1970001 1} -format {%Y%j %u} -gmt true -base 0] \ + [clock scan {1 1970001} -format {%u %Y%j} -gmt true -base 0] +} {0 0} +test clock-27.5 {yymmdd over naked weekday} { + list [clock scan {700101 1} -format {%y%m%d %u} -gmt true -base 0] \ + [clock scan {1 700101} -format {%u %y%m%d} -gmt true -base 0] +} {0 0} +test clock-27.6 {yyddd over naked weekday} { + list [clock scan {70001 1} -format {%y%j %u} -gmt true -base 0] \ + [clock scan {1 70001} -format {%u %y%j} -gmt true -base 0] +} {0 0} +test clock-27.7 {mmdd over naked weekday} { + list [clock scan {0101 1} -format {%m%d %u} -gmt true -base 0] \ + [clock scan {1 0101} -format {%u %m%d} -gmt true -base 0] +} {0 0} +test clock-27.8 {ddd over naked weekday} { + list [clock scan {001 1} -format {%j %u} -gmt true -base 0] \ + [clock scan {1 001} -format {%u %j} -gmt true -base 0] +} {0 0} +test clock-27.9 {naked day of month over naked weekday} { + list [clock scan {01 1} -format {%d %u} -gmt true -base 0] \ + [clock scan {1 01} -format {%u %d} -gmt true -base 0] +} {0 0} + +test clock-28.1 {base date} { + clock scan {} -format {} -gmt true -base 1234567890 +} 1234483200 + +# BEGIN testcases29 + +# Test parsing of time of day + +test clock-29.1 {time parsing} { + clock scan {2440588 00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H } +} 0 +test clock-29.2 {time parsing} { + clock scan {2440588 00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 0 +test clock-29.3 {time parsing} { + clock scan {2440588 00:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 0 +test clock-29.4 {time parsing} { + clock scan {2440588 00:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 0 +test clock-29.5 {time parsing} { + clock scan {2440588 00:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 0 +test clock-29.6 {time parsing} { + clock scan {2440588 0 } \ + -gmt true -locale en_US_roman \ + -format {%J %k } +} 0 +test clock-29.7 {time parsing} { + clock scan {2440588 0:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 0 +test clock-29.8 {time parsing} { + clock scan {2440588 0:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 0 +test clock-29.9 {time parsing} { + clock scan {2440588 0:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 0 +test clock-29.10 {time parsing} { + clock scan {2440588 0:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 0 +test clock-29.11 {time parsing} { + clock scan {2440588 ? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH } +} 0 +test clock-29.12 {time parsing} { + clock scan {2440588 ?:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 0 +test clock-29.13 {time parsing} { + clock scan {2440588 ?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 0 +test clock-29.14 {time parsing} { + clock scan {2440588 ?:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 0 +test clock-29.15 {time parsing} { + clock scan {2440588 ?:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 0 +test clock-29.16 {time parsing} { + clock scan {2440588 ? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok } +} 0 +test clock-29.17 {time parsing} { + clock scan {2440588 ?:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 0 +test clock-29.18 {time parsing} { + clock scan {2440588 ?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 0 +test clock-29.19 {time parsing} { + clock scan {2440588 ?:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 0 +test clock-29.20 {time parsing} { + clock scan {2440588 ?:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 0 +test clock-29.21 {time parsing} { + clock scan {2440588 12 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I %p} +} 0 +test clock-29.22 {time parsing} { + clock scan {2440588 12:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 0 +test clock-29.23 {time parsing} { + clock scan {2440588 12:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 0 +test clock-29.24 {time parsing} { + clock scan {2440588 12:00:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 0 +test clock-29.25 {time parsing} { + clock scan {2440588 12:?:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 0 +test clock-29.26 {time parsing} { + clock scan {2440588 12 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l %p} +} 0 +test clock-29.27 {time parsing} { + clock scan {2440588 12:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 0 +test clock-29.28 {time parsing} { + clock scan {2440588 12:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 0 +test clock-29.29 {time parsing} { + clock scan {2440588 12:00:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 0 +test clock-29.30 {time parsing} { + clock scan {2440588 12:?:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 0 +test clock-29.31 {time parsing} { + clock scan {2440588 xii AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI %p} +} 0 +test clock-29.32 {time parsing} { + clock scan {2440588 xii:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 0 +test clock-29.33 {time parsing} { + clock scan {2440588 xii:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 0 +test clock-29.34 {time parsing} { + clock scan {2440588 xii:00:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 0 +test clock-29.35 {time parsing} { + clock scan {2440588 xii:?:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 0 +test clock-29.36 {time parsing} { + clock scan {2440588 xii AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol %p} +} 0 +test clock-29.37 {time parsing} { + clock scan {2440588 xii:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 0 +test clock-29.38 {time parsing} { + clock scan {2440588 xii:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 0 +test clock-29.39 {time parsing} { + clock scan {2440588 xii:00:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 0 +test clock-29.40 {time parsing} { + clock scan {2440588 xii:?:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 0 +test clock-29.41 {time parsing} { + clock scan {2440588 12 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I %P} +} 0 +test clock-29.42 {time parsing} { + clock scan {2440588 12:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 0 +test clock-29.43 {time parsing} { + clock scan {2440588 12:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 0 +test clock-29.44 {time parsing} { + clock scan {2440588 12:00:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 0 +test clock-29.45 {time parsing} { + clock scan {2440588 12:?:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 0 +test clock-29.46 {time parsing} { + clock scan {2440588 12 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l %P} +} 0 +test clock-29.47 {time parsing} { + clock scan {2440588 12:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 0 +test clock-29.48 {time parsing} { + clock scan {2440588 12:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 0 +test clock-29.49 {time parsing} { + clock scan {2440588 12:00:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 0 +test clock-29.50 {time parsing} { + clock scan {2440588 12:?:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 0 +test clock-29.51 {time parsing} { + clock scan {2440588 xii am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI %P} +} 0 +test clock-29.52 {time parsing} { + clock scan {2440588 xii:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 0 +test clock-29.53 {time parsing} { + clock scan {2440588 xii:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 0 +test clock-29.54 {time parsing} { + clock scan {2440588 xii:00:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 0 +test clock-29.55 {time parsing} { + clock scan {2440588 xii:?:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 0 +test clock-29.56 {time parsing} { + clock scan {2440588 xii am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol %P} +} 0 +test clock-29.57 {time parsing} { + clock scan {2440588 xii:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 0 +test clock-29.58 {time parsing} { + clock scan {2440588 xii:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 0 +test clock-29.59 {time parsing} { + clock scan {2440588 xii:00:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 0 +test clock-29.60 {time parsing} { + clock scan {2440588 xii:?:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 0 +test clock-29.61 {time parsing} { + clock scan {2440588 00:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 1 +test clock-29.62 {time parsing} { + clock scan {2440588 00:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 1 +test clock-29.63 {time parsing} { + clock scan {2440588 0:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 1 +test clock-29.64 {time parsing} { + clock scan {2440588 0:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 1 +test clock-29.65 {time parsing} { + clock scan {2440588 ?:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 1 +test clock-29.66 {time parsing} { + clock scan {2440588 ?:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 1 +test clock-29.67 {time parsing} { + clock scan {2440588 ?:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 1 +test clock-29.68 {time parsing} { + clock scan {2440588 ?:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 1 +test clock-29.69 {time parsing} { + clock scan {2440588 12:00:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 1 +test clock-29.70 {time parsing} { + clock scan {2440588 12:?:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 1 +test clock-29.71 {time parsing} { + clock scan {2440588 12:00:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 1 +test clock-29.72 {time parsing} { + clock scan {2440588 12:?:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 1 +test clock-29.73 {time parsing} { + clock scan {2440588 xii:00:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 1 +test clock-29.74 {time parsing} { + clock scan {2440588 xii:?:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 1 +test clock-29.75 {time parsing} { + clock scan {2440588 xii:00:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 1 +test clock-29.76 {time parsing} { + clock scan {2440588 xii:?:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 1 +test clock-29.77 {time parsing} { + clock scan {2440588 12:00:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 1 +test clock-29.78 {time parsing} { + clock scan {2440588 12:?:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 1 +test clock-29.79 {time parsing} { + clock scan {2440588 12:00:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 1 +test clock-29.80 {time parsing} { + clock scan {2440588 12:?:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 1 +test clock-29.81 {time parsing} { + clock scan {2440588 xii:00:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 1 +test clock-29.82 {time parsing} { + clock scan {2440588 xii:?:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 1 +test clock-29.83 {time parsing} { + clock scan {2440588 xii:00:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 1 +test clock-29.84 {time parsing} { + clock scan {2440588 xii:?:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 1 +test clock-29.85 {time parsing} { + clock scan {2440588 00:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 59 +test clock-29.86 {time parsing} { + clock scan {2440588 00:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 59 +test clock-29.87 {time parsing} { + clock scan {2440588 0:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 59 +test clock-29.88 {time parsing} { + clock scan {2440588 0:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 59 +test clock-29.89 {time parsing} { + clock scan {2440588 ?:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 59 +test clock-29.90 {time parsing} { + clock scan {2440588 ?:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 59 +test clock-29.91 {time parsing} { + clock scan {2440588 ?:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 59 +test clock-29.92 {time parsing} { + clock scan {2440588 ?:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 59 +test clock-29.93 {time parsing} { + clock scan {2440588 12:00:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 59 +test clock-29.94 {time parsing} { + clock scan {2440588 12:?:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 59 +test clock-29.95 {time parsing} { + clock scan {2440588 12:00:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 59 +test clock-29.96 {time parsing} { + clock scan {2440588 12:?:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 59 +test clock-29.97 {time parsing} { + clock scan {2440588 xii:00:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 59 +test clock-29.98 {time parsing} { + clock scan {2440588 xii:?:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 59 +test clock-29.99 {time parsing} { + clock scan {2440588 xii:00:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 59 +test clock-29.100 {time parsing} { + clock scan {2440588 xii:?:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 59 +test clock-29.101 {time parsing} { + clock scan {2440588 12:00:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 59 +test clock-29.102 {time parsing} { + clock scan {2440588 12:?:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 59 +test clock-29.103 {time parsing} { + clock scan {2440588 12:00:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 59 +test clock-29.104 {time parsing} { + clock scan {2440588 12:?:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 59 +test clock-29.105 {time parsing} { + clock scan {2440588 xii:00:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 59 +test clock-29.106 {time parsing} { + clock scan {2440588 xii:?:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 59 +test clock-29.107 {time parsing} { + clock scan {2440588 xii:00:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 59 +test clock-29.108 {time parsing} { + clock scan {2440588 xii:?:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 59 +test clock-29.109 {time parsing} { + clock scan {2440588 00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 60 +test clock-29.110 {time parsing} { + clock scan {2440588 00:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 60 +test clock-29.111 {time parsing} { + clock scan {2440588 00:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 60 +test clock-29.112 {time parsing} { + clock scan {2440588 00:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 60 +test clock-29.113 {time parsing} { + clock scan {2440588 0:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 60 +test clock-29.114 {time parsing} { + clock scan {2440588 0:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 60 +test clock-29.115 {time parsing} { + clock scan {2440588 0:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 60 +test clock-29.116 {time parsing} { + clock scan {2440588 0:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 60 +test clock-29.117 {time parsing} { + clock scan {2440588 ?:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 60 +test clock-29.118 {time parsing} { + clock scan {2440588 ?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 60 +test clock-29.119 {time parsing} { + clock scan {2440588 ?:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 60 +test clock-29.120 {time parsing} { + clock scan {2440588 ?:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 60 +test clock-29.121 {time parsing} { + clock scan {2440588 ?:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 60 +test clock-29.122 {time parsing} { + clock scan {2440588 ?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 60 +test clock-29.123 {time parsing} { + clock scan {2440588 ?:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 60 +test clock-29.124 {time parsing} { + clock scan {2440588 ?:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 60 +test clock-29.125 {time parsing} { + clock scan {2440588 12:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 60 +test clock-29.126 {time parsing} { + clock scan {2440588 12:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 60 +test clock-29.127 {time parsing} { + clock scan {2440588 12:01:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 60 +test clock-29.128 {time parsing} { + clock scan {2440588 12:i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 60 +test clock-29.129 {time parsing} { + clock scan {2440588 12:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 60 +test clock-29.130 {time parsing} { + clock scan {2440588 12:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 60 +test clock-29.131 {time parsing} { + clock scan {2440588 12:01:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 60 +test clock-29.132 {time parsing} { + clock scan {2440588 12:i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 60 +test clock-29.133 {time parsing} { + clock scan {2440588 xii:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 60 +test clock-29.134 {time parsing} { + clock scan {2440588 xii:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 60 +test clock-29.135 {time parsing} { + clock scan {2440588 xii:01:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 60 +test clock-29.136 {time parsing} { + clock scan {2440588 xii:i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 60 +test clock-29.137 {time parsing} { + clock scan {2440588 xii:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 60 +test clock-29.138 {time parsing} { + clock scan {2440588 xii:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 60 +test clock-29.139 {time parsing} { + clock scan {2440588 xii:01:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 60 +test clock-29.140 {time parsing} { + clock scan {2440588 xii:i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 60 +test clock-29.141 {time parsing} { + clock scan {2440588 12:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 60 +test clock-29.142 {time parsing} { + clock scan {2440588 12:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 60 +test clock-29.143 {time parsing} { + clock scan {2440588 12:01:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 60 +test clock-29.144 {time parsing} { + clock scan {2440588 12:i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 60 +test clock-29.145 {time parsing} { + clock scan {2440588 12:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 60 +test clock-29.146 {time parsing} { + clock scan {2440588 12:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 60 +test clock-29.147 {time parsing} { + clock scan {2440588 12:01:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 60 +test clock-29.148 {time parsing} { + clock scan {2440588 12:i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 60 +test clock-29.149 {time parsing} { + clock scan {2440588 xii:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 60 +test clock-29.150 {time parsing} { + clock scan {2440588 xii:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 60 +test clock-29.151 {time parsing} { + clock scan {2440588 xii:01:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 60 +test clock-29.152 {time parsing} { + clock scan {2440588 xii:i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 60 +test clock-29.153 {time parsing} { + clock scan {2440588 xii:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 60 +test clock-29.154 {time parsing} { + clock scan {2440588 xii:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 60 +test clock-29.155 {time parsing} { + clock scan {2440588 xii:01:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 60 +test clock-29.156 {time parsing} { + clock scan {2440588 xii:i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 60 +test clock-29.157 {time parsing} { + clock scan {2440588 00:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 61 +test clock-29.158 {time parsing} { + clock scan {2440588 00:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 61 +test clock-29.159 {time parsing} { + clock scan {2440588 0:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 61 +test clock-29.160 {time parsing} { + clock scan {2440588 0:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 61 +test clock-29.161 {time parsing} { + clock scan {2440588 ?:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 61 +test clock-29.162 {time parsing} { + clock scan {2440588 ?:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 61 +test clock-29.163 {time parsing} { + clock scan {2440588 ?:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 61 +test clock-29.164 {time parsing} { + clock scan {2440588 ?:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 61 +test clock-29.165 {time parsing} { + clock scan {2440588 12:01:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 61 +test clock-29.166 {time parsing} { + clock scan {2440588 12:i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 61 +test clock-29.167 {time parsing} { + clock scan {2440588 12:01:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 61 +test clock-29.168 {time parsing} { + clock scan {2440588 12:i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 61 +test clock-29.169 {time parsing} { + clock scan {2440588 xii:01:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 61 +test clock-29.170 {time parsing} { + clock scan {2440588 xii:i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 61 +test clock-29.171 {time parsing} { + clock scan {2440588 xii:01:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 61 +test clock-29.172 {time parsing} { + clock scan {2440588 xii:i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 61 +test clock-29.173 {time parsing} { + clock scan {2440588 12:01:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 61 +test clock-29.174 {time parsing} { + clock scan {2440588 12:i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 61 +test clock-29.175 {time parsing} { + clock scan {2440588 12:01:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 61 +test clock-29.176 {time parsing} { + clock scan {2440588 12:i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 61 +test clock-29.177 {time parsing} { + clock scan {2440588 xii:01:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 61 +test clock-29.178 {time parsing} { + clock scan {2440588 xii:i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 61 +test clock-29.179 {time parsing} { + clock scan {2440588 xii:01:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 61 +test clock-29.180 {time parsing} { + clock scan {2440588 xii:i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 61 +test clock-29.181 {time parsing} { + clock scan {2440588 00:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 119 +test clock-29.182 {time parsing} { + clock scan {2440588 00:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 119 +test clock-29.183 {time parsing} { + clock scan {2440588 0:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 119 +test clock-29.184 {time parsing} { + clock scan {2440588 0:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 119 +test clock-29.185 {time parsing} { + clock scan {2440588 ?:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 119 +test clock-29.186 {time parsing} { + clock scan {2440588 ?:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 119 +test clock-29.187 {time parsing} { + clock scan {2440588 ?:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 119 +test clock-29.188 {time parsing} { + clock scan {2440588 ?:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 119 +test clock-29.189 {time parsing} { + clock scan {2440588 12:01:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 119 +test clock-29.190 {time parsing} { + clock scan {2440588 12:i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 119 +test clock-29.191 {time parsing} { + clock scan {2440588 12:01:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 119 +test clock-29.192 {time parsing} { + clock scan {2440588 12:i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 119 +test clock-29.193 {time parsing} { + clock scan {2440588 xii:01:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 119 +test clock-29.194 {time parsing} { + clock scan {2440588 xii:i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 119 +test clock-29.195 {time parsing} { + clock scan {2440588 xii:01:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 119 +test clock-29.196 {time parsing} { + clock scan {2440588 xii:i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 119 +test clock-29.197 {time parsing} { + clock scan {2440588 12:01:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 119 +test clock-29.198 {time parsing} { + clock scan {2440588 12:i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 119 +test clock-29.199 {time parsing} { + clock scan {2440588 12:01:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 119 +test clock-29.200 {time parsing} { + clock scan {2440588 12:i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 119 +test clock-29.201 {time parsing} { + clock scan {2440588 xii:01:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 119 +test clock-29.202 {time parsing} { + clock scan {2440588 xii:i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 119 +test clock-29.203 {time parsing} { + clock scan {2440588 xii:01:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 119 +test clock-29.204 {time parsing} { + clock scan {2440588 xii:i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 119 +test clock-29.205 {time parsing} { + clock scan {2440588 00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 3540 +test clock-29.206 {time parsing} { + clock scan {2440588 00:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 3540 +test clock-29.207 {time parsing} { + clock scan {2440588 00:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 3540 +test clock-29.208 {time parsing} { + clock scan {2440588 00:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 3540 +test clock-29.209 {time parsing} { + clock scan {2440588 0:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 3540 +test clock-29.210 {time parsing} { + clock scan {2440588 0:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 3540 +test clock-29.211 {time parsing} { + clock scan {2440588 0:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 3540 +test clock-29.212 {time parsing} { + clock scan {2440588 0:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 3540 +test clock-29.213 {time parsing} { + clock scan {2440588 ?:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 3540 +test clock-29.214 {time parsing} { + clock scan {2440588 ?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 3540 +test clock-29.215 {time parsing} { + clock scan {2440588 ?:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 3540 +test clock-29.216 {time parsing} { + clock scan {2440588 ?:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 3540 +test clock-29.217 {time parsing} { + clock scan {2440588 ?:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 3540 +test clock-29.218 {time parsing} { + clock scan {2440588 ?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 3540 +test clock-29.219 {time parsing} { + clock scan {2440588 ?:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 3540 +test clock-29.220 {time parsing} { + clock scan {2440588 ?:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 3540 +test clock-29.221 {time parsing} { + clock scan {2440588 12:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 3540 +test clock-29.222 {time parsing} { + clock scan {2440588 12:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 3540 +test clock-29.223 {time parsing} { + clock scan {2440588 12:59:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 3540 +test clock-29.224 {time parsing} { + clock scan {2440588 12:lix:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 3540 +test clock-29.225 {time parsing} { + clock scan {2440588 12:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 3540 +test clock-29.226 {time parsing} { + clock scan {2440588 12:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 3540 +test clock-29.227 {time parsing} { + clock scan {2440588 12:59:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 3540 +test clock-29.228 {time parsing} { + clock scan {2440588 12:lix:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 3540 +test clock-29.229 {time parsing} { + clock scan {2440588 xii:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 3540 +test clock-29.230 {time parsing} { + clock scan {2440588 xii:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 3540 +test clock-29.231 {time parsing} { + clock scan {2440588 xii:59:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 3540 +test clock-29.232 {time parsing} { + clock scan {2440588 xii:lix:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 3540 +test clock-29.233 {time parsing} { + clock scan {2440588 xii:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 3540 +test clock-29.234 {time parsing} { + clock scan {2440588 xii:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 3540 +test clock-29.235 {time parsing} { + clock scan {2440588 xii:59:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 3540 +test clock-29.236 {time parsing} { + clock scan {2440588 xii:lix:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 3540 +test clock-29.237 {time parsing} { + clock scan {2440588 12:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 3540 +test clock-29.238 {time parsing} { + clock scan {2440588 12:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 3540 +test clock-29.239 {time parsing} { + clock scan {2440588 12:59:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 3540 +test clock-29.240 {time parsing} { + clock scan {2440588 12:lix:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 3540 +test clock-29.241 {time parsing} { + clock scan {2440588 12:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 3540 +test clock-29.242 {time parsing} { + clock scan {2440588 12:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 3540 +test clock-29.243 {time parsing} { + clock scan {2440588 12:59:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 3540 +test clock-29.244 {time parsing} { + clock scan {2440588 12:lix:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 3540 +test clock-29.245 {time parsing} { + clock scan {2440588 xii:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 3540 +test clock-29.246 {time parsing} { + clock scan {2440588 xii:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 3540 +test clock-29.247 {time parsing} { + clock scan {2440588 xii:59:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 3540 +test clock-29.248 {time parsing} { + clock scan {2440588 xii:lix:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 3540 +test clock-29.249 {time parsing} { + clock scan {2440588 xii:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 3540 +test clock-29.250 {time parsing} { + clock scan {2440588 xii:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 3540 +test clock-29.251 {time parsing} { + clock scan {2440588 xii:59:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 3540 +test clock-29.252 {time parsing} { + clock scan {2440588 xii:lix:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 3540 +test clock-29.253 {time parsing} { + clock scan {2440588 00:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 3541 +test clock-29.254 {time parsing} { + clock scan {2440588 00:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 3541 +test clock-29.255 {time parsing} { + clock scan {2440588 0:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 3541 +test clock-29.256 {time parsing} { + clock scan {2440588 0:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 3541 +test clock-29.257 {time parsing} { + clock scan {2440588 ?:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 3541 +test clock-29.258 {time parsing} { + clock scan {2440588 ?:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 3541 +test clock-29.259 {time parsing} { + clock scan {2440588 ?:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 3541 +test clock-29.260 {time parsing} { + clock scan {2440588 ?:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 3541 +test clock-29.261 {time parsing} { + clock scan {2440588 12:59:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 3541 +test clock-29.262 {time parsing} { + clock scan {2440588 12:lix:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 3541 +test clock-29.263 {time parsing} { + clock scan {2440588 12:59:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 3541 +test clock-29.264 {time parsing} { + clock scan {2440588 12:lix:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 3541 +test clock-29.265 {time parsing} { + clock scan {2440588 xii:59:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 3541 +test clock-29.266 {time parsing} { + clock scan {2440588 xii:lix:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 3541 +test clock-29.267 {time parsing} { + clock scan {2440588 xii:59:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 3541 +test clock-29.268 {time parsing} { + clock scan {2440588 xii:lix:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 3541 +test clock-29.269 {time parsing} { + clock scan {2440588 12:59:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 3541 +test clock-29.270 {time parsing} { + clock scan {2440588 12:lix:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 3541 +test clock-29.271 {time parsing} { + clock scan {2440588 12:59:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 3541 +test clock-29.272 {time parsing} { + clock scan {2440588 12:lix:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 3541 +test clock-29.273 {time parsing} { + clock scan {2440588 xii:59:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 3541 +test clock-29.274 {time parsing} { + clock scan {2440588 xii:lix:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 3541 +test clock-29.275 {time parsing} { + clock scan {2440588 xii:59:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 3541 +test clock-29.276 {time parsing} { + clock scan {2440588 xii:lix:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 3541 +test clock-29.277 {time parsing} { + clock scan {2440588 00:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 3599 +test clock-29.278 {time parsing} { + clock scan {2440588 00:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 3599 +test clock-29.279 {time parsing} { + clock scan {2440588 0:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 3599 +test clock-29.280 {time parsing} { + clock scan {2440588 0:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 3599 +test clock-29.281 {time parsing} { + clock scan {2440588 ?:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 3599 +test clock-29.282 {time parsing} { + clock scan {2440588 ?:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 3599 +test clock-29.283 {time parsing} { + clock scan {2440588 ?:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 3599 +test clock-29.284 {time parsing} { + clock scan {2440588 ?:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 3599 +test clock-29.285 {time parsing} { + clock scan {2440588 12:59:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 3599 +test clock-29.286 {time parsing} { + clock scan {2440588 12:lix:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 3599 +test clock-29.287 {time parsing} { + clock scan {2440588 12:59:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 3599 +test clock-29.288 {time parsing} { + clock scan {2440588 12:lix:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 3599 +test clock-29.289 {time parsing} { + clock scan {2440588 xii:59:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 3599 +test clock-29.290 {time parsing} { + clock scan {2440588 xii:lix:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 3599 +test clock-29.291 {time parsing} { + clock scan {2440588 xii:59:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 3599 +test clock-29.292 {time parsing} { + clock scan {2440588 xii:lix:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 3599 +test clock-29.293 {time parsing} { + clock scan {2440588 12:59:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 3599 +test clock-29.294 {time parsing} { + clock scan {2440588 12:lix:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 3599 +test clock-29.295 {time parsing} { + clock scan {2440588 12:59:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 3599 +test clock-29.296 {time parsing} { + clock scan {2440588 12:lix:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 3599 +test clock-29.297 {time parsing} { + clock scan {2440588 xii:59:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 3599 +test clock-29.298 {time parsing} { + clock scan {2440588 xii:lix:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 3599 +test clock-29.299 {time parsing} { + clock scan {2440588 xii:59:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 3599 +test clock-29.300 {time parsing} { + clock scan {2440588 xii:lix:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 3599 +test clock-29.301 {time parsing} { + clock scan {2440588 01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H } +} 3600 +test clock-29.302 {time parsing} { + clock scan {2440588 01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 3600 +test clock-29.303 {time parsing} { + clock scan {2440588 01:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 3600 +test clock-29.304 {time parsing} { + clock scan {2440588 01:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 3600 +test clock-29.305 {time parsing} { + clock scan {2440588 01:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 3600 +test clock-29.306 {time parsing} { + clock scan {2440588 1 } \ + -gmt true -locale en_US_roman \ + -format {%J %k } +} 3600 +test clock-29.307 {time parsing} { + clock scan {2440588 1:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 3600 +test clock-29.308 {time parsing} { + clock scan {2440588 1:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 3600 +test clock-29.309 {time parsing} { + clock scan {2440588 1:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 3600 +test clock-29.310 {time parsing} { + clock scan {2440588 1:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 3600 +test clock-29.311 {time parsing} { + clock scan {2440588 i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH } +} 3600 +test clock-29.312 {time parsing} { + clock scan {2440588 i:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 3600 +test clock-29.313 {time parsing} { + clock scan {2440588 i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 3600 +test clock-29.314 {time parsing} { + clock scan {2440588 i:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 3600 +test clock-29.315 {time parsing} { + clock scan {2440588 i:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 3600 +test clock-29.316 {time parsing} { + clock scan {2440588 i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok } +} 3600 +test clock-29.317 {time parsing} { + clock scan {2440588 i:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 3600 +test clock-29.318 {time parsing} { + clock scan {2440588 i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 3600 +test clock-29.319 {time parsing} { + clock scan {2440588 i:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 3600 +test clock-29.320 {time parsing} { + clock scan {2440588 i:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 3600 +test clock-29.321 {time parsing} { + clock scan {2440588 01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I %p} +} 3600 +test clock-29.322 {time parsing} { + clock scan {2440588 01:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 3600 +test clock-29.323 {time parsing} { + clock scan {2440588 01:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 3600 +test clock-29.324 {time parsing} { + clock scan {2440588 01:00:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 3600 +test clock-29.325 {time parsing} { + clock scan {2440588 01:?:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 3600 +test clock-29.326 {time parsing} { + clock scan {2440588 1 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l %p} +} 3600 +test clock-29.327 {time parsing} { + clock scan {2440588 1:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 3600 +test clock-29.328 {time parsing} { + clock scan {2440588 1:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 3600 +test clock-29.329 {time parsing} { + clock scan {2440588 1:00:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 3600 +test clock-29.330 {time parsing} { + clock scan {2440588 1:?:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 3600 +test clock-29.331 {time parsing} { + clock scan {2440588 i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI %p} +} 3600 +test clock-29.332 {time parsing} { + clock scan {2440588 i:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 3600 +test clock-29.333 {time parsing} { + clock scan {2440588 i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 3600 +test clock-29.334 {time parsing} { + clock scan {2440588 i:00:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 3600 +test clock-29.335 {time parsing} { + clock scan {2440588 i:?:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 3600 +test clock-29.336 {time parsing} { + clock scan {2440588 i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol %p} +} 3600 +test clock-29.337 {time parsing} { + clock scan {2440588 i:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 3600 +test clock-29.338 {time parsing} { + clock scan {2440588 i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 3600 +test clock-29.339 {time parsing} { + clock scan {2440588 i:00:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 3600 +test clock-29.340 {time parsing} { + clock scan {2440588 i:?:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 3600 +test clock-29.341 {time parsing} { + clock scan {2440588 01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I %P} +} 3600 +test clock-29.342 {time parsing} { + clock scan {2440588 01:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 3600 +test clock-29.343 {time parsing} { + clock scan {2440588 01:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 3600 +test clock-29.344 {time parsing} { + clock scan {2440588 01:00:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 3600 +test clock-29.345 {time parsing} { + clock scan {2440588 01:?:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 3600 +test clock-29.346 {time parsing} { + clock scan {2440588 1 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l %P} +} 3600 +test clock-29.347 {time parsing} { + clock scan {2440588 1:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 3600 +test clock-29.348 {time parsing} { + clock scan {2440588 1:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 3600 +test clock-29.349 {time parsing} { + clock scan {2440588 1:00:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 3600 +test clock-29.350 {time parsing} { + clock scan {2440588 1:?:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 3600 +test clock-29.351 {time parsing} { + clock scan {2440588 i am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI %P} +} 3600 +test clock-29.352 {time parsing} { + clock scan {2440588 i:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 3600 +test clock-29.353 {time parsing} { + clock scan {2440588 i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 3600 +test clock-29.354 {time parsing} { + clock scan {2440588 i:00:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 3600 +test clock-29.355 {time parsing} { + clock scan {2440588 i:?:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 3600 +test clock-29.356 {time parsing} { + clock scan {2440588 i am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol %P} +} 3600 +test clock-29.357 {time parsing} { + clock scan {2440588 i:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 3600 +test clock-29.358 {time parsing} { + clock scan {2440588 i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 3600 +test clock-29.359 {time parsing} { + clock scan {2440588 i:00:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 3600 +test clock-29.360 {time parsing} { + clock scan {2440588 i:?:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 3600 +test clock-29.361 {time parsing} { + clock scan {2440588 01:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 3601 +test clock-29.362 {time parsing} { + clock scan {2440588 01:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 3601 +test clock-29.363 {time parsing} { + clock scan {2440588 1:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 3601 +test clock-29.364 {time parsing} { + clock scan {2440588 1:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 3601 +test clock-29.365 {time parsing} { + clock scan {2440588 i:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 3601 +test clock-29.366 {time parsing} { + clock scan {2440588 i:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 3601 +test clock-29.367 {time parsing} { + clock scan {2440588 i:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 3601 +test clock-29.368 {time parsing} { + clock scan {2440588 i:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 3601 +test clock-29.369 {time parsing} { + clock scan {2440588 01:00:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 3601 +test clock-29.370 {time parsing} { + clock scan {2440588 01:?:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 3601 +test clock-29.371 {time parsing} { + clock scan {2440588 1:00:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 3601 +test clock-29.372 {time parsing} { + clock scan {2440588 1:?:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 3601 +test clock-29.373 {time parsing} { + clock scan {2440588 i:00:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 3601 +test clock-29.374 {time parsing} { + clock scan {2440588 i:?:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 3601 +test clock-29.375 {time parsing} { + clock scan {2440588 i:00:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 3601 +test clock-29.376 {time parsing} { + clock scan {2440588 i:?:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 3601 +test clock-29.377 {time parsing} { + clock scan {2440588 01:00:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 3601 +test clock-29.378 {time parsing} { + clock scan {2440588 01:?:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 3601 +test clock-29.379 {time parsing} { + clock scan {2440588 1:00:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 3601 +test clock-29.380 {time parsing} { + clock scan {2440588 1:?:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 3601 +test clock-29.381 {time parsing} { + clock scan {2440588 i:00:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 3601 +test clock-29.382 {time parsing} { + clock scan {2440588 i:?:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 3601 +test clock-29.383 {time parsing} { + clock scan {2440588 i:00:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 3601 +test clock-29.384 {time parsing} { + clock scan {2440588 i:?:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 3601 +test clock-29.385 {time parsing} { + clock scan {2440588 01:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 3659 +test clock-29.386 {time parsing} { + clock scan {2440588 01:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 3659 +test clock-29.387 {time parsing} { + clock scan {2440588 1:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 3659 +test clock-29.388 {time parsing} { + clock scan {2440588 1:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 3659 +test clock-29.389 {time parsing} { + clock scan {2440588 i:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 3659 +test clock-29.390 {time parsing} { + clock scan {2440588 i:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 3659 +test clock-29.391 {time parsing} { + clock scan {2440588 i:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 3659 +test clock-29.392 {time parsing} { + clock scan {2440588 i:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 3659 +test clock-29.393 {time parsing} { + clock scan {2440588 01:00:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 3659 +test clock-29.394 {time parsing} { + clock scan {2440588 01:?:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 3659 +test clock-29.395 {time parsing} { + clock scan {2440588 1:00:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 3659 +test clock-29.396 {time parsing} { + clock scan {2440588 1:?:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 3659 +test clock-29.397 {time parsing} { + clock scan {2440588 i:00:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 3659 +test clock-29.398 {time parsing} { + clock scan {2440588 i:?:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 3659 +test clock-29.399 {time parsing} { + clock scan {2440588 i:00:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 3659 +test clock-29.400 {time parsing} { + clock scan {2440588 i:?:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 3659 +test clock-29.401 {time parsing} { + clock scan {2440588 01:00:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 3659 +test clock-29.402 {time parsing} { + clock scan {2440588 01:?:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 3659 +test clock-29.403 {time parsing} { + clock scan {2440588 1:00:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 3659 +test clock-29.404 {time parsing} { + clock scan {2440588 1:?:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 3659 +test clock-29.405 {time parsing} { + clock scan {2440588 i:00:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 3659 +test clock-29.406 {time parsing} { + clock scan {2440588 i:?:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 3659 +test clock-29.407 {time parsing} { + clock scan {2440588 i:00:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 3659 +test clock-29.408 {time parsing} { + clock scan {2440588 i:?:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 3659 +test clock-29.409 {time parsing} { + clock scan {2440588 01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 3660 +test clock-29.410 {time parsing} { + clock scan {2440588 01:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 3660 +test clock-29.411 {time parsing} { + clock scan {2440588 01:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 3660 +test clock-29.412 {time parsing} { + clock scan {2440588 01:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 3660 +test clock-29.413 {time parsing} { + clock scan {2440588 1:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 3660 +test clock-29.414 {time parsing} { + clock scan {2440588 1:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 3660 +test clock-29.415 {time parsing} { + clock scan {2440588 1:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 3660 +test clock-29.416 {time parsing} { + clock scan {2440588 1:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 3660 +test clock-29.417 {time parsing} { + clock scan {2440588 i:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 3660 +test clock-29.418 {time parsing} { + clock scan {2440588 i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 3660 +test clock-29.419 {time parsing} { + clock scan {2440588 i:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 3660 +test clock-29.420 {time parsing} { + clock scan {2440588 i:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 3660 +test clock-29.421 {time parsing} { + clock scan {2440588 i:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 3660 +test clock-29.422 {time parsing} { + clock scan {2440588 i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 3660 +test clock-29.423 {time parsing} { + clock scan {2440588 i:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 3660 +test clock-29.424 {time parsing} { + clock scan {2440588 i:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 3660 +test clock-29.425 {time parsing} { + clock scan {2440588 01:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 3660 +test clock-29.426 {time parsing} { + clock scan {2440588 01:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 3660 +test clock-29.427 {time parsing} { + clock scan {2440588 01:01:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 3660 +test clock-29.428 {time parsing} { + clock scan {2440588 01:i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 3660 +test clock-29.429 {time parsing} { + clock scan {2440588 1:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 3660 +test clock-29.430 {time parsing} { + clock scan {2440588 1:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 3660 +test clock-29.431 {time parsing} { + clock scan {2440588 1:01:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 3660 +test clock-29.432 {time parsing} { + clock scan {2440588 1:i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 3660 +test clock-29.433 {time parsing} { + clock scan {2440588 i:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 3660 +test clock-29.434 {time parsing} { + clock scan {2440588 i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 3660 +test clock-29.435 {time parsing} { + clock scan {2440588 i:01:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 3660 +test clock-29.436 {time parsing} { + clock scan {2440588 i:i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 3660 +test clock-29.437 {time parsing} { + clock scan {2440588 i:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 3660 +test clock-29.438 {time parsing} { + clock scan {2440588 i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 3660 +test clock-29.439 {time parsing} { + clock scan {2440588 i:01:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 3660 +test clock-29.440 {time parsing} { + clock scan {2440588 i:i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 3660 +test clock-29.441 {time parsing} { + clock scan {2440588 01:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 3660 +test clock-29.442 {time parsing} { + clock scan {2440588 01:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 3660 +test clock-29.443 {time parsing} { + clock scan {2440588 01:01:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 3660 +test clock-29.444 {time parsing} { + clock scan {2440588 01:i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 3660 +test clock-29.445 {time parsing} { + clock scan {2440588 1:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 3660 +test clock-29.446 {time parsing} { + clock scan {2440588 1:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 3660 +test clock-29.447 {time parsing} { + clock scan {2440588 1:01:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 3660 +test clock-29.448 {time parsing} { + clock scan {2440588 1:i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 3660 +test clock-29.449 {time parsing} { + clock scan {2440588 i:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 3660 +test clock-29.450 {time parsing} { + clock scan {2440588 i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 3660 +test clock-29.451 {time parsing} { + clock scan {2440588 i:01:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 3660 +test clock-29.452 {time parsing} { + clock scan {2440588 i:i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 3660 +test clock-29.453 {time parsing} { + clock scan {2440588 i:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 3660 +test clock-29.454 {time parsing} { + clock scan {2440588 i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 3660 +test clock-29.455 {time parsing} { + clock scan {2440588 i:01:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 3660 +test clock-29.456 {time parsing} { + clock scan {2440588 i:i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 3660 +test clock-29.457 {time parsing} { + clock scan {2440588 01:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 3661 +test clock-29.458 {time parsing} { + clock scan {2440588 01:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 3661 +test clock-29.459 {time parsing} { + clock scan {2440588 1:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 3661 +test clock-29.460 {time parsing} { + clock scan {2440588 1:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 3661 +test clock-29.461 {time parsing} { + clock scan {2440588 i:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 3661 +test clock-29.462 {time parsing} { + clock scan {2440588 i:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 3661 +test clock-29.463 {time parsing} { + clock scan {2440588 i:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 3661 +test clock-29.464 {time parsing} { + clock scan {2440588 i:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 3661 +test clock-29.465 {time parsing} { + clock scan {2440588 01:01:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 3661 +test clock-29.466 {time parsing} { + clock scan {2440588 01:i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 3661 +test clock-29.467 {time parsing} { + clock scan {2440588 1:01:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 3661 +test clock-29.468 {time parsing} { + clock scan {2440588 1:i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 3661 +test clock-29.469 {time parsing} { + clock scan {2440588 i:01:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 3661 +test clock-29.470 {time parsing} { + clock scan {2440588 i:i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 3661 +test clock-29.471 {time parsing} { + clock scan {2440588 i:01:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 3661 +test clock-29.472 {time parsing} { + clock scan {2440588 i:i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 3661 +test clock-29.473 {time parsing} { + clock scan {2440588 01:01:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 3661 +test clock-29.474 {time parsing} { + clock scan {2440588 01:i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 3661 +test clock-29.475 {time parsing} { + clock scan {2440588 1:01:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 3661 +test clock-29.476 {time parsing} { + clock scan {2440588 1:i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 3661 +test clock-29.477 {time parsing} { + clock scan {2440588 i:01:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 3661 +test clock-29.478 {time parsing} { + clock scan {2440588 i:i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 3661 +test clock-29.479 {time parsing} { + clock scan {2440588 i:01:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 3661 +test clock-29.480 {time parsing} { + clock scan {2440588 i:i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 3661 +test clock-29.481 {time parsing} { + clock scan {2440588 01:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 3719 +test clock-29.482 {time parsing} { + clock scan {2440588 01:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 3719 +test clock-29.483 {time parsing} { + clock scan {2440588 1:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 3719 +test clock-29.484 {time parsing} { + clock scan {2440588 1:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 3719 +test clock-29.485 {time parsing} { + clock scan {2440588 i:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 3719 +test clock-29.486 {time parsing} { + clock scan {2440588 i:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 3719 +test clock-29.487 {time parsing} { + clock scan {2440588 i:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 3719 +test clock-29.488 {time parsing} { + clock scan {2440588 i:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 3719 +test clock-29.489 {time parsing} { + clock scan {2440588 01:01:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 3719 +test clock-29.490 {time parsing} { + clock scan {2440588 01:i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 3719 +test clock-29.491 {time parsing} { + clock scan {2440588 1:01:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 3719 +test clock-29.492 {time parsing} { + clock scan {2440588 1:i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 3719 +test clock-29.493 {time parsing} { + clock scan {2440588 i:01:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 3719 +test clock-29.494 {time parsing} { + clock scan {2440588 i:i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 3719 +test clock-29.495 {time parsing} { + clock scan {2440588 i:01:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 3719 +test clock-29.496 {time parsing} { + clock scan {2440588 i:i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 3719 +test clock-29.497 {time parsing} { + clock scan {2440588 01:01:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 3719 +test clock-29.498 {time parsing} { + clock scan {2440588 01:i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 3719 +test clock-29.499 {time parsing} { + clock scan {2440588 1:01:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 3719 +test clock-29.500 {time parsing} { + clock scan {2440588 1:i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 3719 +test clock-29.501 {time parsing} { + clock scan {2440588 i:01:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 3719 +test clock-29.502 {time parsing} { + clock scan {2440588 i:i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 3719 +test clock-29.503 {time parsing} { + clock scan {2440588 i:01:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 3719 +test clock-29.504 {time parsing} { + clock scan {2440588 i:i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 3719 +test clock-29.505 {time parsing} { + clock scan {2440588 01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 7140 +test clock-29.506 {time parsing} { + clock scan {2440588 01:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 7140 +test clock-29.507 {time parsing} { + clock scan {2440588 01:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 7140 +test clock-29.508 {time parsing} { + clock scan {2440588 01:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 7140 +test clock-29.509 {time parsing} { + clock scan {2440588 1:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 7140 +test clock-29.510 {time parsing} { + clock scan {2440588 1:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 7140 +test clock-29.511 {time parsing} { + clock scan {2440588 1:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 7140 +test clock-29.512 {time parsing} { + clock scan {2440588 1:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 7140 +test clock-29.513 {time parsing} { + clock scan {2440588 i:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 7140 +test clock-29.514 {time parsing} { + clock scan {2440588 i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 7140 +test clock-29.515 {time parsing} { + clock scan {2440588 i:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 7140 +test clock-29.516 {time parsing} { + clock scan {2440588 i:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 7140 +test clock-29.517 {time parsing} { + clock scan {2440588 i:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 7140 +test clock-29.518 {time parsing} { + clock scan {2440588 i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 7140 +test clock-29.519 {time parsing} { + clock scan {2440588 i:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 7140 +test clock-29.520 {time parsing} { + clock scan {2440588 i:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 7140 +test clock-29.521 {time parsing} { + clock scan {2440588 01:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 7140 +test clock-29.522 {time parsing} { + clock scan {2440588 01:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 7140 +test clock-29.523 {time parsing} { + clock scan {2440588 01:59:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 7140 +test clock-29.524 {time parsing} { + clock scan {2440588 01:lix:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 7140 +test clock-29.525 {time parsing} { + clock scan {2440588 1:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 7140 +test clock-29.526 {time parsing} { + clock scan {2440588 1:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 7140 +test clock-29.527 {time parsing} { + clock scan {2440588 1:59:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 7140 +test clock-29.528 {time parsing} { + clock scan {2440588 1:lix:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 7140 +test clock-29.529 {time parsing} { + clock scan {2440588 i:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 7140 +test clock-29.530 {time parsing} { + clock scan {2440588 i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 7140 +test clock-29.531 {time parsing} { + clock scan {2440588 i:59:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 7140 +test clock-29.532 {time parsing} { + clock scan {2440588 i:lix:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 7140 +test clock-29.533 {time parsing} { + clock scan {2440588 i:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 7140 +test clock-29.534 {time parsing} { + clock scan {2440588 i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 7140 +test clock-29.535 {time parsing} { + clock scan {2440588 i:59:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 7140 +test clock-29.536 {time parsing} { + clock scan {2440588 i:lix:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 7140 +test clock-29.537 {time parsing} { + clock scan {2440588 01:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 7140 +test clock-29.538 {time parsing} { + clock scan {2440588 01:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 7140 +test clock-29.539 {time parsing} { + clock scan {2440588 01:59:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 7140 +test clock-29.540 {time parsing} { + clock scan {2440588 01:lix:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 7140 +test clock-29.541 {time parsing} { + clock scan {2440588 1:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 7140 +test clock-29.542 {time parsing} { + clock scan {2440588 1:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 7140 +test clock-29.543 {time parsing} { + clock scan {2440588 1:59:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 7140 +test clock-29.544 {time parsing} { + clock scan {2440588 1:lix:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 7140 +test clock-29.545 {time parsing} { + clock scan {2440588 i:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 7140 +test clock-29.546 {time parsing} { + clock scan {2440588 i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 7140 +test clock-29.547 {time parsing} { + clock scan {2440588 i:59:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 7140 +test clock-29.548 {time parsing} { + clock scan {2440588 i:lix:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 7140 +test clock-29.549 {time parsing} { + clock scan {2440588 i:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 7140 +test clock-29.550 {time parsing} { + clock scan {2440588 i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 7140 +test clock-29.551 {time parsing} { + clock scan {2440588 i:59:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 7140 +test clock-29.552 {time parsing} { + clock scan {2440588 i:lix:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 7140 +test clock-29.553 {time parsing} { + clock scan {2440588 01:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 7141 +test clock-29.554 {time parsing} { + clock scan {2440588 01:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 7141 +test clock-29.555 {time parsing} { + clock scan {2440588 1:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 7141 +test clock-29.556 {time parsing} { + clock scan {2440588 1:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 7141 +test clock-29.557 {time parsing} { + clock scan {2440588 i:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 7141 +test clock-29.558 {time parsing} { + clock scan {2440588 i:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 7141 +test clock-29.559 {time parsing} { + clock scan {2440588 i:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 7141 +test clock-29.560 {time parsing} { + clock scan {2440588 i:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 7141 +test clock-29.561 {time parsing} { + clock scan {2440588 01:59:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 7141 +test clock-29.562 {time parsing} { + clock scan {2440588 01:lix:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 7141 +test clock-29.563 {time parsing} { + clock scan {2440588 1:59:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 7141 +test clock-29.564 {time parsing} { + clock scan {2440588 1:lix:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 7141 +test clock-29.565 {time parsing} { + clock scan {2440588 i:59:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 7141 +test clock-29.566 {time parsing} { + clock scan {2440588 i:lix:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 7141 +test clock-29.567 {time parsing} { + clock scan {2440588 i:59:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 7141 +test clock-29.568 {time parsing} { + clock scan {2440588 i:lix:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 7141 +test clock-29.569 {time parsing} { + clock scan {2440588 01:59:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 7141 +test clock-29.570 {time parsing} { + clock scan {2440588 01:lix:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 7141 +test clock-29.571 {time parsing} { + clock scan {2440588 1:59:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 7141 +test clock-29.572 {time parsing} { + clock scan {2440588 1:lix:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 7141 +test clock-29.573 {time parsing} { + clock scan {2440588 i:59:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 7141 +test clock-29.574 {time parsing} { + clock scan {2440588 i:lix:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 7141 +test clock-29.575 {time parsing} { + clock scan {2440588 i:59:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 7141 +test clock-29.576 {time parsing} { + clock scan {2440588 i:lix:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 7141 +test clock-29.577 {time parsing} { + clock scan {2440588 01:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 7199 +test clock-29.578 {time parsing} { + clock scan {2440588 01:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 7199 +test clock-29.579 {time parsing} { + clock scan {2440588 1:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 7199 +test clock-29.580 {time parsing} { + clock scan {2440588 1:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 7199 +test clock-29.581 {time parsing} { + clock scan {2440588 i:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 7199 +test clock-29.582 {time parsing} { + clock scan {2440588 i:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 7199 +test clock-29.583 {time parsing} { + clock scan {2440588 i:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 7199 +test clock-29.584 {time parsing} { + clock scan {2440588 i:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 7199 +test clock-29.585 {time parsing} { + clock scan {2440588 01:59:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 7199 +test clock-29.586 {time parsing} { + clock scan {2440588 01:lix:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 7199 +test clock-29.587 {time parsing} { + clock scan {2440588 1:59:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 7199 +test clock-29.588 {time parsing} { + clock scan {2440588 1:lix:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 7199 +test clock-29.589 {time parsing} { + clock scan {2440588 i:59:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 7199 +test clock-29.590 {time parsing} { + clock scan {2440588 i:lix:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 7199 +test clock-29.591 {time parsing} { + clock scan {2440588 i:59:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 7199 +test clock-29.592 {time parsing} { + clock scan {2440588 i:lix:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 7199 +test clock-29.593 {time parsing} { + clock scan {2440588 01:59:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 7199 +test clock-29.594 {time parsing} { + clock scan {2440588 01:lix:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 7199 +test clock-29.595 {time parsing} { + clock scan {2440588 1:59:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 7199 +test clock-29.596 {time parsing} { + clock scan {2440588 1:lix:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 7199 +test clock-29.597 {time parsing} { + clock scan {2440588 i:59:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 7199 +test clock-29.598 {time parsing} { + clock scan {2440588 i:lix:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 7199 +test clock-29.599 {time parsing} { + clock scan {2440588 i:59:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 7199 +test clock-29.600 {time parsing} { + clock scan {2440588 i:lix:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 7199 +test clock-29.601 {time parsing} { + clock scan {2440588 11 } \ + -gmt true -locale en_US_roman \ + -format {%J %H } +} 39600 +test clock-29.602 {time parsing} { + clock scan {2440588 11:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 39600 +test clock-29.603 {time parsing} { + clock scan {2440588 11:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 39600 +test clock-29.604 {time parsing} { + clock scan {2440588 11:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 39600 +test clock-29.605 {time parsing} { + clock scan {2440588 11:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 39600 +test clock-29.606 {time parsing} { + clock scan {2440588 11 } \ + -gmt true -locale en_US_roman \ + -format {%J %k } +} 39600 +test clock-29.607 {time parsing} { + clock scan {2440588 11:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 39600 +test clock-29.608 {time parsing} { + clock scan {2440588 11:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 39600 +test clock-29.609 {time parsing} { + clock scan {2440588 11:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 39600 +test clock-29.610 {time parsing} { + clock scan {2440588 11:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 39600 +test clock-29.611 {time parsing} { + clock scan {2440588 xi } \ + -gmt true -locale en_US_roman \ + -format {%J %OH } +} 39600 +test clock-29.612 {time parsing} { + clock scan {2440588 xi:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 39600 +test clock-29.613 {time parsing} { + clock scan {2440588 xi:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 39600 +test clock-29.614 {time parsing} { + clock scan {2440588 xi:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 39600 +test clock-29.615 {time parsing} { + clock scan {2440588 xi:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 39600 +test clock-29.616 {time parsing} { + clock scan {2440588 xi } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok } +} 39600 +test clock-29.617 {time parsing} { + clock scan {2440588 xi:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 39600 +test clock-29.618 {time parsing} { + clock scan {2440588 xi:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 39600 +test clock-29.619 {time parsing} { + clock scan {2440588 xi:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 39600 +test clock-29.620 {time parsing} { + clock scan {2440588 xi:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 39600 +test clock-29.621 {time parsing} { + clock scan {2440588 11 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I %p} +} 39600 +test clock-29.622 {time parsing} { + clock scan {2440588 11:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 39600 +test clock-29.623 {time parsing} { + clock scan {2440588 11:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 39600 +test clock-29.624 {time parsing} { + clock scan {2440588 11:00:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 39600 +test clock-29.625 {time parsing} { + clock scan {2440588 11:?:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 39600 +test clock-29.626 {time parsing} { + clock scan {2440588 11 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l %p} +} 39600 +test clock-29.627 {time parsing} { + clock scan {2440588 11:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 39600 +test clock-29.628 {time parsing} { + clock scan {2440588 11:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 39600 +test clock-29.629 {time parsing} { + clock scan {2440588 11:00:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 39600 +test clock-29.630 {time parsing} { + clock scan {2440588 11:?:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 39600 +test clock-29.631 {time parsing} { + clock scan {2440588 xi AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI %p} +} 39600 +test clock-29.632 {time parsing} { + clock scan {2440588 xi:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 39600 +test clock-29.633 {time parsing} { + clock scan {2440588 xi:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 39600 +test clock-29.634 {time parsing} { + clock scan {2440588 xi:00:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 39600 +test clock-29.635 {time parsing} { + clock scan {2440588 xi:?:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 39600 +test clock-29.636 {time parsing} { + clock scan {2440588 xi AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol %p} +} 39600 +test clock-29.637 {time parsing} { + clock scan {2440588 xi:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 39600 +test clock-29.638 {time parsing} { + clock scan {2440588 xi:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 39600 +test clock-29.639 {time parsing} { + clock scan {2440588 xi:00:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 39600 +test clock-29.640 {time parsing} { + clock scan {2440588 xi:?:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 39600 +test clock-29.641 {time parsing} { + clock scan {2440588 11 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I %P} +} 39600 +test clock-29.642 {time parsing} { + clock scan {2440588 11:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 39600 +test clock-29.643 {time parsing} { + clock scan {2440588 11:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 39600 +test clock-29.644 {time parsing} { + clock scan {2440588 11:00:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 39600 +test clock-29.645 {time parsing} { + clock scan {2440588 11:?:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 39600 +test clock-29.646 {time parsing} { + clock scan {2440588 11 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l %P} +} 39600 +test clock-29.647 {time parsing} { + clock scan {2440588 11:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 39600 +test clock-29.648 {time parsing} { + clock scan {2440588 11:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 39600 +test clock-29.649 {time parsing} { + clock scan {2440588 11:00:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 39600 +test clock-29.650 {time parsing} { + clock scan {2440588 11:?:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 39600 +test clock-29.651 {time parsing} { + clock scan {2440588 xi am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI %P} +} 39600 +test clock-29.652 {time parsing} { + clock scan {2440588 xi:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 39600 +test clock-29.653 {time parsing} { + clock scan {2440588 xi:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 39600 +test clock-29.654 {time parsing} { + clock scan {2440588 xi:00:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 39600 +test clock-29.655 {time parsing} { + clock scan {2440588 xi:?:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 39600 +test clock-29.656 {time parsing} { + clock scan {2440588 xi am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol %P} +} 39600 +test clock-29.657 {time parsing} { + clock scan {2440588 xi:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 39600 +test clock-29.658 {time parsing} { + clock scan {2440588 xi:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 39600 +test clock-29.659 {time parsing} { + clock scan {2440588 xi:00:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 39600 +test clock-29.660 {time parsing} { + clock scan {2440588 xi:?:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 39600 +test clock-29.661 {time parsing} { + clock scan {2440588 11:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 39601 +test clock-29.662 {time parsing} { + clock scan {2440588 11:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 39601 +test clock-29.663 {time parsing} { + clock scan {2440588 11:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 39601 +test clock-29.664 {time parsing} { + clock scan {2440588 11:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 39601 +test clock-29.665 {time parsing} { + clock scan {2440588 xi:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 39601 +test clock-29.666 {time parsing} { + clock scan {2440588 xi:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 39601 +test clock-29.667 {time parsing} { + clock scan {2440588 xi:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 39601 +test clock-29.668 {time parsing} { + clock scan {2440588 xi:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 39601 +test clock-29.669 {time parsing} { + clock scan {2440588 11:00:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 39601 +test clock-29.670 {time parsing} { + clock scan {2440588 11:?:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 39601 +test clock-29.671 {time parsing} { + clock scan {2440588 11:00:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 39601 +test clock-29.672 {time parsing} { + clock scan {2440588 11:?:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 39601 +test clock-29.673 {time parsing} { + clock scan {2440588 xi:00:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 39601 +test clock-29.674 {time parsing} { + clock scan {2440588 xi:?:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 39601 +test clock-29.675 {time parsing} { + clock scan {2440588 xi:00:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 39601 +test clock-29.676 {time parsing} { + clock scan {2440588 xi:?:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 39601 +test clock-29.677 {time parsing} { + clock scan {2440588 11:00:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 39601 +test clock-29.678 {time parsing} { + clock scan {2440588 11:?:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 39601 +test clock-29.679 {time parsing} { + clock scan {2440588 11:00:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 39601 +test clock-29.680 {time parsing} { + clock scan {2440588 11:?:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 39601 +test clock-29.681 {time parsing} { + clock scan {2440588 xi:00:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 39601 +test clock-29.682 {time parsing} { + clock scan {2440588 xi:?:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 39601 +test clock-29.683 {time parsing} { + clock scan {2440588 xi:00:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 39601 +test clock-29.684 {time parsing} { + clock scan {2440588 xi:?:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 39601 +test clock-29.685 {time parsing} { + clock scan {2440588 11:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 39659 +test clock-29.686 {time parsing} { + clock scan {2440588 11:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 39659 +test clock-29.687 {time parsing} { + clock scan {2440588 11:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 39659 +test clock-29.688 {time parsing} { + clock scan {2440588 11:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 39659 +test clock-29.689 {time parsing} { + clock scan {2440588 xi:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 39659 +test clock-29.690 {time parsing} { + clock scan {2440588 xi:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 39659 +test clock-29.691 {time parsing} { + clock scan {2440588 xi:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 39659 +test clock-29.692 {time parsing} { + clock scan {2440588 xi:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 39659 +test clock-29.693 {time parsing} { + clock scan {2440588 11:00:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 39659 +test clock-29.694 {time parsing} { + clock scan {2440588 11:?:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 39659 +test clock-29.695 {time parsing} { + clock scan {2440588 11:00:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 39659 +test clock-29.696 {time parsing} { + clock scan {2440588 11:?:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 39659 +test clock-29.697 {time parsing} { + clock scan {2440588 xi:00:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 39659 +test clock-29.698 {time parsing} { + clock scan {2440588 xi:?:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 39659 +test clock-29.699 {time parsing} { + clock scan {2440588 xi:00:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 39659 +test clock-29.700 {time parsing} { + clock scan {2440588 xi:?:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 39659 +test clock-29.701 {time parsing} { + clock scan {2440588 11:00:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 39659 +test clock-29.702 {time parsing} { + clock scan {2440588 11:?:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 39659 +test clock-29.703 {time parsing} { + clock scan {2440588 11:00:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 39659 +test clock-29.704 {time parsing} { + clock scan {2440588 11:?:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 39659 +test clock-29.705 {time parsing} { + clock scan {2440588 xi:00:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 39659 +test clock-29.706 {time parsing} { + clock scan {2440588 xi:?:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 39659 +test clock-29.707 {time parsing} { + clock scan {2440588 xi:00:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 39659 +test clock-29.708 {time parsing} { + clock scan {2440588 xi:?:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 39659 +test clock-29.709 {time parsing} { + clock scan {2440588 11:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 39660 +test clock-29.710 {time parsing} { + clock scan {2440588 11:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 39660 +test clock-29.711 {time parsing} { + clock scan {2440588 11:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 39660 +test clock-29.712 {time parsing} { + clock scan {2440588 11:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 39660 +test clock-29.713 {time parsing} { + clock scan {2440588 11:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 39660 +test clock-29.714 {time parsing} { + clock scan {2440588 11:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 39660 +test clock-29.715 {time parsing} { + clock scan {2440588 11:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 39660 +test clock-29.716 {time parsing} { + clock scan {2440588 11:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 39660 +test clock-29.717 {time parsing} { + clock scan {2440588 xi:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 39660 +test clock-29.718 {time parsing} { + clock scan {2440588 xi:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 39660 +test clock-29.719 {time parsing} { + clock scan {2440588 xi:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 39660 +test clock-29.720 {time parsing} { + clock scan {2440588 xi:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 39660 +test clock-29.721 {time parsing} { + clock scan {2440588 xi:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 39660 +test clock-29.722 {time parsing} { + clock scan {2440588 xi:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 39660 +test clock-29.723 {time parsing} { + clock scan {2440588 xi:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 39660 +test clock-29.724 {time parsing} { + clock scan {2440588 xi:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 39660 +test clock-29.725 {time parsing} { + clock scan {2440588 11:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 39660 +test clock-29.726 {time parsing} { + clock scan {2440588 11:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 39660 +test clock-29.727 {time parsing} { + clock scan {2440588 11:01:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 39660 +test clock-29.728 {time parsing} { + clock scan {2440588 11:i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 39660 +test clock-29.729 {time parsing} { + clock scan {2440588 11:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 39660 +test clock-29.730 {time parsing} { + clock scan {2440588 11:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 39660 +test clock-29.731 {time parsing} { + clock scan {2440588 11:01:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 39660 +test clock-29.732 {time parsing} { + clock scan {2440588 11:i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 39660 +test clock-29.733 {time parsing} { + clock scan {2440588 xi:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 39660 +test clock-29.734 {time parsing} { + clock scan {2440588 xi:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 39660 +test clock-29.735 {time parsing} { + clock scan {2440588 xi:01:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 39660 +test clock-29.736 {time parsing} { + clock scan {2440588 xi:i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 39660 +test clock-29.737 {time parsing} { + clock scan {2440588 xi:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 39660 +test clock-29.738 {time parsing} { + clock scan {2440588 xi:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 39660 +test clock-29.739 {time parsing} { + clock scan {2440588 xi:01:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 39660 +test clock-29.740 {time parsing} { + clock scan {2440588 xi:i:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 39660 +test clock-29.741 {time parsing} { + clock scan {2440588 11:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 39660 +test clock-29.742 {time parsing} { + clock scan {2440588 11:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 39660 +test clock-29.743 {time parsing} { + clock scan {2440588 11:01:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 39660 +test clock-29.744 {time parsing} { + clock scan {2440588 11:i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 39660 +test clock-29.745 {time parsing} { + clock scan {2440588 11:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 39660 +test clock-29.746 {time parsing} { + clock scan {2440588 11:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 39660 +test clock-29.747 {time parsing} { + clock scan {2440588 11:01:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 39660 +test clock-29.748 {time parsing} { + clock scan {2440588 11:i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 39660 +test clock-29.749 {time parsing} { + clock scan {2440588 xi:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 39660 +test clock-29.750 {time parsing} { + clock scan {2440588 xi:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 39660 +test clock-29.751 {time parsing} { + clock scan {2440588 xi:01:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 39660 +test clock-29.752 {time parsing} { + clock scan {2440588 xi:i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 39660 +test clock-29.753 {time parsing} { + clock scan {2440588 xi:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 39660 +test clock-29.754 {time parsing} { + clock scan {2440588 xi:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 39660 +test clock-29.755 {time parsing} { + clock scan {2440588 xi:01:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 39660 +test clock-29.756 {time parsing} { + clock scan {2440588 xi:i:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 39660 +test clock-29.757 {time parsing} { + clock scan {2440588 11:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 39661 +test clock-29.758 {time parsing} { + clock scan {2440588 11:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 39661 +test clock-29.759 {time parsing} { + clock scan {2440588 11:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 39661 +test clock-29.760 {time parsing} { + clock scan {2440588 11:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 39661 +test clock-29.761 {time parsing} { + clock scan {2440588 xi:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 39661 +test clock-29.762 {time parsing} { + clock scan {2440588 xi:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 39661 +test clock-29.763 {time parsing} { + clock scan {2440588 xi:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 39661 +test clock-29.764 {time parsing} { + clock scan {2440588 xi:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 39661 +test clock-29.765 {time parsing} { + clock scan {2440588 11:01:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 39661 +test clock-29.766 {time parsing} { + clock scan {2440588 11:i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 39661 +test clock-29.767 {time parsing} { + clock scan {2440588 11:01:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 39661 +test clock-29.768 {time parsing} { + clock scan {2440588 11:i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 39661 +test clock-29.769 {time parsing} { + clock scan {2440588 xi:01:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 39661 +test clock-29.770 {time parsing} { + clock scan {2440588 xi:i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 39661 +test clock-29.771 {time parsing} { + clock scan {2440588 xi:01:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 39661 +test clock-29.772 {time parsing} { + clock scan {2440588 xi:i:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 39661 +test clock-29.773 {time parsing} { + clock scan {2440588 11:01:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 39661 +test clock-29.774 {time parsing} { + clock scan {2440588 11:i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 39661 +test clock-29.775 {time parsing} { + clock scan {2440588 11:01:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 39661 +test clock-29.776 {time parsing} { + clock scan {2440588 11:i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 39661 +test clock-29.777 {time parsing} { + clock scan {2440588 xi:01:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 39661 +test clock-29.778 {time parsing} { + clock scan {2440588 xi:i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 39661 +test clock-29.779 {time parsing} { + clock scan {2440588 xi:01:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 39661 +test clock-29.780 {time parsing} { + clock scan {2440588 xi:i:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 39661 +test clock-29.781 {time parsing} { + clock scan {2440588 11:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 39719 +test clock-29.782 {time parsing} { + clock scan {2440588 11:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 39719 +test clock-29.783 {time parsing} { + clock scan {2440588 11:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 39719 +test clock-29.784 {time parsing} { + clock scan {2440588 11:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 39719 +test clock-29.785 {time parsing} { + clock scan {2440588 xi:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 39719 +test clock-29.786 {time parsing} { + clock scan {2440588 xi:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 39719 +test clock-29.787 {time parsing} { + clock scan {2440588 xi:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 39719 +test clock-29.788 {time parsing} { + clock scan {2440588 xi:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 39719 +test clock-29.789 {time parsing} { + clock scan {2440588 11:01:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 39719 +test clock-29.790 {time parsing} { + clock scan {2440588 11:i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 39719 +test clock-29.791 {time parsing} { + clock scan {2440588 11:01:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 39719 +test clock-29.792 {time parsing} { + clock scan {2440588 11:i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 39719 +test clock-29.793 {time parsing} { + clock scan {2440588 xi:01:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 39719 +test clock-29.794 {time parsing} { + clock scan {2440588 xi:i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 39719 +test clock-29.795 {time parsing} { + clock scan {2440588 xi:01:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 39719 +test clock-29.796 {time parsing} { + clock scan {2440588 xi:i:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 39719 +test clock-29.797 {time parsing} { + clock scan {2440588 11:01:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 39719 +test clock-29.798 {time parsing} { + clock scan {2440588 11:i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 39719 +test clock-29.799 {time parsing} { + clock scan {2440588 11:01:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 39719 +test clock-29.800 {time parsing} { + clock scan {2440588 11:i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 39719 +test clock-29.801 {time parsing} { + clock scan {2440588 xi:01:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 39719 +test clock-29.802 {time parsing} { + clock scan {2440588 xi:i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 39719 +test clock-29.803 {time parsing} { + clock scan {2440588 xi:01:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 39719 +test clock-29.804 {time parsing} { + clock scan {2440588 xi:i:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 39719 +test clock-29.805 {time parsing} { + clock scan {2440588 11:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 43140 +test clock-29.806 {time parsing} { + clock scan {2440588 11:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 43140 +test clock-29.807 {time parsing} { + clock scan {2440588 11:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 43140 +test clock-29.808 {time parsing} { + clock scan {2440588 11:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 43140 +test clock-29.809 {time parsing} { + clock scan {2440588 11:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 43140 +test clock-29.810 {time parsing} { + clock scan {2440588 11:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 43140 +test clock-29.811 {time parsing} { + clock scan {2440588 11:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 43140 +test clock-29.812 {time parsing} { + clock scan {2440588 11:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 43140 +test clock-29.813 {time parsing} { + clock scan {2440588 xi:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 43140 +test clock-29.814 {time parsing} { + clock scan {2440588 xi:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 43140 +test clock-29.815 {time parsing} { + clock scan {2440588 xi:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 43140 +test clock-29.816 {time parsing} { + clock scan {2440588 xi:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 43140 +test clock-29.817 {time parsing} { + clock scan {2440588 xi:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 43140 +test clock-29.818 {time parsing} { + clock scan {2440588 xi:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 43140 +test clock-29.819 {time parsing} { + clock scan {2440588 xi:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 43140 +test clock-29.820 {time parsing} { + clock scan {2440588 xi:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 43140 +test clock-29.821 {time parsing} { + clock scan {2440588 11:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 43140 +test clock-29.822 {time parsing} { + clock scan {2440588 11:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 43140 +test clock-29.823 {time parsing} { + clock scan {2440588 11:59:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 43140 +test clock-29.824 {time parsing} { + clock scan {2440588 11:lix:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 43140 +test clock-29.825 {time parsing} { + clock scan {2440588 11:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 43140 +test clock-29.826 {time parsing} { + clock scan {2440588 11:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 43140 +test clock-29.827 {time parsing} { + clock scan {2440588 11:59:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 43140 +test clock-29.828 {time parsing} { + clock scan {2440588 11:lix:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 43140 +test clock-29.829 {time parsing} { + clock scan {2440588 xi:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 43140 +test clock-29.830 {time parsing} { + clock scan {2440588 xi:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 43140 +test clock-29.831 {time parsing} { + clock scan {2440588 xi:59:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 43140 +test clock-29.832 {time parsing} { + clock scan {2440588 xi:lix:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 43140 +test clock-29.833 {time parsing} { + clock scan {2440588 xi:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 43140 +test clock-29.834 {time parsing} { + clock scan {2440588 xi:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 43140 +test clock-29.835 {time parsing} { + clock scan {2440588 xi:59:00 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 43140 +test clock-29.836 {time parsing} { + clock scan {2440588 xi:lix:? AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 43140 +test clock-29.837 {time parsing} { + clock scan {2440588 11:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 43140 +test clock-29.838 {time parsing} { + clock scan {2440588 11:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 43140 +test clock-29.839 {time parsing} { + clock scan {2440588 11:59:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 43140 +test clock-29.840 {time parsing} { + clock scan {2440588 11:lix:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 43140 +test clock-29.841 {time parsing} { + clock scan {2440588 11:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 43140 +test clock-29.842 {time parsing} { + clock scan {2440588 11:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 43140 +test clock-29.843 {time parsing} { + clock scan {2440588 11:59:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 43140 +test clock-29.844 {time parsing} { + clock scan {2440588 11:lix:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 43140 +test clock-29.845 {time parsing} { + clock scan {2440588 xi:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 43140 +test clock-29.846 {time parsing} { + clock scan {2440588 xi:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 43140 +test clock-29.847 {time parsing} { + clock scan {2440588 xi:59:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 43140 +test clock-29.848 {time parsing} { + clock scan {2440588 xi:lix:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 43140 +test clock-29.849 {time parsing} { + clock scan {2440588 xi:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 43140 +test clock-29.850 {time parsing} { + clock scan {2440588 xi:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 43140 +test clock-29.851 {time parsing} { + clock scan {2440588 xi:59:00 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 43140 +test clock-29.852 {time parsing} { + clock scan {2440588 xi:lix:? am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 43140 +test clock-29.853 {time parsing} { + clock scan {2440588 11:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 43141 +test clock-29.854 {time parsing} { + clock scan {2440588 11:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 43141 +test clock-29.855 {time parsing} { + clock scan {2440588 11:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 43141 +test clock-29.856 {time parsing} { + clock scan {2440588 11:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 43141 +test clock-29.857 {time parsing} { + clock scan {2440588 xi:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 43141 +test clock-29.858 {time parsing} { + clock scan {2440588 xi:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 43141 +test clock-29.859 {time parsing} { + clock scan {2440588 xi:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 43141 +test clock-29.860 {time parsing} { + clock scan {2440588 xi:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 43141 +test clock-29.861 {time parsing} { + clock scan {2440588 11:59:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 43141 +test clock-29.862 {time parsing} { + clock scan {2440588 11:lix:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 43141 +test clock-29.863 {time parsing} { + clock scan {2440588 11:59:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 43141 +test clock-29.864 {time parsing} { + clock scan {2440588 11:lix:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 43141 +test clock-29.865 {time parsing} { + clock scan {2440588 xi:59:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 43141 +test clock-29.866 {time parsing} { + clock scan {2440588 xi:lix:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 43141 +test clock-29.867 {time parsing} { + clock scan {2440588 xi:59:01 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 43141 +test clock-29.868 {time parsing} { + clock scan {2440588 xi:lix:i AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 43141 +test clock-29.869 {time parsing} { + clock scan {2440588 11:59:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 43141 +test clock-29.870 {time parsing} { + clock scan {2440588 11:lix:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 43141 +test clock-29.871 {time parsing} { + clock scan {2440588 11:59:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 43141 +test clock-29.872 {time parsing} { + clock scan {2440588 11:lix:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 43141 +test clock-29.873 {time parsing} { + clock scan {2440588 xi:59:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 43141 +test clock-29.874 {time parsing} { + clock scan {2440588 xi:lix:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 43141 +test clock-29.875 {time parsing} { + clock scan {2440588 xi:59:01 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 43141 +test clock-29.876 {time parsing} { + clock scan {2440588 xi:lix:i am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 43141 +test clock-29.877 {time parsing} { + clock scan {2440588 11:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 43199 +test clock-29.878 {time parsing} { + clock scan {2440588 11:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 43199 +test clock-29.879 {time parsing} { + clock scan {2440588 11:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 43199 +test clock-29.880 {time parsing} { + clock scan {2440588 11:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 43199 +test clock-29.881 {time parsing} { + clock scan {2440588 xi:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 43199 +test clock-29.882 {time parsing} { + clock scan {2440588 xi:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 43199 +test clock-29.883 {time parsing} { + clock scan {2440588 xi:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 43199 +test clock-29.884 {time parsing} { + clock scan {2440588 xi:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 43199 +test clock-29.885 {time parsing} { + clock scan {2440588 11:59:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 43199 +test clock-29.886 {time parsing} { + clock scan {2440588 11:lix:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 43199 +test clock-29.887 {time parsing} { + clock scan {2440588 11:59:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 43199 +test clock-29.888 {time parsing} { + clock scan {2440588 11:lix:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 43199 +test clock-29.889 {time parsing} { + clock scan {2440588 xi:59:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 43199 +test clock-29.890 {time parsing} { + clock scan {2440588 xi:lix:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 43199 +test clock-29.891 {time parsing} { + clock scan {2440588 xi:59:59 AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 43199 +test clock-29.892 {time parsing} { + clock scan {2440588 xi:lix:lix AM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 43199 +test clock-29.893 {time parsing} { + clock scan {2440588 11:59:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 43199 +test clock-29.894 {time parsing} { + clock scan {2440588 11:lix:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 43199 +test clock-29.895 {time parsing} { + clock scan {2440588 11:59:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 43199 +test clock-29.896 {time parsing} { + clock scan {2440588 11:lix:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 43199 +test clock-29.897 {time parsing} { + clock scan {2440588 xi:59:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 43199 +test clock-29.898 {time parsing} { + clock scan {2440588 xi:lix:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 43199 +test clock-29.899 {time parsing} { + clock scan {2440588 xi:59:59 am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 43199 +test clock-29.900 {time parsing} { + clock scan {2440588 xi:lix:lix am} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 43199 +test clock-29.901 {time parsing} { + clock scan {2440588 12 } \ + -gmt true -locale en_US_roman \ + -format {%J %H } +} 43200 +test clock-29.902 {time parsing} { + clock scan {2440588 12:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 43200 +test clock-29.903 {time parsing} { + clock scan {2440588 12:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 43200 +test clock-29.904 {time parsing} { + clock scan {2440588 12:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 43200 +test clock-29.905 {time parsing} { + clock scan {2440588 12:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 43200 +test clock-29.906 {time parsing} { + clock scan {2440588 12 } \ + -gmt true -locale en_US_roman \ + -format {%J %k } +} 43200 +test clock-29.907 {time parsing} { + clock scan {2440588 12:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 43200 +test clock-29.908 {time parsing} { + clock scan {2440588 12:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 43200 +test clock-29.909 {time parsing} { + clock scan {2440588 12:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 43200 +test clock-29.910 {time parsing} { + clock scan {2440588 12:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 43200 +test clock-29.911 {time parsing} { + clock scan {2440588 xii } \ + -gmt true -locale en_US_roman \ + -format {%J %OH } +} 43200 +test clock-29.912 {time parsing} { + clock scan {2440588 xii:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 43200 +test clock-29.913 {time parsing} { + clock scan {2440588 xii:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 43200 +test clock-29.914 {time parsing} { + clock scan {2440588 xii:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 43200 +test clock-29.915 {time parsing} { + clock scan {2440588 xii:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 43200 +test clock-29.916 {time parsing} { + clock scan {2440588 xii } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok } +} 43200 +test clock-29.917 {time parsing} { + clock scan {2440588 xii:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 43200 +test clock-29.918 {time parsing} { + clock scan {2440588 xii:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 43200 +test clock-29.919 {time parsing} { + clock scan {2440588 xii:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 43200 +test clock-29.920 {time parsing} { + clock scan {2440588 xii:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 43200 +test clock-29.921 {time parsing} { + clock scan {2440588 12 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I %p} +} 43200 +test clock-29.922 {time parsing} { + clock scan {2440588 12:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 43200 +test clock-29.923 {time parsing} { + clock scan {2440588 12:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 43200 +test clock-29.924 {time parsing} { + clock scan {2440588 12:00:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 43200 +test clock-29.925 {time parsing} { + clock scan {2440588 12:?:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 43200 +test clock-29.926 {time parsing} { + clock scan {2440588 12 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l %p} +} 43200 +test clock-29.927 {time parsing} { + clock scan {2440588 12:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 43200 +test clock-29.928 {time parsing} { + clock scan {2440588 12:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 43200 +test clock-29.929 {time parsing} { + clock scan {2440588 12:00:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 43200 +test clock-29.930 {time parsing} { + clock scan {2440588 12:?:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 43200 +test clock-29.931 {time parsing} { + clock scan {2440588 xii PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI %p} +} 43200 +test clock-29.932 {time parsing} { + clock scan {2440588 xii:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 43200 +test clock-29.933 {time parsing} { + clock scan {2440588 xii:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 43200 +test clock-29.934 {time parsing} { + clock scan {2440588 xii:00:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 43200 +test clock-29.935 {time parsing} { + clock scan {2440588 xii:?:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 43200 +test clock-29.936 {time parsing} { + clock scan {2440588 xii PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol %p} +} 43200 +test clock-29.937 {time parsing} { + clock scan {2440588 xii:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 43200 +test clock-29.938 {time parsing} { + clock scan {2440588 xii:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 43200 +test clock-29.939 {time parsing} { + clock scan {2440588 xii:00:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 43200 +test clock-29.940 {time parsing} { + clock scan {2440588 xii:?:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 43200 +test clock-29.941 {time parsing} { + clock scan {2440588 12 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I %P} +} 43200 +test clock-29.942 {time parsing} { + clock scan {2440588 12:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 43200 +test clock-29.943 {time parsing} { + clock scan {2440588 12:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 43200 +test clock-29.944 {time parsing} { + clock scan {2440588 12:00:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 43200 +test clock-29.945 {time parsing} { + clock scan {2440588 12:?:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 43200 +test clock-29.946 {time parsing} { + clock scan {2440588 12 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l %P} +} 43200 +test clock-29.947 {time parsing} { + clock scan {2440588 12:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 43200 +test clock-29.948 {time parsing} { + clock scan {2440588 12:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 43200 +test clock-29.949 {time parsing} { + clock scan {2440588 12:00:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 43200 +test clock-29.950 {time parsing} { + clock scan {2440588 12:?:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 43200 +test clock-29.951 {time parsing} { + clock scan {2440588 xii pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI %P} +} 43200 +test clock-29.952 {time parsing} { + clock scan {2440588 xii:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 43200 +test clock-29.953 {time parsing} { + clock scan {2440588 xii:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 43200 +test clock-29.954 {time parsing} { + clock scan {2440588 xii:00:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 43200 +test clock-29.955 {time parsing} { + clock scan {2440588 xii:?:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 43200 +test clock-29.956 {time parsing} { + clock scan {2440588 xii pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol %P} +} 43200 +test clock-29.957 {time parsing} { + clock scan {2440588 xii:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 43200 +test clock-29.958 {time parsing} { + clock scan {2440588 xii:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 43200 +test clock-29.959 {time parsing} { + clock scan {2440588 xii:00:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 43200 +test clock-29.960 {time parsing} { + clock scan {2440588 xii:?:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 43200 +test clock-29.961 {time parsing} { + clock scan {2440588 12:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 43201 +test clock-29.962 {time parsing} { + clock scan {2440588 12:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 43201 +test clock-29.963 {time parsing} { + clock scan {2440588 12:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 43201 +test clock-29.964 {time parsing} { + clock scan {2440588 12:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 43201 +test clock-29.965 {time parsing} { + clock scan {2440588 xii:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 43201 +test clock-29.966 {time parsing} { + clock scan {2440588 xii:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 43201 +test clock-29.967 {time parsing} { + clock scan {2440588 xii:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 43201 +test clock-29.968 {time parsing} { + clock scan {2440588 xii:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 43201 +test clock-29.969 {time parsing} { + clock scan {2440588 12:00:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 43201 +test clock-29.970 {time parsing} { + clock scan {2440588 12:?:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 43201 +test clock-29.971 {time parsing} { + clock scan {2440588 12:00:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 43201 +test clock-29.972 {time parsing} { + clock scan {2440588 12:?:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 43201 +test clock-29.973 {time parsing} { + clock scan {2440588 xii:00:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 43201 +test clock-29.974 {time parsing} { + clock scan {2440588 xii:?:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 43201 +test clock-29.975 {time parsing} { + clock scan {2440588 xii:00:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 43201 +test clock-29.976 {time parsing} { + clock scan {2440588 xii:?:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 43201 +test clock-29.977 {time parsing} { + clock scan {2440588 12:00:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 43201 +test clock-29.978 {time parsing} { + clock scan {2440588 12:?:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 43201 +test clock-29.979 {time parsing} { + clock scan {2440588 12:00:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 43201 +test clock-29.980 {time parsing} { + clock scan {2440588 12:?:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 43201 +test clock-29.981 {time parsing} { + clock scan {2440588 xii:00:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 43201 +test clock-29.982 {time parsing} { + clock scan {2440588 xii:?:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 43201 +test clock-29.983 {time parsing} { + clock scan {2440588 xii:00:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 43201 +test clock-29.984 {time parsing} { + clock scan {2440588 xii:?:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 43201 +test clock-29.985 {time parsing} { + clock scan {2440588 12:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 43259 +test clock-29.986 {time parsing} { + clock scan {2440588 12:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 43259 +test clock-29.987 {time parsing} { + clock scan {2440588 12:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 43259 +test clock-29.988 {time parsing} { + clock scan {2440588 12:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 43259 +test clock-29.989 {time parsing} { + clock scan {2440588 xii:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 43259 +test clock-29.990 {time parsing} { + clock scan {2440588 xii:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 43259 +test clock-29.991 {time parsing} { + clock scan {2440588 xii:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 43259 +test clock-29.992 {time parsing} { + clock scan {2440588 xii:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 43259 +test clock-29.993 {time parsing} { + clock scan {2440588 12:00:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 43259 +test clock-29.994 {time parsing} { + clock scan {2440588 12:?:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 43259 +test clock-29.995 {time parsing} { + clock scan {2440588 12:00:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 43259 +test clock-29.996 {time parsing} { + clock scan {2440588 12:?:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 43259 +test clock-29.997 {time parsing} { + clock scan {2440588 xii:00:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 43259 +test clock-29.998 {time parsing} { + clock scan {2440588 xii:?:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 43259 +test clock-29.999 {time parsing} { + clock scan {2440588 xii:00:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 43259 +test clock-29.1000 {time parsing} { + clock scan {2440588 xii:?:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 43259 +test clock-29.1001 {time parsing} { + clock scan {2440588 12:00:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 43259 +test clock-29.1002 {time parsing} { + clock scan {2440588 12:?:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 43259 +test clock-29.1003 {time parsing} { + clock scan {2440588 12:00:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 43259 +test clock-29.1004 {time parsing} { + clock scan {2440588 12:?:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 43259 +test clock-29.1005 {time parsing} { + clock scan {2440588 xii:00:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 43259 +test clock-29.1006 {time parsing} { + clock scan {2440588 xii:?:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 43259 +test clock-29.1007 {time parsing} { + clock scan {2440588 xii:00:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 43259 +test clock-29.1008 {time parsing} { + clock scan {2440588 xii:?:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 43259 +test clock-29.1009 {time parsing} { + clock scan {2440588 12:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 43260 +test clock-29.1010 {time parsing} { + clock scan {2440588 12:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 43260 +test clock-29.1011 {time parsing} { + clock scan {2440588 12:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 43260 +test clock-29.1012 {time parsing} { + clock scan {2440588 12:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 43260 +test clock-29.1013 {time parsing} { + clock scan {2440588 12:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 43260 +test clock-29.1014 {time parsing} { + clock scan {2440588 12:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 43260 +test clock-29.1015 {time parsing} { + clock scan {2440588 12:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 43260 +test clock-29.1016 {time parsing} { + clock scan {2440588 12:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 43260 +test clock-29.1017 {time parsing} { + clock scan {2440588 xii:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 43260 +test clock-29.1018 {time parsing} { + clock scan {2440588 xii:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 43260 +test clock-29.1019 {time parsing} { + clock scan {2440588 xii:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 43260 +test clock-29.1020 {time parsing} { + clock scan {2440588 xii:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 43260 +test clock-29.1021 {time parsing} { + clock scan {2440588 xii:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 43260 +test clock-29.1022 {time parsing} { + clock scan {2440588 xii:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 43260 +test clock-29.1023 {time parsing} { + clock scan {2440588 xii:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 43260 +test clock-29.1024 {time parsing} { + clock scan {2440588 xii:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 43260 +test clock-29.1025 {time parsing} { + clock scan {2440588 12:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 43260 +test clock-29.1026 {time parsing} { + clock scan {2440588 12:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 43260 +test clock-29.1027 {time parsing} { + clock scan {2440588 12:01:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 43260 +test clock-29.1028 {time parsing} { + clock scan {2440588 12:i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 43260 +test clock-29.1029 {time parsing} { + clock scan {2440588 12:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 43260 +test clock-29.1030 {time parsing} { + clock scan {2440588 12:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 43260 +test clock-29.1031 {time parsing} { + clock scan {2440588 12:01:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 43260 +test clock-29.1032 {time parsing} { + clock scan {2440588 12:i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 43260 +test clock-29.1033 {time parsing} { + clock scan {2440588 xii:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 43260 +test clock-29.1034 {time parsing} { + clock scan {2440588 xii:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 43260 +test clock-29.1035 {time parsing} { + clock scan {2440588 xii:01:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 43260 +test clock-29.1036 {time parsing} { + clock scan {2440588 xii:i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 43260 +test clock-29.1037 {time parsing} { + clock scan {2440588 xii:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 43260 +test clock-29.1038 {time parsing} { + clock scan {2440588 xii:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 43260 +test clock-29.1039 {time parsing} { + clock scan {2440588 xii:01:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 43260 +test clock-29.1040 {time parsing} { + clock scan {2440588 xii:i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 43260 +test clock-29.1041 {time parsing} { + clock scan {2440588 12:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 43260 +test clock-29.1042 {time parsing} { + clock scan {2440588 12:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 43260 +test clock-29.1043 {time parsing} { + clock scan {2440588 12:01:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 43260 +test clock-29.1044 {time parsing} { + clock scan {2440588 12:i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 43260 +test clock-29.1045 {time parsing} { + clock scan {2440588 12:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 43260 +test clock-29.1046 {time parsing} { + clock scan {2440588 12:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 43260 +test clock-29.1047 {time parsing} { + clock scan {2440588 12:01:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 43260 +test clock-29.1048 {time parsing} { + clock scan {2440588 12:i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 43260 +test clock-29.1049 {time parsing} { + clock scan {2440588 xii:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 43260 +test clock-29.1050 {time parsing} { + clock scan {2440588 xii:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 43260 +test clock-29.1051 {time parsing} { + clock scan {2440588 xii:01:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 43260 +test clock-29.1052 {time parsing} { + clock scan {2440588 xii:i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 43260 +test clock-29.1053 {time parsing} { + clock scan {2440588 xii:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 43260 +test clock-29.1054 {time parsing} { + clock scan {2440588 xii:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 43260 +test clock-29.1055 {time parsing} { + clock scan {2440588 xii:01:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 43260 +test clock-29.1056 {time parsing} { + clock scan {2440588 xii:i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 43260 +test clock-29.1057 {time parsing} { + clock scan {2440588 12:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 43261 +test clock-29.1058 {time parsing} { + clock scan {2440588 12:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 43261 +test clock-29.1059 {time parsing} { + clock scan {2440588 12:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 43261 +test clock-29.1060 {time parsing} { + clock scan {2440588 12:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 43261 +test clock-29.1061 {time parsing} { + clock scan {2440588 xii:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 43261 +test clock-29.1062 {time parsing} { + clock scan {2440588 xii:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 43261 +test clock-29.1063 {time parsing} { + clock scan {2440588 xii:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 43261 +test clock-29.1064 {time parsing} { + clock scan {2440588 xii:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 43261 +test clock-29.1065 {time parsing} { + clock scan {2440588 12:01:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 43261 +test clock-29.1066 {time parsing} { + clock scan {2440588 12:i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 43261 +test clock-29.1067 {time parsing} { + clock scan {2440588 12:01:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 43261 +test clock-29.1068 {time parsing} { + clock scan {2440588 12:i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 43261 +test clock-29.1069 {time parsing} { + clock scan {2440588 xii:01:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 43261 +test clock-29.1070 {time parsing} { + clock scan {2440588 xii:i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 43261 +test clock-29.1071 {time parsing} { + clock scan {2440588 xii:01:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 43261 +test clock-29.1072 {time parsing} { + clock scan {2440588 xii:i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 43261 +test clock-29.1073 {time parsing} { + clock scan {2440588 12:01:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 43261 +test clock-29.1074 {time parsing} { + clock scan {2440588 12:i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 43261 +test clock-29.1075 {time parsing} { + clock scan {2440588 12:01:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 43261 +test clock-29.1076 {time parsing} { + clock scan {2440588 12:i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 43261 +test clock-29.1077 {time parsing} { + clock scan {2440588 xii:01:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 43261 +test clock-29.1078 {time parsing} { + clock scan {2440588 xii:i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 43261 +test clock-29.1079 {time parsing} { + clock scan {2440588 xii:01:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 43261 +test clock-29.1080 {time parsing} { + clock scan {2440588 xii:i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 43261 +test clock-29.1081 {time parsing} { + clock scan {2440588 12:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 43319 +test clock-29.1082 {time parsing} { + clock scan {2440588 12:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 43319 +test clock-29.1083 {time parsing} { + clock scan {2440588 12:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 43319 +test clock-29.1084 {time parsing} { + clock scan {2440588 12:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 43319 +test clock-29.1085 {time parsing} { + clock scan {2440588 xii:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 43319 +test clock-29.1086 {time parsing} { + clock scan {2440588 xii:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 43319 +test clock-29.1087 {time parsing} { + clock scan {2440588 xii:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 43319 +test clock-29.1088 {time parsing} { + clock scan {2440588 xii:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 43319 +test clock-29.1089 {time parsing} { + clock scan {2440588 12:01:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 43319 +test clock-29.1090 {time parsing} { + clock scan {2440588 12:i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 43319 +test clock-29.1091 {time parsing} { + clock scan {2440588 12:01:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 43319 +test clock-29.1092 {time parsing} { + clock scan {2440588 12:i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 43319 +test clock-29.1093 {time parsing} { + clock scan {2440588 xii:01:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 43319 +test clock-29.1094 {time parsing} { + clock scan {2440588 xii:i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 43319 +test clock-29.1095 {time parsing} { + clock scan {2440588 xii:01:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 43319 +test clock-29.1096 {time parsing} { + clock scan {2440588 xii:i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 43319 +test clock-29.1097 {time parsing} { + clock scan {2440588 12:01:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 43319 +test clock-29.1098 {time parsing} { + clock scan {2440588 12:i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 43319 +test clock-29.1099 {time parsing} { + clock scan {2440588 12:01:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 43319 +test clock-29.1100 {time parsing} { + clock scan {2440588 12:i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 43319 +test clock-29.1101 {time parsing} { + clock scan {2440588 xii:01:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 43319 +test clock-29.1102 {time parsing} { + clock scan {2440588 xii:i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 43319 +test clock-29.1103 {time parsing} { + clock scan {2440588 xii:01:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 43319 +test clock-29.1104 {time parsing} { + clock scan {2440588 xii:i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 43319 +test clock-29.1105 {time parsing} { + clock scan {2440588 12:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 46740 +test clock-29.1106 {time parsing} { + clock scan {2440588 12:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 46740 +test clock-29.1107 {time parsing} { + clock scan {2440588 12:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 46740 +test clock-29.1108 {time parsing} { + clock scan {2440588 12:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 46740 +test clock-29.1109 {time parsing} { + clock scan {2440588 12:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 46740 +test clock-29.1110 {time parsing} { + clock scan {2440588 12:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 46740 +test clock-29.1111 {time parsing} { + clock scan {2440588 12:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 46740 +test clock-29.1112 {time parsing} { + clock scan {2440588 12:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 46740 +test clock-29.1113 {time parsing} { + clock scan {2440588 xii:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 46740 +test clock-29.1114 {time parsing} { + clock scan {2440588 xii:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 46740 +test clock-29.1115 {time parsing} { + clock scan {2440588 xii:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 46740 +test clock-29.1116 {time parsing} { + clock scan {2440588 xii:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 46740 +test clock-29.1117 {time parsing} { + clock scan {2440588 xii:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 46740 +test clock-29.1118 {time parsing} { + clock scan {2440588 xii:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 46740 +test clock-29.1119 {time parsing} { + clock scan {2440588 xii:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 46740 +test clock-29.1120 {time parsing} { + clock scan {2440588 xii:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 46740 +test clock-29.1121 {time parsing} { + clock scan {2440588 12:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 46740 +test clock-29.1122 {time parsing} { + clock scan {2440588 12:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 46740 +test clock-29.1123 {time parsing} { + clock scan {2440588 12:59:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 46740 +test clock-29.1124 {time parsing} { + clock scan {2440588 12:lix:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 46740 +test clock-29.1125 {time parsing} { + clock scan {2440588 12:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 46740 +test clock-29.1126 {time parsing} { + clock scan {2440588 12:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 46740 +test clock-29.1127 {time parsing} { + clock scan {2440588 12:59:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 46740 +test clock-29.1128 {time parsing} { + clock scan {2440588 12:lix:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 46740 +test clock-29.1129 {time parsing} { + clock scan {2440588 xii:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 46740 +test clock-29.1130 {time parsing} { + clock scan {2440588 xii:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 46740 +test clock-29.1131 {time parsing} { + clock scan {2440588 xii:59:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 46740 +test clock-29.1132 {time parsing} { + clock scan {2440588 xii:lix:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 46740 +test clock-29.1133 {time parsing} { + clock scan {2440588 xii:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 46740 +test clock-29.1134 {time parsing} { + clock scan {2440588 xii:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 46740 +test clock-29.1135 {time parsing} { + clock scan {2440588 xii:59:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 46740 +test clock-29.1136 {time parsing} { + clock scan {2440588 xii:lix:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 46740 +test clock-29.1137 {time parsing} { + clock scan {2440588 12:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 46740 +test clock-29.1138 {time parsing} { + clock scan {2440588 12:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 46740 +test clock-29.1139 {time parsing} { + clock scan {2440588 12:59:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 46740 +test clock-29.1140 {time parsing} { + clock scan {2440588 12:lix:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 46740 +test clock-29.1141 {time parsing} { + clock scan {2440588 12:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 46740 +test clock-29.1142 {time parsing} { + clock scan {2440588 12:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 46740 +test clock-29.1143 {time parsing} { + clock scan {2440588 12:59:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 46740 +test clock-29.1144 {time parsing} { + clock scan {2440588 12:lix:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 46740 +test clock-29.1145 {time parsing} { + clock scan {2440588 xii:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 46740 +test clock-29.1146 {time parsing} { + clock scan {2440588 xii:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 46740 +test clock-29.1147 {time parsing} { + clock scan {2440588 xii:59:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 46740 +test clock-29.1148 {time parsing} { + clock scan {2440588 xii:lix:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 46740 +test clock-29.1149 {time parsing} { + clock scan {2440588 xii:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 46740 +test clock-29.1150 {time parsing} { + clock scan {2440588 xii:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 46740 +test clock-29.1151 {time parsing} { + clock scan {2440588 xii:59:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 46740 +test clock-29.1152 {time parsing} { + clock scan {2440588 xii:lix:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 46740 +test clock-29.1153 {time parsing} { + clock scan {2440588 12:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 46741 +test clock-29.1154 {time parsing} { + clock scan {2440588 12:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 46741 +test clock-29.1155 {time parsing} { + clock scan {2440588 12:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 46741 +test clock-29.1156 {time parsing} { + clock scan {2440588 12:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 46741 +test clock-29.1157 {time parsing} { + clock scan {2440588 xii:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 46741 +test clock-29.1158 {time parsing} { + clock scan {2440588 xii:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 46741 +test clock-29.1159 {time parsing} { + clock scan {2440588 xii:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 46741 +test clock-29.1160 {time parsing} { + clock scan {2440588 xii:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 46741 +test clock-29.1161 {time parsing} { + clock scan {2440588 12:59:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 46741 +test clock-29.1162 {time parsing} { + clock scan {2440588 12:lix:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 46741 +test clock-29.1163 {time parsing} { + clock scan {2440588 12:59:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 46741 +test clock-29.1164 {time parsing} { + clock scan {2440588 12:lix:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 46741 +test clock-29.1165 {time parsing} { + clock scan {2440588 xii:59:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 46741 +test clock-29.1166 {time parsing} { + clock scan {2440588 xii:lix:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 46741 +test clock-29.1167 {time parsing} { + clock scan {2440588 xii:59:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 46741 +test clock-29.1168 {time parsing} { + clock scan {2440588 xii:lix:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 46741 +test clock-29.1169 {time parsing} { + clock scan {2440588 12:59:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 46741 +test clock-29.1170 {time parsing} { + clock scan {2440588 12:lix:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 46741 +test clock-29.1171 {time parsing} { + clock scan {2440588 12:59:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 46741 +test clock-29.1172 {time parsing} { + clock scan {2440588 12:lix:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 46741 +test clock-29.1173 {time parsing} { + clock scan {2440588 xii:59:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 46741 +test clock-29.1174 {time parsing} { + clock scan {2440588 xii:lix:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 46741 +test clock-29.1175 {time parsing} { + clock scan {2440588 xii:59:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 46741 +test clock-29.1176 {time parsing} { + clock scan {2440588 xii:lix:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 46741 +test clock-29.1177 {time parsing} { + clock scan {2440588 12:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 46799 +test clock-29.1178 {time parsing} { + clock scan {2440588 12:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 46799 +test clock-29.1179 {time parsing} { + clock scan {2440588 12:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 46799 +test clock-29.1180 {time parsing} { + clock scan {2440588 12:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 46799 +test clock-29.1181 {time parsing} { + clock scan {2440588 xii:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 46799 +test clock-29.1182 {time parsing} { + clock scan {2440588 xii:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 46799 +test clock-29.1183 {time parsing} { + clock scan {2440588 xii:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 46799 +test clock-29.1184 {time parsing} { + clock scan {2440588 xii:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 46799 +test clock-29.1185 {time parsing} { + clock scan {2440588 12:59:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 46799 +test clock-29.1186 {time parsing} { + clock scan {2440588 12:lix:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 46799 +test clock-29.1187 {time parsing} { + clock scan {2440588 12:59:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 46799 +test clock-29.1188 {time parsing} { + clock scan {2440588 12:lix:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 46799 +test clock-29.1189 {time parsing} { + clock scan {2440588 xii:59:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 46799 +test clock-29.1190 {time parsing} { + clock scan {2440588 xii:lix:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 46799 +test clock-29.1191 {time parsing} { + clock scan {2440588 xii:59:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 46799 +test clock-29.1192 {time parsing} { + clock scan {2440588 xii:lix:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 46799 +test clock-29.1193 {time parsing} { + clock scan {2440588 12:59:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 46799 +test clock-29.1194 {time parsing} { + clock scan {2440588 12:lix:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 46799 +test clock-29.1195 {time parsing} { + clock scan {2440588 12:59:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 46799 +test clock-29.1196 {time parsing} { + clock scan {2440588 12:lix:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 46799 +test clock-29.1197 {time parsing} { + clock scan {2440588 xii:59:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 46799 +test clock-29.1198 {time parsing} { + clock scan {2440588 xii:lix:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 46799 +test clock-29.1199 {time parsing} { + clock scan {2440588 xii:59:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 46799 +test clock-29.1200 {time parsing} { + clock scan {2440588 xii:lix:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 46799 +test clock-29.1201 {time parsing} { + clock scan {2440588 13 } \ + -gmt true -locale en_US_roman \ + -format {%J %H } +} 46800 +test clock-29.1202 {time parsing} { + clock scan {2440588 13:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 46800 +test clock-29.1203 {time parsing} { + clock scan {2440588 13:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 46800 +test clock-29.1204 {time parsing} { + clock scan {2440588 13:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 46800 +test clock-29.1205 {time parsing} { + clock scan {2440588 13:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 46800 +test clock-29.1206 {time parsing} { + clock scan {2440588 13 } \ + -gmt true -locale en_US_roman \ + -format {%J %k } +} 46800 +test clock-29.1207 {time parsing} { + clock scan {2440588 13:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 46800 +test clock-29.1208 {time parsing} { + clock scan {2440588 13:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 46800 +test clock-29.1209 {time parsing} { + clock scan {2440588 13:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 46800 +test clock-29.1210 {time parsing} { + clock scan {2440588 13:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 46800 +test clock-29.1211 {time parsing} { + clock scan {2440588 xiii } \ + -gmt true -locale en_US_roman \ + -format {%J %OH } +} 46800 +test clock-29.1212 {time parsing} { + clock scan {2440588 xiii:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 46800 +test clock-29.1213 {time parsing} { + clock scan {2440588 xiii:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 46800 +test clock-29.1214 {time parsing} { + clock scan {2440588 xiii:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 46800 +test clock-29.1215 {time parsing} { + clock scan {2440588 xiii:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 46800 +test clock-29.1216 {time parsing} { + clock scan {2440588 xiii } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok } +} 46800 +test clock-29.1217 {time parsing} { + clock scan {2440588 xiii:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 46800 +test clock-29.1218 {time parsing} { + clock scan {2440588 xiii:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 46800 +test clock-29.1219 {time parsing} { + clock scan {2440588 xiii:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 46800 +test clock-29.1220 {time parsing} { + clock scan {2440588 xiii:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 46800 +test clock-29.1221 {time parsing} { + clock scan {2440588 01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I %p} +} 46800 +test clock-29.1222 {time parsing} { + clock scan {2440588 01:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 46800 +test clock-29.1223 {time parsing} { + clock scan {2440588 01:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 46800 +test clock-29.1224 {time parsing} { + clock scan {2440588 01:00:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 46800 +test clock-29.1225 {time parsing} { + clock scan {2440588 01:?:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 46800 +test clock-29.1226 {time parsing} { + clock scan {2440588 1 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l %p} +} 46800 +test clock-29.1227 {time parsing} { + clock scan {2440588 1:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 46800 +test clock-29.1228 {time parsing} { + clock scan {2440588 1:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 46800 +test clock-29.1229 {time parsing} { + clock scan {2440588 1:00:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 46800 +test clock-29.1230 {time parsing} { + clock scan {2440588 1:?:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 46800 +test clock-29.1231 {time parsing} { + clock scan {2440588 i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI %p} +} 46800 +test clock-29.1232 {time parsing} { + clock scan {2440588 i:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 46800 +test clock-29.1233 {time parsing} { + clock scan {2440588 i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 46800 +test clock-29.1234 {time parsing} { + clock scan {2440588 i:00:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 46800 +test clock-29.1235 {time parsing} { + clock scan {2440588 i:?:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 46800 +test clock-29.1236 {time parsing} { + clock scan {2440588 i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol %p} +} 46800 +test clock-29.1237 {time parsing} { + clock scan {2440588 i:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 46800 +test clock-29.1238 {time parsing} { + clock scan {2440588 i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 46800 +test clock-29.1239 {time parsing} { + clock scan {2440588 i:00:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 46800 +test clock-29.1240 {time parsing} { + clock scan {2440588 i:?:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 46800 +test clock-29.1241 {time parsing} { + clock scan {2440588 01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I %P} +} 46800 +test clock-29.1242 {time parsing} { + clock scan {2440588 01:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 46800 +test clock-29.1243 {time parsing} { + clock scan {2440588 01:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 46800 +test clock-29.1244 {time parsing} { + clock scan {2440588 01:00:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 46800 +test clock-29.1245 {time parsing} { + clock scan {2440588 01:?:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 46800 +test clock-29.1246 {time parsing} { + clock scan {2440588 1 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l %P} +} 46800 +test clock-29.1247 {time parsing} { + clock scan {2440588 1:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 46800 +test clock-29.1248 {time parsing} { + clock scan {2440588 1:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 46800 +test clock-29.1249 {time parsing} { + clock scan {2440588 1:00:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 46800 +test clock-29.1250 {time parsing} { + clock scan {2440588 1:?:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 46800 +test clock-29.1251 {time parsing} { + clock scan {2440588 i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI %P} +} 46800 +test clock-29.1252 {time parsing} { + clock scan {2440588 i:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 46800 +test clock-29.1253 {time parsing} { + clock scan {2440588 i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 46800 +test clock-29.1254 {time parsing} { + clock scan {2440588 i:00:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 46800 +test clock-29.1255 {time parsing} { + clock scan {2440588 i:?:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 46800 +test clock-29.1256 {time parsing} { + clock scan {2440588 i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol %P} +} 46800 +test clock-29.1257 {time parsing} { + clock scan {2440588 i:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 46800 +test clock-29.1258 {time parsing} { + clock scan {2440588 i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 46800 +test clock-29.1259 {time parsing} { + clock scan {2440588 i:00:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 46800 +test clock-29.1260 {time parsing} { + clock scan {2440588 i:?:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 46800 +test clock-29.1261 {time parsing} { + clock scan {2440588 13:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 46801 +test clock-29.1262 {time parsing} { + clock scan {2440588 13:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 46801 +test clock-29.1263 {time parsing} { + clock scan {2440588 13:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 46801 +test clock-29.1264 {time parsing} { + clock scan {2440588 13:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 46801 +test clock-29.1265 {time parsing} { + clock scan {2440588 xiii:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 46801 +test clock-29.1266 {time parsing} { + clock scan {2440588 xiii:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 46801 +test clock-29.1267 {time parsing} { + clock scan {2440588 xiii:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 46801 +test clock-29.1268 {time parsing} { + clock scan {2440588 xiii:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 46801 +test clock-29.1269 {time parsing} { + clock scan {2440588 01:00:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 46801 +test clock-29.1270 {time parsing} { + clock scan {2440588 01:?:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 46801 +test clock-29.1271 {time parsing} { + clock scan {2440588 1:00:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 46801 +test clock-29.1272 {time parsing} { + clock scan {2440588 1:?:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 46801 +test clock-29.1273 {time parsing} { + clock scan {2440588 i:00:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 46801 +test clock-29.1274 {time parsing} { + clock scan {2440588 i:?:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 46801 +test clock-29.1275 {time parsing} { + clock scan {2440588 i:00:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 46801 +test clock-29.1276 {time parsing} { + clock scan {2440588 i:?:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 46801 +test clock-29.1277 {time parsing} { + clock scan {2440588 01:00:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 46801 +test clock-29.1278 {time parsing} { + clock scan {2440588 01:?:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 46801 +test clock-29.1279 {time parsing} { + clock scan {2440588 1:00:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 46801 +test clock-29.1280 {time parsing} { + clock scan {2440588 1:?:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 46801 +test clock-29.1281 {time parsing} { + clock scan {2440588 i:00:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 46801 +test clock-29.1282 {time parsing} { + clock scan {2440588 i:?:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 46801 +test clock-29.1283 {time parsing} { + clock scan {2440588 i:00:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 46801 +test clock-29.1284 {time parsing} { + clock scan {2440588 i:?:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 46801 +test clock-29.1285 {time parsing} { + clock scan {2440588 13:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 46859 +test clock-29.1286 {time parsing} { + clock scan {2440588 13:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 46859 +test clock-29.1287 {time parsing} { + clock scan {2440588 13:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 46859 +test clock-29.1288 {time parsing} { + clock scan {2440588 13:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 46859 +test clock-29.1289 {time parsing} { + clock scan {2440588 xiii:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 46859 +test clock-29.1290 {time parsing} { + clock scan {2440588 xiii:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 46859 +test clock-29.1291 {time parsing} { + clock scan {2440588 xiii:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 46859 +test clock-29.1292 {time parsing} { + clock scan {2440588 xiii:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 46859 +test clock-29.1293 {time parsing} { + clock scan {2440588 01:00:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 46859 +test clock-29.1294 {time parsing} { + clock scan {2440588 01:?:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 46859 +test clock-29.1295 {time parsing} { + clock scan {2440588 1:00:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 46859 +test clock-29.1296 {time parsing} { + clock scan {2440588 1:?:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 46859 +test clock-29.1297 {time parsing} { + clock scan {2440588 i:00:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 46859 +test clock-29.1298 {time parsing} { + clock scan {2440588 i:?:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 46859 +test clock-29.1299 {time parsing} { + clock scan {2440588 i:00:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 46859 +test clock-29.1300 {time parsing} { + clock scan {2440588 i:?:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 46859 +test clock-29.1301 {time parsing} { + clock scan {2440588 01:00:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 46859 +test clock-29.1302 {time parsing} { + clock scan {2440588 01:?:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 46859 +test clock-29.1303 {time parsing} { + clock scan {2440588 1:00:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 46859 +test clock-29.1304 {time parsing} { + clock scan {2440588 1:?:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 46859 +test clock-29.1305 {time parsing} { + clock scan {2440588 i:00:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 46859 +test clock-29.1306 {time parsing} { + clock scan {2440588 i:?:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 46859 +test clock-29.1307 {time parsing} { + clock scan {2440588 i:00:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 46859 +test clock-29.1308 {time parsing} { + clock scan {2440588 i:?:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 46859 +test clock-29.1309 {time parsing} { + clock scan {2440588 13:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 46860 +test clock-29.1310 {time parsing} { + clock scan {2440588 13:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 46860 +test clock-29.1311 {time parsing} { + clock scan {2440588 13:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 46860 +test clock-29.1312 {time parsing} { + clock scan {2440588 13:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 46860 +test clock-29.1313 {time parsing} { + clock scan {2440588 13:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 46860 +test clock-29.1314 {time parsing} { + clock scan {2440588 13:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 46860 +test clock-29.1315 {time parsing} { + clock scan {2440588 13:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 46860 +test clock-29.1316 {time parsing} { + clock scan {2440588 13:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 46860 +test clock-29.1317 {time parsing} { + clock scan {2440588 xiii:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 46860 +test clock-29.1318 {time parsing} { + clock scan {2440588 xiii:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 46860 +test clock-29.1319 {time parsing} { + clock scan {2440588 xiii:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 46860 +test clock-29.1320 {time parsing} { + clock scan {2440588 xiii:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 46860 +test clock-29.1321 {time parsing} { + clock scan {2440588 xiii:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 46860 +test clock-29.1322 {time parsing} { + clock scan {2440588 xiii:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 46860 +test clock-29.1323 {time parsing} { + clock scan {2440588 xiii:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 46860 +test clock-29.1324 {time parsing} { + clock scan {2440588 xiii:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 46860 +test clock-29.1325 {time parsing} { + clock scan {2440588 01:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 46860 +test clock-29.1326 {time parsing} { + clock scan {2440588 01:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 46860 +test clock-29.1327 {time parsing} { + clock scan {2440588 01:01:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 46860 +test clock-29.1328 {time parsing} { + clock scan {2440588 01:i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 46860 +test clock-29.1329 {time parsing} { + clock scan {2440588 1:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 46860 +test clock-29.1330 {time parsing} { + clock scan {2440588 1:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 46860 +test clock-29.1331 {time parsing} { + clock scan {2440588 1:01:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 46860 +test clock-29.1332 {time parsing} { + clock scan {2440588 1:i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 46860 +test clock-29.1333 {time parsing} { + clock scan {2440588 i:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 46860 +test clock-29.1334 {time parsing} { + clock scan {2440588 i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 46860 +test clock-29.1335 {time parsing} { + clock scan {2440588 i:01:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 46860 +test clock-29.1336 {time parsing} { + clock scan {2440588 i:i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 46860 +test clock-29.1337 {time parsing} { + clock scan {2440588 i:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 46860 +test clock-29.1338 {time parsing} { + clock scan {2440588 i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 46860 +test clock-29.1339 {time parsing} { + clock scan {2440588 i:01:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 46860 +test clock-29.1340 {time parsing} { + clock scan {2440588 i:i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 46860 +test clock-29.1341 {time parsing} { + clock scan {2440588 01:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 46860 +test clock-29.1342 {time parsing} { + clock scan {2440588 01:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 46860 +test clock-29.1343 {time parsing} { + clock scan {2440588 01:01:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 46860 +test clock-29.1344 {time parsing} { + clock scan {2440588 01:i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 46860 +test clock-29.1345 {time parsing} { + clock scan {2440588 1:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 46860 +test clock-29.1346 {time parsing} { + clock scan {2440588 1:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 46860 +test clock-29.1347 {time parsing} { + clock scan {2440588 1:01:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 46860 +test clock-29.1348 {time parsing} { + clock scan {2440588 1:i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 46860 +test clock-29.1349 {time parsing} { + clock scan {2440588 i:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 46860 +test clock-29.1350 {time parsing} { + clock scan {2440588 i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 46860 +test clock-29.1351 {time parsing} { + clock scan {2440588 i:01:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 46860 +test clock-29.1352 {time parsing} { + clock scan {2440588 i:i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 46860 +test clock-29.1353 {time parsing} { + clock scan {2440588 i:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 46860 +test clock-29.1354 {time parsing} { + clock scan {2440588 i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 46860 +test clock-29.1355 {time parsing} { + clock scan {2440588 i:01:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 46860 +test clock-29.1356 {time parsing} { + clock scan {2440588 i:i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 46860 +test clock-29.1357 {time parsing} { + clock scan {2440588 13:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 46861 +test clock-29.1358 {time parsing} { + clock scan {2440588 13:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 46861 +test clock-29.1359 {time parsing} { + clock scan {2440588 13:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 46861 +test clock-29.1360 {time parsing} { + clock scan {2440588 13:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 46861 +test clock-29.1361 {time parsing} { + clock scan {2440588 xiii:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 46861 +test clock-29.1362 {time parsing} { + clock scan {2440588 xiii:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 46861 +test clock-29.1363 {time parsing} { + clock scan {2440588 xiii:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 46861 +test clock-29.1364 {time parsing} { + clock scan {2440588 xiii:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 46861 +test clock-29.1365 {time parsing} { + clock scan {2440588 01:01:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 46861 +test clock-29.1366 {time parsing} { + clock scan {2440588 01:i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 46861 +test clock-29.1367 {time parsing} { + clock scan {2440588 1:01:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 46861 +test clock-29.1368 {time parsing} { + clock scan {2440588 1:i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 46861 +test clock-29.1369 {time parsing} { + clock scan {2440588 i:01:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 46861 +test clock-29.1370 {time parsing} { + clock scan {2440588 i:i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 46861 +test clock-29.1371 {time parsing} { + clock scan {2440588 i:01:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 46861 +test clock-29.1372 {time parsing} { + clock scan {2440588 i:i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 46861 +test clock-29.1373 {time parsing} { + clock scan {2440588 01:01:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 46861 +test clock-29.1374 {time parsing} { + clock scan {2440588 01:i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 46861 +test clock-29.1375 {time parsing} { + clock scan {2440588 1:01:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 46861 +test clock-29.1376 {time parsing} { + clock scan {2440588 1:i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 46861 +test clock-29.1377 {time parsing} { + clock scan {2440588 i:01:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 46861 +test clock-29.1378 {time parsing} { + clock scan {2440588 i:i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 46861 +test clock-29.1379 {time parsing} { + clock scan {2440588 i:01:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 46861 +test clock-29.1380 {time parsing} { + clock scan {2440588 i:i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 46861 +test clock-29.1381 {time parsing} { + clock scan {2440588 13:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 46919 +test clock-29.1382 {time parsing} { + clock scan {2440588 13:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 46919 +test clock-29.1383 {time parsing} { + clock scan {2440588 13:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 46919 +test clock-29.1384 {time parsing} { + clock scan {2440588 13:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 46919 +test clock-29.1385 {time parsing} { + clock scan {2440588 xiii:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 46919 +test clock-29.1386 {time parsing} { + clock scan {2440588 xiii:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 46919 +test clock-29.1387 {time parsing} { + clock scan {2440588 xiii:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 46919 +test clock-29.1388 {time parsing} { + clock scan {2440588 xiii:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 46919 +test clock-29.1389 {time parsing} { + clock scan {2440588 01:01:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 46919 +test clock-29.1390 {time parsing} { + clock scan {2440588 01:i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 46919 +test clock-29.1391 {time parsing} { + clock scan {2440588 1:01:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 46919 +test clock-29.1392 {time parsing} { + clock scan {2440588 1:i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 46919 +test clock-29.1393 {time parsing} { + clock scan {2440588 i:01:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 46919 +test clock-29.1394 {time parsing} { + clock scan {2440588 i:i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 46919 +test clock-29.1395 {time parsing} { + clock scan {2440588 i:01:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 46919 +test clock-29.1396 {time parsing} { + clock scan {2440588 i:i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 46919 +test clock-29.1397 {time parsing} { + clock scan {2440588 01:01:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 46919 +test clock-29.1398 {time parsing} { + clock scan {2440588 01:i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 46919 +test clock-29.1399 {time parsing} { + clock scan {2440588 1:01:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 46919 +test clock-29.1400 {time parsing} { + clock scan {2440588 1:i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 46919 +test clock-29.1401 {time parsing} { + clock scan {2440588 i:01:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 46919 +test clock-29.1402 {time parsing} { + clock scan {2440588 i:i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 46919 +test clock-29.1403 {time parsing} { + clock scan {2440588 i:01:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 46919 +test clock-29.1404 {time parsing} { + clock scan {2440588 i:i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 46919 +test clock-29.1405 {time parsing} { + clock scan {2440588 13:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 50340 +test clock-29.1406 {time parsing} { + clock scan {2440588 13:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 50340 +test clock-29.1407 {time parsing} { + clock scan {2440588 13:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 50340 +test clock-29.1408 {time parsing} { + clock scan {2440588 13:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 50340 +test clock-29.1409 {time parsing} { + clock scan {2440588 13:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 50340 +test clock-29.1410 {time parsing} { + clock scan {2440588 13:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 50340 +test clock-29.1411 {time parsing} { + clock scan {2440588 13:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 50340 +test clock-29.1412 {time parsing} { + clock scan {2440588 13:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 50340 +test clock-29.1413 {time parsing} { + clock scan {2440588 xiii:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 50340 +test clock-29.1414 {time parsing} { + clock scan {2440588 xiii:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 50340 +test clock-29.1415 {time parsing} { + clock scan {2440588 xiii:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 50340 +test clock-29.1416 {time parsing} { + clock scan {2440588 xiii:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 50340 +test clock-29.1417 {time parsing} { + clock scan {2440588 xiii:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 50340 +test clock-29.1418 {time parsing} { + clock scan {2440588 xiii:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 50340 +test clock-29.1419 {time parsing} { + clock scan {2440588 xiii:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 50340 +test clock-29.1420 {time parsing} { + clock scan {2440588 xiii:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 50340 +test clock-29.1421 {time parsing} { + clock scan {2440588 01:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 50340 +test clock-29.1422 {time parsing} { + clock scan {2440588 01:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 50340 +test clock-29.1423 {time parsing} { + clock scan {2440588 01:59:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 50340 +test clock-29.1424 {time parsing} { + clock scan {2440588 01:lix:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 50340 +test clock-29.1425 {time parsing} { + clock scan {2440588 1:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 50340 +test clock-29.1426 {time parsing} { + clock scan {2440588 1:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 50340 +test clock-29.1427 {time parsing} { + clock scan {2440588 1:59:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 50340 +test clock-29.1428 {time parsing} { + clock scan {2440588 1:lix:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 50340 +test clock-29.1429 {time parsing} { + clock scan {2440588 i:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 50340 +test clock-29.1430 {time parsing} { + clock scan {2440588 i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 50340 +test clock-29.1431 {time parsing} { + clock scan {2440588 i:59:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 50340 +test clock-29.1432 {time parsing} { + clock scan {2440588 i:lix:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 50340 +test clock-29.1433 {time parsing} { + clock scan {2440588 i:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 50340 +test clock-29.1434 {time parsing} { + clock scan {2440588 i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 50340 +test clock-29.1435 {time parsing} { + clock scan {2440588 i:59:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 50340 +test clock-29.1436 {time parsing} { + clock scan {2440588 i:lix:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 50340 +test clock-29.1437 {time parsing} { + clock scan {2440588 01:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 50340 +test clock-29.1438 {time parsing} { + clock scan {2440588 01:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 50340 +test clock-29.1439 {time parsing} { + clock scan {2440588 01:59:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 50340 +test clock-29.1440 {time parsing} { + clock scan {2440588 01:lix:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 50340 +test clock-29.1441 {time parsing} { + clock scan {2440588 1:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 50340 +test clock-29.1442 {time parsing} { + clock scan {2440588 1:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 50340 +test clock-29.1443 {time parsing} { + clock scan {2440588 1:59:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 50340 +test clock-29.1444 {time parsing} { + clock scan {2440588 1:lix:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 50340 +test clock-29.1445 {time parsing} { + clock scan {2440588 i:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 50340 +test clock-29.1446 {time parsing} { + clock scan {2440588 i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 50340 +test clock-29.1447 {time parsing} { + clock scan {2440588 i:59:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 50340 +test clock-29.1448 {time parsing} { + clock scan {2440588 i:lix:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 50340 +test clock-29.1449 {time parsing} { + clock scan {2440588 i:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 50340 +test clock-29.1450 {time parsing} { + clock scan {2440588 i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 50340 +test clock-29.1451 {time parsing} { + clock scan {2440588 i:59:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 50340 +test clock-29.1452 {time parsing} { + clock scan {2440588 i:lix:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 50340 +test clock-29.1453 {time parsing} { + clock scan {2440588 13:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 50341 +test clock-29.1454 {time parsing} { + clock scan {2440588 13:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 50341 +test clock-29.1455 {time parsing} { + clock scan {2440588 13:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 50341 +test clock-29.1456 {time parsing} { + clock scan {2440588 13:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 50341 +test clock-29.1457 {time parsing} { + clock scan {2440588 xiii:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 50341 +test clock-29.1458 {time parsing} { + clock scan {2440588 xiii:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 50341 +test clock-29.1459 {time parsing} { + clock scan {2440588 xiii:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 50341 +test clock-29.1460 {time parsing} { + clock scan {2440588 xiii:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 50341 +test clock-29.1461 {time parsing} { + clock scan {2440588 01:59:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 50341 +test clock-29.1462 {time parsing} { + clock scan {2440588 01:lix:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 50341 +test clock-29.1463 {time parsing} { + clock scan {2440588 1:59:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 50341 +test clock-29.1464 {time parsing} { + clock scan {2440588 1:lix:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 50341 +test clock-29.1465 {time parsing} { + clock scan {2440588 i:59:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 50341 +test clock-29.1466 {time parsing} { + clock scan {2440588 i:lix:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 50341 +test clock-29.1467 {time parsing} { + clock scan {2440588 i:59:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 50341 +test clock-29.1468 {time parsing} { + clock scan {2440588 i:lix:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 50341 +test clock-29.1469 {time parsing} { + clock scan {2440588 01:59:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 50341 +test clock-29.1470 {time parsing} { + clock scan {2440588 01:lix:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 50341 +test clock-29.1471 {time parsing} { + clock scan {2440588 1:59:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 50341 +test clock-29.1472 {time parsing} { + clock scan {2440588 1:lix:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 50341 +test clock-29.1473 {time parsing} { + clock scan {2440588 i:59:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 50341 +test clock-29.1474 {time parsing} { + clock scan {2440588 i:lix:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 50341 +test clock-29.1475 {time parsing} { + clock scan {2440588 i:59:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 50341 +test clock-29.1476 {time parsing} { + clock scan {2440588 i:lix:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 50341 +test clock-29.1477 {time parsing} { + clock scan {2440588 13:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 50399 +test clock-29.1478 {time parsing} { + clock scan {2440588 13:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 50399 +test clock-29.1479 {time parsing} { + clock scan {2440588 13:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 50399 +test clock-29.1480 {time parsing} { + clock scan {2440588 13:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 50399 +test clock-29.1481 {time parsing} { + clock scan {2440588 xiii:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 50399 +test clock-29.1482 {time parsing} { + clock scan {2440588 xiii:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 50399 +test clock-29.1483 {time parsing} { + clock scan {2440588 xiii:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 50399 +test clock-29.1484 {time parsing} { + clock scan {2440588 xiii:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 50399 +test clock-29.1485 {time parsing} { + clock scan {2440588 01:59:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 50399 +test clock-29.1486 {time parsing} { + clock scan {2440588 01:lix:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 50399 +test clock-29.1487 {time parsing} { + clock scan {2440588 1:59:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 50399 +test clock-29.1488 {time parsing} { + clock scan {2440588 1:lix:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 50399 +test clock-29.1489 {time parsing} { + clock scan {2440588 i:59:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 50399 +test clock-29.1490 {time parsing} { + clock scan {2440588 i:lix:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 50399 +test clock-29.1491 {time parsing} { + clock scan {2440588 i:59:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 50399 +test clock-29.1492 {time parsing} { + clock scan {2440588 i:lix:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 50399 +test clock-29.1493 {time parsing} { + clock scan {2440588 01:59:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 50399 +test clock-29.1494 {time parsing} { + clock scan {2440588 01:lix:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 50399 +test clock-29.1495 {time parsing} { + clock scan {2440588 1:59:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 50399 +test clock-29.1496 {time parsing} { + clock scan {2440588 1:lix:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 50399 +test clock-29.1497 {time parsing} { + clock scan {2440588 i:59:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 50399 +test clock-29.1498 {time parsing} { + clock scan {2440588 i:lix:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 50399 +test clock-29.1499 {time parsing} { + clock scan {2440588 i:59:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 50399 +test clock-29.1500 {time parsing} { + clock scan {2440588 i:lix:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 50399 +test clock-29.1501 {time parsing} { + clock scan {2440588 23 } \ + -gmt true -locale en_US_roman \ + -format {%J %H } +} 82800 +test clock-29.1502 {time parsing} { + clock scan {2440588 23:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 82800 +test clock-29.1503 {time parsing} { + clock scan {2440588 23:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 82800 +test clock-29.1504 {time parsing} { + clock scan {2440588 23:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 82800 +test clock-29.1505 {time parsing} { + clock scan {2440588 23:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 82800 +test clock-29.1506 {time parsing} { + clock scan {2440588 23 } \ + -gmt true -locale en_US_roman \ + -format {%J %k } +} 82800 +test clock-29.1507 {time parsing} { + clock scan {2440588 23:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 82800 +test clock-29.1508 {time parsing} { + clock scan {2440588 23:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 82800 +test clock-29.1509 {time parsing} { + clock scan {2440588 23:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 82800 +test clock-29.1510 {time parsing} { + clock scan {2440588 23:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 82800 +test clock-29.1511 {time parsing} { + clock scan {2440588 xxiii } \ + -gmt true -locale en_US_roman \ + -format {%J %OH } +} 82800 +test clock-29.1512 {time parsing} { + clock scan {2440588 xxiii:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 82800 +test clock-29.1513 {time parsing} { + clock scan {2440588 xxiii:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 82800 +test clock-29.1514 {time parsing} { + clock scan {2440588 xxiii:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 82800 +test clock-29.1515 {time parsing} { + clock scan {2440588 xxiii:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 82800 +test clock-29.1516 {time parsing} { + clock scan {2440588 xxiii } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok } +} 82800 +test clock-29.1517 {time parsing} { + clock scan {2440588 xxiii:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 82800 +test clock-29.1518 {time parsing} { + clock scan {2440588 xxiii:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 82800 +test clock-29.1519 {time parsing} { + clock scan {2440588 xxiii:00:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 82800 +test clock-29.1520 {time parsing} { + clock scan {2440588 xxiii:?:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 82800 +test clock-29.1521 {time parsing} { + clock scan {2440588 11 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I %p} +} 82800 +test clock-29.1522 {time parsing} { + clock scan {2440588 11:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 82800 +test clock-29.1523 {time parsing} { + clock scan {2440588 11:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 82800 +test clock-29.1524 {time parsing} { + clock scan {2440588 11:00:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 82800 +test clock-29.1525 {time parsing} { + clock scan {2440588 11:?:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 82800 +test clock-29.1526 {time parsing} { + clock scan {2440588 11 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l %p} +} 82800 +test clock-29.1527 {time parsing} { + clock scan {2440588 11:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 82800 +test clock-29.1528 {time parsing} { + clock scan {2440588 11:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 82800 +test clock-29.1529 {time parsing} { + clock scan {2440588 11:00:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 82800 +test clock-29.1530 {time parsing} { + clock scan {2440588 11:?:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 82800 +test clock-29.1531 {time parsing} { + clock scan {2440588 xi PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI %p} +} 82800 +test clock-29.1532 {time parsing} { + clock scan {2440588 xi:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 82800 +test clock-29.1533 {time parsing} { + clock scan {2440588 xi:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 82800 +test clock-29.1534 {time parsing} { + clock scan {2440588 xi:00:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 82800 +test clock-29.1535 {time parsing} { + clock scan {2440588 xi:?:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 82800 +test clock-29.1536 {time parsing} { + clock scan {2440588 xi PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol %p} +} 82800 +test clock-29.1537 {time parsing} { + clock scan {2440588 xi:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 82800 +test clock-29.1538 {time parsing} { + clock scan {2440588 xi:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 82800 +test clock-29.1539 {time parsing} { + clock scan {2440588 xi:00:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 82800 +test clock-29.1540 {time parsing} { + clock scan {2440588 xi:?:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 82800 +test clock-29.1541 {time parsing} { + clock scan {2440588 11 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I %P} +} 82800 +test clock-29.1542 {time parsing} { + clock scan {2440588 11:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 82800 +test clock-29.1543 {time parsing} { + clock scan {2440588 11:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 82800 +test clock-29.1544 {time parsing} { + clock scan {2440588 11:00:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 82800 +test clock-29.1545 {time parsing} { + clock scan {2440588 11:?:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 82800 +test clock-29.1546 {time parsing} { + clock scan {2440588 11 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l %P} +} 82800 +test clock-29.1547 {time parsing} { + clock scan {2440588 11:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 82800 +test clock-29.1548 {time parsing} { + clock scan {2440588 11:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 82800 +test clock-29.1549 {time parsing} { + clock scan {2440588 11:00:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 82800 +test clock-29.1550 {time parsing} { + clock scan {2440588 11:?:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 82800 +test clock-29.1551 {time parsing} { + clock scan {2440588 xi pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI %P} +} 82800 +test clock-29.1552 {time parsing} { + clock scan {2440588 xi:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 82800 +test clock-29.1553 {time parsing} { + clock scan {2440588 xi:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 82800 +test clock-29.1554 {time parsing} { + clock scan {2440588 xi:00:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 82800 +test clock-29.1555 {time parsing} { + clock scan {2440588 xi:?:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 82800 +test clock-29.1556 {time parsing} { + clock scan {2440588 xi pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol %P} +} 82800 +test clock-29.1557 {time parsing} { + clock scan {2440588 xi:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 82800 +test clock-29.1558 {time parsing} { + clock scan {2440588 xi:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 82800 +test clock-29.1559 {time parsing} { + clock scan {2440588 xi:00:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 82800 +test clock-29.1560 {time parsing} { + clock scan {2440588 xi:?:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 82800 +test clock-29.1561 {time parsing} { + clock scan {2440588 23:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 82801 +test clock-29.1562 {time parsing} { + clock scan {2440588 23:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 82801 +test clock-29.1563 {time parsing} { + clock scan {2440588 23:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 82801 +test clock-29.1564 {time parsing} { + clock scan {2440588 23:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 82801 +test clock-29.1565 {time parsing} { + clock scan {2440588 xxiii:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 82801 +test clock-29.1566 {time parsing} { + clock scan {2440588 xxiii:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 82801 +test clock-29.1567 {time parsing} { + clock scan {2440588 xxiii:00:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 82801 +test clock-29.1568 {time parsing} { + clock scan {2440588 xxiii:?:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 82801 +test clock-29.1569 {time parsing} { + clock scan {2440588 11:00:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 82801 +test clock-29.1570 {time parsing} { + clock scan {2440588 11:?:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 82801 +test clock-29.1571 {time parsing} { + clock scan {2440588 11:00:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 82801 +test clock-29.1572 {time parsing} { + clock scan {2440588 11:?:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 82801 +test clock-29.1573 {time parsing} { + clock scan {2440588 xi:00:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 82801 +test clock-29.1574 {time parsing} { + clock scan {2440588 xi:?:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 82801 +test clock-29.1575 {time parsing} { + clock scan {2440588 xi:00:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 82801 +test clock-29.1576 {time parsing} { + clock scan {2440588 xi:?:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 82801 +test clock-29.1577 {time parsing} { + clock scan {2440588 11:00:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 82801 +test clock-29.1578 {time parsing} { + clock scan {2440588 11:?:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 82801 +test clock-29.1579 {time parsing} { + clock scan {2440588 11:00:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 82801 +test clock-29.1580 {time parsing} { + clock scan {2440588 11:?:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 82801 +test clock-29.1581 {time parsing} { + clock scan {2440588 xi:00:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 82801 +test clock-29.1582 {time parsing} { + clock scan {2440588 xi:?:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 82801 +test clock-29.1583 {time parsing} { + clock scan {2440588 xi:00:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 82801 +test clock-29.1584 {time parsing} { + clock scan {2440588 xi:?:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 82801 +test clock-29.1585 {time parsing} { + clock scan {2440588 23:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 82859 +test clock-29.1586 {time parsing} { + clock scan {2440588 23:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 82859 +test clock-29.1587 {time parsing} { + clock scan {2440588 23:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 82859 +test clock-29.1588 {time parsing} { + clock scan {2440588 23:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 82859 +test clock-29.1589 {time parsing} { + clock scan {2440588 xxiii:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 82859 +test clock-29.1590 {time parsing} { + clock scan {2440588 xxiii:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 82859 +test clock-29.1591 {time parsing} { + clock scan {2440588 xxiii:00:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 82859 +test clock-29.1592 {time parsing} { + clock scan {2440588 xxiii:?:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 82859 +test clock-29.1593 {time parsing} { + clock scan {2440588 11:00:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 82859 +test clock-29.1594 {time parsing} { + clock scan {2440588 11:?:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 82859 +test clock-29.1595 {time parsing} { + clock scan {2440588 11:00:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 82859 +test clock-29.1596 {time parsing} { + clock scan {2440588 11:?:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 82859 +test clock-29.1597 {time parsing} { + clock scan {2440588 xi:00:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 82859 +test clock-29.1598 {time parsing} { + clock scan {2440588 xi:?:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 82859 +test clock-29.1599 {time parsing} { + clock scan {2440588 xi:00:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 82859 +test clock-29.1600 {time parsing} { + clock scan {2440588 xi:?:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 82859 +test clock-29.1601 {time parsing} { + clock scan {2440588 11:00:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 82859 +test clock-29.1602 {time parsing} { + clock scan {2440588 11:?:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 82859 +test clock-29.1603 {time parsing} { + clock scan {2440588 11:00:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 82859 +test clock-29.1604 {time parsing} { + clock scan {2440588 11:?:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 82859 +test clock-29.1605 {time parsing} { + clock scan {2440588 xi:00:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 82859 +test clock-29.1606 {time parsing} { + clock scan {2440588 xi:?:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 82859 +test clock-29.1607 {time parsing} { + clock scan {2440588 xi:00:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 82859 +test clock-29.1608 {time parsing} { + clock scan {2440588 xi:?:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 82859 +test clock-29.1609 {time parsing} { + clock scan {2440588 23:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 82860 +test clock-29.1610 {time parsing} { + clock scan {2440588 23:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 82860 +test clock-29.1611 {time parsing} { + clock scan {2440588 23:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 82860 +test clock-29.1612 {time parsing} { + clock scan {2440588 23:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 82860 +test clock-29.1613 {time parsing} { + clock scan {2440588 23:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 82860 +test clock-29.1614 {time parsing} { + clock scan {2440588 23:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 82860 +test clock-29.1615 {time parsing} { + clock scan {2440588 23:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 82860 +test clock-29.1616 {time parsing} { + clock scan {2440588 23:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 82860 +test clock-29.1617 {time parsing} { + clock scan {2440588 xxiii:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 82860 +test clock-29.1618 {time parsing} { + clock scan {2440588 xxiii:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 82860 +test clock-29.1619 {time parsing} { + clock scan {2440588 xxiii:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 82860 +test clock-29.1620 {time parsing} { + clock scan {2440588 xxiii:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 82860 +test clock-29.1621 {time parsing} { + clock scan {2440588 xxiii:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 82860 +test clock-29.1622 {time parsing} { + clock scan {2440588 xxiii:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 82860 +test clock-29.1623 {time parsing} { + clock scan {2440588 xxiii:01:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 82860 +test clock-29.1624 {time parsing} { + clock scan {2440588 xxiii:i:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 82860 +test clock-29.1625 {time parsing} { + clock scan {2440588 11:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 82860 +test clock-29.1626 {time parsing} { + clock scan {2440588 11:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 82860 +test clock-29.1627 {time parsing} { + clock scan {2440588 11:01:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 82860 +test clock-29.1628 {time parsing} { + clock scan {2440588 11:i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 82860 +test clock-29.1629 {time parsing} { + clock scan {2440588 11:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 82860 +test clock-29.1630 {time parsing} { + clock scan {2440588 11:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 82860 +test clock-29.1631 {time parsing} { + clock scan {2440588 11:01:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 82860 +test clock-29.1632 {time parsing} { + clock scan {2440588 11:i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 82860 +test clock-29.1633 {time parsing} { + clock scan {2440588 xi:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 82860 +test clock-29.1634 {time parsing} { + clock scan {2440588 xi:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 82860 +test clock-29.1635 {time parsing} { + clock scan {2440588 xi:01:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 82860 +test clock-29.1636 {time parsing} { + clock scan {2440588 xi:i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 82860 +test clock-29.1637 {time parsing} { + clock scan {2440588 xi:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 82860 +test clock-29.1638 {time parsing} { + clock scan {2440588 xi:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 82860 +test clock-29.1639 {time parsing} { + clock scan {2440588 xi:01:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 82860 +test clock-29.1640 {time parsing} { + clock scan {2440588 xi:i:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 82860 +test clock-29.1641 {time parsing} { + clock scan {2440588 11:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 82860 +test clock-29.1642 {time parsing} { + clock scan {2440588 11:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 82860 +test clock-29.1643 {time parsing} { + clock scan {2440588 11:01:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 82860 +test clock-29.1644 {time parsing} { + clock scan {2440588 11:i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 82860 +test clock-29.1645 {time parsing} { + clock scan {2440588 11:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 82860 +test clock-29.1646 {time parsing} { + clock scan {2440588 11:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 82860 +test clock-29.1647 {time parsing} { + clock scan {2440588 11:01:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 82860 +test clock-29.1648 {time parsing} { + clock scan {2440588 11:i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 82860 +test clock-29.1649 {time parsing} { + clock scan {2440588 xi:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 82860 +test clock-29.1650 {time parsing} { + clock scan {2440588 xi:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 82860 +test clock-29.1651 {time parsing} { + clock scan {2440588 xi:01:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 82860 +test clock-29.1652 {time parsing} { + clock scan {2440588 xi:i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 82860 +test clock-29.1653 {time parsing} { + clock scan {2440588 xi:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 82860 +test clock-29.1654 {time parsing} { + clock scan {2440588 xi:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 82860 +test clock-29.1655 {time parsing} { + clock scan {2440588 xi:01:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 82860 +test clock-29.1656 {time parsing} { + clock scan {2440588 xi:i:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 82860 +test clock-29.1657 {time parsing} { + clock scan {2440588 23:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 82861 +test clock-29.1658 {time parsing} { + clock scan {2440588 23:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 82861 +test clock-29.1659 {time parsing} { + clock scan {2440588 23:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 82861 +test clock-29.1660 {time parsing} { + clock scan {2440588 23:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 82861 +test clock-29.1661 {time parsing} { + clock scan {2440588 xxiii:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 82861 +test clock-29.1662 {time parsing} { + clock scan {2440588 xxiii:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 82861 +test clock-29.1663 {time parsing} { + clock scan {2440588 xxiii:01:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 82861 +test clock-29.1664 {time parsing} { + clock scan {2440588 xxiii:i:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 82861 +test clock-29.1665 {time parsing} { + clock scan {2440588 11:01:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 82861 +test clock-29.1666 {time parsing} { + clock scan {2440588 11:i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 82861 +test clock-29.1667 {time parsing} { + clock scan {2440588 11:01:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 82861 +test clock-29.1668 {time parsing} { + clock scan {2440588 11:i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 82861 +test clock-29.1669 {time parsing} { + clock scan {2440588 xi:01:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 82861 +test clock-29.1670 {time parsing} { + clock scan {2440588 xi:i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 82861 +test clock-29.1671 {time parsing} { + clock scan {2440588 xi:01:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 82861 +test clock-29.1672 {time parsing} { + clock scan {2440588 xi:i:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 82861 +test clock-29.1673 {time parsing} { + clock scan {2440588 11:01:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 82861 +test clock-29.1674 {time parsing} { + clock scan {2440588 11:i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 82861 +test clock-29.1675 {time parsing} { + clock scan {2440588 11:01:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 82861 +test clock-29.1676 {time parsing} { + clock scan {2440588 11:i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 82861 +test clock-29.1677 {time parsing} { + clock scan {2440588 xi:01:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 82861 +test clock-29.1678 {time parsing} { + clock scan {2440588 xi:i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 82861 +test clock-29.1679 {time parsing} { + clock scan {2440588 xi:01:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 82861 +test clock-29.1680 {time parsing} { + clock scan {2440588 xi:i:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 82861 +test clock-29.1681 {time parsing} { + clock scan {2440588 23:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 82919 +test clock-29.1682 {time parsing} { + clock scan {2440588 23:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 82919 +test clock-29.1683 {time parsing} { + clock scan {2440588 23:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 82919 +test clock-29.1684 {time parsing} { + clock scan {2440588 23:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 82919 +test clock-29.1685 {time parsing} { + clock scan {2440588 xxiii:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 82919 +test clock-29.1686 {time parsing} { + clock scan {2440588 xxiii:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 82919 +test clock-29.1687 {time parsing} { + clock scan {2440588 xxiii:01:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 82919 +test clock-29.1688 {time parsing} { + clock scan {2440588 xxiii:i:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 82919 +test clock-29.1689 {time parsing} { + clock scan {2440588 11:01:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 82919 +test clock-29.1690 {time parsing} { + clock scan {2440588 11:i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 82919 +test clock-29.1691 {time parsing} { + clock scan {2440588 11:01:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 82919 +test clock-29.1692 {time parsing} { + clock scan {2440588 11:i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 82919 +test clock-29.1693 {time parsing} { + clock scan {2440588 xi:01:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 82919 +test clock-29.1694 {time parsing} { + clock scan {2440588 xi:i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 82919 +test clock-29.1695 {time parsing} { + clock scan {2440588 xi:01:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 82919 +test clock-29.1696 {time parsing} { + clock scan {2440588 xi:i:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 82919 +test clock-29.1697 {time parsing} { + clock scan {2440588 11:01:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 82919 +test clock-29.1698 {time parsing} { + clock scan {2440588 11:i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 82919 +test clock-29.1699 {time parsing} { + clock scan {2440588 11:01:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 82919 +test clock-29.1700 {time parsing} { + clock scan {2440588 11:i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 82919 +test clock-29.1701 {time parsing} { + clock scan {2440588 xi:01:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 82919 +test clock-29.1702 {time parsing} { + clock scan {2440588 xi:i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 82919 +test clock-29.1703 {time parsing} { + clock scan {2440588 xi:01:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 82919 +test clock-29.1704 {time parsing} { + clock scan {2440588 xi:i:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 82919 +test clock-29.1705 {time parsing} { + clock scan {2440588 23:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M } +} 86340 +test clock-29.1706 {time parsing} { + clock scan {2440588 23:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM } +} 86340 +test clock-29.1707 {time parsing} { + clock scan {2440588 23:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 86340 +test clock-29.1708 {time parsing} { + clock scan {2440588 23:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 86340 +test clock-29.1709 {time parsing} { + clock scan {2440588 23:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M } +} 86340 +test clock-29.1710 {time parsing} { + clock scan {2440588 23:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM } +} 86340 +test clock-29.1711 {time parsing} { + clock scan {2440588 23:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 86340 +test clock-29.1712 {time parsing} { + clock scan {2440588 23:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 86340 +test clock-29.1713 {time parsing} { + clock scan {2440588 xxiii:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M } +} 86340 +test clock-29.1714 {time parsing} { + clock scan {2440588 xxiii:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM } +} 86340 +test clock-29.1715 {time parsing} { + clock scan {2440588 xxiii:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 86340 +test clock-29.1716 {time parsing} { + clock scan {2440588 xxiii:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 86340 +test clock-29.1717 {time parsing} { + clock scan {2440588 xxiii:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M } +} 86340 +test clock-29.1718 {time parsing} { + clock scan {2440588 xxiii:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM } +} 86340 +test clock-29.1719 {time parsing} { + clock scan {2440588 xxiii:59:00 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 86340 +test clock-29.1720 {time parsing} { + clock scan {2440588 xxiii:lix:? } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 86340 +test clock-29.1721 {time parsing} { + clock scan {2440588 11:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %p} +} 86340 +test clock-29.1722 {time parsing} { + clock scan {2440588 11:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %p} +} 86340 +test clock-29.1723 {time parsing} { + clock scan {2440588 11:59:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 86340 +test clock-29.1724 {time parsing} { + clock scan {2440588 11:lix:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 86340 +test clock-29.1725 {time parsing} { + clock scan {2440588 11:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %p} +} 86340 +test clock-29.1726 {time parsing} { + clock scan {2440588 11:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %p} +} 86340 +test clock-29.1727 {time parsing} { + clock scan {2440588 11:59:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 86340 +test clock-29.1728 {time parsing} { + clock scan {2440588 11:lix:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 86340 +test clock-29.1729 {time parsing} { + clock scan {2440588 xi:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %p} +} 86340 +test clock-29.1730 {time parsing} { + clock scan {2440588 xi:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %p} +} 86340 +test clock-29.1731 {time parsing} { + clock scan {2440588 xi:59:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 86340 +test clock-29.1732 {time parsing} { + clock scan {2440588 xi:lix:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 86340 +test clock-29.1733 {time parsing} { + clock scan {2440588 xi:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %p} +} 86340 +test clock-29.1734 {time parsing} { + clock scan {2440588 xi:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %p} +} 86340 +test clock-29.1735 {time parsing} { + clock scan {2440588 xi:59:00 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 86340 +test clock-29.1736 {time parsing} { + clock scan {2440588 xi:lix:? PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 86340 +test clock-29.1737 {time parsing} { + clock scan {2440588 11:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M %P} +} 86340 +test clock-29.1738 {time parsing} { + clock scan {2440588 11:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM %P} +} 86340 +test clock-29.1739 {time parsing} { + clock scan {2440588 11:59:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 86340 +test clock-29.1740 {time parsing} { + clock scan {2440588 11:lix:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 86340 +test clock-29.1741 {time parsing} { + clock scan {2440588 11:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M %P} +} 86340 +test clock-29.1742 {time parsing} { + clock scan {2440588 11:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM %P} +} 86340 +test clock-29.1743 {time parsing} { + clock scan {2440588 11:59:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 86340 +test clock-29.1744 {time parsing} { + clock scan {2440588 11:lix:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 86340 +test clock-29.1745 {time parsing} { + clock scan {2440588 xi:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M %P} +} 86340 +test clock-29.1746 {time parsing} { + clock scan {2440588 xi:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM %P} +} 86340 +test clock-29.1747 {time parsing} { + clock scan {2440588 xi:59:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 86340 +test clock-29.1748 {time parsing} { + clock scan {2440588 xi:lix:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 86340 +test clock-29.1749 {time parsing} { + clock scan {2440588 xi:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M %P} +} 86340 +test clock-29.1750 {time parsing} { + clock scan {2440588 xi:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM %P} +} 86340 +test clock-29.1751 {time parsing} { + clock scan {2440588 xi:59:00 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 86340 +test clock-29.1752 {time parsing} { + clock scan {2440588 xi:lix:? pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 86340 +test clock-29.1753 {time parsing} { + clock scan {2440588 23:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 86341 +test clock-29.1754 {time parsing} { + clock scan {2440588 23:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 86341 +test clock-29.1755 {time parsing} { + clock scan {2440588 23:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 86341 +test clock-29.1756 {time parsing} { + clock scan {2440588 23:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 86341 +test clock-29.1757 {time parsing} { + clock scan {2440588 xxiii:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 86341 +test clock-29.1758 {time parsing} { + clock scan {2440588 xxiii:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 86341 +test clock-29.1759 {time parsing} { + clock scan {2440588 xxiii:59:01 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 86341 +test clock-29.1760 {time parsing} { + clock scan {2440588 xxiii:lix:i } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 86341 +test clock-29.1761 {time parsing} { + clock scan {2440588 11:59:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 86341 +test clock-29.1762 {time parsing} { + clock scan {2440588 11:lix:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 86341 +test clock-29.1763 {time parsing} { + clock scan {2440588 11:59:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 86341 +test clock-29.1764 {time parsing} { + clock scan {2440588 11:lix:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 86341 +test clock-29.1765 {time parsing} { + clock scan {2440588 xi:59:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 86341 +test clock-29.1766 {time parsing} { + clock scan {2440588 xi:lix:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 86341 +test clock-29.1767 {time parsing} { + clock scan {2440588 xi:59:01 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 86341 +test clock-29.1768 {time parsing} { + clock scan {2440588 xi:lix:i PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 86341 +test clock-29.1769 {time parsing} { + clock scan {2440588 11:59:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 86341 +test clock-29.1770 {time parsing} { + clock scan {2440588 11:lix:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 86341 +test clock-29.1771 {time parsing} { + clock scan {2440588 11:59:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 86341 +test clock-29.1772 {time parsing} { + clock scan {2440588 11:lix:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 86341 +test clock-29.1773 {time parsing} { + clock scan {2440588 xi:59:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 86341 +test clock-29.1774 {time parsing} { + clock scan {2440588 xi:lix:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 86341 +test clock-29.1775 {time parsing} { + clock scan {2440588 xi:59:01 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 86341 +test clock-29.1776 {time parsing} { + clock scan {2440588 xi:lix:i pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 86341 +test clock-29.1777 {time parsing} { + clock scan {2440588 23:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%M:%S } +} 86399 +test clock-29.1778 {time parsing} { + clock scan {2440588 23:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %H:%OM:%OS } +} 86399 +test clock-29.1779 {time parsing} { + clock scan {2440588 23:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%M:%S } +} 86399 +test clock-29.1780 {time parsing} { + clock scan {2440588 23:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %k:%OM:%OS } +} 86399 +test clock-29.1781 {time parsing} { + clock scan {2440588 xxiii:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%M:%S } +} 86399 +test clock-29.1782 {time parsing} { + clock scan {2440588 xxiii:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %OH:%OM:%OS } +} 86399 +test clock-29.1783 {time parsing} { + clock scan {2440588 xxiii:59:59 } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%M:%S } +} 86399 +test clock-29.1784 {time parsing} { + clock scan {2440588 xxiii:lix:lix } \ + -gmt true -locale en_US_roman \ + -format {%J %Ok:%OM:%OS } +} 86399 +test clock-29.1785 {time parsing} { + clock scan {2440588 11:59:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %p} +} 86399 +test clock-29.1786 {time parsing} { + clock scan {2440588 11:lix:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %p} +} 86399 +test clock-29.1787 {time parsing} { + clock scan {2440588 11:59:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %p} +} 86399 +test clock-29.1788 {time parsing} { + clock scan {2440588 11:lix:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %p} +} 86399 +test clock-29.1789 {time parsing} { + clock scan {2440588 xi:59:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %p} +} 86399 +test clock-29.1790 {time parsing} { + clock scan {2440588 xi:lix:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %p} +} 86399 +test clock-29.1791 {time parsing} { + clock scan {2440588 xi:59:59 PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %p} +} 86399 +test clock-29.1792 {time parsing} { + clock scan {2440588 xi:lix:lix PM} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %p} +} 86399 +test clock-29.1793 {time parsing} { + clock scan {2440588 11:59:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%M:%S %P} +} 86399 +test clock-29.1794 {time parsing} { + clock scan {2440588 11:lix:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %I:%OM:%OS %P} +} 86399 +test clock-29.1795 {time parsing} { + clock scan {2440588 11:59:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%M:%S %P} +} 86399 +test clock-29.1796 {time parsing} { + clock scan {2440588 11:lix:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %l:%OM:%OS %P} +} 86399 +test clock-29.1797 {time parsing} { + clock scan {2440588 xi:59:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%M:%S %P} +} 86399 +test clock-29.1798 {time parsing} { + clock scan {2440588 xi:lix:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %OI:%OM:%OS %P} +} 86399 +test clock-29.1799 {time parsing} { + clock scan {2440588 xi:59:59 pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%M:%S %P} +} 86399 +test clock-29.1800 {time parsing} { + clock scan {2440588 xi:lix:lix pm} \ + -gmt true -locale en_US_roman \ + -format {%J %Ol:%OM:%OS %P} +} 86399 +# END testcases29 + +test clock-30.1 {clock add years} { + set t [clock scan 2000-01-01 -format %Y-%m-%d -timezone :UTC] + set f [clock add $t 1 year -timezone :UTC] + clock format $f -format %Y-%m-%d -timezone :UTC +} {2001-01-01} +test clock-30.2 {clock add years - leap day} { + set t [clock scan 2000-02-29 -format %Y-%m-%d -timezone :UTC] + set f [clock add $t 1 years -timezone :UTC] + clock format $f -format %Y-%m-%d -timezone :UTC +} {2001-02-28} +test clock-30.3 {clock add months} { + set t [clock scan 2000-01-01 -format %Y-%m-%d -timezone :UTC] + set f [clock add $t 1 month -timezone :UTC] + clock format $f -format %Y-%m-%d -timezone :UTC +} {2000-02-01} +test clock-30.4 {clock add months, short month} { + set t [clock scan 2000-01-31 -format %Y-%m-%d -timezone :UTC] + set f [clock add $t 1 months -timezone :UTC] + clock format $f -format %Y-%m-%d -timezone :UTC +} {2000-02-29} +test clock-30.5 {clock add months, end of year} { + set t [clock scan 2000-12-01 -format %Y-%m-%d -timezone :UTC] + set f [clock add $t 1 month -timezone :UTC] + clock format $f -format %Y-%m-%d -timezone :UTC +} {2001-01-01} +test clock-30.6 {clock add months, one year one month vs 13 months} { + set t [clock scan 2000-02-29 -format %Y-%m-%d -timezone :UTC] + set f1 [clock add $t 1 year 1 month -timezone :UTC] + set f2 [clock add $t 13 months -timezone :UTC] + set x1 [clock format $f1 -format %Y-%m-%d -timezone :UTC] + set x2 [clock format $f2 -format %Y-%m-%d -timezone :UTC] + list $x1 $x2 +} {2001-03-28 2001-03-29} +test clock-30.7 {clock add months, 1 year 1 month vs 1 month 1 year} { + set t [clock scan 2000-02-29 -format %Y-%m-%d -timezone :UTC] + set f1 [clock add $t 1 year 1 month -timezone :UTC] + set f2 [clock add $t 1 month 1 year -timezone :UTC] + set x1 [clock format $f1 -format %Y-%m-%d -timezone :UTC] + set x2 [clock format $f2 -format %Y-%m-%d -timezone :UTC] + list $x1 $x2 +} {2001-03-28 2001-03-29} +test clock-30.8 {clock add months, negative} { + set t [clock scan 2000-03-31 -format %Y-%m-%d -timezone :UTC] + set f1 [clock add $t -1 month -timezone :UTC] + set f2 [clock add $t -2 month -timezone :UTC] + set f3 [clock add $t -3 month -timezone :UTC] + set f4 [clock add $t -4 month -timezone :UTC] + set x1 [clock format $f1 -format %Y-%m-%d -timezone :UTC] + set x2 [clock format $f2 -format %Y-%m-%d -timezone :UTC] + set x3 [clock format $f3 -format %Y-%m-%d -timezone :UTC] + set x4 [clock format $f4 -format %Y-%m-%d -timezone :UTC] + list $x1 $x2 $x3 $x4 +} {2000-02-29 2000-01-31 1999-12-31 1999-11-30} +test clock-30.9 {clock add days} { + set t [clock scan {2000-01-01 12:34:56} -format {%Y-%m-%d %H:%M:%S} \ + -timezone :UTC] + set f1 [clock add $t 1 day -timezone :UTC] + set f2 [clock add $t -1 day -timezone :UTC] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S} -timezone :UTC] + set x2 [clock format $f2 -format {%Y-%m-%d %H:%M:%S} -timezone :UTC] + list $x1 $x2 +} {{2000-01-02 12:34:56} {1999-12-31 12:34:56}} +test clock-30.10 {clock add days, spring DST conversion, before} { + set t [clock scan {2004-04-03 01:59:59} -format {%Y-%m-%d %H:%M:%S} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f1 [clock add $t 1 day \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f2 [clock add $t 2 days \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x2 [clock format $f2 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + list $x1 $x2 +} {{2004-04-04 01:59:59 -0500} {2004-04-05 01:59:59 -0400}} +test clock-30.11 {clock add days, spring DST conversion, bad case} { + set t [clock scan {2004-04-03 02:30:00} -format {%Y-%m-%d %H:%M:%S} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f1 [clock add $t 1 day \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f2 [clock add $t 2 day \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x2 [clock format $f2 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + list $x1 $x2 +} {{2004-04-04 03:30:00 -0400} {2004-04-05 02:30:00 -0400}} +test clock-30.12 {clock add days, spring DST conversion, after} { + set t [clock scan {2004-04-03 03:00:00} -format {%Y-%m-%d %H:%M:%S} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f1 [clock add $t 1 day -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f2 [clock add $t 2 day -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x2 [clock format $f2 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + list $x1 $x2 +} {{2004-04-04 03:00:00 -0400} {2004-04-05 03:00:00 -0400}} +test clock-30.13 {clock add days, fall DST conversion, before} { + set t [clock scan {2004-10-30 00:59:59} -format {%Y-%m-%d %H:%M:%S} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f1 [clock add $t 1 day \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f2 [clock add $t 2 day \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x2 [clock format $f2 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + list $x1 $x2 +} {{2004-10-31 00:59:59 -0400} {2004-11-01 00:59:59 -0500}} +test clock-30.14 {clock add days, fall DST conversion, bad case} { + set t [clock scan {2004-10-30 01:30:00} -format {%Y-%m-%d %H:%M:%S} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f1 [clock add $t 1 day \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f2 [clock add $t 2 day \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x2 [clock format $f2 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + list $x1 $x2 +} {{2004-10-31 01:30:00 -0400} {2004-11-01 01:30:00 -0500}} +test clock-30.15 {clock add days, fall DST conversion, after} { + set t [clock scan {2004-10-30 02:30:00} -format {%Y-%m-%d %H:%M:%S} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f1 [clock add $t 1 day \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f2 [clock add $t 2 day \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x2 [clock format $f2 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + list $x1 $x2 +} {{2004-10-31 02:30:00 -0500} {2004-11-01 02:30:00 -0500}} +test clock-30.16 {clock add weeks} { + set t [clock scan {2000-01-01 12:34:56} -format {%Y-%m-%d %H:%M:%S} \ + -timezone :UTC] + set f1 [clock add $t 1 week -timezone :UTC] + set f2 [clock add $t -1 weeks -timezone :UTC] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S} -timezone :UTC] + set x2 [clock format $f2 -format {%Y-%m-%d %H:%M:%S} -timezone :UTC] + list $x1 $x2 +} {{2000-01-08 12:34:56} {1999-12-25 12:34:56}} +test clock-30.17 {clock add hours} { + set t [clock scan {2000-01-01 12:34:56} -format {%Y-%m-%d %H:%M:%S} \ + -timezone :UTC] + set f1 [clock add $t 1 hour -timezone :UTC] + set f2 [clock add $t -1 hours -timezone :UTC] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S} -timezone :UTC] + set x2 [clock format $f2 -format {%Y-%m-%d %H:%M:%S} -timezone :UTC] + list $x1 $x2 +} {{2000-01-01 13:34:56} {2000-01-01 11:34:56}} +test clock-30.18 {clock add hours at DST conversion} { + set t [clock scan {2004-04-04 01:00:00 -0500} \ + -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f1 [clock add $t 1 hour -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] +} {2004-04-04 03:00:00 -0400} +test clock-30.19 {clock add hours at DST conversion} { + set t [clock scan {2004-10-31 01:00:00 -0400} \ + -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f1 [clock add $t 1 hour \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] +} {2004-10-31 01:00:00 -0500} +test clock-30.20 {clock add minutes} { + set t [clock scan {2000-01-01 12:34:56} -format {%Y-%m-%d %H:%M:%S} \ + -timezone :UTC] + set f1 [clock add $t 60 minute -timezone :UTC] + set f2 [clock add $t -60 minutes -timezone :UTC] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S} -timezone :UTC] + set x2 [clock format $f2 -format {%Y-%m-%d %H:%M:%S} -timezone :UTC] + list $x1 $x2 +} {{2000-01-01 13:34:56} {2000-01-01 11:34:56}} +test clock-30.21 {clock add minutes at DST conversion} { + set t [clock scan {2004-04-04 01:00:00 -0500} \ + -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f1 [clock add $t 60 minutes \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] +} {2004-04-04 03:00:00 -0400} +test clock-30.22 {clock add minutes at DST conversion} { + set t [clock scan {2004-10-31 01:00:00 -0400} \ + -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f1 [clock add $t 60 minutes \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] +} {2004-10-31 01:00:00 -0500} +test clock-30.23 {clock add seconds} { + set t [clock scan {2000-01-01 12:34:56} -format {%Y-%m-%d %H:%M:%S} \ + -timezone :UTC] + set f1 [clock add $t 3600 second -timezone :UTC] + set f2 [clock add $t -3600 seconds -timezone :UTC] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S} -timezone :UTC] + set x2 [clock format $f2 -format {%Y-%m-%d %H:%M:%S} -timezone :UTC] + list $x1 $x2 +} {{2000-01-01 13:34:56} {2000-01-01 11:34:56}} +test clock-30.24 {clock add seconds at DST conversion} { + set t [clock scan {2004-04-04 01:00:00 -0500} \ + -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f1 [clock add $t 3600 seconds \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] +} {2004-04-04 03:00:00 -0400} +test clock-30.25 {clock add seconds at DST conversion} { + set t [clock scan {2004-10-31 01:00:00 -0400} \ + -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set f1 [clock add $t 3600 seconds -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] + set x1 [clock format $f1 -format {%Y-%m-%d %H:%M:%S %z} \ + -timezone EST05:00EDT04:00,M4.1.0/02:00,M10.5.0/02:00] +} {2004-10-31 01:00:00 -0500} + +test clock-31.1 {system locale} \ + -constraints win \ + -setup { + namespace eval ::tcl::clock { + namespace import -force ::testClock::registry + } + set noreg [info exists ::tcl::clock::NoRegistry] + if {$noreg} {unset ::tcl::clock::NoRegistry} + ::tcl::clock::ClearCaches + } \ + -body { + clock format 0 -timezone :UTC -locale system -format %x + } \ + -cleanup { + namespace eval ::tcl::clock { + rename registry {} + } + if {$noreg} {set ::tcl::clock::NoRegistry {}} + ::tcl::clock::ClearCaches + } \ + -result [clock format 0 -timezone :UTC -locale current \ + -format {%d-%b-%Y}] + +test clock-31.2 {system locale} \ + -constraints win \ + -setup { + namespace eval ::tcl::clock { + namespace import -force ::testClock::registry + } + set noreg [info exists ::tcl::clock::NoRegistry] + if {$noreg} {unset ::tcl::clock::NoRegistry} + ::tcl::clock::ClearCaches + } \ + -body { + clock format 0 -timezone :UTC -locale system -format %Ex + } \ + -cleanup { + namespace eval ::tcl::clock { + rename registry {} + } + if {$noreg} {set ::tcl::clock::NoRegistry {}} + ::tcl::clock::ClearCaches + } \ + -result [clock format 0 -timezone :UTC -locale current \ + -format {the %d' day of %B %Y}] + +test clock-31.3 {system locale} \ + -constraints win \ + -setup { + namespace eval ::tcl::clock { + namespace import -force ::testClock::registry + } + set noreg [info exists ::tcl::clock::NoRegistry] + if {$noreg} {unset ::tcl::clock::NoRegistry} + ::tcl::clock::ClearCaches + } \ + -body { + clock format 0 -timezone :UTC -locale system -format %X + } \ + -cleanup { + namespace eval ::tcl::clock { + rename registry {} + } + if {$noreg} {set ::tcl::clock::NoRegistry {}} + ::tcl::clock::ClearCaches + } \ + -result [clock format 0 -timezone :UTC -locale current \ + -format {%l:%M:%S %p}] + +test clock-31.4 {system locale} \ + -constraints win \ + -setup { + namespace eval ::tcl::clock { + namespace import -force ::testClock::registry + } + set noreg [info exists ::tcl::clock::NoRegistry] + if {$noreg} {unset ::tcl::clock::NoRegistry} + if { [info exists env(TZ)] } { + set oldTZ $env(TZ) + unset env(TZ) + } + if { [info exists env(TCL_TZ)] } { + set oldTclTZ $env(TCL_TZ) + unset env(TCL_TZ) + } + ::tcl::clock::ClearCaches + } \ + -body { + clock format 0 -locale system -format %x + } \ + -cleanup { + namespace eval ::tcl::clock { + rename registry {} + } + if { [info exists oldTclTZ] } { + set env(TCL_TZ) $oldTclTZ + } + if { [info exists oldTZ] } { + set env(TZ) $oldTZ + } + if {$noreg} {set ::tcl::clock::NoRegistry {}} + ::tcl::clock::ClearCaches + } \ + -result [clock format 0 -locale current -timezone EST5 \ + -format {%d-%b-%Y}] + +test clock-31.5 {system locale} \ + -constraints win \ + -setup { + namespace eval ::tcl::clock { + namespace import -force ::testClock::registry + } + set noreg [info exists ::tcl::clock::NoRegistry] + if {$noreg} {unset ::tcl::clock::NoRegistry} + if { [info exists env(TZ)] } { + set oldTZ $env(TZ) + unset env(TZ) + } + if { [info exists env(TCL_TZ)] } { + set oldTclTZ $env(TCL_TZ) + unset env(TCL_TZ) + } + ::tcl::clock::ClearCaches + } \ + -body { + clock format 0 -locale system -format %Ex + } \ + -cleanup { + namespace eval ::tcl::clock { + rename registry {} + } + if {$noreg} {set ::tcl::clock::NoRegistry {}} + if { [info exists oldTclTZ] } { + set env(TCL_TZ) $oldTclTZ + } + if { [info exists oldTZ] } { + set env(TZ) $oldTZ + } + ::tcl::clock::ClearCaches + } \ + -result [clock format 0 -locale current -timezone EST5 \ + -format {the %d' day of %B %Y}] + +test clock-31.6 {system locale} \ + -constraints win \ + -setup { + namespace eval ::tcl::clock { + namespace import -force ::testClock::registry + } + set noreg [info exists ::tcl::clock::NoRegistry] + if {$noreg} {unset ::tcl::clock::NoRegistry} + if { [info exists env(TZ)] } { + set oldTZ $env(TZ) + unset env(TZ) + } + if { [info exists env(TCL_TZ)] } { + set oldTclTZ $env(TCL_TZ) + unset env(TCL_TZ) + } + ::tcl::clock::ClearCaches + } \ + -body { + clock format 0 -locale system -format "%X %Z" + } \ + -cleanup { + namespace eval ::tcl::clock { + rename registry {} + } + if {$noreg} {set ::tcl::clock::NoRegistry {}} + if { [info exists oldTclTZ] } { + set env(TCL_TZ) $oldTclTZ + } + if { [info exists oldTZ] } { + set env(TZ) $oldTZ + } + ::tcl::clock::ClearCaches + } \ + -result [clock format 0 -locale current -timezone EST5 \ + -format {%l:%M:%S %p %Z}] + +test clock-32.1 {scan/format across the Gregorian change} { + set problems {} + set t [expr { wide(-6857395200) }] + foreach d { 1 2 14 15 16 + 17 18 19 20 21 22 23 + 24 25 26 27 28 29 30 } \ + j { 245 246 258 259 260 + 261 262 263 264 265 266 267 + 268 269 270 271 272 273 274 } { + set u [format 1752-09-%02d $d] + set s [clock format $t -format %Y-%m-%d \ + -locale en_US_roman -timezone :UTC] + if { $s ne $u } { + append problems "formatting $t: $s should be $u\n" + } + set v [clock scan $u -format %Y-%m-%d \ + -locale en_US_roman -timezone :UTC] + if { $t ne $v } { + append problems "scanning $u: $t should be $v\n" + } + set u [format 1752-%03d $j] + set s [clock format $t -format %Y-%j \ + -locale en_US_roman -timezone :UTC] + if { $s ne $u } { + append problems "formatting $t: $s should be $u\n" + } + set v [clock scan $u -format %Y-%j \ + -locale en_US_roman -timezone :UTC] + if { $t ne $v } { + append problems "scanning $u: $t should be $v\n" + } + incr t 86400 + } + set problems +} {} + +# Legacy tests # clock clicks -test clock-2.1 {clock clicks tests} { +test clock-33.1 {clock clicks tests} { expr [clock clicks]+1 concat {} } {} -test clock-2.2 {clock clicks tests} { +test clock-33.2 {clock clicks tests} { set start [clock clicks] after 10 set end [clock clicks] expr "$end > $start" } {1} -test clock-2.3 {clock clicks tests} { +test clock-33.3 {clock clicks tests} { list [catch {clock clicks foo} msg] $msg -} {1 {bad switch "foo": must be -milliseconds}} -test clock-2.4 {clock clicks tests} { +} {1 {bad option "foo": must be -milliseconds or -microseconds}} +test clock-33.4 {clock clicks tests} { expr [clock clicks -milliseconds]+1 concat {} } {} -test clock-2.5 {clock clicks tests, millisecond timing test} { +test clock-33.4a {clock milliseconds} { + expr { [clock milliseconds] + 1 } + concat {} +} {} +test clock-33.5 {clock clicks tests, millisecond timing test} { + # This test can fail on a system that is so heavily loaded that + # the test takes >60 ms to run. set start [clock clicks -milli] after 10 set end [clock clicks -milli] # 60 msecs seems to be the max time slice under Windows 95/98 - expr {($end > $start) && (($end - $start) <= 60)} -} {1} -test clock-2.6 {clock clicks, milli with too much abbreviation} { - list [catch { clock clicks {} } msg] $msg -} {1 {bad switch "": must be -milliseconds}} -test clock-2.7 {clock clicks, milli with too much abbreviation} { + expr { + ($end > $start) && (($end - $start) <= 60) ? + "ok" : + "test should have taken 0-60 ms, actually took [expr $end - $start]"} +} {ok} +test clock-33.5a {clock tests, millisecond timing test} { + # This test can fail on a system that is so heavily loaded that + # the test takes >60 ms to run. + set start [clock milliseconds] + after 10 + set end [clock milliseconds] + # 60 msecs seems to be the max time slice under Windows 95/98 + expr { + ($end > $start) && (($end - $start) <= 60) ? + "ok" : + "test should have taken 0-60 ms, actually took [expr $end - $start]"} +} {ok} +test clock-33.6 {clock clicks, milli with too much abbreviation} { + list [catch { clock clicks ? } msg] $msg +} {1 {bad option "?": must be -milliseconds or -microseconds}} +test clock-33.7 {clock clicks, milli with too much abbreviation} { list [catch { clock clicks - } msg] $msg -} {1 {bad switch "-": must be -milliseconds}} - -# clock format -test clock-3.1 {clock format tests} {unixOnly} { - set clockval 657687766 - clock format $clockval -format {%a %b %d %I:%M:%S %p %Y} -gmt true -} {Sun Nov 04 03:02:46 AM 1990} -test clock-3.2 {clock format tests} \ - -body { - # TCL_USE_TIMEZONE_VAR - - catch {set oldtz $env(TZ)} - set env(TZ) PST - set x {} - append x [clock format 863800000 -format %Z -gmt 1] - append x [set env(TZ)] - catch {unset env(TZ); set env(TZ) $oldtz} - set x - } \ - -match regexp \ - -result {(?:GMT|UTC)PST} -test clock-3.3 {clock format tests} { - # tzset() under Borland doesn't seem to set up tzname[] for local - # timezone, which caused "clock format" to think that %Z was an invalid - # string. Don't care about answer, just that test runs w/o error. - - clock format 863800000 -format %Z - set x {} -} {} -test clock-3.4 {clock format tests} \ - -body { - # tzset() under Borland doesn't seem to set up tzname[] for gmt - # timezone. tzset() under MSVC has the following weird observed - # behavior: - # First time we call "clock format [clock seconds] -format %Z -gmt 1" - # we get "GMT", but on all subsequent calls we get the current time - # zone string, even though env(TZ) is GMT and the variable _timezone - # is 0. - set x {} - append x [clock format 863800000 -format %Z -gmt 1] - append x [clock format 863800000 -format %Z -gmt 1] - } \ - -match regexp \ - -result {GMTGMT|UTCUTC} -test clock-3.5 {clock format tests} { - list [catch {clock format} msg] $msg -} {1 {wrong # args: should be "clock format clockval ?-format string? ?-gmt boolean?"}} -test clock-3.6 {clock format tests} { - list [catch {clock format foo} msg] $msg -} {1 {expected integer but got "foo"}} -test clock-3.7 {clock format tests} {unixOrPc} { - set clockval 657687766 - clock format $clockval -format "%a %b %d %I:%M:%S %p %Y" -gmt true -} "Sun Nov 04 03:02:46 AM 1990" -test clock-3.8 {clock format tests} { - list [catch {clock format a b c d e g} msg] $msg -} {1 {wrong # args: should be "clock format clockval ?-format string? ?-gmt boolean?"}} -test clock-3.9 {clock format tests} {unixOrPc nonPortable} { - set clockval -1 - clock format $clockval -format "%a %b %d %I:%M:%S %p %Y" -gmt true -} "Wed Dec 31 11:59:59 PM 1969" -test clock-3.10 {clock format tests} { - list [catch {clock format 123 -bad arg} msg] $msg -} {1 {bad switch "-bad": must be -format or -gmt}} -test clock-3.11 {clock format tests} { - clock format 123 -format "x" -} x -test clock-3.12 {clock format tests} { - clock format 123 -format "" -} "" -test clock-3.13 {clock format with non-ASCII character in the format string} { - set oldenc [encoding system] - encoding system iso8859-1 - set res [clock format 0 -format \u00c4] - encoding system $oldenc - unset oldenc - set res -} "\u00c4" +} {1 {ambiguous option "-": must be -milliseconds or -microseconds}} + +test clock-33.8 {clock clicks test, microsecond timing test} { + # This test can fail on a system that is so heavily loaded that + # the test takes >60 ms to run. + set start [clock clicks -micro] + after 10 + set end [clock clicks -micro] + expr {($end > $start) && (($end - $start) <= 60000)} +} {1} +test clock-33.8a {clock test, microsecond timing test} { + # This test can fail on a system that is so heavily loaded that + # the test takes >60 ms to run. + set start [clock microseconds] + after 10 + set end [clock microseconds] + expr {($end > $start) && (($end - $start) <= 60000)} +} {1} -# Bug 942078 +test clock-33.9 {clock clicks test, millis align with seconds} { + set t1 [clock seconds] + while { 1 } { + set t2 [clock clicks -millis] + set t3 [clock seconds] + if { $t3 == $t1 } break + set t1 $t3 + } + expr { $t2 / 1000 == $t3 } +} {1} +test clock-33.9a {clock test, millis align with seconds} { + set t1 [clock seconds] + while { 1 } { + set t2 [clock milliseconds] + set t3 [clock seconds] + if { $t3 == $t1 } break + set t1 $t3 + } + expr { $t2 / 1000 == $t3 } +} {1} -test clock-3.14 {change of time zone} -setup { - catch { unset oldTZ } - if { [info exists env(TZ)] } { - set oldTZ $env(TZ) +test clock-33.10 {clock clicks test, micros align with seconds} { + set t1 [clock seconds] + while { 1 } { + set t2 [clock clicks -micros] + set t3 [clock seconds] + if { $t3 == $t1 } break + set t1 $t3 } -} -body { - set env(TZ) PST8PDT - set s [clock format 0 -format %H%M] - set env(TZ) GMT0 - append s -[clock format 0 -format %H%M] -} -cleanup { - if { [info exists oldTZ] } { - set env(TZ) $oldTZ - unset oldTZ - } else { - unset env(TZ) + expr { $t2 / 1000000 == $t3 } +} {1} +test clock-33.10a {clock test, micros align with seconds} { + set t1 [clock seconds] + while { 1 } { + set t2 [clock microseconds] + set t3 [clock seconds] + if { $t3 == $t1 } break + set t1 $t3 } -} -result {1600-0000} - + expr { $t2 / 1000000 == $t3 } +} {1} + +test clock-33.11 {clock clicks test, millis align with micros} { + set t1 [clock clicks -millis] + while { 1 } { + set t2 [clock clicks -micros] + set t3 [clock clicks -millis] + if { $t3 == $t1 } break + set t1 $t3 + } + expr { $t2 / 1000 == $t3 } +} {1} +test clock-33.11a {clock test, millis align with micros} { + set t1 [clock milliseconds] + while { 1 } { + set t2 [clock microseconds] + set t3 [clock milliseconds] + if { $t3 == $t1 } break + set t1 $t3 + } + expr { $t2 / 1000 == $t3 } +} {1} # clock scan -test clock-4.1 {clock scan tests} { +test clock-34.1 {clock scan tests} { list [catch {clock scan} msg] $msg -} {1 {wrong # args: should be "clock scan dateString ?-base clockValue? ?-gmt boolean?"}} -test clock-4.2 {clock scan tests} { - list [catch {clock scan "bad-string"} msg] $msg -} {1 {unable to convert date-time string "bad-string"}} -test clock-4.3 {clock scan tests} { +} {1 {wrong # args: should be "clock scan string ?-base seconds? ?-format string? ?-gmt boolean? ?-locale LOCALE? ?-timezone ZONE?"}} +test clock-34.2 {clock scan tests} {*}{ + -body {clock scan "bad-string"} + -returnCodes error + -match glob + -result {unable to convert date-time string "bad-string"*} +} +test clock-34.3 {clock scan tests} { clock format [clock scan "14 Feb 92" -gmt true] \ -format {%m/%d/%y %I:%M:%S %p} -gmt true } {02/14/92 12:00:00 AM} -test clock-4.4 {clock scan tests} { +test clock-34.4 {clock scan tests} { clock format [clock scan "Feb 14, 1992 12:20 PM" -gmt true] \ -format {%m/%d/%y %I:%M:%S %p} -gmt true } {02/14/92 12:20:00 PM} -test clock-4.5 {clock scan tests} { +test clock-34.5 {clock scan tests} { clock format \ [clock scan "Feb 14, 1992 12:20 PM" -base 319363200 -gmt true] \ -format {%m/%d/%y %I:%M:%S %p} -gmt true } {02/14/92 12:20:00 PM} -test clock-4.6 {clock scan tests} { +test clock-34.6 {clock scan tests} { set time [clock scan "Oct 23,1992 15:00"] clock format $time -format {%b %d,%Y %H:%M} } {Oct 23,1992 15:00} -test clock-4.7 {clock scan tests} { +test clock-34.7 {clock scan tests} { set time [clock scan "Oct 23,1992 15:00 GMT"] clock format $time -format {%b %d,%Y %H:%M GMT} -gmt true } {Oct 23,1992 15:00 GMT} -test clock-4.8 {clock scan tests} { +test clock-34.8 {clock scan tests} { set time [clock scan "Oct 23,1992 15:00" -gmt true] clock format $time -format {%b %d,%Y %H:%M GMT} -gmt true } {Oct 23,1992 15:00 GMT} -test clock-4.9 {clock scan tests} { +test clock-34.9 {clock scan tests} { list [catch {clock scan "Jan 12" -bad arg} msg] $msg -} {1 {bad switch "-bad": must be -base or -gmt}} +} {1 {bad switch "-bad", must be -base, -format, -gmt, -locale or -timezone}} # The following two two tests test the two year date policy -test clock-4.10 {clock scan tests} { +test clock-34.10 {clock scan tests} { set time [clock scan "1/1/71" -gmt true] clock format $time -format {%b %d,%Y %H:%M GMT} -gmt true } {Jan 01,1971 00:00 GMT} -test clock-4.11 {clock scan tests} { +test clock-34.11 {clock scan tests} { set time [clock scan "1/1/37" -gmt true] clock format $time -format {%b %d,%Y %H:%M GMT} -gmt true } {Jan 01,2037 00:00 GMT} -test clock-4.12 {clock scan, relative times} { +test clock-34.12 {clock scan, relative times} { set time [clock scan "Oct 23, 1992 -1 day"] clock format $time -format {%b %d, %Y} } "Oct 22, 1992" -test clock-4.13 {clock scan, ISO 8601 base date format} { +test clock-34.13 {clock scan, ISO 8601 base date format} { set time [clock scan "19921023"] clock format $time -format {%b %d, %Y} } "Oct 23, 1992" -test clock-4.14 {clock scan, ISO 8601 expanded date format} { +test clock-34.14 {clock scan, ISO 8601 expanded date format} { set time [clock scan "1992-10-23"] clock format $time -format {%b %d, %Y} } "Oct 23, 1992" -test clock-4.15 {clock scan, DD-Mon-YYYY format} { +test clock-34.15 {clock scan, DD-Mon-YYYY format} { set time [clock scan "23-Oct-1992"] clock format $time -format {%b %d, %Y} } "Oct 23, 1992" -test clock-4.16 {clock scan, ISO 8601 point in time format} { +test clock-34.16 {clock scan, ISO 8601 point in time format} { set time [clock scan "19921023T235959"] clock format $time -format {%b %d, %Y %H:%M:%S} } "Oct 23, 1992 23:59:59" -test clock-4.17 {clock scan, ISO 8601 point in time format} { +test clock-34.17 {clock scan, ISO 8601 point in time format} { set time [clock scan "19921023 235959"] clock format $time -format {%b %d, %Y %H:%M:%S} } "Oct 23, 1992 23:59:59" -test clock-4.18 {clock scan, ISO 8601 point in time format} { +test clock-34.18 {clock scan, ISO 8601 point in time format} { set time [clock scan "19921023T000000"] clock format $time -format {%b %d, %Y %H:%M:%S} } "Oct 23, 1992 00:00:00" @@ -233,7 +35651,7 @@ test clock-4.18 {clock scan, ISO 8601 point in time format} { # We use 5am PST, 31-12-1999 as the base for these scans because irrespective # of your local timezone it should always give us times on December 31, 1999 set 5amPST 946645200 -test clock-4.19 {clock scan, number meridian} { +test clock-34.19 {clock scan, number meridian} { set t1 [clock scan "5 am" -base $5amPST -gmt true] set t2 [clock scan "5 pm" -base $5amPST -gmt true] set t3 [clock scan "5 a.m." -base $5amPST -gmt true] @@ -245,86 +35663,86 @@ test clock-4.19 {clock scan, number meridian} { [clock format $t4 -format {%b %d, %Y %H:%M:%S} -gmt true] } [list "Dec 31, 1999 05:00:00" "Dec 31, 1999 17:00:00" \ "Dec 31, 1999 05:00:00" "Dec 31, 1999 17:00:00"] -test clock-4.20 {clock scan, number:number meridian} { +test clock-34.20 {clock scan, number:number meridian} { clock format [clock scan "5:30 pm" -base $5amPST -gmt true] \ -format {%b %d, %Y %H:%M:%S} -gmt true } "Dec 31, 1999 17:30:00" -test clock-4.21 {clock scan, number:number-timezone} { +test clock-34.21 {clock scan, number:number-timezone} { clock format [clock scan "00:00-0800" -gmt true -base $5amPST] \ -format {%b %d, %Y %H:%M:%S} -gmt true } "Dec 31, 1999 08:00:00" -test clock-4.22 {clock scan, number:number:number o_merid} { +test clock-34.22 {clock scan, number:number:number o_merid} { clock format [clock scan "8:00:00" -gmt true -base $5amPST] \ -format {%b %d, %Y %H:%M:%S} -gmt true } "Dec 31, 1999 08:00:00" -test clock-4.23 {clock scan, number:number:number o_merid} { +test clock-34.23 {clock scan, number:number:number o_merid} { clock format [clock scan "8:00:00 am" -gmt true -base $5amPST] \ -format {%b %d, %Y %H:%M:%S} -gmt true } "Dec 31, 1999 08:00:00" -test clock-4.24 {clock scan, number:number:number o_merid} { +test clock-34.24 {clock scan, number:number:number o_merid} { clock format [clock scan "8:00:00 pm" -gmt true -base $5amPST] \ -format {%b %d, %Y %H:%M:%S} -gmt true } "Dec 31, 1999 20:00:00" -test clock-4.25 {clock scan, number:number:number-timezone} { +test clock-34.25 {clock scan, number:number:number-timezone} { clock format [clock scan "00:00:30-0800" -gmt true -base $5amPST] \ -format {%b %d, %Y %H:%M:%S} -gmt true } "Dec 31, 1999 08:00:30" -test clock-4.26 {clock scan, DST for days} { +test clock-34.26 {clock scan, DST for days} { clock scan "tomorrow" -base [clock scan "19991031 00:00:00"] } [clock scan "19991101 00:00:00"] -test clock-4.27 {clock scan, DST for days} { +test clock-34.27 {clock scan, DST for days} { clock scan "yesterday" -base [clock scan "19991101 00:00:00"] } [clock scan "19991031 00:00:00"] -test clock-4.28 {clock scan, day} knownBug { +test clock-34.28 {clock scan, day} { clock format [clock scan "Monday" -gmt true -base 946627200] \ -format {%b %d, %Y %H:%M:%S} -gmt true } "Jan 03, 2000 00:00:00" -test clock-4.29 {clock scan, number/number} { +test clock-34.29 {clock scan, number/number} { clock format [clock scan "1/1" -gmt true -base 946627200] \ -format {%b %d, %Y %H:%M:%S} -gmt true } "Jan 01, 1999 00:00:00" -test clock-4.30 {clock scan, number/number} { +test clock-34.30 {clock scan, number/number} { clock format [clock scan "1/1/1999" -gmt true -base 946627200] \ -format {%b %d, %Y %H:%M:%S} -gmt true } "Jan 01, 1999 00:00:00" -test clock-4.31 {clock scan, number/number} { +test clock-34.31 {clock scan, number/number} { clock format [clock scan "19990101" -gmt true -base 946627200] \ -format {%b %d, %Y %H:%M:%S} -gmt true } "Jan 01, 1999 00:00:00" -test clock-4.32 {clock scan, relative minutes} { +test clock-34.32 {clock scan, relative minutes} { clock scan "now + 1 minute" -base 946627200 } 946627260 -test clock-4.33 {clock scan, relative minutes} { +test clock-34.33 {clock scan, relative minutes} { clock scan "now +1 minute" -base 946627200 } 946627260 -test clock-4.34 {clock scan, relative minutes} { +test clock-34.34 {clock scan, relative minutes} { clock scan "now 1 minute" -base 946627200 } 946627260 -test clock-4.35 {clock scan, relative minutes} { +test clock-34.35 {clock scan, relative minutes} { clock scan "now - 1 minute" -base 946627200 } 946627140 -test clock-4.36 {clock scan, relative minutes} { +test clock-34.36 {clock scan, relative minutes} { clock scan "now -1 minute" -base 946627200 } 946627140 -test clock-4.37 {clock scan, day of week} { +test clock-34.37 {clock scan, day of week} { clock format [clock scan "wednesday" -base [clock scan 20000112]] \ -format {%b %d, %Y} } "Jan 12, 2000" -test clock-4.38 {clock scan, next day of week} { +test clock-34.38 {clock scan, next day of week} { clock format [clock scan "next wednesday" -base [clock scan 20000112]] \ -format {%b %d, %Y} } "Jan 19, 2000" -test clock-4.39 {clock scan, day of week} { +test clock-34.39 {clock scan, day of week} { clock format [clock scan "thursday" -base [clock scan 20000112]] \ -format {%b %d, %Y} } "Jan 13, 2000" -test clock-4.40 {clock scan, next day of week} { +test clock-34.40 {clock scan, next day of week} { clock format [clock scan "next thursday" -base [clock scan 20000112]] \ -format {%b %d, %Y} } "Jan 20, 2000" # weekday specification and base. -test clock-4.41 {2nd monday in november} { +test clock-34.41 {2nd monday in november} { set res {} foreach i {91 92 93 94 95 96} { set nov8th [clock scan 11/8/$i] @@ -333,7 +35751,7 @@ test clock-4.41 {2nd monday in november} { } set res } {1991-11-11 1992-11-09 1993-11-08 1994-11-14 1995-11-13 1996-11-11} -test clock-4.42 {2nd monday in november (2nd try)} { +test clock-34.42 {2nd monday in november (2nd try)} { set res {} foreach i {91 92 93 94 95 96} { set nov1th [clock scan 11/1/$i] @@ -342,7 +35760,7 @@ test clock-4.42 {2nd monday in november (2nd try)} { } set res } {1991-11-11 1992-11-09 1993-11-08 1994-11-14 1995-11-13 1996-11-11} -test clock-4.43 {last monday in november} { +test clock-34.43 {last monday in november} { set res {} foreach i {91 92 93 94 95 96} { set dec1th [clock scan 12/1/$i] @@ -352,7 +35770,7 @@ test clock-4.43 {last monday in november} { set res } {1991-11-25 1992-11-30 1993-11-29 1994-11-28 1995-11-27 1996-11-25} -test clock-4.44 {2nd monday in november} knownBug { +test clock-34.44 {2nd monday in november} { set res {} foreach i {91 92 93 94 95 96} { set nov8th [clock scan 11/8/$i -gmt 1] @@ -361,7 +35779,7 @@ test clock-4.44 {2nd monday in november} knownBug { } set res } {1991-11-11 1992-11-09 1993-11-08 1994-11-14 1995-11-13 1996-11-11} -test clock-4.45 {2nd monday in november (2nd try)} knownBug { +test clock-34.45 {2nd monday in november (2nd try)} { set res {} foreach i {91 92 93 94 95 96} { set nov1th [clock scan 11/1/$i -gmt 1] @@ -370,7 +35788,7 @@ test clock-4.45 {2nd monday in november (2nd try)} knownBug { } set res } {1991-11-11 1992-11-09 1993-11-08 1994-11-14 1995-11-13 1996-11-11} -test clock-4.46 {last monday in november} knownBug { +test clock-34.46 {last monday in november} { set res {} foreach i {91 92 93 94 95 96} { set dec1th [clock scan 12/1/$i -gmt 1] @@ -379,278 +35797,1143 @@ test clock-4.46 {last monday in november} knownBug { } set res } {1991-11-25 1992-11-30 1993-11-29 1994-11-28 1995-11-27 1996-11-25} -test clock-4.47 {ago with multiple relative units} { +test clock-34.47 {ago with multiple relative units} { set base [clock scan "12/31/1999 00:00:00"] set res [clock scan "2 days 2 hours ago" -base $base] expr {$base - $res} } 180000 +test clock-34.48 {more than one ToD} {*}{ + -body {clock scan {10:00 11:00}} + -returnCodes error + -result {unable to convert date-time string "10:00 11:00": more than one time of day in string} +} + +test clock-34.49 {more than one date} {*}{ + -body {clock scan {1/1/2001 2/2/2002}} + -returnCodes error + -result {unable to convert date-time string "1/1/2001 2/2/2002": more than one date in string} +} + +test clock-34.50 {more than one time zone} {*}{ + -body {clock scan {10:00 EST CST}} + -returnCodes error + -result {unable to convert date-time string "10:00 EST CST": more than one time zone in string} +} + +test clock-34.51 {more than one weekday} {*}{ + -body {clock scan {Monday Tuesday}} + -returnCodes error + -result {unable to convert date-time string "Monday Tuesday": more than one weekday in string} +} + +test clock-34.52 {more than one ordinal month} {*}{ + -body {clock scan {next January next March}} + -returnCodes error + -result {unable to convert date-time string "next January next March": more than one ordinal month in string} +} + + + # clock seconds -test clock-5.1 {clock seconds tests} { +test clock-35.1 {clock seconds tests} { expr [clock seconds]+1 concat {} } {} -test clock-5.2 {clock seconds tests} { +test clock-35.2 {clock seconds tests} { list [catch {clock seconds foo} msg] $msg } {1 {wrong # args: should be "clock seconds"}} -test clock-5.3 {clock seconds tests} { +test clock-35.3 {clock seconds tests} { set start [clock seconds] after 2000 set end [clock seconds] expr "$end > $start" } {1} -# The following dates check certain roll over dates -set day [expr 24 * 60 * 60] -test clock-6.1 {clock roll over dates} { - set time [clock scan "12/31/1998" -gmt true] - clock format [expr $time + $day] -format {%b %d,%Y %H:%M GMT} -gmt true -} {Jan 01,1999 00:00 GMT} -test clock-6.2 {clock roll over dates} { - set time [clock scan "12/31/1999" -gmt true] - clock format [expr $time + $day] -format {%b %d,%Y %H:%M GMT} -gmt true -} {Jan 01,2000 00:00 GMT} -test clock-6.3 {clock roll over dates} { - set time [clock scan "2/28/2000" -gmt true] - clock format [expr $time + $day] -format {%b %d,%Y %H:%M GMT} -gmt true -} {Feb 29,2000 00:00 GMT} -test clock-6.4 {clock roll over dates} { - set time [clock scan "2/29/2000" -gmt true] - clock format [expr $time + $day] -format {%b %d,%Y %H:%M GMT} -gmt true -} {Mar 01,2000 00:00 GMT} -test clock-6.5 {clock roll over dates} { - set time [clock scan "January 1, 2000" -gmt true] - clock format $time -format %A -gmt true -} {Saturday} -test clock-6.6 {clock roll over dates} { - set time [clock scan "January 1, 2000" -gmt true] - clock format $time -format %j -gmt true -} {001} -test clock-6.7 {clock roll over dates} { - set time [clock scan "February 29, 2000" -gmt true] - clock format $time -format %A -gmt true -} {Tuesday} -test clock-6.8 {clock roll over dates} { - set time [clock scan "February 29, 2000" -gmt true] - clock format $time -format %j -gmt true -} {060} -test clock-6.9 {clock roll over dates} { - set time [clock scan "March 1, 2000" -gmt true] - clock format $time -format %A -gmt true -} {Wednesday} -test clock-6.10 {clock roll over dates} { - set time [clock scan "March 1, 2000" -gmt true] - clock format $time -format %j -gmt true -} {061} -test clock-6.11 {clock roll over dates} { - set time [clock scan "March 1, 2001" -gmt true] - clock format $time -format %j -gmt true -} {060} - -test clock-7.1 {clock scan next monthname} { + +test clock-36.1 {clock scan next monthname} { clock format [clock scan "next june" -base [clock scan "june 1, 2000"]] \ -format %m.%Y } "06.2001" -test clock-7.2 {clock scan next monthname} { +test clock-36.2 {clock scan next monthname} { clock format [clock scan "next july" -base [clock scan "june 1, 2000"]] \ -format %m.%Y } "07.2000" -test clock-7.3 {clock scan next monthname} { +test clock-36.3 {clock scan next monthname} { clock format [clock scan "next may" -base [clock scan "june 1, 2000"]] \ -format %m.%Y } "05.2001" -# We use 5am PST, 31-12-1999 as the base for these scans because irrespective -# of your local timezone it should always give us times on December 31 -set 5amPST 946645200 -test clock-8.1 {clock scan midnight/gmt range bug 413397} { - set fmt "%m/%d" - list [clock format [clock scan year -base $5amPST -gmt 0] -format $fmt] \ - [clock format [clock scan year -base $5amPST -gmt 1] -format $fmt] -} {12/31 12/31} - -::tcltest::testConstraint needPST [expr { - [regexp {^(Pacific.*|P[DS]T)$} [clock format 1 -format %Z]] - && ([clock format 1 -format %s] != "%s") -}] - -test clock-9.1 {%s gmt testing} {needPST} { - - # Note that this test will fail if the strftime on the underlying - # system doesn't support the %s format group. Systems that are known - # to have trouble include the native C libraries on AIX and HP-UX - - # We need PST to guarantee the difference value below, and %s isn't - # valid on all OSes (like Solaris). - set s 100000 +test clock-37.1 {%s gmt testing} { + set s [clock seconds] set a [clock format $s -format %s -gmt 0] set b [clock format $s -format %s -gmt 1] - # This should be the offset in seconds between current locale and GMT. - # This didn't seem to be correctly on Windows until the fix for - # Bug #559376, which fiddled with env(TZ) when -gmt 1 was used. - # It's hard-coded to check P[SD]T now. (8 hours) + # %s, being the difference between local and Greenwich, does not + # depend on the time zone. set c [expr {$b-$a}] -} {28800} - -::tcltest::testConstraint percentG \ - [expr { ![catch { clock format 0 -format %G -gmt true } y1970] - && $y1970 eq {1970} }] - -test clock-10.0 {Can strftime do %G?} { - clock format 0 -format %G -gmt true -} 1970 -test clock-10.1 {ISO week-based calendar 2000-W52-1} {percentG} { - clock format 977702400 -format {%a %A %g %G %u %V %w} -gmt true; # 2000-12-25 -} {Mon Monday 00 2000 1 52 1} -test clock-10.2 {ISO week-based calendar 2000-W52-7} {percentG} { - clock format 978220800 -format {%a %A %g %G %u %V %w} -gmt true; # 2000-12-31 -} {Sun Sunday 00 2000 7 52 0} -test clock-10.3 {ISO week-based calendar 2001-W01-1} {percentG} { - clock format 978307200 -format {%a %A %g %G %u %V %w} -gmt true; # 2001-1-1 -} {Mon Monday 01 2001 1 01 1} -test clock-10.4 {ISO week-based calendar 2001-W01-7} {percentG} { - clock format 978825600 -format {%a %A %g %G %u %V %w} -gmt true; # 2001-1-7 -} {Sun Sunday 01 2001 7 01 0} -test clock-10.5 {ISO week-based calendar 2001-W02-1} {percentG} { - clock format 978912000 -format {%a %A %g %G %u %V %w} -gmt true; # 2001-1-8 -} {Mon Monday 01 2001 1 02 1} -test clock-10.6 {ISO week-based calendar 2001-W52-1} {percentG} { - clock format 1009152000 -format {%a %A %g %G %u %V %w} -gmt true; # 2001-12-24 -} {Mon Monday 01 2001 1 52 1} -test clock-10.7 {ISO week-based calendar 2001-W52-7} {percentG} { - clock format 1009670400 -format {%a %A %g %G %u %V %w} -gmt true; # 2001-12-30 -} {Sun Sunday 01 2001 7 52 0} -test clock-10.8 {ISO week-based calendar 2002-W01-1} {percentG} { - clock format 1009756800 -format {%a %A %g %G %u %V %w} -gmt true; # 2001-12-31 -} {Mon Monday 02 2002 1 01 1} -test clock-10.9 {ISO week-based calendar 2002-W01-2} {percentG} { - clock format 1009843200 -format {%a %A %g %G %u %V %w} -gmt true; # 2002-1-1 -} {Tue Tuesday 02 2002 2 01 2} -test clock-10.10 {ISO week-based calendar 2002-W01-7} {percentG} { - clock format 1010275200 -format {%a %A %g %G %u %V %w} -gmt true; # 2002-1-6 -} {Sun Sunday 02 2002 7 01 0} -test clock-10.11 {ISO week-based calendar 2002-W02-1} {percentG} { - clock format 1010361600 -format {%a %A %g %G %u %V %w} -gmt true; # 2002-1-7 -} {Mon Monday 02 2002 1 02 1} -test clock-10.12 {ISO week-based calendar 2002-W52-1} {percentG} { - clock format 1040601600 -format {%a %A %g %G %u %V %w} -gmt true; # 2002-12-23 -} {Mon Monday 02 2002 1 52 1} -test clock-10.13 {ISO week-based calendar 2002-W52-7} {percentG} { - clock format 1041120000 -format {%a %A %g %G %u %V %w} -gmt true; # 2002-12-29 -} {Sun Sunday 02 2002 7 52 0} -test clock-10.14 {ISO week-based calendar 2003-W01-1} {percentG} { - clock format 1041206400 -format {%a %A %g %G %u %V %w} -gmt true; # 2002-12-30 -} {Mon Monday 03 2003 1 01 1} -test clock-10.15 {ISO week-based calendar 2003-W01-2} {percentG} { - clock format 1041292800 -format {%a %A %g %G %u %V %w} -gmt true; # 2002-12-31 -} {Tue Tuesday 03 2003 2 01 2} -test clock-10.16 {ISO week-based calendar 2003-W01-3} {percentG} { - clock format 1041379200 -format {%a %A %g %G %u %V %w} -gmt true; # 2003-1-1 -} {Wed Wednesday 03 2003 3 01 3} -test clock-10.17 {ISO week-based calendar 2003-W01-7} {percentG} { - clock format 1041724800 -format {%a %A %g %G %u %V %w} -gmt true; # 2003-1-5 -} {Sun Sunday 03 2003 7 01 0} -test clock-10.18 {ISO week-based calendar 2003-W02-1} {percentG} { - clock format 1041811200 -format {%a %A %g %G %u %V %w} -gmt true; # 2003-1-6 -} {Mon Monday 03 2003 1 02 1} -test clock-10.19 {ISO week-based calendar 2003-W52-1} {percentG} { - clock format 1072051200 -format {%a %A %g %G %u %V %w} -gmt true; # 2003-12-22 -} {Mon Monday 03 2003 1 52 1} -test clock-10.20 {ISO week-based calendar 2003-W52-7} {percentG} { - clock format 1072569600 -format {%a %A %g %G %u %V %w} -gmt true; # 2003-12-28 -} {Sun Sunday 03 2003 7 52 0} -test clock-10.21 {ISO week-based calendar 2004-W01-1} {percentG} { - clock format 1072656000 -format {%a %A %g %G %u %V %w} -gmt true; # 2003-12-29 -} {Mon Monday 04 2004 1 01 1} -test clock-10.22 {ISO week-based calendar 2004-W01-3} {percentG} { - clock format 1072828800 -format {%a %A %g %G %u %V %w} -gmt true; # 2003-12-31 -} {Wed Wednesday 04 2004 3 01 3} -test clock-10.23 {ISO week-based calendar 2004-W01-4} {percentG} { - clock format 1072915200 -format {%a %A %g %G %u %V %w} -gmt true; # 2004-1-1 -} {Thu Thursday 04 2004 4 01 4} -test clock-10.24 {ISO week-based calendar 2004-W01-7} {percentG} { - clock format 1073174400 -format {%a %A %g %G %u %V %w} -gmt true; # 2004-1-4 -} {Sun Sunday 04 2004 7 01 0} -test clock-10.25 {ISO week-based calendar 2004-W02-1} {percentG} { - clock format 1073260800 -format {%a %A %g %G %u %V %w} -gmt true; # 2004-1-5 -} {Mon Monday 04 2004 1 02 1} -test clock-10.26 {ISO week-based calendar 2004-W52-1} {percentG} { - clock format 1103500800 -format {%a %A %g %G %u %V %w} -gmt true; # 2004-12-20 -} {Mon Monday 04 2004 1 52 1} -test clock-10.27 {ISO week-based calendar 2004-W52-7} {percentG} { - clock format 1104019200 -format {%a %A %g %G %u %V %w} -gmt true; # 2004-12-26 -} {Sun Sunday 04 2004 7 52 0} -test clock-10.28 {ISO week-based calendar 2004-W53-1} {percentG} { - clock format 1104105600 -format {%a %A %g %G %u %V %w} -gmt true; # 2004-12-27 -} {Mon Monday 04 2004 1 53 1} -test clock-10.29 {ISO week-based calendar 2004-W53-5} {percentG} { - clock format 1104451200 -format {%a %A %g %G %u %V %w} -gmt true; # 2004-12-31 -} {Fri Friday 04 2004 5 53 5} -test clock-10.30 {ISO week-based calendar 2004-W53-6} {percentG} { - clock format 1104537600 -format {%a %A %g %G %u %V %w} -gmt true; # 2005-1-1 -} {Sat Saturday 04 2004 6 53 6} -test clock-10.31 {ISO week-based calendar 2004-W53-7} {percentG} { - clock format 1104624000 -format {%a %A %g %G %u %V %w} -gmt true; # 2005-1-2 -} {Sun Sunday 04 2004 7 53 0} -test clock-10.32 {ISO week-based calendar 2005-W01-1} {percentG} { - clock format 1104710400 -format {%a %A %g %G %u %V %w} -gmt true; # 2005-1-3 -} {Mon Monday 05 2005 1 01 1} -test clock-10.33 {ISO week-based calendar 2005-W01-7} {percentG} { - clock format 1105228800 -format {%a %A %g %G %u %V %w} -gmt true; # 2005-1-9 -} {Sun Sunday 05 2005 7 01 0} -test clock-10.34 {ISO week-based calendar 2005-W02-1} {percentG} { - clock format 1105315200 -format {%a %A %g %G %u %V %w} -gmt true; # 2005-1-10 -} {Mon Monday 05 2005 1 02 1} -test clock-10.35 {ISO week-based calendar 2005-W52-1} {percentG} { - clock format 1135555200 -format {%a %A %g %G %u %V %w} -gmt true; # 2005-12-26 -} {Mon Monday 05 2005 1 52 1} -test clock-10.36 {ISO week-based calendar 2005-W52-6} {percentG} { - clock format 1135987200 -format {%a %A %g %G %u %V %w} -gmt true; # 2005-12-31 -} {Sat Saturday 05 2005 6 52 6} -test clock-10.37 {ISO week-based calendar 2005-W52-7} {percentG} { - clock format 1136073600 -format {%a %A %g %G %u %V %w} -gmt true; # 2006-1-1 -} {Sun Sunday 05 2005 7 52 0} -test clock-10.38 {ISO week-based calendar 2006-W01-1} {percentG} { - clock format 1136160000 -format {%a %A %g %G %u %V %w} -gmt true; # 2006-1-2 -} {Mon Monday 06 2006 1 01 1} -test clock-10.39 {ISO week-based calendar 2006-W01-7} {percentG} { - clock format 1136678400 -format {%a %A %g %G %u %V %w} -gmt true; # 2006-1-8 -} {Sun Sunday 06 2006 7 01 0} -test clock-10.40 {ISO week-based calendar 2006-W02-1} {percentG} { - clock format 1136764800 -format {%a %A %g %G %u %V %w} -gmt true; # 2006-1-9 -} {Mon Monday 06 2006 1 02 1} -test clock-10.41 {ISO week-based calendar 2009-W52-1} {percentG} { - clock format 1261353600 -format {%a %A %g %G %u %V %w} -gmt true; # 2009-12-21 -} {Mon Monday 09 2009 1 52 1} -test clock-10.42 {ISO week-based calendar 2009-W52-7} {percentG} { - clock format 1261872000 -format {%a %A %g %G %u %V %w} -gmt true; # 2009-12-27 -} {Sun Sunday 09 2009 7 52 0} -test clock-10.43 {ISO week-based calendar 2009-W53-1} {percentG} { - clock format 1261958400 -format {%a %A %g %G %u %V %w} -gmt true; # 2009-12-28 -} {Mon Monday 09 2009 1 53 1} -test clock-10.44 {ISO week-based calendar 2009-W53-4} {percentG} { - clock format 1262217600 -format {%a %A %g %G %u %V %w} -gmt true; # 2009-12-31 -} {Thu Thursday 09 2009 4 53 4} -test clock-10.45 {ISO week-based calendar 2009-W53-5} {percentG} { - clock format 1262304000 -format {%a %A %g %G %u %V %w} -gmt true; # 2010-1-1 -} {Fri Friday 09 2009 5 53 5} -test clock-10.46 {ISO week-based calendar 2009-W53-7} {percentG} { - clock format 1262476800 -format {%a %A %g %G %u %V %w} -gmt true; # 2010-1-3 -} {Sun Sunday 09 2009 7 53 0} -test clock-10.47 {ISO week-based calendar 2010-W01-1} {percentG} { - clock format 1262563200 -format {%a %A %g %G %u %V %w} -gmt true; # 2010-1-4 -} {Mon Monday 10 2010 1 01 1} -test clock-10.48 {ISO week-based calendar 2010-W01-7} {percentG} { - clock format 1263081600 -format {%a %A %g %G %u %V %w} -gmt true; # 2010-1-10 -} {Sun Sunday 10 2010 7 01 0} -test clock-10.49 {ISO week-based calendar 2010-W02-1} {percentG} { - clock format 1263168000 -format {%a %A %g %G %u %V %w} -gmt true; # 2010-1-11 -} {Mon Monday 10 2010 1 02 1} +} {0} + +test clock-38.1 {regression - convertUTCToLocalViaC - east of Greenwich} \ + -setup { + if { [info exists env(TZ)] } { + set oldTZ $env(TZ) + } + set env(TZ) CET-01:00CEST-02:00,M3.5.0/02:00,M10.5.0/03:00 + } \ + -body { + clock format 0 -format %H:%M:%S -timezone :localtime + } \ + -cleanup { + if { [info exists oldTZ] } { + set env(TZ) $oldTZ + unset oldTZ + } else { + unset env(TZ) + } + } \ + -result {01:00:00} + +test clock-38.2 {make sure TZ is not cached after unset} \ + -setup { + if { [info exists env(TZ)] } { + set oldTZ $env(TZ) + unset env(TZ) + } + if { [info exists env(TCL_TZ)] } { + set oldTCLTZ $env(TCL_TZ) + unset env(TCL_TZ) + } + } \ + -body { + set t1 [clock format 0] + # a time zone that is unlikely to anywhere + set env(TZ) "+04:20" + set t2 [clock format 0] + unset env(TZ) + set t3 [clock format 0] + expr {$t1 eq $t3 && $t1 ne $t2} + } \ + -cleanup { + if { [info exists oldTZ] } { + set env(TZ) $oldTZ + unset oldTZ + } + if { [info exists oldTclTZ] } { + set env(TCL_TZ) $oldTclTZ + unset oldTclTZ + } + } \ + -result 1 + + +test clock-39.1 {regression - synonym timezones} { + clock format 0 -format {%H:%M:%S} -timezone :US/Eastern +} {19:00:00} + +test clock-40.1 {regression - bad month with -timezone :localtime} \ + -setup { + if { [info exists env(TZ)] } { + set oldTZ $env(TZ) + } + set env(TZ) UTC0 + } \ + -body { + clock scan 2000-01-01T00:00:00 -timezone :localtime \ + -format %Y-%m-%dT%H:%M:%S + } \ + -cleanup { + if { [info exists oldTZ] } { + set env(TZ) $oldTZ + unset oldTZ + } else { + unset env(TZ) + } + } \ + -result 946684800 test clock-41.1 {regression test - format group %k when hour is 0 } { clock format 0 -format %k -gmt true } { 0} +test clock-42.1 {regression test - %z in :localtime when west of Greenwich } \ + -setup { + if { [info exists env(TZ)] } { + set oldTZ $env(TZ) + } + set env(TZ) EST5 + } \ + -body { + clock format 0 -format %z -timezone :localtime + } \ + -cleanup { + if { [info exists oldTZ] } { + set env(TZ) $oldTZ + unset oldTZ + } else { + unset env(TZ) + } + } \ + -result {-0500} + +# 43.1 was a bad test - mktime returning -1 is an error according to posix. + +test clock-44.1 {regression test - time zone name containing hyphen } \ + -setup { + if { [info exists env(TZ)] } { + set oldTZ $env(TZ) + } + set env(TZ) US/East-Indiana + } \ + -body { + clock format 1098466496 -format %H:%M:%S%z -timezone US/East-Indiana + } \ + -cleanup { + if { [info exists oldTZ] } { + set env(TZ) $oldTZ + unset oldTZ + } else { + unset env(TZ) + } + } \ + -result {12:34:56-0500} + +test clock-45.1 {regression test - time zone containing only two digits} \ + -body { + clock scan 1985-04-12T10:15:30+04 -format %Y-%m-%dT%H:%M:%S%Z + } \ + -result 482134530 + +test clock-46.1 {regression test - month zero} \ + -body { + clock scan 2004-00-00 -format %Y-%m-%d + } -result [clock scan 2003-11-30 -format %Y-%m-%d] +test clock-46.2 {regression test - month zero} \ + -body { + clock scan 20040000 + } -result [clock scan 2003-11-30 -format %Y-%m-%d] +test clock-46.3 {regression test - month thirteen} \ + -body { + clock scan 2004-13-01 -format %Y-%m-%d + } -result [clock scan 2005-01-01 -format %Y-%m-%d] +test clock-46.4 {regression test - month thirteen} \ + -body { + clock scan 20041301 + } -result [clock scan 2005-01-01 -format %Y-%m-%d] + +test clock-47.1 {regression test - four-digit time} { + clock scan 0012 +} [clock scan 0012 -format %H%M] +test clock-47.2 {regression test - four digit time} { + clock scan 0039 +} [clock scan 0039 -format %H%M] + +test clock-48.1 {Bug 1185933: 'i' destroyed by clock init} -setup { + interp create child +} -body { + interp eval child { + set i 12345 + clock format 0 + list [catch { set i } result] $result + } +} -cleanup { + interp delete child +} -result {0 12345} + +test clock-49.1 {regression test - localtime with negative arg (Bug 1237907)} \ + -body { + list [catch { + clock format -86400 -timezone :localtime -format %Y + } result] $result + } \ + -match regexp \ + -result {0 1969|1 {localtime failed \(clock value may be too large/small to represent\)}} + +test clock-49.2 {regression test - missing time zone file (Bug 1237907)} \ + -constraints win \ + -setup { + # override the registry so that the test takes place in New York time + namespace eval ::tcl::clock { + namespace import -force ::testClock::registry + } + set noreg [info exists ::tcl::clock::NoRegistry] + if {$noreg} {unset ::tcl::clock::NoRegistry} + if { [info exists env(TZ)] } { + set oldTZ $env(TZ) + unset env(TZ) + } + if { [info exists env(TCL_TZ)] } { + set oldTclTZ $env(TCL_TZ) + unset env(TCL_TZ) + } + # make it so New York time is a missing file + dict set ::tcl::clock::WinZoneInfo \ + {-18000 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} \ + :No/Such/File + ::tcl::clock::ClearCaches + } \ + -body { + list [::tcl::clock::GuessWindowsTimeZone] \ + [clock format 0 -locale system -format "%H:%M:%S %Z"] \ + [clock format -86400 -format "%Y"] + } \ + -cleanup { + # restore the registry and environment + namespace eval ::tcl::clock { + rename registry {} + } + if {$noreg} {set ::tcl::clock::NoRegistry {}} + if { [info exists oldTclTZ] } { + set env(TCL_TZ) $oldTclTZ + } + if { [info exists oldTZ] } { + set env(TZ) $oldTZ + } + # put New York back on the map + dict set ::tcl::clock::WinZoneInfo \ + {-18000 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} \ + :America/New_York + ::tcl::clock::ClearCaches + } \ + -result {<-0500>+05:00:00<-0400>+04:00:00,M3.2.0/02:00:00,M11.1.0/02:00:00 {19:00:00 -0500} 1969} + +test clock-50.1 {format / scan -1 as a local time} { + if {[catch { + clock scan \ + [clock format -1 -format %Y%m%d%H%M%S -timezone :localtime] \ + -format %Y%m%d%H%M%S -timezone :localtime + } result]} { + if { [regexp " too large" $result] } { + set result -1 + } + } + set result +} -1 +test clock-50.2 {format / scan -2 as a local time} { + if {[catch { + clock scan \ + [clock format -2 -format %Y%m%d%H%M%S -timezone :localtime] \ + -format %Y%m%d%H%M%S -timezone :localtime + } result]} { + if { [regexp " too large" $result] } { + set result -2 + } + } + set result +} -2 + +test clock-51.1 {correct conversion of times in Sydney} { + # Paul Mackerras reported a bug where DST rollover in New South Wales + # was miscalculated. The problem was that tclZIC.tcl had a + # typo in the switch case where DST begins/ends at a given time + # Standard Time (that is, winter time). + set result {} + foreach t {1130601599 1130601600 1130637599 1130637600} { + lappend result [clock format $t -format %H:%M:%S \ + -timezone :Australia/Sydney] + } + set result +} {01:59:59 03:00:00 12:59:59 13:00:00} + +test clock-52.1 {Posix timezone and conversion on last Sunday} { + # Martin Lemburg reported a bug where if tzdata is missing, then + # times are converted incorrectly in locales where DST conversion + # happens in the last (nominal 5th) week of a month. + set result {} + set timezone <MEZ>-01:00:00<MESZ>-02:00:00,M3.5.0/02:00:00,M10.5.0/01:00:00 + foreach t {1143334799 1143334800} { + lappend result [clock format $t -format %H:%M:%S -timezone $timezone] \ + [clock format $t -format %H:%M:%S -timezone :Europe/Berlin] + } + set result +} {01:59:59 01:59:59 03:00:00 03:00:00} + +test clock-52.2 {correct conversion of times in Europe} { + # [Bug 2207436] + set result {} + foreach t [list 1206838799 1206838800 1224982799 1224982800] { + lappend result [clock format $t -format %H:%M:%S \ + -timezone MET-1METDST] + lappend result [clock format $t -format %H:%M:%S \ + -timezone MET0METDST] + } + set result +} {01:59:59 00:59:59 03:00:00 02:00:00 02:59:59 01:59:59 02:00:00 01:00:00} + +test clock-52.3 {correct conversion of times in Russia} { + # [Bug 2207436] + set result {} + foreach t [list 1206799199 1206799200 1224943199 1224943200] { + lappend result [clock format $t -format %H:%M:%S \ + -timezone WST-12WSTDST] + } + set result +} {01:59:59 03:00:00 02:59:59 02:00:00} + +test clock-52.4 {correct conversion of times in USA} { + # [Bug 2207436] + set result {} + foreach t [list 1268549999 1268550000 1257055199 1257055200] { + lappend result [clock format $t -format %H:%M:%S \ + -timezone EST5EDT] + } + set result +} {01:59:59 03:00:00 01:59:59 01:00:00} + +# Regression test for Bug # 1505383 + +test clock-53.1 {%EC %Ey} { + clock format 0 -gmt true -locale en_US_roman -format %EC%Ey +} mcmlxx + +# Test that glob-special characters can be handled in [clock] + +test clock-54.1 {glob specials in [clock format]} \ + -setup { + clock format 0 -gmt 1 -format %Y + } \ + -body { + clock format 0 -gmt 1 -format {*[%Y%m%d]*} + } \ + -result {*[19700101]*} +test clock-54.2 {glob specials in [clock scan]} \ + -setup { + clock scan 1970 -gmt 1 -format %Y + } \ + -body { + clock scan {*[19700101]*} -format {*[%Y%m%d]*} -gmt 1 + } \ + -result 0 + +test clock-55.1 {Common Era} { + clock format -62135769600 -gmt 1 -format {%d %m %Y %EE} +} {01 01 0001 C.E.} +test clock-55.2 {Common Era} { + clock format -62135769600 -gmt 1 -format {%d %m %Y %EE} -locale en_US_roman +} {01 01 0001 Anno Domini} +test clock-55.3 {Before the Common Era} { + clock format -62135769601 -gmt 1 -format {%d %m %Y %EE} +} {31 12 0001 B.C.E.} +test clock-55.4 {Before the Common Era} { + clock format -62135769601 -gmt 1 -format {%d %m %Y %EE} -locale en_US_roman +} {31 12 0001 Before Christ} +test clock-55.5 {Common Era} { + clock scan {01 01 0001 C.E.} \ + -gmt 1 -format {%d %m %Y %EE} -locale en_US_roman +} -62135769600 +test clock-55.6 {Common Era} { + clock scan {01 01 0001 A.D.} \ + -gmt 1 -format {%d %m %Y %EE} -locale en_US_roman +} -62135769600 +test clock-55.7 {Common Era} { + clock scan {01 01 0001 Anno Domini} \ + -gmt 1 -format {%d %m %Y %EE} -locale en_US_roman +} -62135769600 +test clock-55.8 {Before the Common Era} { + clock scan {31 12 0001 B.C.E.} \ + -gmt 1 -format {%d %m %Y %EE} -locale en_US_roman +} -62135856000 +test clock-55.9 {Common Era} { + clock scan {31 12 0001 B.C.} \ + -gmt 1 -format {%d %m %Y %EE} -locale en_US_roman +} -62135856000 +test clock-55.10 {Common Era} { + clock scan {31 12 0001 Before Christ} \ + -gmt 1 -format {%d %m %Y %EE} -locale en_US_roman +} -62135856000 + +test clock-56.1 {use of zoneinfo, version 1} {*}{ + -setup { + clock format [clock seconds] + set tzdir [makeDirectory zoneinfo] + set tzdir2 [makeDirectory Test $tzdir] + set tzfile [makeFile {} PhoenixOne $tzdir2] + set f [open $tzfile wb] + puts -nonewline $f [binary format c* { + 0x54 0x5a 0x69 0x66 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 + 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x03 + 0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0a + 0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x0c 0x9e 0xa6 0x3a 0x90 + 0x9f 0xbb 0x07 0x80 0xa0 0x86 0x1c 0x90 0xa1 0x9a 0xe9 0x80 + 0xcb 0x89 0x0c 0x90 0xcf 0x17 0xdf 0x1c 0xcf 0x8f 0xe5 0xac + 0xd0 0x81 0x1a 0x1c 0xfa 0xf8 0x75 0x10 0xfb 0xe8 0x58 0x00 + 0x00 0x01 0x00 0x01 0x02 0x01 0x02 0x01 0x00 0x01 0xff 0xff + 0xab 0xa0 0x01 0x00 0xff 0xff 0x9d 0x90 0x00 0x04 0xff 0xff + 0xab 0xa0 0x01 0x08 0x4d 0x44 0x54 0x00 0x4d 0x53 0x54 0x00 + 0x4d 0x57 0x54 0x00 0x00 0x00 0x00 0x00 0x00 0x00 + }] + close $f + set ::tcl::clock::ZoneinfoPaths \ + [linsert $::tcl::clock::ZoneinfoPaths 0 $tzdir] + ::tcl::clock::ClearCaches + } + -cleanup { + set ::tcl::clock::ZoneinfoPaths \ + [lrange $::tcl::clock::ZoneinfoPaths 1 end] + ::tcl::clock::ClearCaches + removeFile PhoenixOne $tzdir2 + removeDirectory Test $tzdir + removeDirectory zoneinfo + } + -body { + clock format 1072940400 -timezone :Test/PhoenixOne \ + -format {%Y-%m-%d %H:%M:%S %Z} + } + -result {2004-01-01 00:00:00 MST} +} + +test clock-56.2 {use of zoneinfo, version 2} {*}{ + -setup { + clock format [clock seconds] + set tzdir [makeDirectory zoneinfo] + set tzdir2 [makeDirectory Test $tzdir] + set tzfile [makeFile {} PhoenixTwo $tzdir2] + set f [open $tzfile wb] + puts -nonewline $f [binary format c* { + 0x54 0x5a 0x69 0x66 0x32 0x00 0x00 0x00 0x00 0x00 0x00 0x00 + 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x03 + 0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0a + 0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x0c 0x9e 0xa6 0x3a 0x90 + 0x9f 0xbb 0x07 0x80 0xa0 0x86 0x1c 0x90 0xa1 0x9a 0xe9 0x80 + 0xcb 0x89 0x0c 0x90 0xcf 0x17 0xdf 0x1c 0xcf 0x8f 0xe5 0xac + 0xd0 0x81 0x1a 0x1c 0xfa 0xf8 0x75 0x10 0xfb 0xe8 0x58 0x00 + 0x00 0x01 0x00 0x01 0x02 0x01 0x02 0x01 0x00 0x01 0xff 0xff + 0xab 0xa0 0x01 0x00 0xff 0xff 0x9d 0x90 0x00 0x04 0xff 0xff + 0xab 0xa0 0x01 0x08 0x4d 0x44 0x54 0x00 0x4d 0x53 0x54 0x00 + 0x4d 0x57 0x54 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x54 0x5a + 0x69 0x66 0x32 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 + 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x04 0x00 0x00 + 0x00 0x04 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0b 0x00 0x00 + 0x00 0x04 0x00 0x00 0x00 0x10 0xff 0xff 0xff 0xff 0x5e 0x04 + 0x0c 0xb0 0xff 0xff 0xff 0xff 0x9e 0xa6 0x3a 0x90 0xff 0xff + 0xff 0xff 0x9f 0xbb 0x07 0x80 0xff 0xff 0xff 0xff 0xa0 0x86 + 0x1c 0x90 0xff 0xff 0xff 0xff 0xa1 0x9a 0xe9 0x80 0xff 0xff + 0xff 0xff 0xcb 0x89 0x0c 0x90 0xff 0xff 0xff 0xff 0xcf 0x17 + 0xdf 0x1c 0xff 0xff 0xff 0xff 0xcf 0x8f 0xe5 0xac 0xff 0xff + 0xff 0xff 0xd0 0x81 0x1a 0x1c 0xff 0xff 0xff 0xff 0xfa 0xf8 + 0x75 0x10 0xff 0xff 0xff 0xff 0xfb 0xe8 0x58 0x00 0x02 0x01 + 0x02 0x01 0x02 0x03 0x02 0x03 0x02 0x01 0x02 0xff 0xff 0x96 + 0xee 0x00 0x00 0xff 0xff 0xab 0xa0 0x01 0x04 0xff 0xff 0x9d + 0x90 0x00 0x08 0xff 0xff 0xab 0xa0 0x01 0x0c 0x4c 0x4d 0x54 + 0x00 0x4d 0x44 0x54 0x00 0x4d 0x53 0x54 0x00 0x4d 0x57 0x54 + 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0a 0x4d 0x53 + 0x54 0x37 0x0a + }] + close $f + set ::tcl::clock::ZoneinfoPaths \ + [linsert $::tcl::clock::ZoneinfoPaths 0 $tzdir] + ::tcl::clock::ClearCaches + } + -cleanup { + set ::tcl::clock::ZoneinfoPaths \ + [lrange $::tcl::clock::ZoneinfoPaths 1 end] + ::tcl::clock::ClearCaches + removeFile PhoenixTwo $tzdir2 + removeDirectory Test $tzdir + removeDirectory zoneinfo + } + -body { + clock format 1072940400 -timezone :Test/PhoenixTwo \ + -format {%Y-%m-%d %H:%M:%S %Z} + } + -result {2004-01-01 00:00:00 MST} +} + +test clock-56.3 {use of zoneinfo, version 2, Y2038 compliance} {*}{ + -setup { + clock format [clock seconds] + set tzdir [makeDirectory zoneinfo] + set tzdir2 [makeDirectory Test $tzdir] + set tzfile [makeFile {} TijuanaTwo $tzdir2] + set f [open $tzfile wb] + puts -nonewline $f [binary format c* { + 0x54 0x5a 0x69 0x66 0x32 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 + 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x06 0x00 0x00 + 0x00 0x06 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x95 0x00 0x00 0x00 + 0x06 0x00 0x00 0x00 0x18 0xa5 0xb6 0xf6 0x80 0xa9 0x79 0x4f 0x70 + 0xaf 0xf2 0x7c 0xf0 0xb6 0x66 0x64 0x70 0xb7 0x1b 0x10 0x00 0xb8 + 0x0a 0xf2 0xf0 0xcb 0xea 0x8d 0x80 0xd2 0x23 0xf4 0x70 0xd2 0x99 + 0xba 0x70 0xd7 0x1b 0x59 0x00 0xd8 0x91 0xb4 0xf0 0xe2 0x7e 0x59 + 0xa0 0xe3 0x49 0x52 0x90 0xe4 0x5e 0x3b 0xa0 0xe5 0x29 0x34 0x90 + 0xe6 0x47 0x58 0x20 0xe7 0x12 0x51 0x10 0xe8 0x27 0x3a 0x20 0xe8 + 0xf2 0x33 0x10 0xea 0x07 0x1c 0x20 0xea 0xd2 0x15 0x10 0xeb 0xe6 + 0xfe 0x20 0xec 0xb1 0xf7 0x10 0xed 0xc6 0xe0 0x20 0xee 0x91 0xd9 + 0x10 0x0b 0xe0 0xaf 0xa0 0x0c 0xd9 0xcd 0x10 0x0d 0xc0 0x91 0xa0 + 0x0e 0xb9 0xaf 0x10 0x0f 0xa9 0xae 0x20 0x10 0x99 0x91 0x10 0x11 + 0x89 0x90 0x20 0x12 0x79 0x73 0x10 0x13 0x69 0x72 0x20 0x14 0x59 + 0x55 0x10 0x15 0x49 0x54 0x20 0x16 0x39 0x37 0x10 0x17 0x29 0x36 + 0x20 0x18 0x22 0x53 0x90 0x19 0x09 0x18 0x20 0x1a 0x02 0x35 0x90 + 0x1a 0xf2 0x34 0xa0 0x1b 0xe2 0x17 0x90 0x1c 0xd2 0x16 0xa0 0x1d + 0xc1 0xf9 0x90 0x1e 0xb1 0xf8 0xa0 0x1f 0xa1 0xdb 0x90 0x20 0x76 + 0x2b 0x20 0x21 0x81 0xbd 0x90 0x22 0x56 0x0d 0x20 0x23 0x6a 0xda + 0x10 0x24 0x35 0xef 0x20 0x25 0x4a 0xbc 0x10 0x26 0x15 0xd1 0x20 + 0x27 0x2a 0x9e 0x10 0x27 0xfe 0xed 0xa0 0x29 0x0a 0x80 0x10 0x29 + 0xde 0xcf 0xa0 0x2a 0xea 0x62 0x10 0x2b 0xbe 0xb1 0xa0 0x2c 0xd3 + 0x7e 0x90 0x2d 0x9e 0x93 0xa0 0x2e 0xb3 0x60 0x90 0x2f 0x7e 0x75 + 0xa0 0x30 0x93 0x42 0x90 0x31 0x67 0x92 0x20 0x32 0x73 0x24 0x90 + 0x33 0x47 0x74 0x20 0x34 0x53 0x06 0x90 0x35 0x27 0x56 0x20 0x36 + 0x32 0xe8 0x90 0x37 0x07 0x38 0x20 0x38 0x1c 0x05 0x10 0x38 0xe7 + 0x1a 0x20 0x39 0xfb 0xe7 0x10 0x3a 0xc6 0xfc 0x20 0x3b 0xdb 0xc9 + 0x10 0x3c 0xb0 0x18 0xa0 0x3d 0xbb 0xab 0x10 0x3e 0x8f 0xfa 0xa0 + 0x3f 0x9b 0x8d 0x10 0x40 0x6f 0xdc 0xa0 0x41 0x84 0xa9 0x90 0x42 + 0x4f 0xbe 0xa0 0x43 0x64 0x8b 0x90 0x44 0x2f 0xa0 0xa0 0x45 0x44 + 0x6d 0x90 0x46 0x0f 0x82 0xa0 0x47 0x24 0x4f 0x90 0x47 0xf8 0x9f + 0x20 0x49 0x04 0x31 0x90 0x49 0xd8 0x81 0x20 0x4a 0xe4 0x13 0x90 + 0x4b 0xb8 0x63 0x20 0x4c 0xcd 0x30 0x10 0x4d 0x98 0x45 0x20 0x4e + 0xad 0x12 0x10 0x4f 0x78 0x27 0x20 0x50 0x8c 0xf4 0x10 0x51 0x61 + 0x43 0xa0 0x52 0x6c 0xd6 0x10 0x53 0x41 0x25 0xa0 0x54 0x4c 0xb8 + 0x10 0x55 0x21 0x07 0xa0 0x56 0x2c 0x9a 0x10 0x57 0x00 0xe9 0xa0 + 0x58 0x15 0xb6 0x90 0x58 0xe0 0xcb 0xa0 0x59 0xf5 0x98 0x90 0x5a + 0xc0 0xad 0xa0 0x5b 0xd5 0x7a 0x90 0x5c 0xa9 0xca 0x20 0x5d 0xb5 + 0x5c 0x90 0x5e 0x89 0xac 0x20 0x5f 0x95 0x3e 0x90 0x60 0x69 0x8e + 0x20 0x61 0x7e 0x5b 0x10 0x62 0x49 0x70 0x20 0x63 0x5e 0x3d 0x10 + 0x64 0x29 0x52 0x20 0x65 0x3e 0x1f 0x10 0x66 0x12 0x6e 0xa0 0x67 + 0x1e 0x01 0x10 0x67 0xf2 0x50 0xa0 0x68 0xfd 0xe3 0x10 0x69 0xd2 + 0x32 0xa0 0x6a 0xdd 0xc5 0x10 0x6b 0xb2 0x14 0xa0 0x6c 0xc6 0xe1 + 0x90 0x6d 0x91 0xf6 0xa0 0x6e 0xa6 0xc3 0x90 0x6f 0x71 0xd8 0xa0 + 0x70 0x86 0xa5 0x90 0x71 0x5a 0xf5 0x20 0x72 0x66 0x87 0x90 0x73 + 0x3a 0xd7 0x20 0x74 0x46 0x69 0x90 0x75 0x1a 0xb9 0x20 0x76 0x2f + 0x86 0x10 0x76 0xfa 0x9b 0x20 0x78 0x0f 0x68 0x10 0x78 0xda 0x7d + 0x20 0x79 0xef 0x4a 0x10 0x7a 0xba 0x5f 0x20 0x7b 0xcf 0x2c 0x10 + 0x7c 0xa3 0x7b 0xa0 0x7d 0xaf 0x0e 0x10 0x7e 0x83 0x5d 0xa0 0x7f + 0x8e 0xf0 0x10 0x01 0x02 0x01 0x02 0x03 0x02 0x04 0x05 0x02 0x03 + 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 + 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 + 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 + 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 + 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 + 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 + 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 + 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 + 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 + 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 + 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0xff 0xff 0x92 0x4c + 0x00 0x00 0xff 0xff 0x9d 0x90 0x00 0x04 0xff 0xff 0x8f 0x80 0x00 + 0x08 0xff 0xff 0x9d 0x90 0x01 0x0c 0xff 0xff 0x9d 0x90 0x01 0x10 + 0xff 0xff 0x9d 0x90 0x01 0x14 0x4c 0x4d 0x54 0x00 0x4d 0x53 0x54 + 0x00 0x50 0x53 0x54 0x00 0x50 0x44 0x54 0x00 0x50 0x57 0x54 0x00 + 0x50 0x50 0x54 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 + 0x00 0x00 0x01 0x54 0x5a 0x69 0x66 0x32 0x00 0x00 0x00 0x00 0x00 + 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 + 0x06 0x00 0x00 0x00 0x06 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x95 + 0x00 0x00 0x00 0x06 0x00 0x00 0x00 0x18 0xff 0xff 0xff 0xff 0xa5 + 0xb6 0xf6 0x80 0xff 0xff 0xff 0xff 0xa9 0x79 0x4f 0x70 0xff 0xff + 0xff 0xff 0xaf 0xf2 0x7c 0xf0 0xff 0xff 0xff 0xff 0xb6 0x66 0x64 + 0x70 0xff 0xff 0xff 0xff 0xb7 0x1b 0x10 0x00 0xff 0xff 0xff 0xff + 0xb8 0x0a 0xf2 0xf0 0xff 0xff 0xff 0xff 0xcb 0xea 0x8d 0x80 0xff + 0xff 0xff 0xff 0xd2 0x23 0xf4 0x70 0xff 0xff 0xff 0xff 0xd2 0x99 + 0xba 0x70 0xff 0xff 0xff 0xff 0xd7 0x1b 0x59 0x00 0xff 0xff 0xff + 0xff 0xd8 0x91 0xb4 0xf0 0xff 0xff 0xff 0xff 0xe2 0x7e 0x59 0xa0 + 0xff 0xff 0xff 0xff 0xe3 0x49 0x52 0x90 0xff 0xff 0xff 0xff 0xe4 + 0x5e 0x3b 0xa0 0xff 0xff 0xff 0xff 0xe5 0x29 0x34 0x90 0xff 0xff + 0xff 0xff 0xe6 0x47 0x58 0x20 0xff 0xff 0xff 0xff 0xe7 0x12 0x51 + 0x10 0xff 0xff 0xff 0xff 0xe8 0x27 0x3a 0x20 0xff 0xff 0xff 0xff + 0xe8 0xf2 0x33 0x10 0xff 0xff 0xff 0xff 0xea 0x07 0x1c 0x20 0xff + 0xff 0xff 0xff 0xea 0xd2 0x15 0x10 0xff 0xff 0xff 0xff 0xeb 0xe6 + 0xfe 0x20 0xff 0xff 0xff 0xff 0xec 0xb1 0xf7 0x10 0xff 0xff 0xff + 0xff 0xed 0xc6 0xe0 0x20 0xff 0xff 0xff 0xff 0xee 0x91 0xd9 0x10 + 0x00 0x00 0x00 0x00 0x0b 0xe0 0xaf 0xa0 0x00 0x00 0x00 0x00 0x0c + 0xd9 0xcd 0x10 0x00 0x00 0x00 0x00 0x0d 0xc0 0x91 0xa0 0x00 0x00 + 0x00 0x00 0x0e 0xb9 0xaf 0x10 0x00 0x00 0x00 0x00 0x0f 0xa9 0xae + 0x20 0x00 0x00 0x00 0x00 0x10 0x99 0x91 0x10 0x00 0x00 0x00 0x00 + 0x11 0x89 0x90 0x20 0x00 0x00 0x00 0x00 0x12 0x79 0x73 0x10 0x00 + 0x00 0x00 0x00 0x13 0x69 0x72 0x20 0x00 0x00 0x00 0x00 0x14 0x59 + 0x55 0x10 0x00 0x00 0x00 0x00 0x15 0x49 0x54 0x20 0x00 0x00 0x00 + 0x00 0x16 0x39 0x37 0x10 0x00 0x00 0x00 0x00 0x17 0x29 0x36 0x20 + 0x00 0x00 0x00 0x00 0x18 0x22 0x53 0x90 0x00 0x00 0x00 0x00 0x19 + 0x09 0x18 0x20 0x00 0x00 0x00 0x00 0x1a 0x02 0x35 0x90 0x00 0x00 + 0x00 0x00 0x1a 0xf2 0x34 0xa0 0x00 0x00 0x00 0x00 0x1b 0xe2 0x17 + 0x90 0x00 0x00 0x00 0x00 0x1c 0xd2 0x16 0xa0 0x00 0x00 0x00 0x00 + 0x1d 0xc1 0xf9 0x90 0x00 0x00 0x00 0x00 0x1e 0xb1 0xf8 0xa0 0x00 + 0x00 0x00 0x00 0x1f 0xa1 0xdb 0x90 0x00 0x00 0x00 0x00 0x20 0x76 + 0x2b 0x20 0x00 0x00 0x00 0x00 0x21 0x81 0xbd 0x90 0x00 0x00 0x00 + 0x00 0x22 0x56 0x0d 0x20 0x00 0x00 0x00 0x00 0x23 0x6a 0xda 0x10 + 0x00 0x00 0x00 0x00 0x24 0x35 0xef 0x20 0x00 0x00 0x00 0x00 0x25 + 0x4a 0xbc 0x10 0x00 0x00 0x00 0x00 0x26 0x15 0xd1 0x20 0x00 0x00 + 0x00 0x00 0x27 0x2a 0x9e 0x10 0x00 0x00 0x00 0x00 0x27 0xfe 0xed + 0xa0 0x00 0x00 0x00 0x00 0x29 0x0a 0x80 0x10 0x00 0x00 0x00 0x00 + 0x29 0xde 0xcf 0xa0 0x00 0x00 0x00 0x00 0x2a 0xea 0x62 0x10 0x00 + 0x00 0x00 0x00 0x2b 0xbe 0xb1 0xa0 0x00 0x00 0x00 0x00 0x2c 0xd3 + 0x7e 0x90 0x00 0x00 0x00 0x00 0x2d 0x9e 0x93 0xa0 0x00 0x00 0x00 + 0x00 0x2e 0xb3 0x60 0x90 0x00 0x00 0x00 0x00 0x2f 0x7e 0x75 0xa0 + 0x00 0x00 0x00 0x00 0x30 0x93 0x42 0x90 0x00 0x00 0x00 0x00 0x31 + 0x67 0x92 0x20 0x00 0x00 0x00 0x00 0x32 0x73 0x24 0x90 0x00 0x00 + 0x00 0x00 0x33 0x47 0x74 0x20 0x00 0x00 0x00 0x00 0x34 0x53 0x06 + 0x90 0x00 0x00 0x00 0x00 0x35 0x27 0x56 0x20 0x00 0x00 0x00 0x00 + 0x36 0x32 0xe8 0x90 0x00 0x00 0x00 0x00 0x37 0x07 0x38 0x20 0x00 + 0x00 0x00 0x00 0x38 0x1c 0x05 0x10 0x00 0x00 0x00 0x00 0x38 0xe7 + 0x1a 0x20 0x00 0x00 0x00 0x00 0x39 0xfb 0xe7 0x10 0x00 0x00 0x00 + 0x00 0x3a 0xc6 0xfc 0x20 0x00 0x00 0x00 0x00 0x3b 0xdb 0xc9 0x10 + 0x00 0x00 0x00 0x00 0x3c 0xb0 0x18 0xa0 0x00 0x00 0x00 0x00 0x3d + 0xbb 0xab 0x10 0x00 0x00 0x00 0x00 0x3e 0x8f 0xfa 0xa0 0x00 0x00 + 0x00 0x00 0x3f 0x9b 0x8d 0x10 0x00 0x00 0x00 0x00 0x40 0x6f 0xdc + 0xa0 0x00 0x00 0x00 0x00 0x41 0x84 0xa9 0x90 0x00 0x00 0x00 0x00 + 0x42 0x4f 0xbe 0xa0 0x00 0x00 0x00 0x00 0x43 0x64 0x8b 0x90 0x00 + 0x00 0x00 0x00 0x44 0x2f 0xa0 0xa0 0x00 0x00 0x00 0x00 0x45 0x44 + 0x6d 0x90 0x00 0x00 0x00 0x00 0x46 0x0f 0x82 0xa0 0x00 0x00 0x00 + 0x00 0x47 0x24 0x4f 0x90 0x00 0x00 0x00 0x00 0x47 0xf8 0x9f 0x20 + 0x00 0x00 0x00 0x00 0x49 0x04 0x31 0x90 0x00 0x00 0x00 0x00 0x49 + 0xd8 0x81 0x20 0x00 0x00 0x00 0x00 0x4a 0xe4 0x13 0x90 0x00 0x00 + 0x00 0x00 0x4b 0xb8 0x63 0x20 0x00 0x00 0x00 0x00 0x4c 0xcd 0x30 + 0x10 0x00 0x00 0x00 0x00 0x4d 0x98 0x45 0x20 0x00 0x00 0x00 0x00 + 0x4e 0xad 0x12 0x10 0x00 0x00 0x00 0x00 0x4f 0x78 0x27 0x20 0x00 + 0x00 0x00 0x00 0x50 0x8c 0xf4 0x10 0x00 0x00 0x00 0x00 0x51 0x61 + 0x43 0xa0 0x00 0x00 0x00 0x00 0x52 0x6c 0xd6 0x10 0x00 0x00 0x00 + 0x00 0x53 0x41 0x25 0xa0 0x00 0x00 0x00 0x00 0x54 0x4c 0xb8 0x10 + 0x00 0x00 0x00 0x00 0x55 0x21 0x07 0xa0 0x00 0x00 0x00 0x00 0x56 + 0x2c 0x9a 0x10 0x00 0x00 0x00 0x00 0x57 0x00 0xe9 0xa0 0x00 0x00 + 0x00 0x00 0x58 0x15 0xb6 0x90 0x00 0x00 0x00 0x00 0x58 0xe0 0xcb + 0xa0 0x00 0x00 0x00 0x00 0x59 0xf5 0x98 0x90 0x00 0x00 0x00 0x00 + 0x5a 0xc0 0xad 0xa0 0x00 0x00 0x00 0x00 0x5b 0xd5 0x7a 0x90 0x00 + 0x00 0x00 0x00 0x5c 0xa9 0xca 0x20 0x00 0x00 0x00 0x00 0x5d 0xb5 + 0x5c 0x90 0x00 0x00 0x00 0x00 0x5e 0x89 0xac 0x20 0x00 0x00 0x00 + 0x00 0x5f 0x95 0x3e 0x90 0x00 0x00 0x00 0x00 0x60 0x69 0x8e 0x20 + 0x00 0x00 0x00 0x00 0x61 0x7e 0x5b 0x10 0x00 0x00 0x00 0x00 0x62 + 0x49 0x70 0x20 0x00 0x00 0x00 0x00 0x63 0x5e 0x3d 0x10 0x00 0x00 + 0x00 0x00 0x64 0x29 0x52 0x20 0x00 0x00 0x00 0x00 0x65 0x3e 0x1f + 0x10 0x00 0x00 0x00 0x00 0x66 0x12 0x6e 0xa0 0x00 0x00 0x00 0x00 + 0x67 0x1e 0x01 0x10 0x00 0x00 0x00 0x00 0x67 0xf2 0x50 0xa0 0x00 + 0x00 0x00 0x00 0x68 0xfd 0xe3 0x10 0x00 0x00 0x00 0x00 0x69 0xd2 + 0x32 0xa0 0x00 0x00 0x00 0x00 0x6a 0xdd 0xc5 0x10 0x00 0x00 0x00 + 0x00 0x6b 0xb2 0x14 0xa0 0x00 0x00 0x00 0x00 0x6c 0xc6 0xe1 0x90 + 0x00 0x00 0x00 0x00 0x6d 0x91 0xf6 0xa0 0x00 0x00 0x00 0x00 0x6e + 0xa6 0xc3 0x90 0x00 0x00 0x00 0x00 0x6f 0x71 0xd8 0xa0 0x00 0x00 + 0x00 0x00 0x70 0x86 0xa5 0x90 0x00 0x00 0x00 0x00 0x71 0x5a 0xf5 + 0x20 0x00 0x00 0x00 0x00 0x72 0x66 0x87 0x90 0x00 0x00 0x00 0x00 + 0x73 0x3a 0xd7 0x20 0x00 0x00 0x00 0x00 0x74 0x46 0x69 0x90 0x00 + 0x00 0x00 0x00 0x75 0x1a 0xb9 0x20 0x00 0x00 0x00 0x00 0x76 0x2f + 0x86 0x10 0x00 0x00 0x00 0x00 0x76 0xfa 0x9b 0x20 0x00 0x00 0x00 + 0x00 0x78 0x0f 0x68 0x10 0x00 0x00 0x00 0x00 0x78 0xda 0x7d 0x20 + 0x00 0x00 0x00 0x00 0x79 0xef 0x4a 0x10 0x00 0x00 0x00 0x00 0x7a + 0xba 0x5f 0x20 0x00 0x00 0x00 0x00 0x7b 0xcf 0x2c 0x10 0x00 0x00 + 0x00 0x00 0x7c 0xa3 0x7b 0xa0 0x00 0x00 0x00 0x00 0x7d 0xaf 0x0e + 0x10 0x00 0x00 0x00 0x00 0x7e 0x83 0x5d 0xa0 0x00 0x00 0x00 0x00 + 0x7f 0x8e 0xf0 0x10 0x01 0x02 0x01 0x02 0x03 0x02 0x04 0x05 0x02 + 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 + 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 + 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 + 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 + 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 + 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 + 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 + 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 + 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 + 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 + 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0x03 0x02 0xff 0xff 0x92 + 0x4c 0x00 0x00 0xff 0xff 0x9d 0x90 0x00 0x04 0xff 0xff 0x8f 0x80 + 0x00 0x08 0xff 0xff 0x9d 0x90 0x01 0x0c 0xff 0xff 0x9d 0x90 0x01 + 0x10 0xff 0xff 0x9d 0x90 0x01 0x14 0x4c 0x4d 0x54 0x00 0x4d 0x53 + 0x54 0x00 0x50 0x53 0x54 0x00 0x50 0x44 0x54 0x00 0x50 0x57 0x54 + 0x00 0x50 0x50 0x54 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00 0x00 + 0x00 0x00 0x00 0x01 0x0a 0x50 0x53 0x54 0x38 0x50 0x44 0x54 0x2c + 0x4d 0x34 0x2e 0x31 0x2e 0x30 0x2c 0x4d 0x31 0x30 0x2e 0x35 0x2e + 0x30 0x0a + }] + close $f + set ::tcl::clock::ZoneinfoPaths \ + [linsert $::tcl::clock::ZoneinfoPaths 0 $tzdir] + ::tcl::clock::ClearCaches + } + -cleanup { + set ::tcl::clock::ZoneinfoPaths \ + [lrange $::tcl::clock::ZoneinfoPaths 1 end] + ::tcl::clock::ClearCaches + removeFile TijuanaTwo $tzdir2 + removeDirectory Test $tzdir + removeDirectory zoneinfo + } + -body { + clock format 2224738800 -timezone :Test/TijuanaTwo \ + -format {%Y-%m-%d %H:%M:%S %Z} + } + -result {2040-07-01 00:00:00 PDT} +} + +test clock-56.4 {Bug 3470928} {*}{ + -setup { + clock format [clock seconds] + set tzdir [makeDirectory zoneinfo] + set tzdir2 [makeDirectory Test $tzdir] + set tzfile [makeFile {} Windhoek $tzdir2] + set f [open $tzfile wb] + puts -nonewline $f [binary format c* { + 0x54 0x5a 0x69 0x66 0x32 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 + 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x06 0x00 0x00 + 0x00 0x06 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x5c 0x00 0x00 0x00 + 0x06 0x00 0x00 0x00 0x13 0x82 0x46 0xcf 0x68 0xcc 0xae 0x8c 0x80 + 0xcd 0x9e 0x6f 0x70 0x26 0x06 0xa7 0xe0 0x2d 0x9d 0xea 0xe0 0x2e + 0x69 0x1c 0x10 0x2f 0x7d 0xe9 0x00 0x30 0x48 0xfe 0x10 0x31 0x67 + 0x05 0x80 0x32 0x28 0xe0 0x10 0x33 0x46 0xe7 0x80 0x34 0x11 0xfc + 0x90 0x35 0x26 0xc9 0x80 0x35 0xf1 0xde 0x90 0x37 0x06 0xab 0x80 + 0x37 0xd1 0xc0 0x90 0x38 0xe6 0x8d 0x80 0x39 0xb1 0xa2 0x90 0x3a + 0xc6 0x6f 0x80 0x3b 0x91 0x84 0x90 0x3c 0xaf 0x8c 0x00 0x3d 0x71 + 0x66 0x90 0x3e 0x8f 0x6e 0x00 0x3f 0x5a 0x83 0x10 0x40 0x6f 0x50 + 0x00 0x41 0x3a 0x65 0x10 0x42 0x4f 0x32 0x00 0x43 0x1a 0x47 0x10 + 0x44 0x2f 0x14 0x00 0x44 0xfa 0x29 0x10 0x46 0x0e 0xf6 0x00 0x46 + 0xda 0x0b 0x10 0x47 0xf8 0x12 0x80 0x48 0xc3 0x27 0x90 0x49 0xd7 + 0xf4 0x80 0x4a 0xa3 0x09 0x90 0x4b 0xb7 0xd6 0x80 0x4c 0x82 0xeb + 0x90 0x4d 0x97 0xb8 0x80 0x4e 0x62 0xcd 0x90 0x4f 0x77 0x9a 0x80 + 0x50 0x42 0xaf 0x90 0x51 0x60 0xb7 0x00 0x52 0x22 0x91 0x90 0x53 + 0x40 0x99 0x00 0x54 0x0b 0xae 0x10 0x55 0x20 0x7b 0x00 0x55 0xeb + 0x90 0x10 0x57 0x00 0x5d 0x00 0x57 0xcb 0x72 0x10 0x58 0xe0 0x3f + 0x00 0x59 0xab 0x54 0x10 0x5a 0xc0 0x21 0x00 0x5b 0x8b 0x36 0x10 + 0x5c 0xa9 0x3d 0x80 0x5d 0x6b 0x18 0x10 0x5e 0x89 0x1f 0x80 0x5f + 0x54 0x34 0x90 0x60 0x69 0x01 0x80 0x61 0x34 0x16 0x90 0x62 0x48 + 0xe3 0x80 0x63 0x13 0xf8 0x90 0x64 0x28 0xc5 0x80 0x64 0xf3 0xda + 0x90 0x66 0x11 0xe2 0x00 0x66 0xd3 0xbc 0x90 0x67 0xf1 0xc4 0x00 + 0x68 0xbc 0xd9 0x10 0x69 0xd1 0xa6 0x00 0x6a 0x9c 0xbb 0x10 0x6b + 0xb1 0x88 0x00 0x6c 0x7c 0x9d 0x10 0x6d 0x91 0x6a 0x00 0x6e 0x5c + 0x7f 0x10 0x6f 0x71 0x4c 0x00 0x70 0x3c 0x61 0x10 0x71 0x5a 0x68 + 0x80 0x72 0x1c 0x43 0x10 0x73 0x3a 0x4a 0x80 0x74 0x05 0x5f 0x90 + 0x75 0x1a 0x2c 0x80 0x75 0xe5 0x41 0x90 0x76 0xfa 0x0e 0x80 0x77 + 0xc5 0x23 0x90 0x78 0xd9 0xf0 0x80 0x79 0xa5 0x05 0x90 0x7a 0xb9 + 0xd2 0x80 0x7b 0x84 0xe7 0x90 0x7c 0xa2 0xef 0x00 0x7d 0x6e 0x04 + 0x10 0x7e 0x82 0xd1 0x00 0x7f 0x4d 0xe6 0x10 0x01 0x02 0x01 0x03 + 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 + 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 + 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 + 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 + 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 + 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 + 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x05 0x04 0x00 0x00 0x15 + 0x18 0x00 0x00 0x00 0x00 0x1c 0x20 0x00 0x05 0x00 0x00 0x2a 0x30 + 0x01 0x05 0x00 0x00 0x1c 0x20 0x00 0x0a 0x00 0x00 0x1c 0x20 0x01 + 0x0e 0x00 0x00 0x0e 0x10 0x00 0x01 0x53 0x57 0x41 0x54 0x00 0x53 + 0x41 0x53 0x54 0x00 0x43 0x41 0x54 0x00 0x57 0x41 0x53 0x54 0x00 + 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x54 + 0x5a 0x69 0x66 0x32 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 + 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x07 0x00 0x00 0x00 + 0x07 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x5d 0x00 0x00 0x00 0x07 + 0x00 0x00 0x00 0x17 0xff 0xff 0xff 0xff 0x6d 0x7b 0x4b 0x78 0xff + 0xff 0xff 0xff 0x82 0x46 0xcf 0x68 0xff 0xff 0xff 0xff 0xcc 0xae + 0x8c 0x80 0xff 0xff 0xff 0xff 0xcd 0x9e 0x6f 0x70 0x00 0x00 0x00 + 0x00 0x26 0x06 0xa7 0xe0 0x00 0x00 0x00 0x00 0x2d 0x9d 0xea 0xe0 + 0x00 0x00 0x00 0x00 0x2e 0x69 0x1c 0x10 0x00 0x00 0x00 0x00 0x2f + 0x7d 0xe9 0x00 0x00 0x00 0x00 0x00 0x30 0x48 0xfe 0x10 0x00 0x00 + 0x00 0x00 0x31 0x67 0x05 0x80 0x00 0x00 0x00 0x00 0x32 0x28 0xe0 + 0x10 0x00 0x00 0x00 0x00 0x33 0x46 0xe7 0x80 0x00 0x00 0x00 0x00 + 0x34 0x11 0xfc 0x90 0x00 0x00 0x00 0x00 0x35 0x26 0xc9 0x80 0x00 + 0x00 0x00 0x00 0x35 0xf1 0xde 0x90 0x00 0x00 0x00 0x00 0x37 0x06 + 0xab 0x80 0x00 0x00 0x00 0x00 0x37 0xd1 0xc0 0x90 0x00 0x00 0x00 + 0x00 0x38 0xe6 0x8d 0x80 0x00 0x00 0x00 0x00 0x39 0xb1 0xa2 0x90 + 0x00 0x00 0x00 0x00 0x3a 0xc6 0x6f 0x80 0x00 0x00 0x00 0x00 0x3b + 0x91 0x84 0x90 0x00 0x00 0x00 0x00 0x3c 0xaf 0x8c 0x00 0x00 0x00 + 0x00 0x00 0x3d 0x71 0x66 0x90 0x00 0x00 0x00 0x00 0x3e 0x8f 0x6e + 0x00 0x00 0x00 0x00 0x00 0x3f 0x5a 0x83 0x10 0x00 0x00 0x00 0x00 + 0x40 0x6f 0x50 0x00 0x00 0x00 0x00 0x00 0x41 0x3a 0x65 0x10 0x00 + 0x00 0x00 0x00 0x42 0x4f 0x32 0x00 0x00 0x00 0x00 0x00 0x43 0x1a + 0x47 0x10 0x00 0x00 0x00 0x00 0x44 0x2f 0x14 0x00 0x00 0x00 0x00 + 0x00 0x44 0xfa 0x29 0x10 0x00 0x00 0x00 0x00 0x46 0x0e 0xf6 0x00 + 0x00 0x00 0x00 0x00 0x46 0xda 0x0b 0x10 0x00 0x00 0x00 0x00 0x47 + 0xf8 0x12 0x80 0x00 0x00 0x00 0x00 0x48 0xc3 0x27 0x90 0x00 0x00 + 0x00 0x00 0x49 0xd7 0xf4 0x80 0x00 0x00 0x00 0x00 0x4a 0xa3 0x09 + 0x90 0x00 0x00 0x00 0x00 0x4b 0xb7 0xd6 0x80 0x00 0x00 0x00 0x00 + 0x4c 0x82 0xeb 0x90 0x00 0x00 0x00 0x00 0x4d 0x97 0xb8 0x80 0x00 + 0x00 0x00 0x00 0x4e 0x62 0xcd 0x90 0x00 0x00 0x00 0x00 0x4f 0x77 + 0x9a 0x80 0x00 0x00 0x00 0x00 0x50 0x42 0xaf 0x90 0x00 0x00 0x00 + 0x00 0x51 0x60 0xb7 0x00 0x00 0x00 0x00 0x00 0x52 0x22 0x91 0x90 + 0x00 0x00 0x00 0x00 0x53 0x40 0x99 0x00 0x00 0x00 0x00 0x00 0x54 + 0x0b 0xae 0x10 0x00 0x00 0x00 0x00 0x55 0x20 0x7b 0x00 0x00 0x00 + 0x00 0x00 0x55 0xeb 0x90 0x10 0x00 0x00 0x00 0x00 0x57 0x00 0x5d + 0x00 0x00 0x00 0x00 0x00 0x57 0xcb 0x72 0x10 0x00 0x00 0x00 0x00 + 0x58 0xe0 0x3f 0x00 0x00 0x00 0x00 0x00 0x59 0xab 0x54 0x10 0x00 + 0x00 0x00 0x00 0x5a 0xc0 0x21 0x00 0x00 0x00 0x00 0x00 0x5b 0x8b + 0x36 0x10 0x00 0x00 0x00 0x00 0x5c 0xa9 0x3d 0x80 0x00 0x00 0x00 + 0x00 0x5d 0x6b 0x18 0x10 0x00 0x00 0x00 0x00 0x5e 0x89 0x1f 0x80 + 0x00 0x00 0x00 0x00 0x5f 0x54 0x34 0x90 0x00 0x00 0x00 0x00 0x60 + 0x69 0x01 0x80 0x00 0x00 0x00 0x00 0x61 0x34 0x16 0x90 0x00 0x00 + 0x00 0x00 0x62 0x48 0xe3 0x80 0x00 0x00 0x00 0x00 0x63 0x13 0xf8 + 0x90 0x00 0x00 0x00 0x00 0x64 0x28 0xc5 0x80 0x00 0x00 0x00 0x00 + 0x64 0xf3 0xda 0x90 0x00 0x00 0x00 0x00 0x66 0x11 0xe2 0x00 0x00 + 0x00 0x00 0x00 0x66 0xd3 0xbc 0x90 0x00 0x00 0x00 0x00 0x67 0xf1 + 0xc4 0x00 0x00 0x00 0x00 0x00 0x68 0xbc 0xd9 0x10 0x00 0x00 0x00 + 0x00 0x69 0xd1 0xa6 0x00 0x00 0x00 0x00 0x00 0x6a 0x9c 0xbb 0x10 + 0x00 0x00 0x00 0x00 0x6b 0xb1 0x88 0x00 0x00 0x00 0x00 0x00 0x6c + 0x7c 0x9d 0x10 0x00 0x00 0x00 0x00 0x6d 0x91 0x6a 0x00 0x00 0x00 + 0x00 0x00 0x6e 0x5c 0x7f 0x10 0x00 0x00 0x00 0x00 0x6f 0x71 0x4c + 0x00 0x00 0x00 0x00 0x00 0x70 0x3c 0x61 0x10 0x00 0x00 0x00 0x00 + 0x71 0x5a 0x68 0x80 0x00 0x00 0x00 0x00 0x72 0x1c 0x43 0x10 0x00 + 0x00 0x00 0x00 0x73 0x3a 0x4a 0x80 0x00 0x00 0x00 0x00 0x74 0x05 + 0x5f 0x90 0x00 0x00 0x00 0x00 0x75 0x1a 0x2c 0x80 0x00 0x00 0x00 + 0x00 0x75 0xe5 0x41 0x90 0x00 0x00 0x00 0x00 0x76 0xfa 0x0e 0x80 + 0x00 0x00 0x00 0x00 0x77 0xc5 0x23 0x90 0x00 0x00 0x00 0x00 0x78 + 0xd9 0xf0 0x80 0x00 0x00 0x00 0x00 0x79 0xa5 0x05 0x90 0x00 0x00 + 0x00 0x00 0x7a 0xb9 0xd2 0x80 0x00 0x00 0x00 0x00 0x7b 0x84 0xe7 + 0x90 0x00 0x00 0x00 0x00 0x7c 0xa2 0xef 0x00 0x00 0x00 0x00 0x00 + 0x7d 0x6e 0x04 0x10 0x00 0x00 0x00 0x00 0x7e 0x82 0xd1 0x00 0x00 + 0x00 0x00 0x00 0x7f 0x4d 0xe6 0x10 0x01 0x02 0x03 0x02 0x04 0x06 + 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 + 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 + 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 + 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 + 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 + 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 + 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x06 0x05 0x00 0x00 0x10 0x08 + 0x00 0x00 0x00 0x00 0x15 0x18 0x00 0x04 0x00 0x00 0x1c 0x20 0x00 + 0x09 0x00 0x00 0x2a 0x30 0x01 0x09 0x00 0x00 0x1c 0x20 0x00 0x0e + 0x00 0x00 0x1c 0x20 0x01 0x12 0x00 0x00 0x0e 0x10 0x00 0x05 0x4c + 0x4d 0x54 0x00 0x53 0x57 0x41 0x54 0x00 0x53 0x41 0x53 0x54 0x00 + 0x43 0x41 0x54 0x00 0x57 0x41 0x53 0x54 0x00 0x00 0x00 0x00 0x00 + 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0a 0x57 0x41 + 0x54 0x2d 0x31 0x57 0x41 0x53 0x54 0x2c 0x4d 0x39 0x2e 0x31 0x2e + 0x30 0x2c 0x4d 0x34 0x2e 0x31 0x2e 0x30 0x0a + }] + close $f + set ::tcl::clock::ZoneinfoPaths \ + [linsert $::tcl::clock::ZoneinfoPaths 0 $tzdir] + ::tcl::clock::ClearCaches + } + -body { + clock format 1326054606 -timezone :Test/Windhoek + } + -cleanup { + set ::tcl::clock::ZoneinfoPaths \ + [lrange $::tcl::clock::ZoneinfoPaths 1 end] + ::tcl::clock::ClearCaches + removeFile Windhoek $tzdir2 + removeDirectory Test $tzdir + removeDirectory zoneinfo + } + -result {Sun Jan 08 22:30:06 WAST 2012} +} + +test clock-57.1 {clock scan - abbreviated options} { + clock scan 1970-01-01 -f %Y-%m-%d -g true +} 0 + +test clock-58.1 {clock l10n - Japanese localisation} {*}{ + -setup { + proc backslashify { string } { + + set retval {} + foreach char [split $string {}] { + scan $char %c ccode + if { $ccode >= 0x0020 && $ccode < 0x007f + && $char ne "\{" && $char ne "\}" && $char ne "\[" + && $char ne "\]" && $char ne "\\" && $char ne "\$" } { + append retval $char + } else { + append retval \\u [format %04x $ccode] + } + } + return $retval + } + } + -body { + set trouble {} + foreach {date jdate} [list \ + 1872-12-31 \u897f\u66a61872\u5e7412\u670831\u65e5 \ + 1873-01-01 \u660e\u6cbb06\u5e7401\u670801\u65e5 \ + 1912-07-29 \u660e\u6cbb45\u5e7407\u670829\u65e5 \ + 1912-07-30 \u5927\u6b6301\u5e7407\u670830\u65e5 \ + 1926-12-24 \u5927\u6b6315\u5e7412\u670824\u65e5 \ + 1926-12-25 \u662d\u548c01\u5e7412\u670825\u65e5 \ + 1989-01-07 \u662d\u548c64\u5e7401\u670807\u65e5 \ + 1989-01-08 \u5e73\u621001\u5e7401\u670808\u65e5 \ + ] { + set status [catch { + set secs [clock scan $date \ + -timezone +0900 \ + -locale ja_JP \ + -format %Y-%m-%d] + set jda [clock format $secs \ + -timezone +0900 \ + -locale ja_JP \ + -format %Ex] + } result] + if {$status != 0} { + append trouble \n $date " gives error " $result + } elseif {$jda ne $jdate} { + append trouble \n $date " converts to " \ + [backslashify $jda] " and should be " \ + [backslashify $jdate] + } + # There is no code for scanning dates on the locale's + # alternative calendar. + continue + set status [catch { + set secs [clock scan $jdate \ + -timezone +0900 \ + -locale ja_JP \ + -format %Ex] + set da [clock format $secs \ + -timezone +0900 \ + -locale ja_JP \ + -format %Y-%m-%d] + } result] + if {$status != 0} { + append trouble \n [backslashify $jdate] " gives error " $result + } elseif {$da ne $date} { + append trouble \n [backslashify $jdate] " converts to " \ + $da " and should be " $date + } + } + set trouble + } + -cleanup { + rename backslashify {} + } + -result {} +} + +test clock-59.1 {military time zones} { + set hour 0 + set base [clock scan "20000101 000000" -format "%Y%m%d %H%M%S" -gmt 1] + set trouble {} + foreach {pzone mzone} { + Z Z A N B O C P D Q E R F S G T H U I V K W L X M Y + } { + catch {clock scan "20000101 000000 $pzone" \ + -format "%Y%m%d %H%M%S %Z"} ps1 + catch {clock scan "20000101 000000 $pzone"} ps2 + catch {clock scan "20000101 000000 $mzone" \ + -format "%Y%m%d %H%M%S %Z"} ms1 + catch {clock scan "20000101 000000 $mzone"} ms2 + if {$ps1 != $base - 3600 * $hour} { + lappend trouble [list pzone $pzone hour $hour ps1 is $ps1] + } + if {$ps2 != $base - 3600 * $hour} { + lappend trouble [list pzone $pzone ps2 is $ps2] + } + if {$ms1 != $base + 3600 * $hour} { + lappend trouble [list mzone $mzone ms1 is $ms1] + } + if {$ms2 != $base + 3600 * $hour} { + lappend trouble [list mzone $mzone ms2 is $ms2] + } + incr hour + } + join $trouble \n +} {} + +# case-insensitive matching of weekday and month names [Bug 1781282] + +test clock-60.1 {case insensitive weekday names} { + clock scan "2000-W01 monday" -gmt true -format "%G-W%V %a" +} [clock scan "2000-W01-1" -gmt true -format "%G-W%V-%u"] +test clock-60.2 {case insensitive weekday names} { + clock scan "2000-W01 Monday" -gmt true -format "%G-W%V %a" +} [clock scan "2000-W01-1" -gmt true -format "%G-W%V-%u"] +test clock-60.3 {case insensitive weekday names} { + clock scan "2000-W01 MONDAY" -gmt true -format "%G-W%V %a" +} [clock scan "2000-W01-1" -gmt true -format "%G-W%V-%u"] +test clock-60.4 {case insensitive weekday names} { + clock scan "2000-W01 friday" -gmt true -format "%G-W%V %a" +} [clock scan "2000-W01-5" -gmt true -format "%G-W%V-%u"] +test clock-60.5 {case insensitive weekday names} { + clock scan "2000-W01 Friday" -gmt true -format "%G-W%V %a" +} [clock scan "2000-W01-5" -gmt true -format "%G-W%V-%u"] +test clock-60.6 {case insensitive weekday names} { + clock scan "2000-W01 FRIDAY" -gmt true -format "%G-W%V %a" +} [clock scan "2000-W01-5" -gmt true -format "%G-W%V-%u"] +test clock-60.7 {case insensitive month names} { + clock scan "1 january 2000" -gmt true -format "%d %b %Y" +} [clock scan "2000-01-01" -gmt true -format "%Y-%m-%d"] +test clock-60.8 {case insensitive month names} { + clock scan "1 January 2000" -gmt true -format "%d %b %Y" +} [clock scan "2000-01-01" -gmt true -format "%Y-%m-%d"] +test clock-60.9 {case insensitive month names} { + clock scan "1 JANUARY 2000" -gmt true -format "%d %b %Y" +} [clock scan "2000-01-01" -gmt true -format "%Y-%m-%d"] +test clock-60.10 {case insensitive month names} { + clock scan "1 december 2000" -gmt true -format "%d %b %Y" +} [clock scan "2000-12-01" -gmt true -format "%Y-%m-%d"] +test clock-60.11 {case insensitive month names} { + clock scan "1 December 2000" -gmt true -format "%d %b %Y" +} [clock scan "2000-12-01" -gmt true -format "%Y-%m-%d"] +test clock-60.12 {case insensitive month names} { + clock scan "1 DECEMBER 2000" -gmt true -format "%d %b %Y" +} [clock scan "2000-12-01" -gmt true -format "%Y-%m-%d"] + +test clock-61.1 {overflow of a wide integer on output} {*}{ + -body { + clock format 0x8000000000000000 -format %s -gmt true + } + -result {integer value too large to represent} + -returnCodes error +} +test clock-61.2 {overflow of a wide integer on output} {*}{ + -body { + clock format -0x8000000000000001 -format %s -gmt true + } + -result {integer value too large to represent} + -returnCodes error +} +test clock-61.3 {near-miss overflow of a wide integer on output} { + clock format 0x7fffffffffffffff -format %s -gmt true +} [expr 0x7fffffffffffffff] +test clock-61.4 {near-miss overflow of a wide integer on output} { + clock format -0x8000000000000000 -format %s -gmt true +} [expr -0x8000000000000000] + +test clock-62.1 {Bug 1902423} {*}{ + -setup {::tcl::clock::ClearCaches} + -body { + set s 1204049747 + set f1 [clock format $s -format {%Y-%m-%d %T} -locale C] + set f2 [clock format $s -format {%Y-%m-%d %H:%M:%S} -locale C] + if {$f1 ne $f2} { + subst "$f2 is not $f1" + } else { + subst "ok" + } + } + -result ok +} + +test clock-63.1 {Incorrect use of internal ConvertLocalToUTC command} {*}{ + -body { + ::tcl::clock::ConvertLocalToUTC {immaterial stuff} {} 12345 + } + -returnCodes error + -result {key "localseconds" not found in dictionary} +} + +test clock-64.1 {:: in format string [Bug 2362156]} {*}{ + -body { + clock scan 2001-02-03::04:05:06 -gmt 1 -format %Y-%m-%d::%H:%M:%S + } + -result 981173106 +} +test clock-64.2 {:: in format string [Bug 2362156]} {*}{ + -body { + clock format 981173106 -gmt 1 -format %Y-%m-%d::%H:%M:%S + } + -result 2001-02-03::04:05:06 +} + +test clock-65.1 {clock add, bad option [Bug 2481670]} {*}{ + -body { + clock add 0 1 year -foo bar + } + -returnCodes error + -match glob + -result {bad switch "-foo"*} +} + +test clock-66.1 {clock scan, no date, never-before-seen timezone} {*}{ + -setup { + ::tcl::clock::ClearCaches + } + -body { + clock scan 1200 \ + -timezone {<EST>+05:00:00<EDT>+04:00:00,M3.2.0/02:00:00,M11.1.0/02:00:00} \ + -base 1256529600 \ + -format %H%M + } + -result 1256572800 +} + +test clock-67.1 {clock format, %% with a letter following [Bug 2819334]} { + clock format [clock seconds] -format %%r +} %r + # cleanup + +namespace delete ::testClock +::tcl::clock::ClearCaches ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/cmdAH.test b/tests/cmdAH.test index 28e396f..fb0fefc 100644 --- a/tests/cmdAH.test +++ b/tests/cmdAH.test @@ -15,7 +15,14 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -tcltest::testConstraint testchmod [string equal testchmod [info commands testchmod]] +testConstraint testchmod [llength [info commands testchmod]] +testConstraint testsetplatform [llength [info commands testsetplatform]] +testConstraint testvolumetype [llength [info commands testvolumetype]] +testConstraint linkDirectory [expr { + ![testConstraint win] || + ([string index $tcl_platform(osVersion) 0] >= 5 + && [lindex [file system [temporaryDirectory]] 1] eq "NTFS") +}] global env set cmdAHwd [pwd] @@ -32,10 +39,19 @@ test cmdAH-0.2 {Tcl_BreakObjCmd, success} { test cmdAH-1.1 {Tcl_CatchObjCmd, errors} { list [catch {catch} msg] $msg -} {1 {wrong # args: should be "catch command ?varName?"}} +} {1 {wrong # args: should be "catch script ?resultVarName? ?optionVarName?"}} test cmdAH-1.2 {Tcl_CatchObjCmd, errors} { list [catch {catch foo bar baz} msg] $msg -} {1 {wrong # args: should be "catch command ?varName?"}} +} {0 1} +test cmdAH-1.3 {Tcl_CatchObjCmd, errors} { + list [catch {catch foo bar baz spaz} msg] $msg +} {1 {wrong # args: should be "catch script ?resultVarName? ?optionVarName?"}} +test cmdAH-1.4 {Bug 3595576} { + catch {catch {} -> noSuchNs::var} +} 1 +test cmdAH-1.5 {Bug 3595576} { + catch {catch error -> noSuchNs::var} +} 1 test cmdAH-2.1 {Tcl_CdObjCmd} { list [catch {cd foo bar} msg] $msg @@ -110,7 +126,7 @@ test cmdAH-4.1 {Tcl_EncodingObjCmd} { } {1 {wrong # args: should be "encoding option ?arg ...?"}} test cmdAH-4.2 {Tcl_EncodingObjCmd} { list [catch {encoding foo} msg] $msg -} {1 {bad option "foo": must be convertfrom, convertto, names, or system}} +} {1 {bad option "foo": must be convertfrom, convertto, dirs, names, or system}} test cmdAH-4.3 {Tcl_EncodingObjCmd} { list [catch {encoding convertto} msg] $msg } {1 {wrong # args: should be "encoding convertto ?encoding? data"}} @@ -191,16 +207,16 @@ test cmdAH-6.2 {Tcl_FileObjCmd: volumes} { set result 1 } } {1} -test cmdAH-6.3 {Tcl_FileObjCmd: volumes} {macOrUnix} { +test cmdAH-6.3 {Tcl_FileObjCmd: volumes} {unix} { set volumeList [file volumes] catch [list glob -nocomplain [lindex $volumeList 0]*] } {0} -test cmdAH-6.4 {Tcl_FileObjCmd: volumes} winOnly { +test cmdAH-6.4 {Tcl_FileObjCmd: volumes} win { set volumeList [string tolower [file volumes]] list [catch {lsearch $volumeList "c:/"} element] [expr $element != -1] [catch {list glob -nocomplain [lindex $volumeList $element]*}] } {0 1 0} -test cmdAH-6.5 {cd} {unixOnly nonPortable} { +test cmdAH-6.5 {cd} {unix nonPortable} { set dir [pwd] cd / set res [pwd] @@ -222,115 +238,111 @@ test cmdAH-7.1 {Tcl_FileObjCmd - file attrs} { # dirname -if {[info commands testsetplatform] == {}} { - puts "This application hasn't been compiled with the \"testsetplatform\"" - puts "command, so I can't test Tcl_FileObjCmd etc." -} else { -test cmdAH-8.1 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.1 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix list [catch {file dirname a b} msg] $msg } {1 {wrong # args: should be "file dirname name"}} -test cmdAH-8.2 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.2 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix file dirname /a/b } /a -test cmdAH-8.3 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.3 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix file dirname {} } . -test cmdAH-8.5 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.5 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform win file dirname {} } . -test cmdAH-8.6 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.6 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix file dirname .def } . -test cmdAH-8.8 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.8 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform win file dirname a } . -test cmdAH-8.9 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.9 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix file dirname a/b/c.d } a/b -test cmdAH-8.10 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.10 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix file dirname a/b.c/d } a/b.c -test cmdAH-8.11 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.11 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix file dirname /. } / -test cmdAH-8.12 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.12 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix list [catch {file dirname /} msg] $msg } {0 /} -test cmdAH-8.13 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.13 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix list [catch {file dirname /foo} msg] $msg } {0 /} -test cmdAH-8.14 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.14 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix list [catch {file dirname //foo} msg] $msg } {0 /} -test cmdAH-8.15 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.15 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix list [catch {file dirname //foo/bar} msg] $msg } {0 /foo} -test cmdAH-8.16 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.16 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix list [catch {file dirname {//foo\/bar/baz}} msg] $msg } {0 {/foo\/bar}} -test cmdAH-8.17 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.17 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix list [catch {file dirname {//foo\/bar/baz/blat}} msg] $msg } {0 {/foo\/bar/baz}} -test cmdAH-8.18 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.18 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix list [catch {file dirname /foo//} msg] $msg } {0 /} -test cmdAH-8.19 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.19 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix list [catch {file dirname ./a} msg] $msg } {0 .} -test cmdAH-8.20 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.20 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix list [catch {file dirname a/.a} msg] $msg } {0 a} -test cmdAH-8.21 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.21 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform windows list [catch {file dirname c:foo} msg] $msg } {0 c:} -test cmdAH-8.22 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.22 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform windows list [catch {file dirname c:} msg] $msg } {0 c:} -test cmdAH-8.23 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.23 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform windows list [catch {file dirname c:/} msg] $msg } {0 c:/} -test cmdAH-8.24 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.24 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform windows list [catch {file dirname {c:\foo}} msg] $msg } {0 c:/} -test cmdAH-8.25 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.25 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform windows list [catch {file dirname {//foo/bar/baz}} msg] $msg } {0 //foo/bar} -test cmdAH-8.26 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.26 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform windows list [catch {file dirname {//foo/bar}} msg] $msg } {0 //foo/bar} -test cmdAH-8.38 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.38 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix list [catch {file dirname ~/foo} msg] $msg } {0 ~} -test cmdAH-8.39 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.39 {Tcl_FileObjCmd: dirname} testsetplatform { testsetplatform unix list [catch {file dirname ~bar/foo} msg] $msg } {0 ~bar} -test cmdAH-8.43 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.43 {Tcl_FileObjCmd: dirname} testsetplatform { global env set temp $env(HOME) set env(HOME) "/homewontexist/test" @@ -339,7 +351,7 @@ test cmdAH-8.43 {Tcl_FileObjCmd: dirname} { set env(HOME) $temp set result } {0 /homewontexist} -test cmdAH-8.44 {Tcl_FileObjCmd: dirname} { +test cmdAH-8.44 {Tcl_FileObjCmd: dirname} testsetplatform { global env set temp $env(HOME) set env(HOME) "~" @@ -349,114 +361,133 @@ test cmdAH-8.44 {Tcl_FileObjCmd: dirname} { set result } {0 ~} test cmdAH-8.45 {Tcl_FileObjCmd: dirname} { - global env - set temp $env(HOME) - set env(HOME) "/homewontexist/test" - testsetplatform windows - set result [list [catch {file dirname ~} msg] $msg] - set env(HOME) $temp - set result -} {0 /homewontexist} + -constraints {win testsetplatform} + -match regexp + -setup { + set temp $::env(HOME) + } + -body { + set ::env(HOME) "/homewontexist/test" + testsetplatform windows + file dirname ~ + } + -cleanup { + set ::env(HOME) $temp + } + -result {([a-zA-Z]:?)/homewontexist} +} +test cmdAH-8.46 {Tcl_FileObjCmd: dirname} { + set f [file normalize [info nameof]] + file exists $f + set res1 [file dirname [file join $f foo/bar]] + set res2 [file dirname "${f}/foo/bar"] + if {$res1 eq $res2} { + set res "ok" + } else { + set res "file dirname problem, $res1, $res2 not equal" + } + set res +} {ok} # tail -test cmdAH-9.1 {Tcl_FileObjCmd: tail} { +test cmdAH-9.1 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix list [catch {file tail a b} msg] $msg } {1 {wrong # args: should be "file tail name"}} -test cmdAH-9.2 {Tcl_FileObjCmd: tail} { +test cmdAH-9.2 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail /a/b } b -test cmdAH-9.3 {Tcl_FileObjCmd: tail} { +test cmdAH-9.3 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail {} } {} -test cmdAH-9.5 {Tcl_FileObjCmd: tail} { +test cmdAH-9.5 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform win file tail {} } {} -test cmdAH-9.6 {Tcl_FileObjCmd: tail} { +test cmdAH-9.6 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail .def } .def -test cmdAH-9.8 {Tcl_FileObjCmd: tail} { +test cmdAH-9.8 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform win file tail a } a -test cmdAH-9.9 {Tcl_FileObjCmd: tail} { +test cmdAH-9.9 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file ta a/b/c.d } c.d -test cmdAH-9.10 {Tcl_FileObjCmd: tail} { +test cmdAH-9.10 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail a/b.c/d } d -test cmdAH-9.11 {Tcl_FileObjCmd: tail} { +test cmdAH-9.11 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail /. } . -test cmdAH-9.12 {Tcl_FileObjCmd: tail} { +test cmdAH-9.12 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail / } {} -test cmdAH-9.13 {Tcl_FileObjCmd: tail} { +test cmdAH-9.13 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail /foo } foo -test cmdAH-9.14 {Tcl_FileObjCmd: tail} { +test cmdAH-9.14 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail //foo } foo -test cmdAH-9.15 {Tcl_FileObjCmd: tail} { +test cmdAH-9.15 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail //foo/bar } bar -test cmdAH-9.16 {Tcl_FileObjCmd: tail} { +test cmdAH-9.16 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail {//foo\/bar/baz} } baz -test cmdAH-9.17 {Tcl_FileObjCmd: tail} { +test cmdAH-9.17 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail {//foo\/bar/baz/blat} } blat -test cmdAH-9.18 {Tcl_FileObjCmd: tail} { +test cmdAH-9.18 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail /foo// } foo -test cmdAH-9.19 {Tcl_FileObjCmd: tail} { +test cmdAH-9.19 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail ./a } a -test cmdAH-9.20 {Tcl_FileObjCmd: tail} { +test cmdAH-9.20 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail a/.a } .a -test cmdAH-9.21 {Tcl_FileObjCmd: tail} { +test cmdAH-9.21 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform windows file tail c:foo } foo -test cmdAH-9.22 {Tcl_FileObjCmd: tail} { +test cmdAH-9.22 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform windows file tail c: } {} -test cmdAH-9.23 {Tcl_FileObjCmd: tail} { +test cmdAH-9.23 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform windows file tail c:/ } {} -test cmdAH-9.24 {Tcl_FileObjCmd: tail} { +test cmdAH-9.24 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform windows file tail {c:\foo} } foo -test cmdAH-9.25 {Tcl_FileObjCmd: tail} { +test cmdAH-9.25 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform windows file tail {//foo/bar/baz} } baz -test cmdAH-9.26 {Tcl_FileObjCmd: tail} { +test cmdAH-9.26 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform windows file tail {//foo/bar} } {} -test cmdAH-9.42 {Tcl_FileObjCmd: tail} { +test cmdAH-9.42 {Tcl_FileObjCmd: tail} testsetplatform { global env set temp $env(HOME) set env(HOME) "/home/test" @@ -465,7 +496,7 @@ test cmdAH-9.42 {Tcl_FileObjCmd: tail} { set env(HOME) $temp set result } test -test cmdAH-9.43 {Tcl_FileObjCmd: tail} { +test cmdAH-9.43 {Tcl_FileObjCmd: tail} testsetplatform { global env set temp $env(HOME) set env(HOME) "~" @@ -474,7 +505,7 @@ test cmdAH-9.43 {Tcl_FileObjCmd: tail} { set env(HOME) $temp set result } {} -test cmdAH-9.44 {Tcl_FileObjCmd: tail} { +test cmdAH-9.44 {Tcl_FileObjCmd: tail} testsetplatform { global env set temp $env(HOME) set env(HOME) "/home/test" @@ -483,227 +514,227 @@ test cmdAH-9.44 {Tcl_FileObjCmd: tail} { set env(HOME) $temp set result } test -test cmdAH-9.46 {Tcl_FileObjCmd: tail} { +test cmdAH-9.46 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform unix file tail {f.oo\bar/baz.bat} } baz.bat -test cmdAH-9.47 {Tcl_FileObjCmd: tail} { +test cmdAH-9.47 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform windows file tail c:foo } foo -test cmdAH-9.48 {Tcl_FileObjCmd: tail} { +test cmdAH-9.48 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform windows file tail c: } {} -test cmdAH-9.49 {Tcl_FileObjCmd: tail} { +test cmdAH-9.49 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform windows file tail c:/foo } foo -test cmdAH-9.50 {Tcl_FileObjCmd: tail} { +test cmdAH-9.50 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform windows file tail {c:/foo\bar} } bar -test cmdAH-9.51 {Tcl_FileObjCmd: tail} { +test cmdAH-9.51 {Tcl_FileObjCmd: tail} testsetplatform { testsetplatform windows file tail {foo\bar} } bar # rootname -test cmdAH-10.1 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.1 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform unix list [catch {file rootname a b} msg] $msg } {1 {wrong # args: should be "file rootname name"}} -test cmdAH-10.2 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.2 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform unix file rootname {} } {} -test cmdAH-10.3 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.3 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform unix file ro foo } foo -test cmdAH-10.4 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.4 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform unix file rootname foo. } foo -test cmdAH-10.5 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.5 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform unix file rootname .foo } {} -test cmdAH-10.6 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.6 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform unix file rootname abc.def } abc -test cmdAH-10.7 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.7 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform unix file rootname abc.def.ghi } abc.def -test cmdAH-10.8 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.8 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform unix file rootname a/b/c.d } a/b/c -test cmdAH-10.9 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.9 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform unix file rootname a/b.c/d } a/b.c/d -test cmdAH-10.10 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.10 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform unix file rootname a/b.c/ } a/b.c/ -test cmdAH-10.23 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.23 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform windows file rootname {} } {} -test cmdAH-10.24 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.24 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform windows file ro foo } foo -test cmdAH-10.25 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.25 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform windows file rootname foo. } foo -test cmdAH-10.26 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.26 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform windows file rootname .foo } {} -test cmdAH-10.27 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.27 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform windows file rootname abc.def } abc -test cmdAH-10.28 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.28 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform windows file rootname abc.def.ghi } abc.def -test cmdAH-10.29 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.29 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform windows file rootname a/b/c.d } a/b/c -test cmdAH-10.30 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.30 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform windows file rootname a/b.c/d } a/b.c/d -test cmdAH-10.31 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.31 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform windows file rootname a\\b.c\\ } a\\b.c\\ -test cmdAH-10.32 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.32 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform windows file rootname a\\b\\c.d } a\\b\\c -test cmdAH-10.33 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.33 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform windows file rootname a\\b.c\\d } a\\b.c\\d -test cmdAH-10.34 {Tcl_FileObjCmd: rootname} { +test cmdAH-10.34 {Tcl_FileObjCmd: rootname} testsetplatform { testsetplatform windows file rootname a\\b.c\\ } a\\b.c\\ set num 35 foreach outer { {} a .a a. a.a } { - foreach inner { {} a .a a. a.a } { - set thing [format %s/%s $outer $inner] -; test cmdAH-6.$num {Tcl_FileObjCmd: rootname and extension options} { - testsetplatform unix - format %s%s [file rootname $thing] [file ext $thing] - } $thing - set num [expr $num+1] - } + foreach inner { {} a .a a. a.a } { + set thing [format %s/%s $outer $inner] + ;test cmdAH-10.$num {Tcl_FileObjCmd: rootname and extension options} testsetplatform " + testsetplatform unix + [list format %s%s [file rootname $thing] [file ext $thing]] + " $thing + incr num + } } # extension -test cmdAH-11.1 {Tcl_FileObjCmd: extension} { +test cmdAH-11.1 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform unix list [catch {file extension a b} msg] $msg } {1 {wrong # args: should be "file extension name"}} -test cmdAH-11.2 {Tcl_FileObjCmd: extension} { +test cmdAH-11.2 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform unix file extension {} } {} -test cmdAH-11.3 {Tcl_FileObjCmd: extension} { +test cmdAH-11.3 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform unix file ext foo } {} -test cmdAH-11.4 {Tcl_FileObjCmd: extension} { +test cmdAH-11.4 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform unix file extension foo. } . -test cmdAH-11.5 {Tcl_FileObjCmd: extension} { +test cmdAH-11.5 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform unix file extension .foo } .foo -test cmdAH-11.6 {Tcl_FileObjCmd: extension} { +test cmdAH-11.6 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform unix file extension abc.def } .def -test cmdAH-11.7 {Tcl_FileObjCmd: extension} { +test cmdAH-11.7 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform unix file extension abc.def.ghi } .ghi -test cmdAH-11.8 {Tcl_FileObjCmd: extension} { +test cmdAH-11.8 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform unix file extension a/b/c.d } .d -test cmdAH-11.9 {Tcl_FileObjCmd: extension} { +test cmdAH-11.9 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform unix file extension a/b.c/d } {} -test cmdAH-11.10 {Tcl_FileObjCmd: extension} { +test cmdAH-11.10 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform unix file extension a/b.c/ } {} -test cmdAH-11.23 {Tcl_FileObjCmd: extension} { +test cmdAH-11.23 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform windows file extension {} } {} -test cmdAH-11.24 {Tcl_FileObjCmd: extension} { +test cmdAH-11.24 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform windows file ext foo } {} -test cmdAH-11.25 {Tcl_FileObjCmd: extension} { +test cmdAH-11.25 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform windows file extension foo. } . -test cmdAH-11.26 {Tcl_FileObjCmd: extension} { +test cmdAH-11.26 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform windows file extension .foo } .foo -test cmdAH-11.27 {Tcl_FileObjCmd: extension} { +test cmdAH-11.27 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform windows file extension abc.def } .def -test cmdAH-11.28 {Tcl_FileObjCmd: extension} { +test cmdAH-11.28 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform windows file extension abc.def.ghi } .ghi -test cmdAH-11.29 {Tcl_FileObjCmd: extension} { +test cmdAH-11.29 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform windows file extension a/b/c.d } .d -test cmdAH-11.30 {Tcl_FileObjCmd: extension} { +test cmdAH-11.30 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform windows file extension a/b.c/d } {} -test cmdAH-11.31 {Tcl_FileObjCmd: extension} { +test cmdAH-11.31 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform windows file extension a\\b.c\\ } {} -test cmdAH-11.32 {Tcl_FileObjCmd: extension} { +test cmdAH-11.32 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform windows file extension a\\b\\c.d } .d -test cmdAH-11.33 {Tcl_FileObjCmd: extension} { +test cmdAH-11.33 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform windows file extension a\\b.c\\d } {} -test cmdAH-11.34 {Tcl_FileObjCmd: extension} { +test cmdAH-11.34 {Tcl_FileObjCmd: extension} testsetplatform { testsetplatform windows file extension a\\b.c\\ } {} set num 35 foreach value {a..b a...b a.c..b ..b} result {.b .b .b .b} { foreach p {unix windows} { -; test cmdAH-7.$num {Tcl_FileObjCmd: extension} " + ;test cmdAH-11.$num {Tcl_FileObjCmd: extension} testsetplatform " testsetplatform $p file extension $value " $result @@ -713,98 +744,103 @@ foreach value {a..b a...b a.c..b ..b} result {.b .b .b .b} { # pathtype -test cmdAH-12.1 {Tcl_FileObjCmd: pathtype} { +test cmdAH-12.1 {Tcl_FileObjCmd: pathtype} testsetplatform { testsetplatform unix list [catch {file pathtype a b} msg] $msg } {1 {wrong # args: should be "file pathtype name"}} -test cmdAH-12.2 {Tcl_FileObjCmd: pathtype} { +test cmdAH-12.2 {Tcl_FileObjCmd: pathtype} testsetplatform { testsetplatform unix file pathtype /a } absolute -test cmdAH-12.3 {Tcl_FileObjCmd: pathtype} { +test cmdAH-12.3 {Tcl_FileObjCmd: pathtype} testsetplatform { testsetplatform unix file p a } relative -test cmdAH-12.4 {Tcl_FileObjCmd: pathtype} { +test cmdAH-12.4 {Tcl_FileObjCmd: pathtype} testsetplatform { testsetplatform windows file pathtype c:a } volumerelative # split -test cmdAH-13.1 {Tcl_FileObjCmd: split} { +test cmdAH-13.1 {Tcl_FileObjCmd: split} testsetplatform { testsetplatform unix list [catch {file split a b} msg] $msg } {1 {wrong # args: should be "file split name"}} -test cmdAH-13.2 {Tcl_FileObjCmd: split} { +test cmdAH-13.2 {Tcl_FileObjCmd: split} testsetplatform { testsetplatform unix file split a } a -test cmdAH-13.3 {Tcl_FileObjCmd: split} { +test cmdAH-13.3 {Tcl_FileObjCmd: split} testsetplatform { testsetplatform unix file split a/b } {a b} # join -test cmdAH-14.1 {Tcl_FileObjCmd: join} { +test cmdAH-14.1 {Tcl_FileObjCmd: join} testsetplatform { testsetplatform unix file join a } a -test cmdAH-14.2 {Tcl_FileObjCmd: join} { +test cmdAH-14.2 {Tcl_FileObjCmd: join} testsetplatform { testsetplatform unix file join a b } a/b -test cmdAH-14.3 {Tcl_FileObjCmd: join} { +test cmdAH-14.3 {Tcl_FileObjCmd: join} testsetplatform { testsetplatform unix file join a b c d } a/b/c/d # error handling of Tcl_TranslateFileName -test cmdAH-15.1 {Tcl_FileObjCmd} { +test cmdAH-15.1 {Tcl_FileObjCmd} testsetplatform { testsetplatform unix list [catch {file atime ~_bad_user} msg] $msg } {1 {user "_bad_user" doesn't exist}} -testsetplatform $platform -} +catch {testsetplatform $platform} # readable set gorpfile [makeFile abcde gorp.file] set dirfile [makeDirectory dir.file] -if {[info commands testchmod] == {}} { - puts "This application hasn't been compiled with the \"testchmod\"" - puts "command, so I can't test Tcl_FileObjCmd etc." -} else { -test cmdAH-16.1 {Tcl_FileObjCmd: readable} {testchmod} { - list [catch {file readable a b} msg] $msg -} {1 {wrong # args: should be "file readable name"}} -testchmod 0444 $gorpfile -test cmdAH-16.2 {Tcl_FileObjCmd: readable} {testchmod} { - file readable $gorpfile -} 1 -testchmod 0333 $gorpfile -test cmdAH-16.3 {Tcl_FileObjCmd: readable} {unixOnly notRoot testchmod} { - file reada $gorpfile -} 0 +test cmdAH-16.1 {Tcl_FileObjCmd: readable} { + -body {list [catch {file readable a b} msg] $msg} + -result {1 {wrong # args: should be "file readable name"}} +} +test cmdAH-16.2 {Tcl_FileObjCmd: readable} { + -constraints testchmod + -setup {testchmod 0444 $gorpfile} + -body {file readable $gorpfile} + -result 1 +} +test cmdAH-16.3 {Tcl_FileObjCmd: readable} { + -constraints {unix notRoot testchmod} + -setup {testchmod 0333 $gorpfile} + -body {file reada $gorpfile} + -result 0 +} # writable -test cmdAH-17.1 {Tcl_FileObjCmd: writable} {testchmod} { - list [catch {file writable a b} msg] $msg -} {1 {wrong # args: should be "file writable name"}} -testchmod 0555 $gorpfile -test cmdAH-17.2 {Tcl_FileObjCmd: writable} {notRoot testchmod} { - file writable $gorpfile -} 0 -testchmod 0222 $gorpfile -test cmdAH-17.3 {Tcl_FileObjCmd: writable} {testchmod} { - file writable $gorpfile -} 1 +test cmdAH-17.1 {Tcl_FileObjCmd: writable} { + -body {list [catch {file writable a b} msg] $msg} + -result {1 {wrong # args: should be "file writable name"}} +} +test cmdAH-17.2 {Tcl_FileObjCmd: writable} { + -constraints {notRoot testchmod} + -setup {testchmod 0555 $gorpfile} + -body {file writable $gorpfile} + -result 0 } +test cmdAH-17.3 {Tcl_FileObjCmd: writable} { + -constraints testchmod + -setup {testchmod 0222 $gorpfile} + -body {file writable $gorpfile} + -result 1 +} + # executable @@ -813,13 +849,13 @@ removeDirectory $dirfile set dirfile [makeDirectory dir.file] set gorpfile [makeFile abcde gorp.file] -test cmdAH-18.1 {Tcl_FileObjCmd: executable} {testchmod} { +test cmdAH-18.1 {Tcl_FileObjCmd: executable} {} { list [catch {file executable a b} msg] $msg } {1 {wrong # args: should be "file executable name"}} -test cmdAH-18.2 {Tcl_FileObjCmd: executable} {testchmod notRoot} { +test cmdAH-18.2 {Tcl_FileObjCmd: executable} {notRoot} { file executable $gorpfile } 0 -test cmdAH-18.3 {Tcl_FileObjCmd: executable} {unixOnly testchmod} { +test cmdAH-18.3 {Tcl_FileObjCmd: executable} {unix testchmod} { # Only on unix will setting the execute bit on a regular file # cause that file to be executable. @@ -827,7 +863,7 @@ test cmdAH-18.3 {Tcl_FileObjCmd: executable} {unixOnly testchmod} { file exe $gorpfile } 1 -test cmdAH-18.5 {Tcl_FileObjCmd: executable} {winOnly testchmod} { +test cmdAH-18.5 {Tcl_FileObjCmd: executable} {win} { # On pc, must be a .exe, .com, etc. set x [file exe $gorpfile] @@ -836,7 +872,16 @@ test cmdAH-18.5 {Tcl_FileObjCmd: executable} {winOnly testchmod} { removeFile $gorpexe set x } {0 1} -test cmdAH-18.6 {Tcl_FileObjCmd: executable} {testchmod} { +test cmdAH-18.5.1 {Tcl_FileObjCmd: executable} {win} { + # On pc, must be a .exe, .com, etc. + + set x [file exe $gorpfile] + set gorpexe [makeFile foo gorp.exe] + lappend x [file exe [string toupper $gorpexe]] + removeFile $gorpexe + set x +} {0 1} +test cmdAH-18.6 {Tcl_FileObjCmd: executable} {} { # Directories are always executable. file exe $dirfile @@ -869,19 +914,14 @@ test cmdAH-19.5 {Tcl_FileObjCmd: exists} { } 1 # nativename -if {[info commands testsetplatform] == {}} { - puts "This application hasn't been compiled with the \"testsetplatform\"" - puts "command, so I can't test Tcl_FileObjCmd etc." -} else { -test cmdAH-19.6 {Tcl_FileObjCmd: nativename} { +test cmdAH-19.6 {Tcl_FileObjCmd: nativename} testsetplatform { testsetplatform unix list [catch {file nativename a/b} msg] $msg [testsetplatform $platform] } {0 a/b {}} -test cmdAH-19.7 {Tcl_FileObjCmd: nativename} { +test cmdAH-19.7 {Tcl_FileObjCmd: nativename} testsetplatform { testsetplatform windows list [catch {file nativename a/b} msg] $msg [testsetplatform $platform] } {0 {a\b} {}} -} test cmdAH-19.9 {Tcl_FileObjCmd: ~ : exists} { file exists ~nOsUcHuSeR @@ -895,7 +935,7 @@ test cmdAH-19.10 {Tcl_FileObjCmd: ~ : nativename} { # directory in order to guarantee (?) a local file system: some # NFS file systems won't do the stuff below correctly. -test cmdAH-19.11 {Tcl_FileObjCmd: exists} {unixOnly notRoot} { +test cmdAH-19.11 {Tcl_FileObjCmd: exists} {unix notRoot} { file delete -force /tmp/tcl.foo.dir/file file delete -force /tmp/tcl.foo.dir makeDirectory /tmp/tcl.foo.dir @@ -919,7 +959,12 @@ catch {file attributes $gorpfile -permissions 0765} # atime -set file [makeFile "data" touch.me] +# avoid problems with non-local filesystems +if {[testConstraint unix] && [file exists /tmp]} { + set file [makeFile "data" touch.me /tmp] +} else { + set file [makeFile "data" touch.me] +} test cmdAH-20.1 {Tcl_FileObjCmd: atime} { list [catch {file atime a b c} msg] $msg @@ -937,18 +982,23 @@ test cmdAH-20.3 {Tcl_FileObjCmd: atime} { test cmdAH-20.4 {Tcl_FileObjCmd: atime} { list [catch {file atime $file notint} msg] $msg } {1 {expected integer but got "notint"}} -test cmdAH-20.5 {Tcl_FileObjCmd: atime touch} {unixOrPc} { - if {[string equal $tcl_platform(platform) "windows"]} { - set old [pwd] - cd $::tcltest::temporaryDirectory - if {![string equal "NTFS" [testvolumetype]]} { - # Windows FAT doesn't understand atime, but NTFS does - # May also fail for Windows on NFS mounted disks - cd $old - return 1 - } +test cmdAH-20.5 {Tcl_FileObjCmd: atime touch} {unix} { + set atime [file atime $file] + after 1100; # pause a sec to notice change in atime + set newatime [clock seconds] + set modatime [file atime $file $newatime] + expr {$newatime == $modatime ? 1 : "$newatime != $modatime"} +} 1 +test cmdAH-20.6 {Tcl_FileObjCmd: atime touch} {win testvolumetype} { + set old [pwd] + cd $::tcltest::temporaryDirectory + if {"NTFS" ne [testvolumetype]} { + # Windows FAT doesn't understand atime, but NTFS does + # May also fail for Windows on NFS mounted disks cd $old + return 1 } + cd $old set atime [file atime $file] after 1100; # pause a sec to notice change in atime set newatime [clock seconds] @@ -956,7 +1006,12 @@ test cmdAH-20.5 {Tcl_FileObjCmd: atime touch} {unixOrPc} { expr {$newatime == $modatime ? 1 : "$newatime != $modatime"} } 1 -removeFile touch.me +if {[testConstraint unix] && [file exists /tmp]} { + removeFile touch.me /tmp +} else { + removeFile touch.me +} + # isdirectory test cmdAH-21.1 {Tcl_FileObjCmd: isdirectory} { @@ -987,12 +1042,12 @@ test cmdAH-23.1 {Tcl_FileObjCmd: lstat} { test cmdAH-23.2 {Tcl_FileObjCmd: lstat} { list [catch {file lstat a b c} msg] $msg } {1 {wrong # args: should be "file lstat name varName"}} -test cmdAH-23.3 {Tcl_FileObjCmd: lstat} {unixOnly nonPortable} { +test cmdAH-23.3 {Tcl_FileObjCmd: lstat} {unix nonPortable} { catch {unset stat} file lstat $linkfile stat lsort [array names stat] } {atime ctime dev gid ino mode mtime nlink size type uid} -test cmdAH-23.4 {Tcl_FileObjCmd: lstat} {unixOnly nonPortable} { +test cmdAH-23.4 {Tcl_FileObjCmd: lstat} {unix nonPortable} { catch {unset stat} file lstat $linkfile stat list $stat(nlink) [expr $stat(mode)&0777] $stat(type) @@ -1051,17 +1106,19 @@ proc waitForEvenSecondForFAT {} { # timings. :^( # This procedure based on work by Helmut Giese - global tcl_platform - if {$tcl_platform(platform) ne "windows"} {return} - if {[lindex [file system [temporaryDirectory]] 1] == "NTFS"} {return} - # Assume non-NTFS means FAT{12,16,32} and hence in need of special help - set start [clock seconds] - while {1} { - set now [clock seconds] - if {$now!=$start && !($now & 1)} { - return + if { + [testConstraint win] + && [lindex [file system [temporaryDirectory]] 1] ne "NTFS" + } then { + # Assume non-NTFS means FAT{12,16,32} and hence in need of special help + set start [clock seconds] + while {1} { + set now [clock seconds] + if {$now!=$start && !($now & 1)} { + break + } + after 50 } - after 50 } } set file [makeFile "data" touch.me] @@ -1108,16 +1165,13 @@ test cmdAH-24.4 {Tcl_FileObjCmd: mtime} { test cmdAH-24.5 {Tcl_FileObjCmd: mtime} { # Under Unix, use a file in /tmp to avoid clock skew due to NFS. # On other platforms, just use a file in the local directory. - - if {[string equal $tcl_platform(platform) "unix"]} { + if {[testConstraint unix]} { set name /tmp/tcl.test.[pid] } else { set name [file join [temporaryDirectory] tf] } - # Make sure that a new file's time is correct. 10 seconds variance # is allowed used due to slow networks or clock skew on a network drive. - file delete -force $name close [open $name w] set a [expr abs([clock seconds]-[file mtime $name])<10] @@ -1127,14 +1181,14 @@ test cmdAH-24.5 {Tcl_FileObjCmd: mtime} { test cmdAH-24.7 {Tcl_FileObjCmd: mtime} { list [catch {file mtime $file notint} msg] $msg } {1 {expected integer but got "notint"}} -test cmdAH-24.8 {Tcl_FileObjCmd: mtime touch} macOrUnix { +test cmdAH-24.8 {Tcl_FileObjCmd: mtime touch} unix { set mtime [file mtime $file] after 1100; # pause a sec to notice change in mtime set newmtime [clock seconds] set modmtime [file mtime $file $newmtime] expr {$newmtime == $modmtime ? 1 : "$newmtime != $modmtime"} } 1 -test cmdAH-24.9 {Tcl_FileObjCmd: mtime touch with non-ascii chars} macOrUnix { +test cmdAH-24.9 {Tcl_FileObjCmd: mtime touch with non-ascii chars} unix { set oldfile $file # introduce some non-ascii characters. append file \u2022 @@ -1150,7 +1204,7 @@ test cmdAH-24.9 {Tcl_FileObjCmd: mtime touch with non-ascii chars} macOrUnix { } expr {$newmtime == $modmtime ? 1 : "$newmtime != $modmtime"} } 1 -test cmdAH-24.10 {Tcl_FileObjCmd: mtime touch} winOnly { +test cmdAH-24.10 {Tcl_FileObjCmd: mtime touch} win { waitForEvenSecondForFAT set mtime [file mtime $file] after 2100; # pause two secs to notice change in mtime on FAT fs'es @@ -1158,7 +1212,7 @@ test cmdAH-24.10 {Tcl_FileObjCmd: mtime touch} winOnly { set modmtime [file mtime $file $newmtime] expr {$newmtime == $modmtime ? 1 : "$newmtime != $modmtime"} } 1 -test cmdAH-24.11 {Tcl_FileObjCmd: mtime touch with non-ascii chars} winOnly { +test cmdAH-24.11 {Tcl_FileObjCmd: mtime touch with non-ascii chars} win { waitForEvenSecondForFAT set oldfile $file # introduce some non-ascii characters. @@ -1177,10 +1231,8 @@ test cmdAH-24.11 {Tcl_FileObjCmd: mtime touch with non-ascii chars} winOnly { } 1 removeFile touch.me rename waitForEvenSecondForFAT {} - test cmdAH-24.12 {Tcl_FileObjCmd: mtime and daylight savings} { set name [file join [temporaryDirectory] clockchange] - file delete -force $name close [open $name w] set time [clock scan "21:00:00 October 30 2004 GMT"] @@ -1189,31 +1241,37 @@ test cmdAH-24.12 {Tcl_FileObjCmd: mtime and daylight savings} { file delete $name expr {$newmtime == $time ? 1 : "$newmtime != $time"} } {1} - # bug 1420432: setting mtime fails for directories on windows. -test cmdAH-24.13 {Tcl_FileObjCmd: directory mtime} { +test cmdAH-24.13 {Tcl_FileObjCmd: directory mtime} -setup { set dirname [file join [temporaryDirectory] tmp[pid]] file delete -force $dirname +} -constraints tempNotWin -body { file mkdir $dirname - set res [catch { - set old [file mtime $dirname] - file mtime $dirname 0 - set new [file mtime $dirname] - list $new [expr {$old != $new}] - } err] + set old [file mtime $dirname] + file mtime $dirname 0 + set new [file mtime $dirname] + list $new [expr {$old != $new}] +} -cleanup { file delete -force $dirname - list $res $err -} {0 {0 1}} +} -result {0 1} # owned test cmdAH-25.1 {Tcl_FileObjCmd: owned} { list [catch {file owned a b} msg] $msg } {1 {wrong # args: should be "file owned name"}} -test cmdAH-25.2 {Tcl_FileObjCmd: owned} { +test cmdAH-25.2 {Tcl_FileObjCmd: owned} -constraints win -body { file owned $gorpfile -} 1 -test cmdAH-25.3 {Tcl_FileObjCmd: owned} {unixOnly notRoot} { +} -result 1 +test cmdAH-25.2.1 {Tcl_FileObjCmd: owned} -constraints unix -setup { + # Avoid problems with AFS + set tmpfile [makeFile "data" touch.me /tmp] +} -body { + file owned $tmpfile +} -cleanup { + removeFile touch.me /tmp +} -result 1 +test cmdAH-25.3 {Tcl_FileObjCmd: owned} {unix notRoot} { file owned / } 0 @@ -1222,14 +1280,14 @@ test cmdAH-25.3 {Tcl_FileObjCmd: owned} {unixOnly notRoot} { test cmdAH-26.1 {Tcl_FileObjCmd: readlink} { list [catch {file readlink a b} msg] $msg } {1 {wrong # args: should be "file readlink name"}} -test cmdAH-26.2 {Tcl_FileObjCmd: readlink} {unixOnly nonPortable} { +test cmdAH-26.2 {Tcl_FileObjCmd: readlink} {unix nonPortable} { file readlink $linkfile } $gorpfile -test cmdAH-26.3 {Tcl_FileObjCmd: readlink errors} {unixOnly nonPortable} { +test cmdAH-26.3 {Tcl_FileObjCmd: readlink errors} {unix nonPortable} { list [catch {file readlink _bogus_} msg] [string tolower $msg] \ [string tolower $errorCode] } {1 {could not readlink "_bogus_": no such file or directory} {posix enoent {no such file or directory}}} -test cmdAH-26.5 {Tcl_FileObjCmd: readlink errors} {winOnly nonPortable} { +test cmdAH-26.5 {Tcl_FileObjCmd: readlink errors} {win nonPortable} { list [catch {file readlink _bogus_} msg] [string tolower $msg] \ [string tolower $errorCode] } {1 {could not readlink "_bogus_": invalid argument} {posix einval {invalid argument}}} @@ -1267,7 +1325,9 @@ test cmdAH-28.2 {Tcl_FileObjCmd: stat} { } {1 {wrong # args: should be "file stat name varName"} NONE} test cmdAH-28.3 {Tcl_FileObjCmd: stat} { catch {unset stat} + set stat(blocks) [set stat(blksize) {}] file stat $gorpfile stat + unset stat(blocks) stat(blksize) lsort [array names stat] } {atime ctime dev gid ino mode mtime nlink size type uid} test cmdAH-28.4 {Tcl_FileObjCmd: stat} { @@ -1275,10 +1335,10 @@ test cmdAH-28.4 {Tcl_FileObjCmd: stat} { file stat $gorpfile stat list $stat(nlink) $stat(size) $stat(type) } {1 12 file} -test cmdAH-28.5 {Tcl_FileObjCmd: stat} {unixOnly} { +test cmdAH-28.5 {Tcl_FileObjCmd: stat} {unix} { catch {unset stat} file stat $gorpfile stat - expr $stat(mode)&0777 + expr $stat(mode)&0o777 } {501} test cmdAH-28.6 {Tcl_FileObjCmd: stat} { string tolower [list [catch {file stat _bogus_ stat} msg] \ @@ -1298,7 +1358,7 @@ test cmdAH-28.8 {Tcl_FileObjCmd: stat} { removeFile $filename set x } 1 -test cmdAH-28.9 {Tcl_FileObjCmd: stat} winOnly { +test cmdAH-28.9 {Tcl_FileObjCmd: stat} win { # stat of root directory was failing. # don't care about answer, just that test runs. @@ -1314,7 +1374,7 @@ test cmdAH-28.9 {Tcl_FileObjCmd: stat} winOnly { file stat c:/ stat file stat c:/. stat } {} -test cmdAH-28.10 {Tcl_FileObjCmd: stat} {winOnly nonPortable} { +test cmdAH-28.10 {Tcl_FileObjCmd: stat} {win nonPortable} { # stat of root directory was failing. # don't care about answer, just that test runs. @@ -1322,7 +1382,7 @@ test cmdAH-28.10 {Tcl_FileObjCmd: stat} {winOnly nonPortable} { file stat //pop/$env(USERNAME)/ stat file stat //pop/$env(USERNAME)/. stat } {} -test cmdAH-28.11 {Tcl_FileObjCmd: stat} {winOnly nonPortable} { +test cmdAH-28.11 {Tcl_FileObjCmd: stat} {win nonPortable} { # stat of network directory was returning id of current local drive. set old [pwd] @@ -1351,7 +1411,7 @@ test cmdAH-29.1 {Tcl_FileObjCmd: type} { test cmdAH-29.2 {Tcl_FileObjCmd: type} { file type $dirfile } directory -test cmdAH-29.3.0 {Tcl_FileObjCmd: delete removes link not file} {unixOnly nonPortable} { +test cmdAH-29.3.0 {Tcl_FileObjCmd: delete removes link not file} {unix nonPortable} { set exists [list [file exists $linkfile] [file exists $gorpfile]] file delete $linkfile set exists2 [list [file exists $linkfile] [file exists $gorpfile]] @@ -1360,7 +1420,7 @@ test cmdAH-29.3.0 {Tcl_FileObjCmd: delete removes link not file} {unixOnly nonPo test cmdAH-29.3 {Tcl_FileObjCmd: type} { file type $gorpfile } file -test cmdAH-29.4 {Tcl_FileObjCmd: type} {unixOnly} { +test cmdAH-29.4 {Tcl_FileObjCmd: type} {unix} { catch {file delete $linkfile} # Unlike [exec ln -s], [file link] requires an existing target file link -symbolic $linkfile $gorpfile @@ -1368,16 +1428,6 @@ test cmdAH-29.4 {Tcl_FileObjCmd: type} {unixOnly} { file delete $linkfile set result } link -if {[string equal $tcl_platform(platform) "windows"]} { - if {[string index $tcl_platform(osVersion) 0] >= 5 \ - && ([lindex [file system [temporaryDirectory]] 1] == "NTFS")} { - tcltest::testConstraint linkDirectory 1 - } else { - tcltest::testConstraint linkDirectory 0 - } -} else { - tcltest::testConstraint linkDirectory 1 -} test cmdAH-29.4.1 {Tcl_FileObjCmd: type} {linkDirectory} { set tempdir [makeDirectory temp] set linkdir [file join [temporaryDirectory] link.dir] @@ -1508,3 +1558,7 @@ cd $cmdAHwd ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/cmdIL.test b/tests/cmdIL.test index 1f0665a..b387e71 100644 --- a/tests/cmdIL.test +++ b/tests/cmdIL.test @@ -9,16 +9,19 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } +# Used for constraining memory leak tests +testConstraint memory [llength [info commands memory]] + test cmdIL-1.1 {Tcl_LsortObjCmd procedure} { list [catch {lsort} msg] $msg } {1 {wrong # args: should be "lsort ?options? list"}} test cmdIL-1.2 {Tcl_LsortObjCmd procedure} { list [catch {lsort -foo {1 3 2 5}} msg] $msg -} {1 {bad option "-foo": must be -ascii, -command, -decreasing, -dictionary, -increasing, -index, -integer, -real, or -unique}} +} {1 {bad option "-foo": must be -ascii, -command, -decreasing, -dictionary, -increasing, -index, -indices, -integer, -nocase, -real, or -unique}} test cmdIL-1.3 {Tcl_LsortObjCmd procedure, default options} { lsort {d e c b a \{ d35 d300} } {a b c d d300 d35 e \{} @@ -28,12 +31,15 @@ test cmdIL-1.4 {Tcl_LsortObjCmd procedure, -ascii option} { test cmdIL-1.5 {Tcl_LsortObjCmd procedure, -command option} { list [catch {lsort -command {1 3 2 5}} msg] $msg } {1 {"-command" option must be followed by comparison command}} -test cmdIL-1.6 {Tcl_LsortObjCmd procedure, -command option} { +test cmdIL-1.6 {Tcl_LsortObjCmd procedure, -command option} -setup { proc cmp {a b} { expr {[string match x* $b] - [string match x* $a]} } +} -body { lsort -command cmp {x1 abc x2 def x3 x4} -} {x1 x2 x3 x4 abc def} +} -result {x1 x2 x3 x4 abc def} -cleanup { + rename cmp "" +} test cmdIL-1.7 {Tcl_LsortObjCmd procedure, -decreasing option} { lsort -decreasing {d e c b a d35 d300} } {e d35 d300 d c b a} @@ -51,7 +57,7 @@ test cmdIL-1.11 {Tcl_LsortObjCmd procedure, -index option} { } {1 {"-index" option must be followed by list index}} test cmdIL-1.12 {Tcl_LsortObjCmd procedure, -index option} { list [catch {lsort -index foo {1 3 2 5}} msg] $msg -} {1 {bad index "foo": must be integer or end?-integer?}} +} {1 {bad index "foo": must be integer?[+-]integer? or end?[+-]integer?}} test cmdIL-1.13 {Tcl_LsortObjCmd procedure, -index option} { lsort -index end -integer {{2 25} {10 20 50 100} {3 16 42} 1} } {1 {2 25} {3 16 42} {10 20 50 100}} @@ -80,44 +86,52 @@ test cmdIL-1.23 {Tcl_LsortObjCmd procedure, unique sort with index} { # lsort -unique should return the last unique item lsort -unique -index 0 {{a b} {c b} {a c} {d a}} } {{a c} {c b} {d a}} -test cmdIL-1.24 {Tcl_LsortObjCmd procedure, order of -index and -command} { +test cmdIL-1.24 {Tcl_LsortObjCmd procedure, order of -index and -command} -setup { catch {rename 1 ""} proc testcmp {a b} {return [string compare $a $b]} +} -body { set l [list [list a b] [list c d]] - set result [list [catch {lsort -command testcmp -index 1 $l} msg] $msg] + list [catch {lsort -command testcmp -index 1 $l} msg] $msg +} -cleanup { rename testcmp "" - set result -} [list 0 [list [list a b] [list c d]]] -test cmdIL-1.25 {Tcl_LsortObjCmd procedure, order of -index and -command} { +} -result [list 0 [list [list a b] [list c d]]] +test cmdIL-1.25 {Tcl_LsortObjCmd procedure, order of -index and -command} -setup { catch {rename 1 ""} proc testcmp {a b} {return [string compare $a $b]} +} -body { set l [list [list a b] [list c d]] - set result [list [catch {lsort -index 1 -command testcmp $l} msg] $msg] + list [catch {lsort -index 1 -command testcmp $l} msg] $msg +} -cleanup { rename testcmp "" - set result -} [list 0 [list [list a b] [list c d]]] +} -result [list 0 [list [list a b] [list c d]]] # Note that the required order only exists in the end-1'th element; # indexing using the end element or any fixed offset from the start # will not work... test cmdIL-1.26 {Tcl_LsortObjCmd procedure, offset indexing from end} { lsort -index end-1 {{a 1 e i} {b 2 3 f g} {c 4 5 6 d h}} } {{c 4 5 6 d h} {a 1 e i} {b 2 3 f g}} +test cmdIL-1.27 {Tcl_LsortObjCmd procedure, returning indices} { + lsort -indices {a c b} +} {0 2 1} +test cmdIL-1.28 {Tcl_LsortObjCmd procedure, returning indices} { + lsort -indices -unique -decreasing -real {1.2 34.5 34.5 5.6} +} {2 3 0} test cmdIL-1.29 {Tcl_LsortObjCmd procedure, loss of list rep during sorting} { set l {1 2 3} - proc testcmp args {string length $::l} - string length [lsort -command testcmp $l] + string length [lsort -command {apply {args {string length $::l}}} $l] } 5 # Can't think of any good tests for the MergeSort and MergeLists # procedures, except a bunch of random lists to sort. -test cmdIL-2.1 {MergeSort and MergeLists procedures} { +test cmdIL-2.1 {MergeSort and MergeLists procedures} -setup { set result {} set r 1435753299 proc rand {} { global r set r [expr {(16807 * $r) % (0x7fffffff)}] } +} -body { for {set i 0} {$i < 150} {incr i} { set x {} for {set j 0} {$j < $i} {incr j} { @@ -134,18 +148,23 @@ test cmdIL-2.1 {MergeSort and MergeLists procedures} { } } set result -} {} +} -cleanup { + rename rand "" +} -result {} -test cmdIL-3.1 {SortCompare procedure, skip comparisons after error} { - set x 0 +test cmdIL-3.1 {SortCompare procedure, skip comparisons after error} -setup { proc cmp {a b} { global x incr x error "error #$x" } +} -body { + set x 0 list [catch {lsort -integer -command cmp {48 6 28 190 16 2 3 6 1}} msg] \ $msg $x -} {1 {error #1} 1} +} -cleanup { + rename cmp "" +} -result {1 {error #1} 1} test cmdIL-3.2 {SortCompare procedure, -index option} { list [catch {lsort -integer -index 2 "\\\{ {30 40 50}"} msg] $msg } {1 {unmatched open brace in list}} @@ -154,6 +173,9 @@ test cmdIL-3.3 {SortCompare procedure, -index option} { } {1 {element 2 missing from sublist "20 10"}} test cmdIL-3.4 {SortCompare procedure, -index option} { list [catch {lsort -integer -index 2 "{a b c} \\\{"} msg] $msg +} {1 {expected integer but got "c"}} +test cmdIL-3.4.1 {SortCompare procedure, -index option} { + list [catch {lsort -integer -index 2 "{1 2 3} \\\{"} msg] $msg } {1 {unmatched open brace in list}} test cmdIL-3.5 {SortCompare procedure, -index option} { list [catch {lsort -integer -index 2 {{20 10 13} {15}}} msg] $msg @@ -174,8 +196,8 @@ test cmdIL-3.10 {SortCompare procedure, -integer option} { list [catch {lsort -integer {3 q}} msg] $msg } {1 {expected integer but got "q"}} test cmdIL-3.11 {SortCompare procedure, -integer option} { - lsort -integer {35 21 0x20 30 023 100 8} -} {8 023 21 30 0x20 35 100} + lsort -integer {35 21 0x20 30 0o23 100 8} +} {8 0o23 21 30 0x20 35 100} test cmdIL-3.12 {SortCompare procedure, -real option} { list [catch {lsort -real {6...4 3}} msg] $msg } {1 {expected floating-point number but got "6...4"}} @@ -185,12 +207,14 @@ test cmdIL-3.13 {SortCompare procedure, -real option} { test cmdIL-3.14 {SortCompare procedure, -real option} { lsort -real {24 2.5e01 16.7 85e-1 10.004} } {85e-1 10.004 16.7 24 2.5e01} -test cmdIL-3.15 {SortCompare procedure, -command option} { +test cmdIL-3.15 {SortCompare procedure, -command option} -body { proc cmp {a b} { error "comparison error" } - list [catch {lsort -command cmp {48 6}} msg] $msg $errorInfo -} {1 {comparison error} {comparison error + list [catch {lsort -command cmp {48 6}} msg] $msg $::errorInfo +} -cleanup { + rename cmp "" +} -result {1 {comparison error} {comparison error while executing "error "comparison error"" (procedure "cmp" line 2) @@ -199,27 +223,33 @@ test cmdIL-3.15 {SortCompare procedure, -command option} { (-compare command) invoked from within "lsort -command cmp {48 6}"}} -test cmdIL-3.16 {SortCompare procedure, -command option, long command} { +test cmdIL-3.16 {SortCompare procedure, -command option, long command} -body { proc cmp {dummy a b} { string compare $a $b } lsort -command {cmp {this argument is very very long in order to make the dstring overflow its statically allocated space}} {{this first element is also long in order to help expand the dstring} {the second element, last but not least, is quite long also, in order to make absolutely sure that space is allocated dynamically for the dstring}} -} {{the second element, last but not least, is quite long also, in order to make absolutely sure that space is allocated dynamically for the dstring} {this first element is also long in order to help expand the dstring}} -test cmdIL-3.17 {SortCompare procedure, -command option, non-integer result} { +} -cleanup { + rename cmp "" +} -result {{the second element, last but not least, is quite long also, in order to make absolutely sure that space is allocated dynamically for the dstring} {this first element is also long in order to help expand the dstring}} +test cmdIL-3.17 {SortCompare procedure, -command option, non-integer result} -body { proc cmp {a b} { return foow } list [catch {lsort -command cmp {48 6}} msg] $msg -} {1 {-compare command returned non-integer result}} -test cmdIL-3.18 {SortCompare procedure, -command option} { +} -cleanup { + rename cmp "" +} -result {1 {-compare command returned non-integer result}} +test cmdIL-3.18 {SortCompare procedure, -command option} -body { proc cmp {a b} { expr {$b - $a} } lsort -command cmp {48 6 18 22 21 35 36} -} {48 36 35 22 21 18 6} +} -cleanup { + rename cmp "" +} -result {48 36 35 22 21 18 6} test cmdIL-3.19 {SortCompare procedure, -decreasing option} { - lsort -decreasing -integer {35 21 0x20 30 023 100 8} -} {100 35 0x20 30 21 023 8} + lsort -decreasing -integer {35 21 0x20 30 0o23 100 8} +} {100 35 0x20 30 21 0o23 8} test cmdIL-4.1 {DictionaryCompare procedure, numerics, leading zeros} { lsort -dictionary {a003b a03b} @@ -358,7 +388,401 @@ test cmdIL-4.32 {DictionaryCompare procedure, chars between Z and a in ASCII} { test cmdIL-4.33 {DictionaryCompare procedure, chars between Z and a in ASCII} { lsort -dictionary [list AA ! c CC `] } [list ! ` AA c CC] +test cmdIL-4.34 {SortCompare procedure, -ascii option with -nocase option} { + lsort -ascii -nocase {d e c b a d35 d300 100 20} +} {100 20 a b c d d300 d35 e} +test cmdIL-4.35 {SortCompare procedure, -ascii option with -nocase option} { + lsort -ascii -nocase {d E c B a D35 d300 100 20} +} {100 20 a B c d d300 D35 E} + +test cmdIL-5.1 {lsort with list style index} { + lsort -ascii -decreasing -index {0 1} { + {{Jim Alpha} 20000410} + {{Joe Bravo} 19990320} + {{Jacky Charlie} 19390911} + } +} {{{Jacky Charlie} 19390911} {{Joe Bravo} 19990320} {{Jim Alpha} 20000410}} +test cmdIL-5.2 {lsort with list style index} { + lsort -decreasing -index {0 1} { + {{Jim Alpha} 20000410} + {{Joe Bravo} 19990320} + {{Jacky Charlie} 19390911} + } +} {{{Jacky Charlie} 19390911} {{Joe Bravo} 19990320} {{Jim Alpha} 20000410}} +test cmdIL-5.3 {lsort with list style index} { + lsort -integer -increasing -index {1 end} { + {{Jim Alpha} 20000410} + {{Joe Bravo} 19990320} + {{Jacky Charlie} 19390911} + } +} {{{Jacky Charlie} 19390911} {{Joe Bravo} 19990320} {{Jim Alpha} 20000410}} +test cmdIL-5.4 {lsort with list style index} { + lsort -integer -index {1 end-1} { + {the {0 1 2 3 4 5} quick} + {brown {0 1 2 3 4} fox} + {jumps {30 31 2 33} over} + {the {0 1 2} lazy} + {dogs {0 1}} + } +} {{dogs {0 1}} {the {0 1 2} lazy} {jumps {30 31 2 33} over} {brown {0 1 2 3 4} fox} {the {0 1 2 3 4 5} quick}} +test cmdIL-5.5 {lsort with list style index and sharing} -body { + proc test_lsort {l} { + set n $l + foreach e $l {lappend n [list [expr {rand()}] $e]} + lindex [lsort -real -index $l $n] 1 1 + } + expr srand(1) + test_lsort 0 +} -result 0 -cleanup { + rename test_lsort "" +} + +# Compiled version +test cmdIL-6.1 {lassign command syntax} -body { + proc testLassign {} { + lassign + } + testLassign +} -returnCodes 1 -cleanup { + rename testLassign {} +} -result {wrong # args: should be "lassign list varName ?varName ...?"} +test cmdIL-6.2 {lassign command syntax} -body { + proc testLassign {} { + lassign x + } + testLassign +} -returnCodes 1 -cleanup { + rename testLassign {} +} -result {wrong # args: should be "lassign list varName ?varName ...?"} +test cmdIL-6.3 {lassign command} -body { + proc testLassign {} { + set x FAIL + list [lassign a x] $x + } + testLassign +} -result {{} a} -cleanup { + rename testLassign {} +} +test cmdIL-6.4 {lassign command} -body { + proc testLassign {} { + set x FAIL + set y FAIL + list [lassign a x y] $x $y + } + testLassign +} -result {{} a {}} -cleanup { + rename testLassign {} +} +test cmdIL-6.5 {lassign command} -body { + proc testLassign {} { + set x FAIL + set y FAIL + list [lassign {a b} x y] $x $y + } + testLassign +} -result {{} a b} -cleanup { + rename testLassign {} +} +test cmdIL-6.6 {lassign command} -body { + proc testLassign {} { + set x FAIL + set y FAIL + list [lassign {a b c} x y] $x $y + } + testLassign +} -result {c a b} -cleanup { + rename testLassign {} +} +test cmdIL-6.7 {lassign command} -body { + proc testLassign {} { + set x FAIL + set y FAIL + list [lassign {a b c d} x y] $x $y + } + testLassign +} -result {{c d} a b} -cleanup { + rename testLassign {} +} +test cmdIL-6.8 {lassign command - list format error} -body { + proc testLassign {} { + set x FAIL + set y FAIL + list [catch {lassign {a {b}c d} x y} msg] $msg $x $y + } + testLassign +} -result {1 {list element in braces followed by "c" instead of space} FAIL FAIL} -cleanup { + rename testLassign {} +} +test cmdIL-6.9 {lassign command - assignment to arrays} -body { + proc testLassign {} { + list [lassign {a b} x(x)] $x(x) + } + testLassign +} -result {b a} -cleanup { + rename testLassign {} +} +test cmdIL-6.10 {lassign command - variable update error} -body { + proc testLassign {} { + set x(x) {} + lassign a x + } + testLassign +} -returnCodes 1 -result {can't set "x": variable is array} -cleanup { + rename testLassign {} +} +test cmdIL-6.11 {lassign command - variable update error} -body { + proc testLassign {} { + set x(x) {} + set y FAIL + list [catch {lassign a y x} msg] $msg $y + } + testLassign +} -result {1 {can't set "x": variable is array} a} -cleanup { + rename testLassign {} +} +test cmdIL-6.12 {lassign command - memory leak testing} -setup { + unset -nocomplain x y + set x(x) {} + set y FAIL + proc getbytes {} { + set lines [split [memory info] "\n"] + lindex [lindex $lines 3] 3 + } + proc stress {} { + global x y + lassign {} y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y + catch {lassign {} y y y y y y y y y y y y y y y y y y y y y y y y y x} + catch {lassign {} x} + } +} -constraints memory -body { + set end [getbytes] + for {set i 0} {$i < 5} {incr i} { + stress + set tmp $end + set end [getbytes] + } + expr {$end - $tmp} +} -result 0 -cleanup { + unset -nocomplain x y i tmp end + rename getbytes {} + rename stress {} +} +# Force non-compiled version +test cmdIL-6.13 {lassign command syntax} -body { + proc testLassign {} { + set lassign lassign + $lassign + } + testLassign +} -returnCodes 1 -cleanup { + rename testLassign {} +} -result {wrong # args: should be "lassign list varName ?varName ...?"} +test cmdIL-6.14 {lassign command syntax} -body { + proc testLassign {} { + set lassign lassign + $lassign x + } + testLassign +} -returnCodes 1 -cleanup { + rename testLassign {} +} -result {wrong # args: should be "lassign list varName ?varName ...?"} +test cmdIL-6.15 {lassign command} -body { + proc testLassign {} { + set lassign lassign + set x FAIL + list [$lassign a x] $x + } + testLassign +} -result {{} a} -cleanup { + rename testLassign {} +} +test cmdIL-6.16 {lassign command} -body { + proc testLassign {} { + set lassign lassign + set x FAIL + set y FAIL + list [$lassign a x y] $x $y + } + testLassign +} -result {{} a {}} -cleanup { + rename testLassign {} +} +test cmdIL-6.17 {lassign command} -body { + proc testLassign {} { + set lassign lassign + set x FAIL + set y FAIL + list [$lassign {a b} x y] $x $y + } + testLassign +} -result {{} a b} -cleanup { + rename testLassign {} +} +test cmdIL-6.18 {lassign command} -body { + proc testLassign {} { + set lassign lassign + set x FAIL + set y FAIL + list [$lassign {a b c} x y] $x $y + } + testLassign +} -result {c a b} -cleanup { + rename testLassign {} +} +test cmdIL-6.19 {lassign command} -body { + proc testLassign {} { + set lassign lassign + set x FAIL + set y FAIL + list [$lassign {a b c d} x y] $x $y + } + testLassign +} -result {{c d} a b} -cleanup { + rename testLassign {} +} +test cmdIL-6.20 {lassign command - list format error} -body { + proc testLassign {} { + set lassign lassign + set x FAIL + set y FAIL + list [catch {$lassign {a {b}c d} x y} msg] $msg $x $y + } + testLassign +} -result {1 {list element in braces followed by "c" instead of space} FAIL FAIL} -cleanup { + rename testLassign {} +} +test cmdIL-6.21 {lassign command - assignment to arrays} -body { + proc testLassign {} { + set lassign lassign + list [$lassign {a b} x(x)] $x(x) + } + testLassign +} -result {b a} -cleanup { + rename testLassign {} +} +test cmdIL-6.22 {lassign command - variable update error} -body { + proc testLassign {} { + set lassign lassign + set x(x) {} + $lassign a x + } + testLassign +} -returnCodes 1 -result {can't set "x": variable is array} -cleanup { + rename testLassign {} +} +test cmdIL-6.23 {lassign command - variable update error} -body { + proc testLassign {} { + set lassign lassign + set x(x) {} + set y FAIL + list [catch {$lassign a y x} msg] $msg $y + } + testLassign +} -result {1 {can't set "x": variable is array} a} -cleanup { + rename testLassign {} +} +test cmdIL-6.24 {lassign command - memory leak testing} -setup { + set x(x) {} + set y FAIL + proc getbytes {} { + set lines [split [memory info] "\n"] + lindex [lindex $lines 3] 3 + } + proc stress {} { + global x y + set lassign lassign + $lassign {} y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y + catch {$lassign {} y y y y y y y y y y y y y y y y y y y y y y y y y x} + catch {$lassign {} x} + } +} -constraints memory -body { + set end [getbytes] + for {set i 0} {$i < 5} {incr i} { + stress + set tmp $end + set end [getbytes] + } + expr {$end - $tmp} +} -result 0 -cleanup { + unset -nocomplain x y i tmp end + rename getbytes {} + rename stress {} +} +# Assorted shimmering problems +test cmdIL-6.25 {lassign command - shimmering protection} -body { + proc testLassign {} { + set x {a b c} + list [lassign $x $x y] $x [set $x] $y + } + testLassign +} -result {c {a b c} a b} -cleanup { + rename testLassign {} +} +test cmdIL-6.26 {lassign command - shimmering protection} -body { + proc testLassign {} { + set x {a b c} + set lassign lassign + list [$lassign $x $x y] $x [set $x] $y + } + testLassign +} -result {c {a b c} a b} -cleanup { + rename testLassign {} +} + +test cmdIL-7.1 {lreverse command} -body { + lreverse +} -returnCodes error -result "wrong # args: should be \"lreverse list\"" +test cmdIL-7.2 {lreverse command} -body { + lreverse a b +} -returnCodes error -result "wrong # args: should be \"lreverse list\"" +test cmdIL-7.3 {lreverse command} -body { + lreverse "not \{a list" +} -returnCodes error -result {unmatched open brace in list} +test cmdIL-7.4 {lreverse command - shared object} { + set x {a b {c d} e f} + lreverse $x +} {f e {c d} b a} +test cmdIL-7.5 {lreverse command - unshared object} { + lreverse [list a b {c d} e f] +} {f e {c d} b a} +test cmdIL-7.6 {lreverse command - unshared object [Bug 1672585]} { + lreverse [set x {1 2 3}][unset x] +} {3 2 1} +test cmdIL-7.7 {lreverse command - empty object [Bug 1876793]} { + lreverse [list] +} {} + +testConstraint testobj [llength [info commands testobj]] +test cmdIL-7.8 {lreverse command - shared intrep [Bug 1675044]} -setup { + teststringobj set 1 {1 2 3} + testobj convert 1 list + testobj duplicate 1 2 + variable x [teststringobj get 1] + variable y [teststringobj get 2] + testobj freeallvars + proc K {a b} {return $a} +} -constraints testobj -body { + lreverse [K $y [unset y]] + lindex $x 0 +} -cleanup { + unset -nocomplain x y + rename K {} +} -result 1 + +# This belongs in info test, but adding tests there breaks tests +# that compute source file line numbers. +test info-20.6 {Bug 3587651} -setup { + namespace eval my {namespace eval tcl {namespace eval mathfunc { + proc demo x {return 42} + }}}} -body { namespace eval my {expr {"demo" in [info functions]}}} -cleanup { + namespace delete my +} -result 1 + # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/cmdInfo.test b/tests/cmdInfo.test index 611bba8..86aa6e1 100644 --- a/tests/cmdInfo.test +++ b/tests/cmdInfo.test @@ -18,10 +18,8 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -::tcltest::testConstraint testcmdinfo \ - [llength [info commands testcmdinfo]] -::tcltest::testConstraint testcmdtoken \ - [llength [info commands testcmdtoken]] +testConstraint testcmdinfo [llength [info commands testcmdinfo]] +testConstraint testcmdtoken [llength [info commands testcmdtoken]] test cmdinfo-1.1 {command procedure and clientData} {testcmdinfo} { testcmdinfo create x1 @@ -69,7 +67,7 @@ test cmdinfo-4.1 {Tcl_GetCommandName/Tcl_GetCommandFullName procedures} \ rename x1 newName set y [testcmdtoken name $x] rename newName x1 - eval lappend y [testcmdtoken name $x] + lappend y {*}[testcmdtoken name $x] } {newName ::newName x1 ::x1} catch {rename newTestCmd {}} @@ -86,7 +84,7 @@ test cmdinfo-5.1 {Names for commands created when inside namespaces} \ }] set y [testcmdtoken name $x] rename ::testCmd newTestCmd - eval lappend y [testcmdtoken name $x] + lappend y {*}[testcmdtoken name $x] } {testCmd ::testCmd newTestCmd ::newTestCmd} test cmdinfo-6.1 {Names for commands created when outside namespaces} \ @@ -94,7 +92,7 @@ test cmdinfo-6.1 {Names for commands created when outside namespaces} \ set x [testcmdtoken create cmdInfoNs1::cmdInfoNs2::testCmd] set y [testcmdtoken name $x] rename cmdInfoNs1::cmdInfoNs2::testCmd newTestCmd2 - eval lappend y [testcmdtoken name $x] + lappend y {*}[testcmdtoken name $x] } {testCmd ::cmdInfoNs1::cmdInfoNs2::testCmd newTestCmd2 ::newTestCmd2} # cleanup @@ -102,3 +100,7 @@ catch {namespace delete cmdInfoNs1::cmdInfoNs2 cmdInfoNs1} catch {rename x1 ""} ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/cmdMZ.test b/tests/cmdMZ.test index e782715..7fe4fda 100644 --- a/tests/cmdMZ.test +++ b/tests/cmdMZ.test @@ -11,11 +11,19 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. -if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest 2.1 - namespace import -force ::tcltest::* +if {[catch {package require tcltest 2.1}]} { + puts stderr "Skipping tests in [info script]. tcltest 2.1 required." + return } +namespace eval ::tcl::test::cmdMZ { + namespace import ::tcltest::cleanupTests + namespace import ::tcltest::customMatch + namespace import ::tcltest::makeFile + namespace import ::tcltest::removeFile + namespace import ::tcltest::temporaryDirectory + namespace import ::tcltest::test + # Tcl_PwdObjCmd test cmdMZ-1.1 {Tcl_PwdObjCmd} { @@ -27,7 +35,7 @@ test cmdMZ-1.2 {Tcl_PwdObjCmd: simple pwd} { test cmdMZ-1.3 {Tcl_PwdObjCmd: simple pwd} { expr [string length pwd]>0 } 1 -test cmdMZ-1.4 {Tcl_PwdObjCmd: failure} {unixOnly nonPortable} { +test cmdMZ-1.4 {Tcl_PwdObjCmd: failure} {unix nonPortable} { # This test fails on various unix platforms (eg Linux) where # permissions caching causes this to fail. The caching is strictly # incorrect, but we have no control over that. @@ -48,10 +56,10 @@ test cmdMZ-1.4 {Tcl_PwdObjCmd: failure} {unixOnly nonPortable} { # Tcl_RenameObjCmd test cmdMZ-2.1 {Tcl_RenameObjCmd: error conditions} { - list [catch {rename r1} msg] $msg $errorCode + list [catch {rename r1} msg] $msg $::errorCode } {1 {wrong # args: should be "rename oldName newName"} NONE} test cmdMZ-2.2 {Tcl_RenameObjCmd: error conditions} { - list [catch {rename r1 r2 r3} msg] $msg $errorCode + list [catch {rename r1 r2 r3} msg] $msg $::errorCode } {1 {wrong # args: should be "rename oldName newName"} NONE} test cmdMZ-2.3 {Tcl_RenameObjCmd: success} { catch {rename r2 {}} @@ -65,41 +73,182 @@ test cmdMZ-2.4 {Tcl_RenameObjCmd: success} { list [catch {r1} msg] $msg } {1 {invalid command name "r1"}} -# The tests for Tcl_ReturnObjCmd are in proc-old.test +# Some tests for Tcl_ReturnObjCmd are in proc-old.test + +test cmdMZ-return-1.0 {return checks for bad option values} -body { + return -options foo +} -returnCodes error -match glob -result {bad -options value:*} +test cmdMZ-return-1.1 {return checks for bad option values} -body { + return -code foo +} -returnCodes error -match glob -result {bad completion code*} +test cmdMZ-return-1.2 {return checks for bad option values} -body { + return -code 0x100000000 +} -returnCodes error -match glob -result {bad completion code*} +test cmdMZ-return-1.3 {return checks for bad option values} -body { + return -level foo +} -returnCodes error -match glob -result {bad -level value:*} +test cmdMZ-return-1.4 {return checks for bad option values} -body { + return -level -1 +} -returnCodes error -match glob -result {bad -level value:*} +test cmdMZ-return-1.5 {return checks for bad option values} -body { + return -level 3.1415926 +} -returnCodes error -match glob -result {bad -level value:*} + +proc dictSort {d} { + foreach k [lsort [dict keys $d]] { + lappend result $k [dict get $d $k] + } + return $result +} + +test cmdMZ-return-2.0 {return option handling} { + list [catch return -> foo] [dictSort $foo] +} {2 {-code 0 -level 1}} +test cmdMZ-return-2.1 {return option handling} { + list [catch {return -bar soom} -> foo] [dictSort $foo] +} {2 {-bar soom -code 0 -level 1}} +test cmdMZ-return-2.2 {return option handling} { + list [catch {return -code return} -> foo] [dictSort $foo] +} {2 {-code 0 -level 2}} +test cmdMZ-return-2.3 {return option handling} { + list [catch {return -code return -level 10} -> foo] [dictSort $foo] +} {2 {-code 0 -level 11}} +test cmdMZ-return-2.4 {return option handling} -body { + return -level 0 -code error +} -returnCodes error -result {} +test cmdMZ-return-2.5 {return option handling} -body { + return -level 0 -code return +} -returnCodes return -result {} +test cmdMZ-return-2.6 {return option handling} -body { + return -level 0 -code break +} -returnCodes break -result {} +test cmdMZ-return-2.7 {return option handling} -body { + return -level 0 -code continue +} -returnCodes continue -result {} +test cmdMZ-return-2.8 {return option handling} -body { + return -level 0 -code -1 +} -returnCodes -1 -result {} +test cmdMZ-return-2.9 {return option handling} -body { + return -level 0 -code 10 +} -returnCodes 10 -result {} +test cmdMZ-return-2.10 {return option handling} { + list [catch {return -level 0 -code error} -> foo] [dictSort $foo] +} {1 {-code 1 -errorcode NONE -errorinfo { + while executing +"return -level 0 -code error"} -errorline 1 -level 0}} +test cmdMZ-return-2.11 {return option handling} { + list [catch {return -level 0 -code break} -> foo] [dictSort $foo] +} {3 {-code 3 -level 0}} +test cmdMZ-return-2.12 {return option handling} -body { + return -level 0 -code error -options {-code ok} +} -returnCodes ok -result {} +test cmdMZ-return-2.13 {return option handling} -body { + return -level 0 -code error -options {-code foo} +} -returnCodes error -match glob -result {bad completion code*} +test cmdMZ-return-2.14 {return option handling} -body { + return -level 0 -code error -options {-code foo -options {-code break}} +} -returnCodes break -result {} + +test cmdMZ-return-2.15 {return opton handling} -setup { + proc p {} { + return -code error -errorcode {a b} c + } + } -body { + list [catch p result] $result $::errorCode + } -cleanup { + rename p {} + } -result {1 c {a b}} + +test cmdMZ-return-2.16 {return opton handling} -setup { + proc p {} { + return -code error -errorcode [list a b] c + } + } -body { + list [catch p result] $result $::errorCode + } -cleanup { + rename p {} + } -result {1 c {a b}} + +test cmdMZ-return-2.17 {return opton handling} -setup { + proc p {} { + return -code error -errorcode a\ b c + } + } -body { + list [catch p result] $result $::errorCode + } -cleanup { + rename p {} + } -result {1 c {a b}} + + +# Check that the result of a [return -options $opts $result] is +# indistinguishable from that of the originally caught script, no +# matter what the script is/does. (TIP 90) +set i 0 +foreach script { + {} + {format x} + {set} + {set a 1} + {error} + {error foo} + {error foo bar} + {error foo bar baz} + {return -level 0} + {return -code error} + {return -code error -errorinfo foo} + {return -code error -errorinfo foo -errorcode bar} + {return -code error -errorinfo foo -errorcode bar -errorline 10} + {return -options {x y z 2}} + {return -level 3 -code break sdf} +} { + test cmdMZ-return-3.$i "check that return after a catch is same:\n$script" { + set one [list [catch $script foo bar] $foo [dictSort $bar] \ + $::errorCode $::errorInfo] + set two [list [catch {return -options $bar $foo} foo2 bar2] \ + $foo2 [dictSort $bar2] $::errorCode $::errorInfo] + string equal $one $two + } 1 + incr i +} + # The tests for Tcl_ScanObjCmd are in scan.test # Tcl_SourceObjCmd +# More tests of Tcl_SourceObjCmd are in source.test -test cmdMZ-3.3 {Tcl_SourceObjCmd: error conditions} {unixOrPc} { +test cmdMZ-3.3 {Tcl_SourceObjCmd: error conditions} -constraints { + unixOrPc +} -body { list [catch {source} msg] $msg -} {1 {wrong # args: should be "source fileName"}} -test cmdMZ-3.4 {Tcl_SourceObjCmd: error conditions} {unixOrPc} { +} -match glob -result {1 {wrong # args: should be "source*fileName"}} +test cmdMZ-3.4 {Tcl_SourceObjCmd: error conditions} -constraints { + unixOrPc +} -body { list [catch {source a b} msg] $msg -} {1 {wrong # args: should be "source fileName"}} +} -match glob -result {1 {wrong # args: should be "source*fileName"}} proc ListGlobMatch {expected actual} { if {[llength $expected] != [llength $actual]} { - return 0 + return 0 } foreach e $expected a $actual { - if {![string match $e $a]} { - return 0 - } + if {![string match $e $a]} { + return 0 + } } return 1 } -customMatch listGlob ListGlobMatch +customMatch listGlob [namespace which ListGlobMatch] -test cmdMZ-3.5 {Tcl_SourceObjCmd: error in script} -setup { +test cmdMZ-3.5 {Tcl_SourceObjCmd: error in script} -body { set file [makeFile { set x 146 error "error in sourced file" set y $x } source.file] -} -body { - list [catch {source $file} msg] $msg $errorInfo -} -cleanup { + set result [list [catch {source $file} msg] $msg $::errorInfo] removeFile source.file + set result } -match listGlob -result {1 {error in sourced file} {error in sourced file while executing "error "error in sourced file"" @@ -116,10 +265,10 @@ test cmdMZ-3.6 {Tcl_SourceObjCmd: simple script} { # Tcl_SplitObjCmd test cmdMZ-4.1 {Tcl_SplitObjCmd: split errors} { - list [catch split msg] $msg $errorCode + list [catch split msg] $msg $::errorCode } {1 {wrong # args: should be "split string ?splitChars?"} NONE} test cmdMZ-4.2 {Tcl_SplitObjCmd: split errors} { - list [catch {split a b c} msg] $msg $errorCode + list [catch {split a b c} msg] $msg $::errorCode } {1 {wrong # args: should be "split string ?splitChars?"} NONE} test cmdMZ-4.3 {Tcl_SplitObjCmd: basic split commands} { split "a\n b\t\r c\n " @@ -132,7 +281,7 @@ test cmdMZ-4.5 {Tcl_SplitObjCmd: basic split commands} { } {1 2 3 4 5} test cmdMZ-4.6 {Tcl_SplitObjCmd: basic split commands} { split "a\}b\[c\{\]\$" -} "a\\}b\\\[c\\{\\\]\\\$" +} "a\\\}b\\\[c\\\{\\\]\\\$" test cmdMZ-4.7 {Tcl_SplitObjCmd: basic split commands} { split {} {} } {} @@ -198,9 +347,10 @@ test cmdMZ-5.7 {Tcl_TimeObjCmd: errors generate right trace} { invoked from within "time {error foo}"}} -# The tests for Tcl_TraceObjCmd and TraceVarProc are in trace.test # The tests for Tcl_WhileObjCmd are in while.test # cleanup -::tcltest::cleanupTests +cleanupTests +} +namespace delete ::tcl::test::cmdMZ return diff --git a/tests/compExpr-old.test b/tests/compExpr-old.test index fc33a3d..bb19151 100644 --- a/tests/compExpr-old.test +++ b/tests/compExpr-old.test @@ -13,18 +13,77 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } -if {([catch {expr T1()} msg] == 1) && ($msg == {unknown math function "T1"})} { - set gotT1 0 - puts "This application hasn't been compiled with the \"T1\" and" - puts "\"T2\" math functions, so I'll skip some of the expr tests." +if {[catch {expr T1()} msg] && $msg eq {invalid command name "tcl::mathfunc::T1"}} { + testConstraint testmathfunctions 0 } else { - set gotT1 1 + testConstraint testmathfunctions 1 } +# Big test for correct ordering of data in [expr] + +proc testIEEE {} { + variable ieeeValues + binary scan [binary format dd -1.0 1.0] c* c + switch -exact -- $c { + {0 0 0 0 0 0 -16 -65 0 0 0 0 0 0 -16 63} { + # little endian + binary scan \x00\x00\x00\x00\x00\x00\xf0\xff d \ + ieeeValues(-Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf0\xbf d \ + ieeeValues(-Normal) + binary scan \x00\x00\x00\x00\x00\x00\x08\x80 d \ + ieeeValues(-Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\x00\x80 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x00\x00\x00\x00\x00\x08\x00 d \ + ieeeValues(+Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x3f d \ + ieeeValues(+Normal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x7f d \ + ieeeValues(+Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf8\x7f d \ + ieeeValues(NaN) + set ieeeValues(littleEndian) 1 + return 1 + } + {-65 -16 0 0 0 0 0 0 63 -16 0 0 0 0 0 0} { + binary scan \xff\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Infinity) + binary scan \xbf\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Normal) + binary scan \x80\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Subnormal) + binary scan \x80\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Subnormal) + binary scan \x3f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Normal) + binary scan \x7f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Infinity) + binary scan \x7f\xf8\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(NaN) + set ieeeValues(littleEndian) 0 + return 1 + } + default { + return 0 + } + } +} +testConstraint ieeeFloatingPoint [testIEEE] + +testConstraint longIs32bit [expr {int(0x80000000) < 0}] +testConstraint longIs64bit [expr {int(0x8000000000000000) < 0}] + # procedures used below proc put_hello_char {c} { @@ -67,7 +126,9 @@ proc do_twelve_days {} { global xxx set xxx "" 12days 1 1 1 - string length $xxx + set result [string length $xxx] + unset xxx + return $result } # start of tests @@ -130,60 +191,49 @@ test compExpr-old-1.14 {TclCompileExprCmd: second level of substitutions in expr test compExpr-old-2.1 {TclCompileExpr: are builtin functions registered?} { expr double(5*[llength "6 2"]) } 10.0 -test compExpr-old-2.2 {TclCompileExpr: error in expr} { - catch {expr 2**3} msg - set msg -} {syntax error in expression "2**3": unexpected operator *} -test compExpr-old-2.3 {TclCompileExpr: junk after legal expr} { - catch {expr 7*[llength "a b"]foo} msg - set msg -} {syntax error in expression "7*2foo": extra tokens at end of expression} +test compExpr-old-2.2 {TclCompileExpr: error in expr} -body { + expr 2***3 +} -returnCodes error -match glob -result * +test compExpr-old-2.3 {TclCompileExpr: junk after legal expr} -body { + expr 7*[llength "a b"]foo +} -returnCodes error -match glob -result * test compExpr-old-2.4 {TclCompileExpr: numeric expr string rep == formatted int rep} { expr {0001} } 1 test compExpr-old-3.1 {CompileCondExpr: just lor expr} {expr 3||0} 1 -test compExpr-old-3.2 {CompileCondExpr: error in lor expr} { - catch {expr x||3} msg - set msg -} {syntax error in expression "x||3": variable references require preceding $} +test compExpr-old-3.2 {CompileCondExpr: error in lor expr} -body { + expr x||3 +} -returnCodes error -match glob -result * test compExpr-old-3.3 {CompileCondExpr: test true arm} {expr 3>2?44:66} 44 -test compExpr-old-3.4 {CompileCondExpr: error compiling true arm} { - catch {expr 3>2?2**3:66} msg - set msg -} {syntax error in expression "3>2?2**3:66": unexpected operator *} +test compExpr-old-3.4 {CompileCondExpr: error compiling true arm} -body { + expr 3>2?2***3:66 +} -returnCodes error -match glob -result * test compExpr-old-3.5 {CompileCondExpr: test false arm} {expr 2>3?44:66} 66 -test compExpr-old-3.6 {CompileCondExpr: error compiling false arm} { - catch {expr 2>3?44:2**3} msg - set msg -} {syntax error in expression "2>3?44:2**3": unexpected operator *} -test compExpr-old-3.7 {CompileCondExpr: long arms & nested cond exprs} {nonPortable} { - puts "Note: doing test compExpr-old-3.7 which can take several minutes to run" +test compExpr-old-3.6 {CompileCondExpr: error compiling false arm} -body { + expr 2>3?44:2***3 +} -returnCodes error -match glob -result * +test compExpr-old-3.7 {CompileCondExpr: long arms & nested cond exprs} { hello_world } {Hello world} -catch {unset xxx} -test compExpr-old-3.8 {CompileCondExpr: long arms & nested cond exprs} {nonPortable} { - puts "Note: doing test compExpr-old-3.8 which can take several minutes to run" +test compExpr-old-3.8 {CompileCondExpr: long arms & nested cond exprs} unix { + # Fails with a stack overflow on threaded Windows builds do_twelve_days } 2358 -catch {unset xxx} test compExpr-old-4.1 {CompileLorExpr: just land expr} {expr 1.3&&3.3} 1 -test compExpr-old-4.2 {CompileLorExpr: error in land expr} { - catch {expr x&&3} msg - set msg -} {syntax error in expression "x&&3": variable references require preceding $} +test compExpr-old-4.2 {CompileLorExpr: error in land expr} -body { + expr x&&3 +} -returnCodes error -match glob -result * test compExpr-old-4.3 {CompileLorExpr: simple lor exprs} {expr 0||1.0} 1 test compExpr-old-4.4 {CompileLorExpr: simple lor exprs} {expr 3.0||0.0} 1 test compExpr-old-4.5 {CompileLorExpr: simple lor exprs} {expr 0||0||1} 1 -test compExpr-old-4.6 {CompileLorExpr: error compiling lor arm} { - catch {expr 2**3||4.0} msg - set msg -} {syntax error in expression "2**3||4.0": unexpected operator *} -test compExpr-old-4.7 {CompileLorExpr: error compiling lor arm} { - catch {expr 1.3||2**3} msg - set msg -} {syntax error in expression "1.3||2**3": unexpected operator *} +test compExpr-old-4.6 {CompileLorExpr: error compiling lor arm} -body { + expr 2***3||4.0 +} -returnCodes error -match glob -result * +test compExpr-old-4.7 {CompileLorExpr: error compiling lor arm} -body { + expr 1.3||2***3 +} -returnCodes error -match glob -result * test compExpr-old-4.8 {CompileLorExpr: error compiling lor arms} { list [catch {expr {"a"||"b"}} msg] $msg } {1 {expected boolean value but got "a"}} @@ -194,22 +244,19 @@ test compExpr-old-4.9 {CompileLorExpr: long lor arm} { } 1 test compExpr-old-5.1 {CompileLandExpr: just bitor expr} {expr 7|0x13} 23 -test compExpr-old-5.2 {CompileLandExpr: error in bitor expr} { - catch {expr x|3} msg - set msg -} {syntax error in expression "x|3": variable references require preceding $} +test compExpr-old-5.2 {CompileLandExpr: error in bitor expr} -body { + expr x|3 +} -returnCodes error -match glob -result * test compExpr-old-5.3 {CompileLandExpr: simple land exprs} {expr 0&&1.0} 0 test compExpr-old-5.4 {CompileLandExpr: simple land exprs} {expr 0&&0} 0 test compExpr-old-5.5 {CompileLandExpr: simple land exprs} {expr 3.0&&1.2} 1 test compExpr-old-5.6 {CompileLandExpr: simple land exprs} {expr 1&&1&&2} 1 -test compExpr-old-5.7 {CompileLandExpr: error compiling land arm} { - catch {expr 2**3&&4.0} msg - set msg -} {syntax error in expression "2**3&&4.0": unexpected operator *} -test compExpr-old-5.8 {CompileLandExpr: error compiling land arm} { - catch {expr 1.3&&2**3} msg - set msg -} {syntax error in expression "1.3&&2**3": unexpected operator *} +test compExpr-old-5.7 {CompileLandExpr: error compiling land arm} -body { + expr 2***3&&4.0 +} -returnCodes error -match glob -result * +test compExpr-old-5.8 {CompileLandExpr: error compiling land arm} -body { + expr 1.3&&2***3 +} -returnCodes error -match glob -result * test compExpr-old-5.9 {CompileLandExpr: error compiling land arm} { list [catch {expr {"a"&&"b"}} msg] $msg } {1 {expected boolean value but got "a"}} @@ -220,22 +267,19 @@ test compExpr-old-5.10 {CompileLandExpr: long land arms} { } 1 test compExpr-old-6.1 {CompileBitXorExpr: just bitand expr} {expr 7&0x13} 3 -test compExpr-old-6.2 {CompileBitXorExpr: error in bitand expr} { - catch {expr x|3} msg - set msg -} {syntax error in expression "x|3": variable references require preceding $} +test compExpr-old-6.2 {CompileBitXorExpr: error in bitand expr} -body { + expr x|3 +} -returnCodes error -match glob -result * test compExpr-old-6.3 {CompileBitXorExpr: simple bitxor exprs} {expr 7^0x13} 20 test compExpr-old-6.4 {CompileBitXorExpr: simple bitxor exprs} {expr 3^0x10} 19 test compExpr-old-6.5 {CompileBitXorExpr: simple bitxor exprs} {expr 0^7} 7 test compExpr-old-6.6 {CompileBitXorExpr: simple bitxor exprs} {expr -1^7} -8 -test compExpr-old-6.7 {CompileBitXorExpr: error compiling bitxor arm} { - catch {expr 2**3|6} msg - set msg -} {syntax error in expression "2**3|6": unexpected operator *} -test compExpr-old-6.8 {CompileBitXorExpr: error compiling bitxor arm} { - catch {expr 2^x} msg - set msg -} {syntax error in expression "2^x": variable references require preceding $} +test compExpr-old-6.7 {CompileBitXorExpr: error compiling bitxor arm} -body { + expr 2***3|6 +} -returnCodes error -match glob -result * +test compExpr-old-6.8 {CompileBitXorExpr: error compiling bitxor arm} -body { + expr 2^x +} -returnCodes error -match glob -result * test compExpr-old-6.9 {CompileBitXorExpr: runtime error in bitxor arm} { list [catch {expr {24.0^3}} msg] $msg } {1 {can't use floating-point value as operand of "^"}} @@ -247,22 +291,19 @@ test compExpr-old-7.1 {CompileBitAndExpr: just equality expr} {expr 3==2} 0 test compExpr-old-7.2 {CompileBitAndExpr: just equality expr} {expr 2.0==2} 1 test compExpr-old-7.3 {CompileBitAndExpr: just equality expr} {expr 3.2!=2.2} 1 test compExpr-old-7.4 {CompileBitAndExpr: just equality expr} {expr {"abc" == "abd"}} 0 -test compExpr-old-7.5 {CompileBitAndExpr: error in equality expr} { - catch {expr x==3} msg - set msg -} {syntax error in expression "x==3": variable references require preceding $} +test compExpr-old-7.5 {CompileBitAndExpr: error in equality expr} -body { + expr x==3 +} -returnCodes error -match glob -result * test compExpr-old-7.6 {CompileBitAndExpr: simple bitand exprs} {expr 7&0x13} 3 test compExpr-old-7.7 {CompileBitAndExpr: simple bitand exprs} {expr 0xf2&0x53} 82 test compExpr-old-7.8 {CompileBitAndExpr: simple bitand exprs} {expr 3&6} 2 test compExpr-old-7.9 {CompileBitAndExpr: simple bitand exprs} {expr -1&-7} -7 -test compExpr-old-7.10 {CompileBitAndExpr: error compiling bitand arm} { - catch {expr 2**3&6} msg - set msg -} {syntax error in expression "2**3&6": unexpected operator *} -test compExpr-old-7.11 {CompileBitAndExpr: error compiling bitand arm} { - catch {expr 2&x} msg - set msg -} {syntax error in expression "2&x": variable references require preceding $} +test compExpr-old-7.10 {CompileBitAndExpr: error compiling bitand arm} -body { + expr 2***3&6 +} -returnCodes error -match glob -result * +test compExpr-old-7.11 {CompileBitAndExpr: error compiling bitand arm} -body { + expr 2&x +} -returnCodes error -match glob -result * test compExpr-old-7.12 {CompileBitAndExpr: runtime error in bitand arm} { list [catch {expr {24.0&3}} msg] $msg } {1 {can't use floating-point value as operand of "&"}} @@ -274,22 +315,19 @@ test compExpr-old-8.1 {CompileEqualityExpr: just relational expr} {expr 3>=2} 1 test compExpr-old-8.2 {CompileEqualityExpr: just relational expr} {expr 2<=2.1} 1 test compExpr-old-8.3 {CompileEqualityExpr: just relational expr} {expr 3.2>"2.2"} 1 test compExpr-old-8.4 {CompileEqualityExpr: just relational expr} {expr {"0y"<"0x12"}} 0 -test compExpr-old-8.5 {CompileEqualityExpr: error in relational expr} { - catch {expr x>3} msg - set msg -} {syntax error in expression "x>3": variable references require preceding $} +test compExpr-old-8.5 {CompileEqualityExpr: error in relational expr} -body { + expr x>3 +} -returnCodes error -match glob -result * test compExpr-old-8.6 {CompileEqualityExpr: simple equality exprs} {expr 7==0x13} 0 test compExpr-old-8.7 {CompileEqualityExpr: simple equality exprs} {expr -0xf2!=0x53} 1 test compExpr-old-8.8 {CompileEqualityExpr: simple equality exprs} {expr {"12398712938788234-1298379" != ""}} 1 test compExpr-old-8.9 {CompileEqualityExpr: simple equality exprs} {expr -1!="abc"} 1 -test compExpr-old-8.10 {CompileEqualityExpr: error compiling equality arm} { - catch {expr 2**3==6} msg - set msg -} {syntax error in expression "2**3==6": unexpected operator *} -test compExpr-old-8.11 {CompileEqualityExpr: error compiling equality arm} { - catch {expr 2!=x} msg - set msg -} {syntax error in expression "2!=x": variable references require preceding $} +test compExpr-old-8.10 {CompileEqualityExpr: error compiling equality arm} -body { + expr 2***3==6 +} -returnCodes error -match glob -result * +test compExpr-old-8.11 {CompileEqualityExpr: error compiling equality arm} -body { + expr 2!=x +} -returnCodes error -match glob -result * test compExpr-old-9.1 {CompileRelationalExpr: just shift expr} {expr 3<<2} 12 @@ -300,48 +338,40 @@ test compExpr-old-9.4 {CompileRelationalExpr: just shift expr} {expr {1<<3}} 8 # The following test is different for 32-bit versus 64-bit # architectures because LONG_MIN is different -if {0x80000000 > 0} { - test compExpr-old-9.5 {CompileRelationalExpr: shift expr producing LONG_MIN} {nonPortable} { - expr {1<<63} - } -9223372036854775808 -} else { - test compExpr-old-9.5 {CompileRelationalExpr: shift expr producing LONG_MIN} {nonPortable} { - expr {1<<31} - } -2147483648 -} -test compExpr-old-9.6 {CompileRelationalExpr: error in shift expr} { - catch {expr x>>3} msg - set msg -} {syntax error in expression "x>>3": variable references require preceding $} +test compExpr-old-9.5a {CompileRelationalExpr: shift expr producing LONG_MIN} longIs64bit { + expr {int(1<<63)} +} -9223372036854775808 +test compExpr-old-9.5b {CompileRelationalExpr: shift expr producing LONG_MIN} longIs32bit { + expr {int(1<<31)} +} -2147483648 + +test compExpr-old-9.6 {CompileRelationalExpr: error in shift expr} -body { + expr x>>3 +} -returnCodes error -match glob -result * test compExpr-old-9.7 {CompileRelationalExpr: simple relational exprs} {expr 0xff>=+0x3} 1 test compExpr-old-9.8 {CompileRelationalExpr: simple relational exprs} {expr -0xf2<0x3} 1 -test compExpr-old-9.9 {CompileRelationalExpr: error compiling relational arm} { - catch {expr 2**3>6} msg - set msg -} {syntax error in expression "2**3>6": unexpected operator *} -test compExpr-old-9.10 {CompileRelationalExpr: error compiling relational arm} { - catch {expr 2<x} msg - set msg -} {syntax error in expression "2<x": variable references require preceding $} +test compExpr-old-9.9 {CompileRelationalExpr: error compiling relational arm} -body { + expr 2***3>6 +} -returnCodes error -match glob -result * +test compExpr-old-9.10 {CompileRelationalExpr: error compiling relational arm} -body { + expr 2<x +} -returnCodes error -match glob -result * test compExpr-old-10.1 {CompileShiftExpr: just add expr} {expr 4+-2} 2 test compExpr-old-10.2 {CompileShiftExpr: just add expr} {expr 0xff-2} 253 test compExpr-old-10.3 {CompileShiftExpr: just add expr} {expr -1--2} 1 -test compExpr-old-10.4 {CompileShiftExpr: just add expr} {expr 1-0123} -82 -test compExpr-old-10.5 {CompileShiftExpr: error in add expr} { - catch {expr x+3} msg - set msg -} {syntax error in expression "x+3": variable references require preceding $} +test compExpr-old-10.4 {CompileShiftExpr: just add expr} {expr 1-0o123} -82 +test compExpr-old-10.5 {CompileShiftExpr: error in add expr} -body { + expr x+3 +} -returnCodes error -match glob -result * test compExpr-old-10.6 {CompileShiftExpr: simple shift exprs} {expr 0xff>>0x3} 31 test compExpr-old-10.7 {CompileShiftExpr: simple shift exprs} {expr -0xf2<<0x3} -1936 -test compExpr-old-10.8 {CompileShiftExpr: error compiling shift arm} { - catch {expr 2**3>>6} msg - set msg -} {syntax error in expression "2**3>>6": unexpected operator *} -test compExpr-old-10.9 {CompileShiftExpr: error compiling shift arm} { - catch {expr 2<<x} msg - set msg -} {syntax error in expression "2<<x": variable references require preceding $} +test compExpr-old-10.8 {CompileShiftExpr: error compiling shift arm} -body { + expr 2***3>>6 +} -returnCodes error -match glob -result * +test compExpr-old-10.9 {CompileShiftExpr: error compiling shift arm} -body { + expr 2<<x +} -returnCodes error -match glob -result * test compExpr-old-10.10 {CompileShiftExpr: runtime error} { list [catch {expr {24.0>>43}} msg] $msg } {1 {can't use floating-point value as operand of ">>"}} @@ -352,21 +382,18 @@ test compExpr-old-10.11 {CompileShiftExpr: runtime error} { test compExpr-old-11.1 {CompileAddExpr: just multiply expr} {expr 4*-2} -8 test compExpr-old-11.2 {CompileAddExpr: just multiply expr} {expr 0xff%2} 1 test compExpr-old-11.3 {CompileAddExpr: just multiply expr} {expr -1/2} -1 -test compExpr-old-11.4 {CompileAddExpr: just multiply expr} {expr 7891%0123} 6 -test compExpr-old-11.5 {CompileAddExpr: error in multiply expr} { - catch {expr x*3} msg - set msg -} {syntax error in expression "x*3": variable references require preceding $} +test compExpr-old-11.4 {CompileAddExpr: just multiply expr} {expr 7891%0o123} 6 +test compExpr-old-11.5 {CompileAddExpr: error in multiply expr} -body { + expr x*3 +} -returnCodes error -match glob -result * test compExpr-old-11.6 {CompileAddExpr: simple add exprs} {expr 0xff++0x3} 258 test compExpr-old-11.7 {CompileAddExpr: simple add exprs} {expr -0xf2--0x3} -239 -test compExpr-old-11.8 {CompileAddExpr: error compiling add arm} { - catch {expr 2**3+6} msg - set msg -} {syntax error in expression "2**3+6": unexpected operator *} -test compExpr-old-11.9 {CompileAddExpr: error compiling add arm} { - catch {expr 2-x} msg - set msg -} {syntax error in expression "2-x": variable references require preceding $} +test compExpr-old-11.8 {CompileAddExpr: error compiling add arm} -body { + expr 2***3+6 +} -returnCodes error -match glob -result * +test compExpr-old-11.9 {CompileAddExpr: error compiling add arm} -body { + expr 2-x +} -returnCodes error -match glob -result * test compExpr-old-11.10 {CompileAddExpr: runtime error} { list [catch {expr {24.0+"xx"}} msg] $msg } {1 {can't use non-numeric string as operand of "+"}} @@ -376,7 +403,10 @@ test compExpr-old-11.11 {CompileAddExpr: runtime error} { test compExpr-old-11.12 {CompileAddExpr: runtime error} { list [catch {expr {3/0}} msg] $msg } {1 {divide by zero}} -test compExpr-old-11.13 {CompileAddExpr: runtime error} { +test compExpr-old-11.13a {CompileAddExpr: runtime error} ieeeFloatingPoint { + list [catch {expr {2.3/0.0}} msg] $msg +} {0 Inf} +test compExpr-old-11.13b {CompileAddExpr: runtime error} !ieeeFloatingPoint { list [catch {expr {2.3/0.0}} msg] $msg } {1 {divide by zero}} @@ -384,20 +414,17 @@ test compExpr-old-12.1 {CompileMultiplyExpr: just unary expr} {expr ~4} -5 test compExpr-old-12.2 {CompileMultiplyExpr: just unary expr} {expr --5} 5 test compExpr-old-12.3 {CompileMultiplyExpr: just unary expr} {expr !27} 0 test compExpr-old-12.4 {CompileMultiplyExpr: just unary expr} {expr ~0xff00ff} -16711936 -test compExpr-old-12.5 {CompileMultiplyExpr: error in unary expr} { - catch {expr ~x} msg - set msg -} {syntax error in expression "~x": variable references require preceding $} +test compExpr-old-12.5 {CompileMultiplyExpr: error in unary expr} -body { + expr ~x +} -returnCodes error -match glob -result * test compExpr-old-12.6 {CompileMultiplyExpr: simple multiply exprs} {expr 0xff*0x3} 765 test compExpr-old-12.7 {CompileMultiplyExpr: simple multiply exprs} {expr -0xf2%-0x3} -2 -test compExpr-old-12.8 {CompileMultiplyExpr: error compiling multiply arm} { - catch {expr 2*3%%6} msg - set msg -} {syntax error in expression "2*3%%6": unexpected operator %} -test compExpr-old-12.9 {CompileMultiplyExpr: error compiling multiply arm} { - catch {expr 2*x} msg - set msg -} {syntax error in expression "2*x": variable references require preceding $} +test compExpr-old-12.8 {CompileMultiplyExpr: error compiling multiply arm} -body { + expr 2*3%%6 +} -returnCodes error -match glob -result * +test compExpr-old-12.9 {CompileMultiplyExpr: error compiling multiply arm} -body { + expr 2*x +} -returnCodes error -match glob -result * test compExpr-old-12.10 {CompileMultiplyExpr: runtime error} { list [catch {expr {24.0*"xx"}} msg] $msg } {1 {can't use non-numeric string as operand of "*"}} @@ -406,20 +433,19 @@ test compExpr-old-12.11 {CompileMultiplyExpr: runtime error} { } {1 {can't use non-numeric string as operand of "/"}} test compExpr-old-13.1 {CompileUnaryExpr: unary exprs} {expr -0xff} -255 -test compExpr-old-13.2 {CompileUnaryExpr: unary exprs} {expr +000123} 83 +test compExpr-old-13.2 {CompileUnaryExpr: unary exprs} {expr +0o00123} 83 test compExpr-old-13.3 {CompileUnaryExpr: unary exprs} {expr +--++36} 36 test compExpr-old-13.4 {CompileUnaryExpr: unary exprs} {expr !2} 0 test compExpr-old-13.5 {CompileUnaryExpr: unary exprs} {expr +--+-62.0} -62.0 test compExpr-old-13.6 {CompileUnaryExpr: unary exprs} {expr !0.0} 1 test compExpr-old-13.7 {CompileUnaryExpr: unary exprs} {expr !0xef} 0 -test compExpr-old-13.8 {CompileUnaryExpr: error compiling unary expr} { - catch {expr ~x} msg +test compExpr-old-13.8 {CompileUnaryExpr: error compiling unary expr} -body { + expr ~x +} -returnCodes error -match glob -result * +test compExpr-old-13.9 {CompileUnaryExpr: error compiling unary expr} -body { + expr !1.x set msg -} {syntax error in expression "~x": variable references require preceding $} -test compExpr-old-13.9 {CompileUnaryExpr: error compiling unary expr} { - catch {expr !1.x} msg - set msg -} {syntax error in expression "!1.x": extra tokens at end of expression} +} -returnCodes error -match glob -result * test compExpr-old-13.10 {CompileUnaryExpr: runtime error} { list [catch {expr {~"xx"}} msg] $msg } {1 {can't use non-numeric string as operand of "~"}} @@ -442,7 +468,7 @@ test compExpr-old-13.16 {CompileUnaryExpr: error in primary expr} { test compExpr-old-14.1 {CompilePrimaryExpr: literal primary} {expr 1} 1 test compExpr-old-14.2 {CompilePrimaryExpr: literal primary} {expr 123} 123 test compExpr-old-14.3 {CompilePrimaryExpr: literal primary} {expr 0xff} 255 -test compExpr-old-14.4 {CompilePrimaryExpr: literal primary} {expr 00010} 8 +test compExpr-old-14.4 {CompilePrimaryExpr: literal primary} {expr 0o0010} 8 test compExpr-old-14.5 {CompilePrimaryExpr: literal primary} {expr 62.0} 62.0 test compExpr-old-14.6 {CompilePrimaryExpr: literal primary} { expr 3.1400000 @@ -479,15 +505,12 @@ test compExpr-old-14.15 {CompilePrimaryExpr: var reference primary} { catch {expr $i.2} msg set msg } 123.2 -test compExpr-old-14.16 {CompilePrimaryExpr: error compiling var reference primary} { - catch {expr {$a(foo}} msg - set errorInfo -} {missing ) - while compiling -"expr {$a(foo}"} -test compExpr-old-14.17 {CompilePrimaryExpr: string primary that looks like var ref} { +test compExpr-old-14.16 {CompilePrimaryExpr: error compiling var reference primary} -body { + expr {$a(foo} +} -returnCodes error -match glob -result * +test compExpr-old-14.17 {CompilePrimaryExpr: string primary that looks like var ref} -body { expr $ -} $ +} -returnCodes error -match glob -result * test compExpr-old-14.18 {CompilePrimaryExpr: quoted string primary} { expr "21" } 21 @@ -508,114 +531,89 @@ test compExpr-old-14.21 {CompilePrimaryExpr: error in quoted string primary} { test compExpr-old-14.22 {CompilePrimaryExpr: subcommand primary} { expr {[set i 123; set i]} } 123 -test compExpr-old-14.23 {CompilePrimaryExpr: error in subcommand primary} { +test compExpr-old-14.23 {CompilePrimaryExpr: error in subcommand primary} -body { catch {expr {[set]}} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling -"set" - while compiling -"expr {[set]}"} -test compExpr-old-14.24 {CompilePrimaryExpr: error in subcommand primary} { - catch {expr {[set i}} msg - set errorInfo -} {missing close-bracket - while compiling -"expr {[set i}"} + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing +"set"*} +test compExpr-old-14.24 {CompilePrimaryExpr: error in subcommand primary} -body { + expr {[set i} +} -returnCodes error -match glob -result * test compExpr-old-14.25 {CompilePrimaryExpr: math function primary} { format %.6g [expr exp(1.0)] } 2.71828 test compExpr-old-14.26 {CompilePrimaryExpr: math function primary} { format %.6g [expr pow(2.0+0.1,3.0+0.1)] } 9.97424 -test compExpr-old-14.27 {CompilePrimaryExpr: error in math function primary} { - catch {expr sinh::(2.0)} msg - set errorInfo -} {syntax error in expression "sinh::(2.0)": expected parenthesis enclosing function arguments - while compiling -"expr sinh::(2.0)"} +test compExpr-old-14.27 {CompilePrimaryExpr: error in math function primary} -body { + expr sinh::(2.0) +} -returnCodes error -match glob -result * test compExpr-old-14.28 {CompilePrimaryExpr: subexpression primary} { expr 2+(3*4) } 14 -test compExpr-old-14.29 {CompilePrimaryExpr: error in subexpression primary} { +test compExpr-old-14.29 {CompilePrimaryExpr: error in subexpression primary} -body { catch {expr 2+(3*[set])} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling -"set" - while compiling -"expr 2+(3*[set])"} -test compExpr-old-14.30 {CompilePrimaryExpr: missing paren in subexpression primary} { - catch {expr 2+(3*(4+5)} msg - set errorInfo -} {syntax error in expression "2+(3*(4+5)": looking for close parenthesis - while compiling -"expr 2+(3*(4+5)"} + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing +"set"*} +test compExpr-old-14.30 {CompilePrimaryExpr: missing paren in subexpression primary} -body { + expr 2+(3*(4+5) +} -returnCodes error -match glob -result * test compExpr-old-14.31 {CompilePrimaryExpr: just var ref in subexpression primary} { set i "5+10" list "[expr $i] == 15" "[expr ($i)] == 15" "[eval expr ($i)] == 15" } {{15 == 15} {15 == 15} {15 == 15}} -test compExpr-old-14.32 {CompilePrimaryExpr: unexpected token} { - catch {expr @} msg - set errorInfo -} {syntax error in expression "@": character not legal in expressions - while compiling -"expr @"} - -test compExpr-old-15.1 {CompileMathFuncCall: missing parenthesis} { - catch {expr sinh2.0)} msg - set errorInfo -} {syntax error in expression "sinh2.0)": variable references require preceding $ - while compiling -"expr sinh2.0)"} -test compExpr-old-15.2 {CompileMathFuncCall: unknown math function} { +test compExpr-old-14.32 {CompilePrimaryExpr: unexpected token} -body { + expr @ +} -returnCodes error -match glob -result * + +test compExpr-old-15.1 {CompileMathFuncCall: missing parenthesis} -body { + expr sinh2.0) +} -returnCodes error -match glob -result * +test compExpr-old-15.2 {CompileMathFuncCall: unknown math function} -body { catch {expr whazzathuh(1)} msg - set errorInfo -} {unknown math function "whazzathuh" - while compiling + set ::errorInfo +} -match glob -result {* "*whazzathuh" + while *ing "expr whazzathuh(1)"} -test compExpr-old-15.3 {CompileMathFuncCall: too many arguments} { +test compExpr-old-15.3 {CompileMathFuncCall: too many arguments} -body { catch {expr sin(1,2,3)} msg - set errorInfo -} {too many arguments for math function - while compiling + set ::errorInfo +} -match glob -result {too many arguments for math function* + while *ing "expr sin(1,2,3)"} -test compExpr-old-15.4 {CompileMathFuncCall: ')' found before last required arg} { +test compExpr-old-15.4 {CompileMathFuncCall: ')' found before last required arg} -body { catch {expr sin()} msg - set errorInfo -} {too few arguments for math function - while compiling + set ::errorInfo +} -match glob -result {too few arguments for math function* + while *ing "expr sin()"} -test compExpr-old-15.5 {CompileMathFuncCall: too few arguments} { +test compExpr-old-15.5 {CompileMathFuncCall: too few arguments} -body { catch {expr pow(1)} msg - set errorInfo -} {too few arguments for math function - while compiling + set ::errorInfo +} -match glob -result {too few arguments for math function* + while *ing "expr pow(1)"} -test compExpr-old-15.6 {CompileMathFuncCall: missing ')'} { - catch {expr sin(1} msg - set errorInfo -} {syntax error in expression "sin(1": missing close parenthesis at end of function call - while compiling -"expr sin(1"} -if $gotT1 { - test compExpr-old-15.7 {CompileMathFuncCall: call registered math function} { - expr 2*T1() - } 246 - test compExpr-old-15.8 {CompileMathFuncCall: call registered math function} { - expr T2()*3 - } 1035 - - test compExpr-old-15.9 {CompileMathFuncCall: call registered math function} { - expr T3(21, 37) - } 37 - test compExpr-old-15.10 {CompileMathFuncCall: call registered math function} { - expr T3(21.2, 37) - } 37.0 - test compExpr-old-15.11 {CompileMathFuncCall: call registered math function} { - expr T3(-21.2, -17.5) - } -17.5 -} +test compExpr-old-15.6 {CompileMathFuncCall: missing ')'} -body { + expr sin(1 +} -returnCodes error -match glob -result * +test compExpr-old-15.7 {CompileMathFuncCall: call registered math function} testmathfunctions { + expr 2*T1() +} 246 +test compExpr-old-15.8 {CompileMathFuncCall: call registered math function} testmathfunctions { + expr T2()*3 +} 1035 +test compExpr-old-15.9 {CompileMathFuncCall: call registered math function} testmathfunctions { + expr T3(21, 37) +} 37 +test compExpr-old-15.10 {CompileMathFuncCall: call registered math function} testmathfunctions { + expr T3(21.2, 37) +} 37.0 +test compExpr-old-15.11 {CompileMathFuncCall: call registered math function} testmathfunctions { + expr T3(-21.2, -17.5) +} -17.5 test compExpr-old-16.1 {GetToken: checks whether integer token starting with "0x" (e.g., "0x$") is invalid} { catch {unset a} diff --git a/tests/compExpr.test b/tests/compExpr.test index e775b66..f02e999 100644 --- a/tests/compExpr.test +++ b/tests/compExpr.test @@ -9,31 +9,33 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest 2 + package require tcltest namespace import -force ::tcltest::* } -if {([catch {expr T1()} msg] == 1) && ($msg == {unknown math function "T1"})} { - set gotT1 0 - puts "This application hasn't been compiled with the \"T1\" and" - puts "\"T2\" math functions, so I'll skip some of the expr tests." +if {[catch {expr T1()} msg] && $msg eq {invalid command name "tcl::mathfunc::T1"}} { + testConstraint testmathfunctions 0 } else { - set gotT1 1 + testConstraint testmathfunctions 1 } +# Constrain memory leak tests +testConstraint memory [llength [info commands memory]] + catch {unset a} test compExpr-1.1 {TclCompileExpr procedure, successful expr parse and compile} { expr 1+2 } 3 -test compExpr-1.2 {TclCompileExpr procedure, error parsing expr} { - list [catch {expr 1+2+} msg] $msg -} {1 {syntax error in expression "1+2+": premature end of expression}} -test compExpr-1.3 {TclCompileExpr procedure, error compiling expr} { +test compExpr-1.2 {TclCompileExpr procedure, error parsing expr} -body { + expr 1+2+ +} -returnCodes error -match glob -result * +test compExpr-1.3 {TclCompileExpr procedure, error compiling expr} -body { list [catch {expr "foo(123)"} msg] $msg -} {1 {unknown math function "foo"}} +} -match glob -result {1 {* "*foo"}} + test compExpr-1.4 {TclCompileExpr procedure, expr has no operators} { - set a {000123} + set a {0o00123} expr {$a} } 83 @@ -42,9 +44,9 @@ test compExpr-2.1 {CompileSubExpr procedure, TCL_TOKEN_WORD parse token} { set a 27 expr {"foo$a" < "bar"} } 0 -test compExpr-2.2 {CompileSubExpr procedure, error compiling TCL_TOKEN_WORD parse token} { - list [catch {expr {"00[expr 1+]" + 17}} msg] $msg -} {1 {syntax error in expression "1+": premature end of expression}} +test compExpr-2.2 {CompileSubExpr procedure, error compiling TCL_TOKEN_WORD parse token} -body { + expr {"00[expr 1+]" + 17} +} -returnCodes error -match glob -result * test compExpr-2.3 {CompileSubExpr procedure, TCL_TOKEN_TEXT parse token} { expr {{12345}} } 12345 @@ -61,9 +63,9 @@ test compExpr-2.6 {CompileSubExpr procedure, TCL_TOKEN_COMMAND parse token} { test compExpr-2.7 {CompileSubExpr procedure, TCL_TOKEN_COMMAND parse token} { expr {[]} } {} -test compExpr-2.8 {CompileSubExpr procedure, error in TCL_TOKEN_COMMAND parse token} { - list [catch {expr {[foo "bar"xxx] + 17}} msg] $msg -} {1 {extra characters after close-quote}} +test compExpr-2.8 {CompileSubExpr procedure, error in TCL_TOKEN_COMMAND parse token} -body { + expr {[foo "bar"xxx] + 17} +} -returnCodes error -match glob -result * test compExpr-2.9 {CompileSubExpr procedure, TCL_TOKEN_VARIABLE parse token} { catch {unset a} set a 123 @@ -87,16 +89,16 @@ test compExpr-2.13 {CompileSubExpr procedure, error in TCL_TOKEN_SUB_EXPR parse catch {unset a} set a 15 list [catch {expr {27 || "$a[expr 1+]00"}} msg] $msg -} {1 {syntax error in expression "1+": premature end of expression}} +} {0 1} test compExpr-2.14 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, op found} { expr {5*6} } 30 test compExpr-2.15 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, math function found} { format %.6g [expr {sin(2.0)}] } 0.909297 -test compExpr-2.16 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, math function not found} { +test compExpr-2.16 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, math function not found} -body { list [catch {expr {fred(2.0)}} msg] $msg -} {1 {unknown math function "fred"}} +} -match glob -result {1 {* "*fred"}} test compExpr-2.17 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, normal operator} { expr {4*2} } 8 @@ -153,18 +155,18 @@ test compExpr-2.33 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, normal o test compExpr-2.34 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, special operator} { expr {+2} } 2 -test compExpr-2.35 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, error in special operator} { - list [catch {expr {+[expr 1+]}} msg] $msg -} {1 {syntax error in expression "1+": premature end of expression}} +test compExpr-2.35 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, error in special operator} -body { + expr {+[expr 1+]} +} -returnCodes error -match glob -result * test compExpr-2.36 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, special operator} { expr {4+2} } 6 -test compExpr-2.37 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, error in special operator} { - list [catch {expr {[expr 1+]+5}} msg] $msg -} {1 {syntax error in expression "1+": premature end of expression}} -test compExpr-2.38 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, error in special operator} { - list [catch {expr {5+[expr 1+]}} msg] $msg -} {1 {syntax error in expression "1+": premature end of expression}} +test compExpr-2.37 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, error in special operator} -body { + expr {[expr 1+]+5} +} -returnCodes error -match glob -result * +test compExpr-2.38 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, error in special operator} -body { + expr {5+[expr 1+]} +} -returnCodes error -match glob -result * test compExpr-2.39 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, special operator} { expr {-2} } -2 @@ -180,7 +182,7 @@ test compExpr-2.42 {CompileSubExpr procedure, error in TCL_TOKEN_SUB_EXPR parse catch {unset a} set a 15 list [catch {expr {27 || "$a[expr 1+]00"}} msg] $msg -} {1 {syntax error in expression "1+": premature end of expression}} +} {0 1} test compExpr-2.43 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, special operator} { catch {unset a} set a false @@ -195,7 +197,7 @@ test compExpr-2.45 {CompileSubExpr procedure, error in TCL_TOKEN_SUB_EXPR parse catch {unset a} set a 15 list [catch {expr {1? 54 : "$a[expr 1+]00"}} msg] $msg -} {1 {syntax error in expression "1+": premature end of expression}} +} {0 54} test compExpr-3.1 {CompileLandOrLorExpr procedure, numeric 1st operand} { catch {unset a} @@ -207,9 +209,9 @@ test compExpr-3.2 {CompileLandOrLorExpr procedure, nonnumeric 1st operand} { set a no expr {$a&&1} } 0 -test compExpr-3.3 {CompileSubExpr procedure, error in 1st operand} { - list [catch {expr {[expr *2]||0}} msg] $msg -} {1 {syntax error in expression "*2": unexpected operator *}} +test compExpr-3.3 {CompileSubExpr procedure, error in 1st operand} -body { + expr {[expr *2]||0} +} -returnCodes error -match glob -result * test compExpr-3.4 {CompileLandOrLorExpr procedure, result is 1 or 0} { catch {unset a} catch {unset b} @@ -237,9 +239,9 @@ test compExpr-3.8 {CompileLandOrLorExpr procedure, nonnumeric 2nd operand} { set a no expr {1&&$a} } 0 -test compExpr-3.9 {CompileLandOrLorExpr procedure, error in 2nd operand} { - list [catch {expr {0||[expr %2]}} msg] $msg -} {1 {syntax error in expression "%2": unexpected operator %}} +test compExpr-3.9 {CompileLandOrLorExpr procedure, error in 2nd operand} -body { + expr {0||[expr %2]} +} -returnCodes error -match glob -result * test compExpr-3.10 {CompileLandOrLorExpr procedure, long lor/land arm} { set a "abcdefghijkl" set i 7 @@ -256,9 +258,9 @@ test compExpr-4.2 {CompileCondExpr procedure, complex test, convert to numeric} set a no expr {[set a]? 27 : -54} } -54 -test compExpr-4.3 {CompileCondExpr procedure, error in test} { - list [catch {expr {[expr *2]? +1 : -1}} msg] $msg -} {1 {syntax error in expression "*2": unexpected operator *}} +test compExpr-4.3 {CompileCondExpr procedure, error in test} -body { + expr {[expr *2]? +1 : -1} +} -returnCodes error -match glob -result * test compExpr-4.4 {CompileCondExpr procedure, simple "true" clause} { catch {unset a} set a no @@ -269,9 +271,9 @@ test compExpr-4.5 {CompileCondExpr procedure, convert "true" clause to numeric} set a no expr {1? $a : -54} } no -test compExpr-4.6 {CompileCondExpr procedure, error in "true" clause} { - list [catch {expr {1? [expr *2] : -127}} msg] $msg -} {1 {syntax error in expression "*2": unexpected operator *}} +test compExpr-4.6 {CompileCondExpr procedure, error in "true" clause} -body { + expr {1? [expr *2] : -127} +} -returnCodes error -match glob -result * test compExpr-4.7 {CompileCondExpr procedure, simple "false" clause} { catch {unset a} set a no @@ -279,50 +281,83 @@ test compExpr-4.7 {CompileCondExpr procedure, simple "false" clause} { } nope test compExpr-4.8 {CompileCondExpr procedure, convert "false" clause to numeric} { catch {unset a} - set a 00123 + set a 0o0123 expr {0? 42 : $a} } 83 test compExpr-4.9 {CompileCondExpr procedure, error in "false" clause} { list [catch {expr {1? 15 : [expr *2]}} msg] $msg -} {1 {syntax error in expression "*2": unexpected operator *}} +} {0 15} test compExpr-5.1 {CompileMathFuncCall procedure, math function found} { format %.6g [expr atan2(1.0, 2.0)] } 0.463648 -test compExpr-5.2 {CompileMathFuncCall procedure, math function not found} { +test compExpr-5.2 {CompileMathFuncCall procedure, math function not found} -body { list [catch {expr {do_it()}} msg] $msg -} {1 {unknown math function "do_it"}} -if $gotT1 { - test compExpr-5.3 {CompileMathFuncCall: call registered math function} { - expr 3*T1()-1 - } 368 - test compExpr-5.4 {CompileMathFuncCall: call registered math function} { - expr T2()*3 - } 1035 -} -test compExpr-5.5 {CompileMathFuncCall procedure, too few arguments} { +} -match glob -result {1 {* "*do_it"}} +test compExpr-5.3 {CompileMathFuncCall: call registered math function} testmathfunctions { + expr 3*T1()-1 +} 368 +test compExpr-5.4 {CompileMathFuncCall: call registered math function} testmathfunctions { + expr T2()*3 +} 1035 +test compExpr-5.5 {CompileMathFuncCall procedure, too few arguments} -body { list [catch {expr {atan2(1.0)}} msg] $msg -} {1 {too few arguments for math function}} +} -match glob -result {1 {too few arguments for math function*}} test compExpr-5.6 {CompileMathFuncCall procedure, complex argument} { format %.6g [expr pow(2.1, 27.5-(24.4*(5%2)))] } 9.97424 -test compExpr-5.7 {CompileMathFuncCall procedure, error in argument} { - list [catch {expr {sinh(2.*)}} msg] $msg -} {1 {syntax error in expression "sinh(2.*)": unexpected close parenthesis}} -test compExpr-5.8 {CompileMathFuncCall procedure, too many arguments} { +test compExpr-5.7 {CompileMathFuncCall procedure, error in argument} -body { + expr {sinh(2.*)} +} -returnCodes error -match glob -result * +test compExpr-5.8 {CompileMathFuncCall procedure, too many arguments} -body { list [catch {expr {sinh(2.0, 3.0)}} msg] $msg -} {1 {too many arguments for math function}} -test compExpr-5.9 {CompileMathFuncCall procedure, too many arguments} { +} -match glob -result {1 {too many arguments for math function*}} +test compExpr-5.9 {CompileMathFuncCall procedure, too many arguments} -body { list [catch {expr {0 <= rand(5.2)}} msg] $msg -} {1 {too many arguments for math function}} -test compExpr-5.10 {error return from unbraced math func call of unknown function} -body { - expr {bogus()} -} -returnCodes error -result {unknown math function "bogus"} +} -match glob -result {1 {too many arguments for math function*}} + +test compExpr-6.1 {LogSyntaxError procedure, error in expr longer than 60 chars} -body { + expr {(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)/} -1 foo 3 +} -returnCodes error -match glob -result * +test compExpr-7.1 {Memory Leak} -constraints memory -setup { + proc getbytes {} { + set lines [split [memory info] \n] + lindex $lines 3 3 + } +} -body { + set end [getbytes] + for {set i 0} {$i < 5} {incr i} { + interp create slave + slave eval expr 1+2+3+4+5+6+7+8+9+10+11+12+13 + interp delete slave + set tmp $end + set end [getbytes] + } + set leakedBytes [expr {$end - $tmp}] +} -cleanup { + unset end i tmp + rename getbytes {} +} -result 0 -test compExpr-6.1 {LogSyntaxError procedure, error in expr longer than 60 chars} { - list [catch {expr {(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)/} -1 foo 3} msg] $msg -} {1 {syntax error in expression "(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+012...": extra tokens at end of expression}} +test compExpr-7.2 {[Bug 1869989]: expr parser memleak} -constraints memory -setup { + proc getbytes {} { + set lines [split [memory info] \n] + lindex $lines 3 3 + } +} -body { + set i 5 + set end [getbytes] + while {[incr i -1]} { + expr ${i}000 + set tmp $end + set end [getbytes] + } + set leakedBytes [expr {$end - $tmp}] +} -cleanup { + unset end i tmp + rename getbytes {} +} -result 0 # cleanup catch {unset a} diff --git a/tests/compile.test b/tests/compile.test index 9a5339c..7e9dcda 100644 --- a/tests/compile.test +++ b/tests/compile.test @@ -14,6 +14,10 @@ package require tcltest 2 namespace import -force ::tcltest::* +testConstraint exec [llength [info commands exec]] +testConstraint memory [llength [info commands memory]] +testConstraint testevalex [llength [info commands testevalex]] + # The following tests are very incomplete, although the rest of the # test suite covers this file fairly well. @@ -112,7 +116,6 @@ test compile-3.4 {TclCompileCatchCmd: bcc'ed [return] is caught} { } foo } {2} - test compile-3.5 {TclCompileCatchCmd: recover from error, [Bug 705406]} { proc foo {} { catch { @@ -123,6 +126,36 @@ test compile-3.5 {TclCompileCatchCmd: recover from error, [Bug 705406]} { } list [catch foo msg] $msg } {0 1} +test compile-3.6 {TclCompileCatchCmd: error in storing result [Bug 3098302]} {*}{ + -setup { + namespace eval catchtest { + variable result1 {} + } + trace add variable catchtest::result1 write catchtest::failtrace + proc catchtest::failtrace {n1 n2 op} { + return -code error "trace on $n1 fails by request" + } + } + -body { + proc catchtest::x {} { + variable result1 + set count 0 + for {set i 0} {$i < 10} {incr i} { + set status2 [catch { + set status1 [catch { + return -code error -level 0 "original failure" + } result1 options1] + } result2 options2] + incr count + } + list $count $result2 + } + catchtest::x + } + -result {10 {can't set "result1": trace on result1 fails by request}} + -cleanup {namespace delete catchtest} +} + test compile-4.1 {TclCompileForCmd: command substituted test expression} { set i 0 @@ -231,35 +264,35 @@ test compile-11.1 {Tcl_Append*: ensure Tcl_ResetResult is used properly} { lindex a bogus } list [catch {p} msg] $msg -} {1 {bad index "bogus": must be integer or end?-integer?}} +} {1 {bad index "bogus": must be integer?[+-]integer? or end?[+-]integer?}} test compile-11.2 {Tcl_Append*: ensure Tcl_ResetResult is used properly} { proc p {} { set r [list foobar] ; string index a bogus } list [catch {p} msg] $msg -} {1 {bad index "bogus": must be integer or end?-integer?}} -test compile-11.3 {Tcl_Append*: ensure Tcl_ResetResult is used properly} { - proc p {} { set r [list foobar] ; string index a 09 } +} {1 {bad index "bogus": must be integer?[+-]integer? or end?[+-]integer?}} +test compile-11.3 {Tcl_Append*: ensure Tcl_ResetResult is used properly} -body { + proc p {} { set r [list foobar] ; string index a 0o9 } list [catch {p} msg] $msg -} {1 {bad index "09": must be integer or end?-integer? (looks like invalid octal number)}} +} -match glob -result {1 {*invalid octal number*}} test compile-11.4 {Tcl_Append*: ensure Tcl_ResetResult is used properly} { proc p {} { set r [list foobar] ; array set var {one two many} } list [catch {p} msg] $msg } {1 {list must have an even number of elements}} test compile-11.5 {Tcl_Append*: ensure Tcl_ResetResult is used properly} { - proc p {} { set r [list foobar] ; incr foo } + proc p {} { set r [list foobar] ; incr foo bar baz} list [catch {p} msg] $msg -} {1 {can't read "foo": no such variable}} +} {1 {wrong # args: should be "incr varName ?increment?"}} test compile-11.6 {Tcl_Append*: ensure Tcl_ResetResult is used properly} { - proc p {} { set r [list foobar] ; incr foo bogus } + proc p {} { set r [list foobar] ; incr} list [catch {p} msg] $msg -} {1 {expected integer but got "bogus"}} -test compile-11.7 {Tcl_Append*: ensure Tcl_ResetResult is used properly} { +} {1 {wrong # args: should be "incr varName ?increment?"}} +test compile-11.7 {Tcl_Append*: ensure Tcl_ResetResult is used properly} -body { proc p {} { set r [list foobar] ; expr !a } - list [catch {p} msg] $msg -} {1 {syntax error in expression "!a": variable references require preceding $}} -test compile-11.8 {Tcl_Append*: ensure Tcl_ResetResult is used properly} { + p +} -returnCodes error -match glob -result * +test compile-11.8 {Tcl_Append*: ensure Tcl_ResetResult is used properly} -body { proc p {} { set r [list foobar] ; expr {!a} } - list [catch {p} msg] $msg -} {1 {syntax error in expression "!a": variable references require preceding $}} + p +} -returnCodes error -match glob -result * test compile-11.9 {Tcl_Append*: ensure Tcl_ResetResult is used properly} { proc p {} { set r [list foobar] ; llength "\{" } list [catch {p} msg] $msg @@ -271,16 +304,13 @@ test compile-11.9 {Tcl_Append*: ensure Tcl_ResetResult is used properly} { # TclReleaseLiteral. They are only effective when tcl is compiled # with TCL_MEM_DEBUG # -# Special test for leak on interp delete [Bug 467523]. -::tcltest::testConstraint exec [llength [info commands exec]] -::tcltest::testConstraint memDebug [llength [info commands memory]] - -test compile-12.1 {testing literal leak on interp delete} {memDebug} { +# Special test for leak on interp delete [Bug 467523]. +test compile-12.1 {testing literal leak on interp delete} -setup { proc getbytes {} { set lines [split [memory info] "\n"] - lindex [lindex $lines 3] 3 + lindex $lines 3 3 } - +} -constraints memory -body { set end [getbytes] for {set i 0} {$i < 5} {incr i} { interp create foo @@ -290,36 +320,37 @@ test compile-12.1 {testing literal leak on interp delete} {memDebug} { interp delete foo set tmp $end set end [getbytes] - } + } + set leakedBytes [expr {$end - $tmp}] +} -cleanup { rename getbytes {} - set leak [expr {$end - $tmp}] -} 0 + unset -nocomplain end i tmp leakedBytes +} -result 0 # Special test for a memory error in a preliminary fix of [Bug 467523]. # It requires executing a helpfile. Presumably the child process is # used because when this test fails, it crashes. -test compile-12.2 {testing error on literal deletion} {memDebug exec} { - makeFile { +test compile-12.2 {testing error on literal deletion} -constraints {memory exec} -body { + set sourceFile [makeFile { for {set i 0} {$i < 5} {incr i} { namespace eval bar {} namespace delete bar } puts 0 - } source.file - set res [catch { - exec [interpreter] source.file - }] - catch {removeFile source.file} - set res -} 0 + } source.file] + exec [interpreter] $sourceFile +} -cleanup { + catch {removeFile $sourceFile} +} -result 0 # Test to catch buffer overrun in TclCompileTokens from buf 530320 -test compile-12.3 {check for a buffer overrun} { +test compile-12.3 {check for a buffer overrun} -body { proc crash {} { puts $array([expr {a+2}]) } - list [catch crash msg] $msg -} {1 {syntax error in expression "a+2": variable references require preceding $}} - -test compile-12.4 {TclCleanupLiteralTable segfault} { + crash +} -returnCodes error -cleanup { + rename crash {} +} -match glob -result * +test compile-12.4 {TclCleanupLiteralTable segfault} -body { # Tcl Bug 1001997 # Here, we're trying to test a case that causes a crash in # TclCleanupLiteralTable. The conditions that we're trying to @@ -346,36 +377,37 @@ test compile-12.4 {TclCleanupLiteralTable segfault} { # (c) Delete the interpreter to invoke TclCleanupLiteralTable # and tickle the bug. proc foo {} { - set i [interp create] - $i eval { - namespace eval ::w {concat 4649; variable bugbug} - namespace eval ::w { - concat x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 \ - x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 \ - x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 \ - x31 x32 X33 X34 X35 X36 X37 X38 X39 X40 \ - x41 x42 x43 x44 x45 x46 x47 x48 x49 x50 \ - x51 x52 x53 x54 x55 x56 x57 x58 x59 x60 \ - x61 x62 x63 x64 - concat y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 \ - y11 y12 y13 y14 y15 y16 y17 y18 y19 y20 \ - y21 y22 y23 y24 y25 y26 y27 y28 y29 y30 \ - y31 y32 Y33 Y34 Y35 Y36 Y37 Y38 Y39 Y40 \ - y41 y42 y43 y44 y45 y46 y47 y48 y49 y50 \ - y51 y52 y53 y54 y55 y56 y57 y58 y59 y60 \ - y61 y62 y63 y64 - concat z1 z2 z3 z4 z5 z6 z7 z8 z9 z10 \ - z11 z12 z13 z14 z15 z16 z17 z18 z19 z20 \ - z21 z22 z23 z24 z25 z26 z27 z28 z29 z30 \ - z31 z32 - } - } - interp delete $i; # must not crash - return ok + set i [interp create] + $i eval { + namespace eval ::w {concat 4649; variable bugbug} + namespace eval ::w { + concat x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 \ + x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 \ + x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 \ + x31 x32 X33 X34 X35 X36 X37 X38 X39 X40 \ + x41 x42 x43 x44 x45 x46 x47 x48 x49 x50 \ + x51 x52 x53 x54 x55 x56 x57 x58 x59 x60 \ + x61 x62 x63 x64 + concat y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 \ + y11 y12 y13 y14 y15 y16 y17 y18 y19 y20 \ + y21 y22 y23 y24 y25 y26 y27 y28 y29 y30 \ + y31 y32 Y33 Y34 Y35 Y36 Y37 Y38 Y39 Y40 \ + y41 y42 y43 y44 y45 y46 y47 y48 y49 y50 \ + y51 y52 y53 y54 y55 y56 y57 y58 y59 y60 \ + y61 y62 y63 y64 + concat z1 z2 z3 z4 z5 z6 z7 z8 z9 z10 \ + z11 z12 z13 z14 z15 z16 z17 z18 z19 z20 \ + z21 z22 z23 z24 z25 z26 z27 z28 z29 z30 \ + z31 z32 + } + } + interp delete $i; # must not crash + return ok } foo -} ok - +} -cleanup { + rename foo {} +} -result ok # Special test for underestimating the maxStackSize required for a # compiled command. A failure will cause a segfault in the child @@ -398,7 +430,7 @@ test compile-14.1 {testing errors in element name; segfault?} {} { list $msg1 $msg2 } {{wrong # args: should be "error message ?errorInfo? ?errorCode?"} {can't read "abba": no such variable}} -# Next 4 tests cover Tcl Bug 633204 +# Tests compile-15.* cover Tcl Bug 633204 test compile-15.1 {proper TCL_RETURN code from [return]} { proc p {} {catch return} set result [p] @@ -430,6 +462,174 @@ test compile-15.5 {proper TCL_RETURN code from [return]} { set result } "" +for {set noComp 0} {$noComp <= 1} {incr noComp} { + +if $noComp { + interp alias {} run {} testevalex + set constraints testevalex +} else { + interp alias {} run {} if 1 + set constraints {} +} + +test compile-16.1.$noComp {TclCompileScript: word expansion} $constraints { + run "list [string repeat {{*}a } 255]" +} [lrepeat 255 a] +test compile-16.2.$noComp {TclCompileScript: word expansion} $constraints { + run "list [string repeat {{*}a } 256]" +} [lrepeat 256 a] +test compile-16.3.$noComp {TclCompileScript: word expansion} $constraints { + run "list [string repeat {{*}a } 257]" +} [lrepeat 257 a] +test compile-16.4.$noComp {TclCompileScript: word expansion} $constraints { + run {{*}list} +} {} +test compile-16.5.$noComp {TclCompileScript: word expansion} $constraints { + run {{*}list {*}{x y z}} +} {x y z} +test compile-16.6.$noComp {TclCompileScript: word expansion} $constraints { + run {{*}list {*}[list x y z]} +} {x y z} +test compile-16.7.$noComp {TclCompileScript: word expansion} $constraints { + run {{*}list {*}[list x y z][list x y z]} +} {x y zx y z} +test compile-16.8.$noComp {TclCompileScript: word expansion} -body { + set l {x y z} + run {{*}list {*}$l} +} -constraints $constraints -cleanup { + unset l +} -result {x y z} +test compile-16.9.$noComp {TclCompileScript: word expansion} -body { + set l {x y z} + run {{*}list {*}$l$l} +} -constraints $constraints -cleanup { + unset l +} -result {x y zx y z} +test compile-16.10.$noComp {TclCompileScript: word expansion} -body { + run {{*}\{} +} -constraints $constraints -returnCodes error \ +-result {unmatched open brace in list} +test compile-16.11.$noComp {TclCompileScript: word expansion} -body { + proc badList {} {return \{} + run {{*}[badList]} +} -constraints $constraints -cleanup { + rename badList {} +} -returnCodes error -result {unmatched open brace in list} +test compile-16.12.$noComp {TclCompileScript: word expansion} $constraints { + run {{*}list x y z} +} {x y z} +test compile-16.13.$noComp {TclCompileScript: word expansion} $constraints { + run {{*}list x y {*}z} +} {x y z} +test compile-16.14.$noComp {TclCompileScript: word expansion} $constraints { + run {{*}list x {*}y z} +} {x y z} +test compile-16.15.$noComp {TclCompileScript: word expansion} $constraints { + run {list x y {*}z} +} {x y z} +test compile-16.16.$noComp {TclCompileScript: word expansion} $constraints { + run {list x {*}y z} +} {x y z} +test compile-16.17.$noComp {TclCompileScript: word expansion} $constraints { + run {list {*}x y z} +} {x y z} + +# These tests note that expansion can in theory cause the number of +# arguments to a command to exceed INT_MAX, which is as big as objc +# is allowed to get. +# +# In practice, it seems we will run out of memory before we confront +# this issue. Note that compiled operations run out of memory at +# smaller objc values than direct string evaluation. +# +# These tests are constrained as knownBug because they are likely +# to cause memory allocation panics somewhere, and we don't want +# panics in the test suite. +# +test compile-16.18.$noComp {TclCompileScript: word expansion} -body { + proc LongList {} {return [lrepeat [expr {1<<10}] x]} + llength [run "list [string repeat {{*}[LongList] } [expr {1<<10}]]"] +} -constraints [linsert $constraints 0 knownBug] -cleanup { + rename LongList {} +} -returnCodes ok -result [expr {1<<20}] +test compile-16.19.$noComp {TclCompileScript: word expansion} -body { + proc LongList {} {return [lrepeat [expr {1<<11}] x]} + llength [run "list [string repeat {{*}[LongList] } [expr {1<<11}]]"] +} -constraints [linsert $constraints 0 knownBug] -cleanup { + rename LongList {} +} -returnCodes ok -result [expr {1<<22}] +test compile-16.20.$noComp {TclCompileScript: word expansion} -body { + proc LongList {} {return [lrepeat [expr {1<<12}] x]} + llength [run "list [string repeat {{*}[LongList] } [expr {1<<12}]]"] +} -constraints [linsert $constraints 0 knownBug] -cleanup { + rename LongList {} +} -returnCodes ok -result [expr {1<<24}] +# This is the one that should cause overflow +test compile-16.21.$noComp {TclCompileScript: word expansion} -body { + proc LongList {} {return [lrepeat [expr {1<<16}] x]} + llength [run "list [string repeat {{*}[LongList] } [expr {1<<16}]]"] +} -constraints [linsert $constraints 0 knownBug] -cleanup { + rename LongList {} +} -returnCodes ok -result [expr {wide(1)<<32}] +test compile-16.22.$noComp { + Bug 845412: TclCompileScript: word expansion not mandatory +} -body { + # This test may crash and will fail unless Bug 845412 is fixed. + proc ReturnResults args {return $args} + run "ReturnResults [string repeat {x } 260]" +} -constraints $constraints -cleanup { + rename ReturnResults {} +} -returnCodes ok -result [string trim [string repeat {x } 260]] +test compile-16.23.$noComp { + Bug 1032805: defer parse error until run time +} -constraints $constraints -body { + namespace eval x { + run { + proc if {a b} {uplevel 1 [list set $a $b]} + if 1 {syntax {}{}} + } + } +} -cleanup { + namespace delete x +} -returnCodes ok -result {syntax {}{}} +test compile-16.24.$noComp { + Bug 1638414: bad list constant as first expanded term +} -constraints $constraints -body { + run "{*}\"\{foo bar\"" +} -returnCodes error -result {unmatched open brace in list} +} ;# End of noComp loop + +# These tests are messy because it wrecks the interpreter it runs in! +# They demonstrate issues arising from [FRQ 1101710] +test compile-17.1 {Command interpretation binding for compiled code} -constraints knownBug -setup { + set i [interp create] +} -body { + $i eval { + if 1 { + expr [ + proc expr args {return substituted} + format {[subst compiled]} + ] + } + } +} -cleanup { + interp delete $i +} -result substituted +test compile-17.2 {Command interpretation binding for non-compiled code} -setup { + set i [interp create] +} -body { + $i eval { + if 1 { + [subst expr] [ + proc expr args {return substituted} + format {[subst compiled]} + ] + } + } +} -cleanup { + interp delete $i +} -result substituted + # cleanup catch {rename p ""} catch {namespace delete test_ns_compile} diff --git a/tests/concat.test b/tests/concat.test index 82a8965..c95e116 100644 --- a/tests/concat.test +++ b/tests/concat.test @@ -50,15 +50,3 @@ test concat-4.3 {pruning off extra white space sets length correctly} { # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/config.test b/tests/config.test new file mode 100644 index 0000000..c0a56b7 --- /dev/null +++ b/tests/config.test @@ -0,0 +1,60 @@ +# -*- tcl -*- +# Commands covered: pkgconfig +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. +# +# Copyright (c) 1991-1993 The Regents of the University of California. +# Copyright (c) 1994-1996 Sun Microsystems, Inc. +# Copyright (c) 1998-1999 by Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest + namespace import -force ::tcltest::* +} + +test pkgconfig-1.1 {query keys} { + lsort [::tcl::pkgconfig list] +} {64bit bindir,install bindir,runtime compile_debug compile_stats debug docdir,install docdir,runtime includedir,install includedir,runtime libdir,install libdir,runtime mem_debug optimized profiled scriptdir,install scriptdir,runtime threaded} +test pkgconfig-1.2 {query keys multiple times} { + string compare [::tcl::pkgconfig list] [::tcl::pkgconfig list] +} 0 +test pkgconfig-1.3 {query value multiple times} { + string compare \ + [::tcl::pkgconfig get bindir,install] \ + [::tcl::pkgconfig get bindir,install] +} 0 + + +test pkgconfig-2.0 {error: missing subcommand} { + catch {::tcl::pkgconfig} msg + set msg +} {wrong # args: should be "::tcl::pkgconfig subcommand ?argument?"} +test pkgconfig-2.1 {error: illegal subcommand} { + catch {::tcl::pkgconfig foo} msg + set msg +} {bad subcommand "foo": must be get or list} +test pkgconfig-2.2 {error: list with arguments} { + catch {::tcl::pkgconfig list foo} msg + set msg +} {wrong # args: should be "::tcl::pkgconfig list"} +test pkgconfig-2.3 {error: get without arguments} { + catch {::tcl::pkgconfig get} msg + set msg +} {wrong # args: should be "::tcl::pkgconfig get key"} +test pkgconfig-2.4 {error: query unknown key} { + catch {::tcl::pkgconfig get foo} msg + set msg +} {key not known} +test pkgconfig-2.5 {error: query with to many arguments} { + catch {::tcl::pkgconfig get foo bar} msg + set msg +} {wrong # args: should be "::tcl::pkgconfig subcommand ?argument?"} + +# cleanup +::tcltest::cleanupTests +return diff --git a/tests/dcall.test b/tests/dcall.test index 4bbcfbe..8977c31 100644 --- a/tests/dcall.test +++ b/tests/dcall.test @@ -16,44 +16,27 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -if {[info commands testdcall] == {}} { - puts "This application hasn't been compiled with the \"testdcall\"" - puts "command, so I can't test Tcl_CallWhenDeleted." - ::tcltest::cleanupTests - return -} +testConstraint testdcall [llength [info commands testdcall]] -test dcall-1.1 {deletion callbacks} { +test dcall-1.1 {deletion callbacks} testdcall { lsort -increasing [testdcall 1 2 3] } {1 2 3} -test dcall-1.2 {deletion callbacks} { +test dcall-1.2 {deletion callbacks} testdcall { testdcall } {} -test dcall-1.3 {deletion callbacks} { +test dcall-1.3 {deletion callbacks} testdcall { lsort -increasing [testdcall 20 21 22 -22] } {20 21} -test dcall-1.4 {deletion callbacks} { +test dcall-1.4 {deletion callbacks} testdcall { lsort -increasing [testdcall 20 21 22 -20] } {21 22} -test dcall-1.5 {deletion callbacks} { +test dcall-1.5 {deletion callbacks} testdcall { lsort -increasing [testdcall 20 21 22 -21] } {20 22} -test dcall-1.6 {deletion callbacks} { +test dcall-1.6 {deletion callbacks} testdcall { lsort -increasing [testdcall 20 21 22 -21 -22 -20] } {} # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/dict.test b/tests/dict.test new file mode 100644 index 0000000..b92893e --- /dev/null +++ b/tests/dict.test @@ -0,0 +1,1254 @@ +# This test file covers the dictionary object type and the dict +# command used to work with values of that type. +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. +# +# Copyright (c) 2003 Donal K. Fellows +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest 2 + namespace import -force ::tcltest::* +} + +# Used for constraining memory leak tests +testConstraint memory [llength [info commands memory]] +if {[testConstraint memory]} { + proc memtest script { + set end [lindex [split [memory info] \n] 3 3] + for {set i 0} {$i < 5} {incr i} { + uplevel 1 $script + set tmp $end + set end [lindex [split [memory info] \n] 3 3] + } + expr {$end - $tmp} + } +} + +# Procedure to help check the contents of a dictionary. Note that we +# can't just compare the string version because the order of the +# elements is (deliberately) not defined. This is because it is +# dependent on the underlying hash table implementation and also +# potentially on the history of the value itself. Net result: you +# cannot safely assume anything about the ordering of values. +proc getOrder {dictVal args} { + foreach key $args { + lappend result $key [dict get $dictVal $key] + } + lappend result [dict size $dictVal] + return $result +} + +test dict-1.1 {dict command basic syntax} { + list [catch {dict} msg] $msg +} {1 {wrong # args: should be "dict subcommand ?argument ...?"}} +test dict-1.2 {dict command basic syntax} { + list [catch {dict ?} msg] $msg +} {1 {unknown or ambiguous subcommand "?": must be append, create, exists, filter, for, get, incr, info, keys, lappend, merge, remove, replace, set, size, unset, update, values, or with}} + +test dict-2.1 {dict create command} { + dict create +} {} +test dict-2.2 {dict create command} { + dict create a b +} {a b} +test dict-2.3 {dict create command} { + set result {} + set dict [dict create a b c d] + # Can't compare directly as ordering of values is undefined + foreach key {a c} { + set idx [lsearch -exact $dict $key] + if {$idx & 1} { + error "found $key at odd index $idx in $dict" + } + lappend result [lindex $dict [expr {$idx+1}]] + } + set result +} {b d} +test dict-2.4 {dict create command} { + list [catch {dict create a} msg] $msg +} {1 {wrong # args: should be "dict create ?key value ...?"}} +test dict-2.5 {dict create command} { + list [catch {dict create a b c} msg] $msg +} {1 {wrong # args: should be "dict create ?key value ...?"}} +test dict-2.6 {dict create command - initialse refcount field!} { + # Bug 715751 will show up in memory debuggers like purify + for {set i 0} {$i<10} {incr i} { + set dictv [dict create a 0] + set share [dict values $dictv] + list [dict incr dictv a] + } +} {} +test dict-2.7 {dict create command - #-quoting in string rep} { + dict create # #comment +} {{#} #comment} +test dict-2.8 {dict create command - #-quoting in string rep} -body { + dict create #a x #b x +} -match glob -result {{#?} x #? x} + +test dict-3.1 {dict get command} {dict get {a b} a} b +test dict-3.2 {dict get command} {dict get {a b c d} a} b +test dict-3.3 {dict get command} {dict get {a b c d} c} d +test dict-3.4 {dict get command} { + list [catch {dict get {a b c d} b} msg] $msg +} {1 {key "b" not known in dictionary}} +test dict-3.5 {dict get command} {dict get {a {p q r s} b {u v x y}} a p} q +test dict-3.6 {dict get command} {dict get {a {p q r s} b {u v x y}} a r} s +test dict-3.7 {dict get command} {dict get {a {p q r s} b {u v x y}} b u} v +test dict-3.8 {dict get command} {dict get {a {p q r s} b {u v x y}} b x} y +test dict-3.9 {dict get command} { + list [catch {dict get {a {p q r s} b {u v x y}} a z} msg] $msg +} {1 {key "z" not known in dictionary}} +test dict-3.10 {dict get command} { + list [catch {dict get {a {p q r s} b {u v x y}} c z} msg] $msg +} {1 {key "c" not known in dictionary}} +test dict-3.11 {dict get command} {dict get [dict create a b c d] a} b +test dict-3.12 {dict get command} { + list [catch {dict get} msg] $msg +} {1 {wrong # args: should be "dict get dictionary ?key key ...?"}} +test dict-3.13 {dict get command} { + set dict [dict get {a b c d}] + if {$dict eq "a b c d"} { + subst OK + } elseif {$dict eq "c d a b"} { + subst OK + } else { + set dict + } +} OK +test dict-3.14 {dict get command} { + list [catch {dict get {a b c d} a c} msg] $msg +} {1 {missing value to go with key}} +test dict-3.15 {compiled dict get error cleanliness - Bug 2431847} -body { + apply {{} { + dict set a(z) b c + dict get $a(z) d + }} +} -returnCodes error -result {key "d" not known in dictionary} +test dict-3.16 {dict/list shimmering - Bug 3004007} {set l [list p 1 p 2 q 3];dict get $l q;set l} {p 1 p 2 q 3} +test dict-3.17 {dict/list shimmering - Bug 3004007} {set l [list p 1 p 2 q 3];dict get $l q;llength $l} 6 + +test dict-4.1 {dict replace command} { + getOrder [dict replace {a b c d}] a c +} {a b c d 2} +test dict-4.2 {dict replace command} { + getOrder [dict replace {a b c d} e f] a c e +} {a b c d e f 3} +test dict-4.3 {dict replace command} { + getOrder [dict replace {a b c d} c f] a c +} {a b c f 2} +test dict-4.4 {dict replace command} { + getOrder [dict replace {a b c d} c x a y] a c +} {a y c x 2} +test dict-4.5 {dict replace command} { + list [catch {dict replace} msg] $msg +} {1 {wrong # args: should be "dict replace dictionary ?key value ...?"}} +test dict-4.6 {dict replace command} { + list [catch {dict replace {a a} a} msg] $msg +} {1 {wrong # args: should be "dict replace dictionary ?key value ...?"}} +test dict-4.7 {dict replace command} { + list [catch {dict replace {a a a} a b} msg] $msg +} {1 {missing value to go with key}} +test dict-4.8 {dict replace command} { + list [catch {dict replace [list a a a] a b} msg] $msg +} {1 {missing value to go with key}} +test dict-4.9 {dict replace command} {dict replace [list a a] a b} {a b} +test dict-4.10 {dict replace command} {dict replace [list a a] a b a c} {a c} + +test dict-5.1 {dict remove command} {dict remove {a b c d} a} {c d} +test dict-5.2 {dict remove command} {dict remove {a b c d} c} {a b} +test dict-5.3 {dict remove command} {dict remove {a b c d} a c} {} +test dict-5.4 {dict remove command} {dict remove {a b c d} c a} {} +test dict-5.5 {dict remove command} { + getOrder [dict remove {a b c d}] a c +} {a b c d 2} +test dict-5.6 {dict remove command} {dict remove {a b} c} {a b} +test dict-5.7 {dict remove command} { + list [catch {dict remove} msg] $msg +} {1 {wrong # args: should be "dict remove dictionary ?key ...?"}} + +test dict-6.1 {dict keys command} {dict keys {a b}} a +test dict-6.2 {dict keys command} {dict keys {c d}} c +test dict-6.3 {dict keys command} {lsort [dict keys {a b c d}]} {a c} +test dict-6.4 {dict keys command} {dict keys {a b c d} a} a +test dict-6.5 {dict keys command} {dict keys {a b c d} c} c +test dict-6.6 {dict keys command} {dict keys {a b c d} e} {} +test dict-6.7 {dict keys command} {lsort [dict keys {a b c d ca da} c*]} {c ca} +test dict-6.8 {dict keys command} { + list [catch {dict keys} msg] $msg +} {1 {wrong # args: should be "dict keys dictionary ?pattern?"}} +test dict-6.9 {dict keys command} { + list [catch {dict keys {} a b} msg] $msg +} {1 {wrong # args: should be "dict keys dictionary ?pattern?"}} +test dict-6.10 {dict keys command} { + list [catch {dict keys a} msg] $msg +} {1 {missing value to go with key}} + +test dict-7.1 {dict values command} {dict values {a b}} b +test dict-7.2 {dict values command} {dict values {c d}} d +test dict-7.3 {dict values command} {lsort [dict values {a b c d}]} {b d} +test dict-7.4 {dict values command} {dict values {a b c d} b} b +test dict-7.5 {dict values command} {dict values {a b c d} d} d +test dict-7.6 {dict values command} {dict values {a b c d} e} {} +test dict-7.7 {dict values command} {lsort [dict values {a b c d ca da} d*]} {d da} +test dict-7.8 {dict values command} { + list [catch {dict values} msg] $msg +} {1 {wrong # args: should be "dict values dictionary ?pattern?"}} +test dict-7.9 {dict values command} { + list [catch {dict values {} a b} msg] $msg +} {1 {wrong # args: should be "dict values dictionary ?pattern?"}} +test dict-7.10 {dict values command} { + list [catch {dict values a} msg] $msg +} {1 {missing value to go with key}} + +test dict-8.1 {dict size command} {dict size {}} 0 +test dict-8.2 {dict size command} {dict size {a b}} 1 +test dict-8.3 {dict size command} {dict size {a b c d}} 2 +test dict-8.4 {dict size command} { + list [catch {dict size} msg] $msg +} {1 {wrong # args: should be "dict size dictionary"}} +test dict-8.5 {dict size command} { + list [catch {dict size a b} msg] $msg +} {1 {wrong # args: should be "dict size dictionary"}} +test dict-8.6 {dict size command} { + list [catch {dict size a} msg] $msg +} {1 {missing value to go with key}} + +test dict-9.1 {dict exists command} {dict exists {a b} a} 1 +test dict-9.2 {dict exists command} {dict exists {a b} b} 0 +test dict-9.3 {dict exists command} {dict exists {a {b c}} a b} 1 +test dict-9.4 {dict exists command} {dict exists {a {b c}} a c} 0 +test dict-9.5 {dict exists command} {dict exists {a {b c}} b c} 0 +test dict-9.6 {dict exists command} {dict exists {a {b c d}} a c} 0 +test dict-9.7 {dict exists command} { + list [catch {dict exists} msg] $msg +} {1 {wrong # args: should be "dict exists dictionary key ?key ...?"}} +test dict-9.8 {dict exists command} { + list [catch {dict exists {}} msg] $msg +} {1 {wrong # args: should be "dict exists dictionary key ?key ...?"}} + +test dict-10.1 {dict info command} { + # Actual string returned by this command is undefined; it is + # intended for human consumption and not for use by scripts. + dict info {} + subst {} +} {} +test dict-10.2 {dict info command} { + list [catch {dict info} msg] $msg +} {1 {wrong # args: should be "dict info dictionary"}} +test dict-10.3 {dict info command} { + list [catch {dict info {} x} msg] $msg +} {1 {wrong # args: should be "dict info dictionary"}} +test dict-10.4 {dict info command} { + list [catch {dict info x} msg] $msg +} {1 {missing value to go with key}} + +test dict-11.1 {dict incr command: unshared value} { + set dictv [dict create \ + a [string index "=0=" 1] \ + b [expr {1+2}] \ + c [expr {wide(0x80000000)+1}]] + getOrder [dict incr dictv a] a b c +} {a 1 b 3 c 2147483649 3} +test dict-11.2 {dict incr command: unshared value} { + set dictv [dict create \ + a [string index "=0=" 1] \ + b [expr {1+2}] \ + c [expr {wide(0x80000000)+1}]] + getOrder [dict incr dictv b] a b c +} {a 0 b 4 c 2147483649 3} +test dict-11.3 {dict incr command: unshared value} { + set dictv [dict create \ + a [string index "=0=" 1] \ + b [expr {1+2}] \ + c [expr {wide(0x80000000)+1}]] + getOrder [dict incr dictv c] a b c +} {a 0 b 3 c 2147483650 3} +test dict-11.4 {dict incr command: shared value} { + set dictv [dict create a 0 b [expr {1+2}] c [expr {wide(0x80000000)+1}]] + set sharing [dict values $dictv] + getOrder [dict incr dictv a] a b c +} {a 1 b 3 c 2147483649 3} +test dict-11.5 {dict incr command: shared value} { + set dictv [dict create a 0 b [expr {1+2}] c [expr {wide(0x80000000)+1}]] + set sharing [dict values $dictv] + getOrder [dict incr dictv b] a b c +} {a 0 b 4 c 2147483649 3} +test dict-11.6 {dict incr command: shared value} { + set dictv [dict create a 0 b [expr {1+2}] c [expr {wide(0x80000000)+1}]] + set sharing [dict values $dictv] + getOrder [dict incr dictv c] a b c +} {a 0 b 3 c 2147483650 3} +test dict-11.7 {dict incr command: unknown values} { + set dictv [dict create a 0 b [expr {1+2}] c [expr {wide(0x80000000)+1}]] + getOrder [dict incr dictv d] a b c d +} {a 0 b 3 c 2147483649 d 1 4} +test dict-11.8 {dict incr command} { + set dictv {a 1} + dict incr dictv a 2 +} {a 3} +test dict-11.9 {dict incr command} { + set dictv {a dummy} + list [catch {dict incr dictv a} msg] $msg +} {1 {expected integer but got "dummy"}} +test dict-11.10 {dict incr command} { + set dictv {a 1} + list [catch {dict incr dictv a dummy} msg] $msg +} {1 {expected integer but got "dummy"}} +test dict-11.11 {dict incr command} { + catch {unset dictv} + dict incr dictv a +} {a 1} +test dict-11.12 {dict incr command} { + set dictv a + list [catch {dict incr dictv a} msg] $msg +} {1 {missing value to go with key}} +test dict-11.13 {dict incr command} { + set dictv a + list [catch {dict incr dictv a a a} msg] $msg +} {1 {wrong # args: should be "dict incr varName key ?increment?"}} +test dict-11.14 {dict incr command} { + set dictv a + list [catch {dict incr dictv} msg] $msg +} {1 {wrong # args: should be "dict incr varName key ?increment?"}} +test dict-11.15 {dict incr command: write failure} { + catch {unset dictVar} + set dictVar(block) {} + set result [list [catch {dict incr dictVar a} msg] $msg] + catch {unset dictVar} + set result +} {1 {can't set "dictVar": variable is array}} +test dict-11.16 {dict incr command: compilation} { + proc dicttest {} { + set v {a 0 b 0 c 0} + dict incr v a + dict incr v b 1 + dict incr v c 2 + dict incr v d 3 + list [dict get $v a] [dict get $v b] [dict get $v c] [dict get $v d] + } + dicttest +} {1 1 2 3} +test dict-11.17 {dict incr command: compilation} { + proc dicttest {} { + set dictv {a 1} + dict incr dictv a 2 + } + dicttest +} {a 3} + +test dict-12.1 {dict lappend command} { + set dictv {a a} + dict lappend dictv a +} {a a} +test dict-12.2 {dict lappend command} { + set dictv {a a} + set sharing [dict values $dictv] + dict lappend dictv a b +} {a {a b}} +test dict-12.3 {dict lappend command} { + set dictv {a a} + dict lappend dictv a b c +} {a {a b c}} +test dict-12.2.1 {dict lappend command} { + set dictv [dict create a [string index =a= 1]] + dict lappend dictv a b +} {a {a b}} +test dict-12.4 {dict lappend command} { + set dictv {} + dict lappend dictv a x y z +} {a {x y z}} +test dict-12.5 {dict lappend command} { + catch {unset dictv} + dict lappend dictv a b +} {a b} +test dict-12.6 {dict lappend command} { + set dictv a + list [catch {dict lappend dictv a a} msg] $msg +} {1 {missing value to go with key}} +test dict-12.7 {dict lappend command} { + list [catch {dict lappend} msg] $msg +} {1 {wrong # args: should be "dict lappend varName key ?value ...?"}} +test dict-12.8 {dict lappend command} { + list [catch {dict lappend dictv} msg] $msg +} {1 {wrong # args: should be "dict lappend varName key ?value ...?"}} +test dict-12.9 {dict lappend command} { + set dictv [dict create a "\{"] + list [catch {dict lappend dictv a a} msg] $msg +} {1 {unmatched open brace in list}} +test dict-12.10 {dict lappend command: write failure} { + catch {unset dictVar} + set dictVar(block) {} + set result [list [catch {dict lappend dictVar a x} msg] $msg] + catch {unset dictVar} + set result +} {1 {can't set "dictVar": variable is array}} + +test dict-13.1 {dict append command} { + set dictv {a a} + dict append dictv a +} {a a} +test dict-13.2 {dict append command} { + set dictv {a a} + set sharing [dict values $dictv] + dict append dictv a b +} {a ab} +test dict-13.3 {dict append command} { + set dictv {a a} + dict append dictv a b c +} {a abc} +test dict-13.2.1 {dict append command} { + set dictv [dict create a [string index =a= 1]] + dict append dictv a b +} {a ab} +test dict-13.4 {dict append command} { + set dictv {} + dict append dictv a x y z +} {a xyz} +test dict-13.5 {dict append command} { + catch {unset dictv} + dict append dictv a b +} {a b} +test dict-13.6 {dict append command} { + set dictv a + list [catch {dict append dictv a a} msg] $msg +} {1 {missing value to go with key}} +test dict-13.7 {dict append command} { + list [catch {dict append} msg] $msg +} {1 {wrong # args: should be "dict append varName key ?value ...?"}} +test dict-13.8 {dict append command} { + list [catch {dict append dictv} msg] $msg +} {1 {wrong # args: should be "dict append varName key ?value ...?"}} +test dict-13.9 {dict append command: write failure} { + catch {unset dictVar} + set dictVar(block) {} + set result [list [catch {dict append dictVar a x} msg] $msg] + catch {unset dictVar} + set result +} {1 {can't set "dictVar": variable is array}} +test dict-13.10 {compiled dict command: crash case} { + apply {{} {dict append dictVar a o k}} +} {a ok} + +test dict-14.1 {dict for command: syntax} { + list [catch {dict for} msg] $msg +} {1 {wrong # args: should be "dict for {keyVar valueVar} dictionary script"}} +test dict-14.2 {dict for command: syntax} { + list [catch {dict for x} msg] $msg +} {1 {wrong # args: should be "dict for {keyVar valueVar} dictionary script"}} +test dict-14.3 {dict for command: syntax} { + list [catch {dict for x x} msg] $msg +} {1 {wrong # args: should be "dict for {keyVar valueVar} dictionary script"}} +test dict-14.4 {dict for command: syntax} { + list [catch {dict for x x x x} msg] $msg +} {1 {wrong # args: should be "dict for {keyVar valueVar} dictionary script"}} +test dict-14.5 {dict for command: syntax} { + list [catch {dict for x x x} msg] $msg +} {1 {must have exactly two variable names}} +test dict-14.6 {dict for command: syntax} { + list [catch {dict for {x x x} x x} msg] $msg +} {1 {must have exactly two variable names}} +test dict-14.7 {dict for command: syntax} { + list [catch {dict for "\{x" x x} msg] $msg +} {1 {unmatched open brace in list}} +test dict-14.8 {dict for command} { + # This test confirms that [dict keys], [dict values] and [dict for] + # all traverse a dictionary in the same order. + set dictv {a A b B c C} + set keys {} + set values {} + dict for {k v} $dictv { + lappend keys $k + lappend values $v + } + set result [expr { + $keys eq [dict keys $dictv] && $values eq [dict values $dictv] + }] + expr {$result ? "YES" : [list "NO" $dictv $keys $values]} +} YES +test dict-14.9 {dict for command} { + dict for {k v} {} { + error "unexpected execution of 'dict for' body" + } +} {} +test dict-14.10 {dict for command: script results} { + set times 0 + dict for {k v} {a a b b} { + incr times + continue + error "shouldn't get here" + } + set times +} 2 +test dict-14.11 {dict for command: script results} { + set times 0 + dict for {k v} {a a b b} { + incr times + break + error "shouldn't get here" + } + set times +} 1 +test dict-14.12 {dict for command: script results} { + set times 0 + list [catch { + dict for {k v} {a a b b} { + incr times + error test + } + } msg] $msg $times $::errorInfo +} {1 test 1 {test + while executing +"error test" + ("dict for" body line 3) + invoked from within +"dict for {k v} {a a b b} { + incr times + error test + }"}} +test dict-14.13 {dict for command: script results} { + proc dicttest {} { + rename dicttest {} + dict for {k v} {a b} { + return ok,$k,$v + error "skipped return completely" + } + error "return didn't go far enough" + } + dicttest +} ok,a,b +test dict-14.14 {dict for command: handle representation loss} { + set dictVar {a b c d e f g h} + set keys {} + set values {} + dict for {k v} $dictVar { + if {[llength $dictVar]} { + lappend keys $k + lappend values $v + } + } + list [lsort $keys] [lsort $values] +} {{a c e g} {b d f h}} +test dict-14.15 {dict for command: keys are unique and iterated over once only} { + set dictVar {a1 a a2 b b1 c b2 d foo bar bar foo} + catch {unset accum} + array set accum {} + dict for {k v} $dictVar { + append accum($k) $v, + } + set result [lsort [array names accum]] + lappend result : + foreach k $result { + catch {lappend result $accum($k)} + } + catch {unset accum} + set result +} {a1 a2 b1 b2 bar foo : a, b, c, d, foo, bar,} +test dict-14.16 {dict for command in compilation context} { + proc dicttest {} { + set res {x x x x x x} + dict for {k v} {a 0 b 1 c 2 d 3 e 4 f 5} { + lset res $v $k + continue + } + return $res + } + dicttest +} {a b c d e f} +test dict-14.17 {dict for command in compilation context} { + # Bug 1379349 + proc dicttest {} { + set d [dict create a 1] ;# Dict must be unshared! + dict for {k v} $d { + dict set d $k 0 ;# Any modification will do + } + return $d + } + dicttest +} {a 0} +test dict-14.18 {dict for command in compilation context} { + # Bug 1382528 + proc dicttest {} { + dict for {k v} {} {} ;# Note empty dict + catch { error foo } ;# Note compiled [catch] + } + dicttest +} 1 +test dict-14.19 {dict for and invalid dicts: bug 1531184} -body { + di[list]ct for {k v} x {} +} -returnCodes 1 -result {missing value to go with key} +test dict-14.20 {dict for stack space compilation: bug 1903325} { + proc dicttest {x y args} { + dict for {a b} $x {} + concat "c=$y,$args" + } + dicttest {} 1 2 3 +} {c=1,2 3} +# There's probably a lot more tests to add here. Really ought to use a +# coverage tool for this job... + +test dict-15.1 {dict set command} { + set dictVar {} + dict set dictVar a x +} {a x} +test dict-15.2 {dict set command} { + set dictvar {a {}} + dict set dictvar a b x +} {a {b x}} +test dict-15.3 {dict set command} { + set dictvar {a {b {}}} + dict set dictvar a b c x +} {a {b {c x}}} +test dict-15.4 {dict set command} { + set dictVar {a y} + dict set dictVar a x +} {a x} +test dict-15.5 {dict set command} { + set dictVar {a {b y}} + dict set dictVar a b x +} {a {b x}} +test dict-15.6 {dict set command} { + set dictVar {a {b {c y}}} + dict set dictVar a b c x +} {a {b {c x}}} +test dict-15.7 {dict set command: path creation} { + set dictVar {} + dict set dictVar a b x +} {a {b x}} +test dict-15.8 {dict set command: creates variables} { + catch {unset dictVar} + dict set dictVar a x + set dictVar +} {a x} +test dict-15.9 {dict set command: write failure} { + catch {unset dictVar} + set dictVar(block) {} + set result [list [catch {dict set dictVar a x} msg] $msg] + catch {unset dictVar} + set result +} {1 {can't set "dictVar": variable is array}} +test dict-15.10 {dict set command: syntax} { + list [catch {dict set} msg] $msg +} {1 {wrong # args: should be "dict set varName key ?key ...? value"}} +test dict-15.11 {dict set command: syntax} { + list [catch {dict set a} msg] $msg +} {1 {wrong # args: should be "dict set varName key ?key ...? value"}} +test dict-15.12 {dict set command: syntax} { + list [catch {dict set a a} msg] $msg +} {1 {wrong # args: should be "dict set varName key ?key ...? value"}} +test dict-15.13 {dict set command} { + set dictVar a + list [catch {dict set dictVar b c} msg] $msg +} {1 {missing value to go with key}} + +test dict-16.1 {dict unset command} { + set dictVar {a b c d} + dict unset dictVar a +} {c d} +test dict-16.2 {dict unset command} { + set dictVar {a b c d} + dict unset dictVar c +} {a b} +test dict-16.3 {dict unset command} { + set dictVar {a b} + dict unset dictVar c +} {a b} +test dict-16.4 {dict unset command} { + set dictVar {a {b c d e}} + dict unset dictVar a b +} {a {d e}} +test dict-16.5 {dict unset command} { + set dictVar a + list [catch {dict unset dictVar a} msg] $msg +} {1 {missing value to go with key}} +test dict-16.6 {dict unset command} { + set dictVar {a b} + list [catch {dict unset dictVar c d} msg] $msg +} {1 {key "c" not known in dictionary}} +test dict-16.7 {dict unset command} { + catch {unset dictVar} + list [info exists dictVar] [dict unset dictVar a] [info exists dictVar] +} {0 {} 1} +test dict-16.8 {dict unset command} { + list [catch {dict unset dictVar} msg] $msg +} {1 {wrong # args: should be "dict unset varName key ?key ...?"}} +test dict-16.9 {dict unset command: write failure} { + catch {unset dictVar} + set dictVar(block) {} + set result [list [catch {dict unset dictVar a} msg] $msg] + catch {unset dictVar} + set result +} {1 {can't set "dictVar": variable is array}} + +test dict-17.1 {dict filter command: key} { + set dictVar {a1 a a2 b b1 c b2 d foo bar bar foo} + dict filter $dictVar key a2 +} {a2 b} +test dict-17.2 {dict filter command: key} { + set dictVar {a1 a a2 b b1 c b2 d foo bar bar foo} + dict size [dict filter $dictVar key *] +} 6 +test dict-17.3 {dict filter command: key} { + set dictVar {a1 a a2 b b1 c b2 d foo bar bar foo} + getOrder [dict filter $dictVar key ???] bar foo +} {bar foo foo bar 2} +test dict-17.4 {dict filter command: key} { + list [catch {dict filter {} key} msg] $msg +} {1 {wrong # args: should be "dict filter dictionary key globPattern"}} +test dict-17.5 {dict filter command: key} { + list [catch {dict filter {} key a a} msg] $msg +} {1 {wrong # args: should be "dict filter dictionary key globPattern"}} +test dict-17.6 {dict filter command: value} { + set dictVar {a1 a a2 b b1 c b2 d foo bar bar foo} + dict filter $dictVar value c +} {b1 c} +test dict-17.7 {dict filter command: value} { + set dictVar {a1 a a2 b b1 c b2 d foo bar bar foo} + dict size [dict filter $dictVar value *] +} 6 +test dict-17.8 {dict filter command: value} { + set dictVar {a1 a a2 b b1 c b2 d foo bar bar foo} + getOrder [dict filter $dictVar value ???] bar foo +} {bar foo foo bar 2} +test dict-17.9 {dict filter command: value} { + list [catch {dict filter {} value} msg] $msg +} {1 {wrong # args: should be "dict filter dictionary value globPattern"}} +test dict-17.10 {dict filter command: value} { + list [catch {dict filter {} value a a} msg] $msg +} {1 {wrong # args: should be "dict filter dictionary value globPattern"}} +test dict-17.11 {dict filter command: script} { + set dictVar {a1 a a2 b b1 c b2 d foo bar bar foo} + set n 0 + list [getOrder [dict filter $dictVar script {k v} { + incr n + expr {[string length $k] == [string length $v]} + }] bar foo] $n +} {{bar foo foo bar 2} 6} +test dict-17.12 {dict filter command: script} { + list [catch {dict filter {a b} script {k v} {concat $k $v}} msg] $msg +} {1 {expected boolean value but got "a b"}} +test dict-17.13 {dict filter command: script} { + list [catch {dict filter {a b} script {k v} {error x}} msg] $msg \ + $::errorInfo +} {1 x {x + while executing +"error x" + ("dict filter" script line 1) + invoked from within +"dict filter {a b} script {k v} {error x}"}} +test dict-17.14 {dict filter command: script} { + set n 0 + list [dict filter {a b c d} script {k v} { + incr n + break + error boom! + }] $n +} {{} 1} +test dict-17.15 {dict filter command: script} { + set n 0 + list [dict filter {a b c d} script {k v} { + incr n + continue + error boom! + }] $n +} {{} 2} +test dict-17.16 {dict filter command: script} { + proc dicttest {} { + rename dicttest {} + dict filter {a b} script {k v} { + return ok,$k,$v + error "skipped return completely" + } + error "return didn't go far enough" + } + dicttest +} ok,a,b +test dict-17.17 {dict filter command: script} { + dict filter {a b} script {k k} {continue} + set k +} b +test dict-17.18 {dict filter command: script} { + list [catch {dict filter {a b} script {k k}} msg] $msg +} {1 {wrong # args: should be "dict filter dictionary script {keyVar valueVar} filterScript"}} +test dict-17.19 {dict filter command: script} { + list [catch {dict filter {a b} script k {continue}} msg] $msg +} {1 {must have exactly two variable names}} +test dict-17.20 {dict filter command: script} { + list [catch {dict filter {a b} script "\{k v" {continue}} msg] $msg +} {1 {unmatched open brace in list}} +test dict-17.21 {dict filter command} { + list [catch {dict filter {a b}} msg] $msg +} {1 {wrong # args: should be "dict filter dictionary filterType ..."}} +test dict-17.22 {dict filter command} { + list [catch {dict filter {a b} JUNK} msg] $msg +} {1 {bad filterType "JUNK": must be key, script, or value}} +test dict-17.23 {dict filter command} { + list [catch {dict filter a key *} msg] $msg +} {1 {missing value to go with key}} + +test dict-18.1 {dict-list relationship} { + -body { + # Test that any internal conversion between list and dict + # does not change the object + set l [list 1 2 3 4 5 6 7 8 9 0 q w e r t y] + dict values $l + set l + } + -result {1 2 3 4 5 6 7 8 9 0 q w e r t y} +} +test dict-18.2 {dict-list relationship} { + -body { + # Test that the dictionary is a valid list + set d [dict create "abc def" 0 "a\{b" 1 "c\}d" 2] + for {set t 0} {$t < 5} {incr t} { + llength $d + dict lappend d "abc def" "\}\{" + dict append d "a\{b" "\}" + dict incr d "c\}d" 1 + } + llength $d + } + -result 6 +} + +# This is a test for a specific bug. +# It shows a bad ref counter when running with memdebug on. +test dict-19.1 {memory bug} -setup { + proc xxx {} { + set successors [dict create x {c d}] + dict set successors x a b + dict get $successors x + } +} -body { + xxx +} -cleanup { + rename xxx {} +} -result [dict create c d a b] +test dict-19.2 {dict: testing for leaks} -setup { + # This test is made to stress object reference management + proc stress {} { + # A shared invalid dictinary + set apa {a {}b c d} + set bepa $apa + catch {dict replace $apa e f} + catch {dict remove $apa c d} + catch {dict incr apa a 5} + catch {dict lappend apa a 5} + catch {dict append apa a 5} + catch {dict set apa a 5} + catch {dict unset apa a} + + # A shared valid dictionary, invalid incr + set apa {a b c d} + set bepa $apa + catch {dict incr bepa a 5} + + # An error during write to an unshared object, incr + set apa {a 1 b 2} + set bepa [lrange $apa 0 end] + trace add variable bepa write {error hej} + catch {dict incr bepa a 5} + trace remove variable bepa write {error hej} + unset bepa + + # An error during write to a shared object, incr + set apa {a 1 b 2} + set bepa $apa + trace add variable bepa write {error hej} + catch {dict incr bepa a 5} + trace remove variable bepa write {error hej} + unset bepa + + # A shared valid dictionary, invalid lappend + set apa [list a {{}b} c d] + set bepa $apa + catch {dict lappend bepa a 5} + + # An error during write to an unshared object, lappend + set apa {a 1 b 2} + set bepa [lrange $apa 0 end] + trace add variable bepa write {error hej} + catch {dict lappend bepa a 5} + trace remove variable bepa write {error hej} + unset bepa + + # An error during write to a shared object, lappend + set apa {a 1 b 2} + set bepa $apa + trace add variable bepa write {error hej} + catch {dict lappend bepa a 5} + trace remove variable bepa write {error hej} + unset bepa + + # An error during write to an unshared object, append + set apa {a 1 b 2} + set bepa [lrange $apa 0 end] + trace add variable bepa write {error hej} + catch {dict append bepa a 5} + trace remove variable bepa write {error hej} + unset bepa + + # An error during write to a shared object, append + set apa {a 1 b 2} + set bepa $apa + trace add variable bepa write {error hej} + catch {dict append bepa a 5} + trace remove variable bepa write {error hej} + unset bepa + + # An error during write to an unshared object, set + set apa {a 1 b 2} + set bepa [lrange $apa 0 end] + trace add variable bepa write {error hej} + catch {dict set bepa a 5} + trace remove variable bepa write {error hej} + unset bepa + + # An error during write to a shared object, set + set apa {a 1 b 2} + set bepa $apa + trace add variable bepa write {error hej} + catch {dict set bepa a 5} + trace remove variable bepa write {error hej} + unset bepa + + # An error during write to an unshared object, unset + set apa {a 1 b 2} + set bepa [lrange $apa 0 end] + trace add variable bepa write {error hej} + catch {dict unset bepa a} + trace remove variable bepa write {error hej} + unset bepa + + # An error during write to a shared object, unset + set apa {a 1 b 2} + set bepa $apa + trace add variable bepa write {error hej} + catch {dict unset bepa a} + trace remove variable bepa write {error hej} + unset bepa + } +} -constraints memory -body { + memtest { + stress + } +} -cleanup { + rename stress {} +} -result 0 +test dict-19.3 {testing for leaks - Bug 2874678} -constraints memory -body { + set d aDictVar; # Force interpreted [dict incr] + memtest { + dict incr $d aKey 0 + unset $d + } +} -cleanup { + unset d +} -result 0 + +test dict-20.1 {dict merge command} { + dict merge +} {} +test dict-20.2 {dict merge command} { + getOrder [dict merge {a b c d e f}] a c e +} {a b c d e f 3} +test dict-20.3 {dict merge command} -body { + dict merge {a b c d e} +} -result {missing value to go with key} -returnCodes 1 +test dict-20.4 {dict merge command} { + getOrder [dict merge {a b c d} {e f g h}] a c e g +} {a b c d e f g h 4} +test dict-20.5 {dict merge command} -body { + dict merge {a b c d e} {e f g h} +} -result {missing value to go with key} -returnCodes 1 +test dict-20.6 {dict merge command} -body { + dict merge {a b c d} {e f g h i} +} -result {missing value to go with key} -returnCodes 1 +test dict-20.7 {dict merge command} { + getOrder [dict merge {a b c d e f} {e x g h}] a c e g +} {a b c d e x g h 4} +test dict-20.8 {dict merge command} { + getOrder [dict merge {a b c d} {a x c y}] a c +} {a x c y 2} +test dict-20.9 {dict merge command} { + getOrder [dict merge {a b c d} {a x c y}] a c +} {a x c y 2} +test dict-20.10 {dict merge command} { + getOrder [dict merge {a b c d e f} {a x 1 2 3 4} {a - 1 -}] a c e 1 3 +} {a - c d e f 1 - 3 4 5} + +test dict-21.1 {dict update command} -body { + dict update +} -returnCodes 1 -result {wrong # args: should be "dict update varName key varName ?key varName ...? script"} +test dict-21.2 {dict update command} -body { + dict update v +} -returnCodes 1 -result {wrong # args: should be "dict update varName key varName ?key varName ...? script"} +test dict-21.3 {dict update command} -body { + dict update v k +} -returnCodes 1 -result {wrong # args: should be "dict update varName key varName ?key varName ...? script"} +test dict-21.4 {dict update command} -body { + dict update v k v +} -returnCodes 1 -result {wrong # args: should be "dict update varName key varName ?key varName ...? script"} +test dict-21.5 {dict update command} { + set a {b c} + set result {} + set bb {} + dict update a b bb { + lappend result $a $bb + } + lappend result $a +} {{b c} c {b c}} +test dict-21.6 {dict update command} { + set a {b c} + set result {} + set bb {} + dict update a b bb { + lappend result $a $bb [set bb d] + } + lappend result $a +} {{b c} c d {b d}} +test dict-21.7 {dict update command} { + set a {b c} + set result {} + set bb {} + dict update a b bb { + lappend result $a $bb [unset bb] + } + lappend result $a +} {{b c} c {} {}} +test dict-21.8 {dict update command} { + set a {b c d e} + dict update a b v1 d v2 { + lassign "$v1 $v2" v2 v1 + } + getOrder $a b d +} {b e d c 2} +test dict-21.9 {dict update command} { + set a {b c d e} + dict update a b v1 d v2 {unset a} + info exist a +} 0 +test dict-21.10 {dict update command} { + set a {b {c d}} + dict update a b v1 { + dict update v1 c v2 { + set v2 foo + } + } + set a +} {b {c foo}} +test dict-21.11 {dict update command} { + set a {b c d e} + dict update a b v1 d v2 { + dict set a f g + } + getOrder $a b d f +} {b c d e f g 3} +test dict-21.12 {dict update command} { + set a {b c d e} + dict update a b v1 d v2 f v3 { + set v3 g + } + getOrder $a b d f +} {b c d e f g 3} +test dict-21.13 {dict update command: compilation} { + proc dicttest {d} { + while 1 { + dict update d a alpha b beta { + set beta $alpha + unset alpha + break + } + } + return $d + } + getOrder [dicttest {a 1 c 2}] b c +} {b 1 c 2 2} +test dict-21.14 {dict update command: compilation} { + proc dicttest x { + set indices {2 3} + trace add variable aa write "string length \$indices ;#" + dict update x k aa l bb {} + } + dicttest {k 1 l 2} +} {} +test dict-21.15 {dict update command: compilation} { + proc dicttest x { + set indices {2 3} + trace add variable aa read "string length \$indices ;#" + dict update x k aa l bb {} + } + dicttest {k 1 l 2} +} {} +test dict-21.16 {dict update command: no recursive structures [Bug 1786481]} { + set foo {a {b {c {d {e 1}}}}} + dict update foo a t { + dict update t b t { + dict update t c t { + dict update t d t { + dict incr t e + } + } + } + } + string range [append foo OK] end-1 end +} OK +test dict-21.17 {dict update command: no recursive structures [Bug 1786481]} { + proc dicttest {} { + set foo {a {b {c {d {e 1}}}}} + dict update foo a t { + dict update t b t { + dict update t c t { + dict update t d t { + dict incr t e + } + } + } + } + } + dicttest + string range [append foo OK] end-1 end +} OK + +test dict-22.1 {dict with command} -body { + dict with +} -returnCodes 1 -result {wrong # args: should be "dict with dictVar ?key ...? script"} +test dict-22.2 {dict with command} -body { + dict with v +} -returnCodes 1 -result {wrong # args: should be "dict with dictVar ?key ...? script"} +test dict-22.3 {dict with command} -body { + unset -nocomplain v + dict with v {error "in body"} +} -returnCodes 1 -result {can't read "v": no such variable} +test dict-22.4 {dict with command} { + set a {b c d e} + unset -nocomplain b d + set result [list [info exist b] [info exist d]] + dict with a { + lappend result [info exist b] [info exist d] $b $d + } + set result +} {0 0 1 1 c e} +test dict-22.5 {dict with command} { + set a {b c d e} + dict with a { + lassign "$b $d" d b + } + getOrder $a b d +} {b e d c 2} +test dict-22.6 {dict with command} { + set a {b c d e} + dict with a { + unset b + # This *won't* go into the dict... + set f g + } + set a +} {d e} +test dict-22.7 {dict with command} { + set a {b c d e} + dict with a { + dict unset a b + } + getOrder $a b d +} {b c d e 2} +test dict-22.8 {dict with command} { + set a [dict create b c] + dict with a { + set b $a + } + set a +} {b {b c}} +test dict-22.9 {dict with command} { + set a {b {c d}} + dict with a b { + set c $c$c + } + set a +} {b {c dd}} +test dict-22.10 {dict with command: result handling tricky case} { + set a {b {c d}} + foreach i {0 1} { + if {$i} break + dict with a b { + set a {} + # We're checking to see if we lose this break + break + } + } + list $i $a +} {0 {}} +test dict-22.11 {dict with command: no recursive structures [Bug 1786481]} { + set foo {t {t {t {inner 1}}}} + dict with foo { + dict with t { + dict with t { + dict with t { + incr inner + } + } + } + } + string range [append foo OK] end-1 end +} OK + +proc linenumber {} { + dict get [info frame -1] line +} +test dict-23.1 {dict compilation crash: Bug 3487626} { + apply {n { + set e {} + set k {} + dict for {a b} {c {d {e {f g}}}} { + ::tcl::dict::for {h i} $b { + dict update i e j { + ::tcl::dict::update j f k { + return [expr {$n - [linenumber]}] + } + } + } + } + }} [linenumber] +} 5 +test dict-23.2 {dict compilation crash: Bug 3487626} knownBug { + # Something isn't quite right in line number and continuation line + # tracking; at time of writing, this test produces 7, not 5, which + # indicates that the extra newlines in the non-script argument are + # confusing things. + apply {n { + set e {} + set k {} + dict for {a { +b +}} {c {d {e {f g}}}} { + ::tcl::dict::for {h { +i +}} ${ +b +} { + dict update { +i +} e { +j +} { + ::tcl::dict::update { +j +} f k { + return [expr {$n - [linenumber]}] + } + } + } + } + }} [linenumber] +} 5 +rename linenumber {} + +# cleanup +::tcltest::cleanupTests +return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/dstring.test b/tests/dstring.test index c1a0063..95321ec 100644 --- a/tests/dstring.test +++ b/tests/dstring.test @@ -16,26 +16,21 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -if {[info commands testdstring] == {}} { - puts "This application hasn't been compiled with the \"testdstring\"" - puts "command, so I can't test Tcl_DStringAppend et al." - ::tcltest::cleanupTests - return -} +testConstraint testdstring [llength [info commands testdstring]] -test dstring-1.1 {appending and retrieving} { +test dstring-1.1 {appending and retrieving} testdstring { testdstring free testdstring append "abc" -1 list [testdstring get] [testdstring length] } {abc 3} -test dstring-1.2 {appending and retrieving} { +test dstring-1.2 {appending and retrieving} testdstring { testdstring free testdstring append "abc" -1 testdstring append " xyzzy" 3 testdstring append " 12345" -1 list [testdstring get] [testdstring length] } {{abc xy 12345} 12} -test dstring-1.3 {appending and retrieving} { +test dstring-1.3 {appending and retrieving} testdstring { testdstring free foreach l {a b c d e f g h i j k l m n o p} { testdstring append $l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l\n -1 @@ -59,27 +54,27 @@ ooooooooooooooooooooo ppppppppppppppppppppp } 352} -test dstring-2.1 {appending list elements} { +test dstring-2.1 {appending list elements} testdstring { testdstring free testdstring element "abc" testdstring element "d e f" list [testdstring get] [testdstring length] } {{abc {d e f}} 11} -test dstring-2.2 {appending list elements} { +test dstring-2.2 {appending list elements} testdstring { testdstring free testdstring element "x" testdstring element "\{" testdstring element "ab\}" testdstring get } {x \{ ab\}} -test dstring-2.3 {appending list elements} { +test dstring-2.3 {appending list elements} testdstring { testdstring free foreach l {a b c d e f g h i j k l m n o p} { testdstring element $l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l } testdstring get } {aaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbb ccccccccccccccccccccc ddddddddddddddddddddd eeeeeeeeeeeeeeeeeeeee fffffffffffffffffffff ggggggggggggggggggggg hhhhhhhhhhhhhhhhhhhhh iiiiiiiiiiiiiiiiiiiii jjjjjjjjjjjjjjjjjjjjj kkkkkkkkkkkkkkkkkkkkk lllllllllllllllllllll mmmmmmmmmmmmmmmmmmmmm nnnnnnnnnnnnnnnnnnnnn ooooooooooooooooooooo ppppppppppppppppppppp} -test dstring-2.4 {appending list elements} { +test dstring-2.4 {appending list elements} testdstring { testdstring free testdstring append "a\{" -1 testdstring element abc @@ -87,32 +82,63 @@ test dstring-2.4 {appending list elements} { testdstring element xyzzy testdstring get } "a{ abc {xyzzy" -test dstring-2.5 {appending list elements} { +test dstring-2.5 {appending list elements} testdstring { testdstring free testdstring append " \{" -1 testdstring element abc testdstring get } " {abc" -test dstring-2.6 {appending list elements} { +test dstring-2.6 {appending list elements} testdstring { testdstring free testdstring append " " -1 testdstring element abc testdstring get } { abc} -test dstring-2.7 {appending list elements} { +test dstring-2.7 {appending list elements} testdstring { testdstring free testdstring append "\\ " -1 testdstring element abc testdstring get } "\\ abc" -test dstring-2.8 {appending list elements} { +test dstring-2.8 {appending list elements} testdstring { testdstring free testdstring append "x " -1 testdstring element abc testdstring get } {x abc} +test dstring-2.9 {appending list elements} testdstring { + testdstring free + testdstring element # + testdstring get +} {{#}} +test dstring-2.10 {appending list elements} testdstring { + testdstring free + testdstring append " " -1 + testdstring element # + testdstring get +} { {#}} +test dstring-2.11 {appending list elements} testdstring { + testdstring free + testdstring append \t -1 + testdstring element # + testdstring get +} \t{#} +test dstring-2.12 {appending list elements} testdstring { + testdstring free + testdstring append x -1 + testdstring element # + testdstring get +} {x #} +test dstring-2.13 {appending list elements} testdstring { + # This test shows lack of sophistication in Tcl_DStringAppendElement's + # decision about whether #-quoting can be disabled. + testdstring free + testdstring append "x " -1 + testdstring element # + testdstring get +} {x {#}} -test dstring-3.1 {nested sublists} { +test dstring-3.1 {nested sublists} testdstring { testdstring free testdstring start testdstring element foo @@ -121,7 +147,7 @@ test dstring-3.1 {nested sublists} { testdstring element another testdstring get } {{foo bar} another} -test dstring-3.2 {nested sublists} { +test dstring-3.2 {nested sublists} testdstring { testdstring free testdstring start testdstring start @@ -132,7 +158,7 @@ test dstring-3.2 {nested sublists} { testdstring element ghi testdstring get } {{{abc def}} ghi} -test dstring-3.3 {nested sublists} { +test dstring-3.3 {nested sublists} testdstring { testdstring free testdstring start testdstring start @@ -146,7 +172,7 @@ test dstring-3.3 {nested sublists} { testdstring element foo4 testdstring get } {{{{foo foo2}} foo3} foo4} -test dstring-3.4 {nested sublists} { +test dstring-3.4 {nested sublists} testdstring { testdstring free testdstring element before testdstring start @@ -156,7 +182,7 @@ test dstring-3.4 {nested sublists} { testdstring element last testdstring get } {before {during more} last} -test dstring-3.5 {nested sublists} { +test dstring-3.5 {nested sublists} testdstring { testdstring free testdstring element "\{" testdstring start @@ -165,26 +191,72 @@ test dstring-3.5 {nested sublists} { testdstring end testdstring get } {\{ {first second}} +test dstring-3.6 {appending list elements} testdstring { + testdstring free + testdstring append x -1 + testdstring start + testdstring element # + testdstring end + testdstring get +} {x {{#}}} +test dstring-3.7 {appending list elements} testdstring { + testdstring free + testdstring append x -1 + testdstring start + testdstring append " " -1 + testdstring element # + testdstring end + testdstring get +} {x { {#}}} +test dstring-3.8 {appending list elements} testdstring { + testdstring free + testdstring append x -1 + testdstring start + testdstring append \t -1 + testdstring element # + testdstring end + testdstring get +} "x {\t{#}}" +test dstring-3.9 {appending list elements} testdstring { + testdstring free + testdstring append x -1 + testdstring start + testdstring append x -1 + testdstring element # + testdstring end + testdstring get +} {x {x #}} +test dstring-3.10 {appending list elements} testdstring { + # This test shows lack of sophistication in Tcl_DStringAppendElement's + # decision about whether #-quoting can be disabled. + testdstring free + testdstring append x -1 + testdstring start + testdstring append "x " -1 + testdstring element # + testdstring end + testdstring get +} {x {x {#}}} -test dstring-4.1 {truncation} { +test dstring-4.1 {truncation} testdstring { testdstring free testdstring append "abcdefg" -1 testdstring trunc 3 list [testdstring get] [testdstring length] } {abc 3} -test dstring-4.2 {truncation} { +test dstring-4.2 {truncation} testdstring { testdstring free testdstring append "xyzzy" -1 testdstring trunc 0 list [testdstring get] [testdstring length] } {{} 0} -test dstring-5.1 {copying to result} { +test dstring-5.1 {copying to result} testdstring { testdstring free testdstring append xyz -1 testdstring result } xyz -test dstring-5.2 {copying to result} { +test dstring-5.2 {copying to result} testdstring { testdstring free catch {unset a} foreach l {a b c d e f g h i j k l m n o p} { @@ -211,18 +283,18 @@ ooooooooooooooooooooo ppppppppppppppppppppp } abc} -test dstring-6.1 {Tcl_DStringGetResult} { +test dstring-6.1 {Tcl_DStringGetResult} testdstring { testdstring free list [testdstring gresult staticsmall] [testdstring get] } {{} short} -test dstring-6.2 {Tcl_DStringGetResult} { +test dstring-6.2 {Tcl_DStringGetResult} testdstring { testdstring free foreach l {a b c d e f g h i j k l m n o p} { testdstring append $l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l\n -1 } list [testdstring gresult staticsmall] [testdstring get] } {{} short} -test dstring-6.3 {Tcl_DStringGetResult} { +test dstring-6.3 {Tcl_DStringGetResult} testdstring { set result {} lappend result [testdstring gresult staticlarge] testdstring append x 1 @@ -235,13 +307,13 @@ fifth0 fifth1 fifth2 fifth3 fifth4 fifth5 fifth6 fifth7 fifth8 fifth9 sixth0 sixth1 sixth2 sixth3 sixth4 sixth5 sixth6 sixth7 sixth8 sixth9 seventh0 seventh1 seventh2 seventh3 seventh4 seventh5 seventh6 seventh7 seventh8 seventh9 x}} -test dstring-6.4 {Tcl_DStringGetResult} { +test dstring-6.4 {Tcl_DStringGetResult} testdstring { set result {} lappend result [testdstring gresult free] testdstring append y 1 lappend result [testdstring get] } {{} {This is a malloc-ed stringy}} -test dstring-6.5 {Tcl_DStringGetResult} { +test dstring-6.5 {Tcl_DStringGetResult} testdstring { set result {} lappend result [testdstring gresult special] testdstring append z 1 @@ -249,18 +321,8 @@ test dstring-6.5 {Tcl_DStringGetResult} { } {{} {This is a specially-allocated stringz}} # cleanup -testdstring free +if {[testConstraint testdstring]} { + testdstring free +} ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/encoding.test b/tests/encoding.test index c4fa51d..aa50360 100644 --- a/tests/encoding.test +++ b/tests/encoding.test @@ -9,17 +9,25 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. package require tcltest 2 + +namespace eval ::tcl::test::encoding { + variable x + namespace import -force ::tcltest::* proc toutf {args} { - global x + variable x lappend x "toutf $args" } proc fromutf {args} { - global x + variable x lappend x "fromutf $args" } +proc runtests {} { + + variable x + # Some tests require the testencoding command testConstraint testencoding [llength [info commands testencoding]] testConstraint exec [llength [info commands exec]] @@ -28,7 +36,7 @@ testConstraint exec [llength [info commands exec]] # TclFinalizeEncodingSubsystem is not currently tested test encoding-1.1 {Tcl_GetEncoding: system encoding} {testencoding} { - testencoding create foo toutf fromutf + testencoding create foo [namespace origin toutf] [namespace origin fromutf] set old [encoding system] encoding system foo set x {} @@ -38,7 +46,7 @@ test encoding-1.1 {Tcl_GetEncoding: system encoding} {testencoding} { set x } {{fromutf }} test encoding-1.2 {Tcl_GetEncoding: existing encoding} {testencoding} { - testencoding create foo toutf fromutf + testencoding create foo [namespace origin toutf] [namespace origin fromutf] set x {} encoding convertto foo abcd testencoding delete foo @@ -54,14 +62,15 @@ test encoding-2.1 {Tcl_FreeEncoding: refcount == 0} { } {8C} test encoding-2.2 {Tcl_FreeEncoding: refcount != 0} {testencoding} { set system [encoding system] - set path [testencoding path] + set path [encoding dirs] encoding system shiftjis ;# incr ref count - testencoding path [list [pwd]] + encoding dirs [list [pwd]] set x [encoding convertto shiftjis \u4e4e] ;# old one found encoding system identity + llength shiftjis lappend x [catch {encoding convertto shiftjis \u4e4e} msg] $msg encoding system identity - testencoding path $path + encoding dirs $path encoding system $system set x } "\u008c\u00c1 1 {unknown encoding \"shiftjis\"}" @@ -86,20 +95,20 @@ test encoding-4.1 {Tcl_GetEncodingNames} {testencoding} { makeDirectory [file join tmp encoding] makeFile {} [file join tmp encoding junk.enc] makeFile {} [file join tmp encoding junk2.enc] - set path [testencoding path] - testencoding path {} + set path [encoding dirs] + encoding dirs {} catch {unset encodings} catch {unset x} foreach encoding [encoding names] { set encodings($encoding) 1 } - testencoding path [list [pwd]] + encoding dirs [list [file join [pwd] encoding]] foreach encoding [encoding names] { if {![info exists encodings($encoding)]} { lappend x $encoding } } - testencoding path $path + encoding dirs $path cd [workingDirectory] removeFile [file join tmp encoding junk2.enc] removeFile [file join tmp encoding junk.enc] @@ -123,7 +132,8 @@ test encoding-5.2 {Tcl_SetSystemEncoding: test ref count} { } {0} test encoding-6.1 {Tcl_CreateEncoding: new} {testencoding} { - testencoding create foo {toutf 1} {fromutf 2} + testencoding create foo [namespace code {toutf 1}] \ + [namespace code {fromutf 2}] set x {} encoding convertfrom foo abcd encoding convertto foo abcd @@ -131,7 +141,8 @@ test encoding-6.1 {Tcl_CreateEncoding: new} {testencoding} { set x } {{toutf 1} {fromutf 2}} test encoding-6.2 {Tcl_CreateEncoding: replace encoding} {testencoding} { - testencoding create foo {toutf a} {fromutf b} + testencoding create foo [namespace code {toutf a}] \ + [namespace code {fromutf b}] set x {} encoding convertfrom foo abcd encoding convertto foo abcd @@ -207,11 +218,12 @@ proc viewable {str} { test encoding-11.1 {LoadEncodingFile: unknown encoding} {testencoding} { set system [encoding system] - set path [testencoding path] + set path [encoding dirs] encoding system iso8859-1 - testencoding path {} + encoding dirs {} + llength jis0208 set x [list [catch {encoding convertto jis0208 \u4e4e} msg] $msg] - testencoding path $path + encoding dirs $path encoding system $system lappend x [encoding convertto jis0208 \u4e4e] } {1 {unknown encoding "jis0208"} 8C} @@ -232,10 +244,10 @@ test encoding-11.5.1 {LoadEncodingFile: escape file} { } [viewable "\x1b\$B8C\x1b(B"] test encoding-11.6 {LoadEncodingFile: invalid file} {testencoding} { set system [encoding system] - set path [testencoding path] + set path [encoding dirs] encoding system identity cd [temporaryDirectory] - testencoding path tmp + encoding dirs [file join tmp encoding] makeDirectory tmp makeDirectory [file join tmp encoding] set f [open [file join tmp encoding splat.enc] w] @@ -247,7 +259,7 @@ test encoding-11.6 {LoadEncodingFile: invalid file} {testencoding} { removeDirectory [file join tmp encoding] removeDirectory tmp cd [workingDirectory] - testencoding path $path + encoding dirs $path encoding system $system set x } {1 {invalid encoding file "splat"}} @@ -327,14 +339,14 @@ test encoding-21.1 {EscapeToUtfProc} { test encoding-22.1 {EscapeFromUtfProc} { } {} -set ::iso2022encData "\u001b\$B;d\$I\$b\$G\$O!\"%A%C%W\$49XF~;~\$K\$4EPO?\$\$\$?\$@\$\$\$?\$4=;=j\$r%-%c%C%7%e%\"%&%H\$N:]\$N\u001b(B +set iso2022encData "\u001b\$B;d\$I\$b\$G\$O!\"%A%C%W\$49XF~;~\$K\$4EPO?\$\$\$?\$@\$\$\$?\$4=;=j\$r%-%c%C%7%e%\"%&%H\$N:]\$N\u001b(B \u001b\$B>.@Z<jAwIU@h\$H\$7\$F;HMQ\$7\$F\$*\$j\$^\$9!#62\$lF~\$j\$^\$9\$,!\"@5\$7\$\$=;=j\$r\$4EPO?\$7\$J\$*\u001b(B \u001b\$B\$*4j\$\$\$\$\$?\$7\$^\$9!#\$^\$?!\"BgJQ62=L\$G\$9\$,!\"=;=jJQ99\$N\$\"\$H!\"F|K\\8l%5!<%S%9It!J\u001b(B casino_japanese@___.com \u001b\$B!K\$^\$G\$4=;=jJQ99:Q\$NO\"Mm\$r\$\$\$?\$@\$1\$J\$\$\$G\u001b(B \u001b\$B\$7\$g\$&\$+!)\u001b(B" -set ::iso2022uniData [encoding convertfrom iso2022-jp $::iso2022encData] -set ::iso2022uniData2 "\u79c1\u3069\u3082\u3067\u306f\u3001\u30c1\u30c3\u30d7\u3054\u8cfc\u5165\u6642\u306b\u3054\u767b\u9332\u3044\u305f\u3060\u3044\u305f\u3054\u4f4f\u6240\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u30a2\u30a6\u30c8\u306e\u969b\u306e +set iso2022uniData [encoding convertfrom iso2022-jp $iso2022encData] +set iso2022uniData2 "\u79c1\u3069\u3082\u3067\u306f\u3001\u30c1\u30c3\u30d7\u3054\u8cfc\u5165\u6642\u306b\u3054\u767b\u9332\u3044\u305f\u3060\u3044\u305f\u3054\u4f4f\u6240\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u30a2\u30a6\u30c8\u306e\u969b\u306e \u5c0f\u5207\u624b\u9001\u4ed8\u5148\u3068\u3057\u3066\u4f7f\u7528\u3057\u3066\u304a\u308a\u307e\u3059\u3002\u6050\u308c\u5165\u308a\u307e\u3059\u304c\u3001\u6b63\u3057\u3044\u4f4f\u6240\u3092\u3054\u767b\u9332\u3057\u306a\u304a \u304a\u9858\u3044\u3044\u305f\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u5927\u5909\u6050\u7e2e\u3067\u3059\u304c\u3001\u4f4f\u6240\u5909\u66f4\u306e\u3042\u3068\u3001\u65e5\u672c\u8a9e\u30b5\u30fc\u30d3\u30b9\u90e8\uff08 \u0063\u0061\u0073\u0069\u006e\u006f\u005f\u006a\u0061\u0070\u0061\u006e\u0065\u0073\u0065\u0040\u005f\u005f\u005f\u002e\u0063\u006f\u006d\u0020\uff09\u307e\u3067\u3054\u4f4f\u6240\u5909\u66f4\u6e08\u306e\u9023\u7d61\u3092\u3044\u305f\u3060\u3051\u306a\u3044\u3067 @@ -343,11 +355,11 @@ set ::iso2022uniData2 "\u79c1\u3069\u3082\u3067\u306f\u3001\u30c1\u30c3\u30d7\u3 cd [temporaryDirectory] set fid [open iso2022.txt w] fconfigure $fid -encoding binary -puts -nonewline $fid $::iso2022encData +puts -nonewline $fid $iso2022encData close $fid test encoding-23.1 {iso2022-jp escape encoding test} { - string equal $::iso2022uniData $::iso2022uniData2 + string equal $iso2022uniData $iso2022uniData2 } 1 test encoding-23.2 {iso2022-jp escape encoding test} { # This checks that 'gets' isn't resetting the encoding inappropriately. @@ -365,11 +377,11 @@ test encoding-23.2 {iso2022-jp escape encoding test} { incr count $num } close $fid - if {[string compare $::iso2022uniData $out]} { + if {[string compare $iso2022uniData $out]} { return -code error "iso2022-jp read in doesn't match original" } list $count $out -} [list [string length $::iso2022uniData] $::iso2022uniData] +} [list [string length $iso2022uniData] $iso2022uniData] test encoding-23.3 {iso2022-jp escape encoding test} { # read $fis <size> reads size in chars, not raw bytes. set fid [open iso2022.txt r] @@ -377,7 +389,7 @@ test encoding-23.3 {iso2022-jp escape encoding test} { set data [read $fid 50] close $fid set data -} [string range $::iso2022uniData 0 49] ; # 0 .. 49 inclusive == 50 +} [string range $iso2022uniData 0 49] ; # 0 .. 49 inclusive == 50 cd [workingDirectory] test encoding-24.1 {EscapeFreeProc on open channels} -constraints { @@ -535,16 +547,16 @@ foreach from {cp932 shiftjis euc-jp iso2022-jp} { cd [temporaryDirectory] set f [open $from.chars] fconfigure $f -encoding $from - set out [open $from.$to.out w] + set out [open $from.$to.tcltestout w] fconfigure $out -encoding $to puts -nonewline $out [read $f] close $out close $f - # then compare $to.chars <=> $from.to.out as binary. + # then compare $to.chars <=> $from.to.tcltestout as binary. set fa [open $to.chars] fconfigure $fa -encoding binary - set fb [open $from.$to.out] + set fb [open $from.$to.tcltestout] fconfigure $fb -encoding binary set diff [channel-diff $fa $fb] close $fa @@ -556,12 +568,38 @@ foreach from {cp932 shiftjis euc-jp iso2022-jp} { } } -eval [list file delete] [glob -directory [temporaryDirectory] *.chars *.out] +testConstraint testgetdefenc [llength [info commands testgetdefenc]] + +test encoding-26.0 {Tcl_GetDefaultEncodingDir} -constraints { + testgetdefenc +} -setup { + set origDir [testgetdefenc] + testsetdefenc slappy +} -body { + testgetdefenc +} -cleanup { + testsetdefenc $origDir +} -result slappy + +file delete {*}[glob -directory [temporaryDirectory] *.chars *.tcltestout] # ===> Cut here <=== # EscapeFreeProc, GetTableEncoding, unilen # are fully tested by the rest of this file +test encoding-27.1 {encoding dirs basic behavior} -returnCodes error -body { + encoding dirs ? ? +} -result {wrong # args: should be "encoding dirs ?dirList?"} +test encoding-27.2 {encoding dirs basic behavior} -returnCodes error -body { + encoding dirs "\{not a list" +} -result "expected directory list but got \"\{not a list\"" + +} +runtests + +} + # cleanup +namespace delete ::tcl::test::encoding ::tcltest::cleanupTests return diff --git a/tests/env.test b/tests/env.test index 6c3c137..c42e49d 100644 --- a/tests/env.test +++ b/tests/env.test @@ -11,8 +11,14 @@ # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. -package require tcltest 2 -namespace import -force ::tcltest::* +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest 2 + namespace import -force ::tcltest::* +} + +# Some tests require the "exec" command. +# Skip them if exec is not defined. +testConstraint exec [llength [info commands exec]] # # These tests will run on any platform (and indeed crashed on the Mac). So put @@ -50,15 +56,10 @@ test env-1.3 {reflection of env by "array names"} { expr {$ix >= 0} } {1} - -# Some tests require the "exec" command. -# Skip them if exec is not defined. -testConstraint exec [llength [info commands exec]] - set printenvScript [makeFile { proc lrem {listname name} { upvar $listname list - set i [lsearch $list $name] + set i [lsearch -nocase $list $name] if {$i >= 0} { set list [lreplace $list $i $i] } @@ -108,23 +109,18 @@ proc getenv {} { # Save the current environment variables at the start of the test. +set env2 [array get env] foreach name [array names env] { - set env2([string toupper $name]) $env($name) - unset env($name) -} - -# Added the following lines so that child tcltest can actually find its -# library if the initial tcltest is run from a non-standard place. -# ('saved' env vars) -foreach name { + # Keep some environment variables that support operation of the tcltest + # package. + if {[string toupper $name] ni { TCL_LIBRARY PATH LD_LIBRARY_PATH LIBPATH DISPLAY SHLIB_PATH SYSTEMDRIVE SYSTEMROOT DYLD_LIBRARY_PATH DYLD_FRAMEWORK_PATH DYLD_NEW_LOCAL_SHARED_REGIONS DYLD_NO_FIX_PREBINDING SECURITYSESSIONID LANG WINDIR TERM CommonProgramFiles ProgramFiles - } { - if {[info exists env2($name)]} { - set env($name) $env2($name); + }} { + unset env($name) } } @@ -243,7 +239,7 @@ test env-5.4 {corner cases - unset the env array} {} { interp delete i set result } {1 a 1} -test env-5.5 {corner cases - cannot have null entries on Windows} {pcOnly} { +test env-5.5 {corner cases - cannot have null entries on Windows} {win} { set env() a catch {set env()} } {1} @@ -261,9 +257,7 @@ test env-6.1 {corner cases - add lots of env variables} {} { foreach name [array names env] { unset env($name) } -foreach name [array names env2] { - set env($name) $env2($name) -} +array set env $env2 # cleanup removeFile $printenvScript diff --git a/tests/error.test b/tests/error.test index 8aa99d6..b989338 100644 --- a/tests/error.test +++ b/tests/error.test @@ -16,6 +16,7 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } +namespace eval ::tcl::test::error { proc foo {} { global errorInfo set a [catch {format [error glorp2]} b] @@ -41,7 +42,7 @@ test error-1.2 {simple errors from commands} { test error-1.3 {simple errors from commands} { catch {format [string index]} b - set errorInfo + set ::errorInfo # this used to return '... while executing ...', but # string index is fully compiled as of 8.4a3 } {wrong # args: should be "string index string charIndex" @@ -58,18 +59,22 @@ test error-1.5 {simple errors from commands} { } glorp test error-1.6 {simple errors from commands} { - catch {catch a b c} b + catch {catch a b c d} b } 1 test error-1.7 {simple errors from commands} { - catch {catch a b c} b + catch {catch a b c d} b set b -} {wrong # args: should be "catch command ?varName?"} +} {wrong # args: should be "catch script ?resultVarName? ?optionVarName?"} -test error-1.8 {simple errors from commands} {nonPortable} { +test error-1.8 {simple errors from commands} { # This test is non-portable: it generates a memory fault on # machines like DEC Alphas (infinite recursion overflows # stack?) + # + # That claims sounds like a bug to be fixed rather than a portability + # problem. Anyhow, I believe it's out of date (bug's been fixed) so + # this test is re-enabled. proc p {} { uplevel 1 catch p error @@ -91,7 +96,7 @@ test error-2.2 {errors in nested procedures} { test error-2.3 {errors in nested procedures} { catch foo b - set errorInfo + set ::errorInfo } {Human-generated while executing "error {Human-generated}" @@ -110,7 +115,7 @@ test error-2.5 {errors in nested procedures} { test error-2.6 {errors in nested procedures} { catch foo2 b - set errorInfo + set ::errorInfo } {glorp2 while executing "error glorp2" @@ -122,10 +127,10 @@ test error-2.6 {errors in nested procedures} { test error-3.1 {errors in catch command} { list [catch {catch} msg] $msg -} {1 {wrong # args: should be "catch command ?varName?"}} +} {1 {wrong # args: should be "catch script ?resultVarName? ?optionVarName?"}} test error-3.2 {errors in catch command} { list [catch {catch a b c} msg] $msg -} {1 {wrong # args: should be "catch command ?varName?"}} +} {0 1} test error-3.3 {errors in catch command} { catch {unset a} set a(0) 22 @@ -136,27 +141,27 @@ catch {unset a} # More tests related to errorInfo and errorCode test error-4.1 {errorInfo and errorCode variables} { - list [catch {error msg1 msg2 msg3} msg] $msg $errorInfo $errorCode + list [catch {error msg1 msg2 msg3} msg] $msg $::errorInfo $::errorCode } {1 msg1 msg2 msg3} test error-4.2 {errorInfo and errorCode variables} { - list [catch {error msg1 {} msg3} msg] $msg $errorInfo $errorCode + list [catch {error msg1 {} msg3} msg] $msg $::errorInfo $::errorCode } {1 msg1 {msg1 while executing "error msg1 {} msg3"} msg3} test error-4.3 {errorInfo and errorCode variables} { - list [catch {error msg1 {}} msg] $msg $errorInfo $errorCode + list [catch {error msg1 {}} msg] $msg $::errorInfo $::errorCode } {1 msg1 {msg1 while executing "error msg1 {}"} NONE} test error-4.4 {errorInfo and errorCode variables} { - set errorCode bogus - list [catch {error msg1} msg] $msg $errorInfo $errorCode + set ::errorCode bogus + list [catch {error msg1} msg] $msg $::errorInfo $::errorCode } {1 msg1 {msg1 while executing "error msg1"} NONE} test error-4.5 {errorInfo and errorCode variables} { - set errorCode bogus - list [catch {error msg1 msg2 {}} msg] $msg $errorInfo $errorCode + set ::errorCode bogus + list [catch {error msg1 msg2 {}} msg] $msg $::errorInfo $::errorCode } {1 msg1 msg2 {}} # Errors in error command itself @@ -172,53 +177,66 @@ test error-5.2 {errors in error command} { test error-6.1 {catch must reset error state} { catch {error outer [catch {error inner inner.errorInfo inner.errorCode}]} - list $errorCode $errorInfo + list $::errorCode $::errorInfo +} {NONE 1} +test error-6.2 {catch must reset error state} { + catch {error outer [catch {return -level 0 -code error -errorcode BUG}]} + list $::errorCode $::errorInfo } {NONE 1} test error-6.3 {catch must reset error state} { - set errorCode BUG + set ::errorCode BUG catch {error outer [catch set]} - list $errorCode $errorInfo + list $::errorCode $::errorInfo } {NONE 1} test error-6.4 {catch must reset error state} { catch {error [catch {error foo bar baz}] 1} - list $errorCode $errorInfo + list $::errorCode $::errorInfo +} {NONE 1} +test error-6.5 {catch must reset error state} { + catch {error [catch {return -level 0 -code error -errorcode BUG}] 1} + list $::errorCode $::errorInfo +} {NONE 1} +test error-6.6 {catch must reset error state} { + catch {return -level 0 -code error -errorinfo [catch {error foo bar baz}]} + list $::errorCode $::errorInfo } {NONE 1} test error-6.7 {catch must reset error state} { proc foo {} { - return -code error -errorinfo [catch {error foo bar baz}] + return -code error -errorinfo [catch {error foo bar baz}] } catch foo - list $errorCode + list $::errorCode +} {NONE} +test error-6.8 {catch must reset error state} { + catch {return -level 0 -code error [catch {error foo bar baz}]} + list $::errorCode } {NONE} test error-6.9 {catch must reset error state} { proc foo {} { - return -code error [catch {error foo bar baz}] + return -code error [catch {error foo bar baz}] } catch foo - list $errorCode + list $::errorCode } {NONE} -namespace eval ::tcl::test::error { test error-7.0 {Bug 1397843} -body { - variable cmds - proc EIWrite args { - variable cmds - lappend cmds [lindex [info level -2] 0] - } - proc BadProc {} { - set i a - incr i - } - trace add variable ::errorInfo write [namespace code EIWrite] - catch BadProc - trace remove variable ::errorInfo write [namespace code EIWrite] - set cmds + variable cmds + proc EIWrite args { + variable cmds + lappend cmds [lindex [info level -2] 0] + } + proc BadProc {} { + set i a + incr i + } + trace add variable ::errorInfo write [namespace code EIWrite] + catch BadProc + trace remove variable ::errorInfo write [namespace code EIWrite] + set cmds } -match glob -result {*BadProc*} } namespace delete ::tcl::test::error - - # cleanup catch {rename p ""} ::tcltest::cleanupTests diff --git a/tests/eval.test b/tests/eval.test index 97d5801..ff50997 100644 --- a/tests/eval.test +++ b/tests/eval.test @@ -45,7 +45,7 @@ test eval-2.5 {error in eval'ed command: setting errorInfo} { set a 1 error "test error" }} msg - set errorInfo + set ::errorInfo } "test error while executing \"error \"test error\"\" @@ -56,18 +56,29 @@ test eval-2.5 {error in eval'ed command: setting errorInfo} { error \"test error\" }\"" +test eval-3.1 {eval and pure lists} { + eval [list list 1 2 3 4 5] +} {1 2 3 4 5} +test eval-3.2 {concatenating eval and pure lists} { + eval [list list 1] [list 2 3 4 5] +} {1 2 3 4 5} +test eval-3.3 {eval and canonical lists} { + set cmd [list list 1 2 3 4 5] + # Force existance of utf-8 rep + set dummy($cmd) $cmd + unset dummy + eval $cmd +} {1 2 3 4 5} +test eval-3.4 {concatenating eval and canonical lists} { + set cmd [list list 1] + set cmd2 [list 2 3 4 5] + # Force existance of utf-8 rep + set dummy($cmd) $cmd + set dummy($cmd2) $cmd2 + unset dummy + eval $cmd $cmd2 +} {1 2 3 4 5} + # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/event.test b/tests/event.test index d2e77db..a7122f9 100644 --- a/tests/event.test +++ b/tests/event.test @@ -186,6 +186,86 @@ test event-5.2 {Tcl_BackgroundError, HandleBgErrors procedures} { rename bgerror {} set x } {{a simple error}} +test event-5.3 {HandleBgErrors: [Bug 1670155]} -setup { + variable x + proc demo args {variable x done} + variable target [list [namespace which demo] x] + proc trial args {variable target; string length $target} + trace add execution demo enter [namespace code trial] + variable save [interp bgerror {}] + interp bgerror {} $target +} -body { + after 0 {error bar} + vwait [namespace which -variable x] +} -cleanup { + interp bgerror {} $save + unset x target save + rename demo {} + rename trial {} +} -result {} +test event-5.3.1 {Default [interp bgerror] handler} -body { + ::tcl::Bgerror +} -returnCodes error -match glob -result {*msg options*} +test event-5.4 {Default [interp bgerror] handler} -body { + ::tcl::Bgerror {} +} -returnCodes error -match glob -result {*msg options*} +test event-5.5 {Default [interp bgerror] handler} -body { + ::tcl::Bgerror {} {} {} +} -returnCodes error -match glob -result {*msg options*} +test event-5.6 {Default [interp bgerror] handler} -body { + ::tcl::Bgerror {} {} +} -returnCodes error -match glob -result {*-level*} +test event-5.7 {Default [interp bgerror] handler} -body { + ::tcl::Bgerror {} {-level foo} +} -returnCodes error -match glob -result {*expected integer*} +test event-5.8 {Default [interp bgerror] handler} -body { + ::tcl::Bgerror {} {-level 0} +} -returnCodes error -match glob -result {*-code*} +test event-5.9 {Default [interp bgerror] handler} -body { + ::tcl::Bgerror {} {-level 0 -code ok} +} -returnCodes error -match glob -result {*expected integer*} +test event-5.10 {Default [interp bgerror] handler} { + proc bgerror {m} {append ::res $m} + set ::res {} + ::tcl::Bgerror {} {-level 0 -code 0} + rename bgerror {} + set ::res +} {} +test event-5.11 {Default [interp bgerror] handler} { + proc bgerror {m} {append ::res $m} + set ::res {} + ::tcl::Bgerror msg {-level 0 -code 1} + rename bgerror {} + set ::res +} {msg} +test event-5.12 {Default [interp bgerror] handler} { + proc bgerror {m} {append ::res $m} + set ::res {} + ::tcl::Bgerror msg {-level 0 -code 2} + rename bgerror {} + set ::res +} {command returned bad code: 2} +test event-5.13 {Default [interp bgerror] handler} { + proc bgerror {m} {append ::res $m} + set ::res {} + ::tcl::Bgerror msg {-level 0 -code 3} + rename bgerror {} + set ::res +} {invoked "break" outside of a loop} +test event-5.14 {Default [interp bgerror] handler} { + proc bgerror {m} {append ::res $m} + set ::res {} + ::tcl::Bgerror msg {-level 0 -code 4} + rename bgerror {} + set ::res +} {invoked "continue" outside of a loop} +test event-5.15 {Default [interp bgerror] handler} { + proc bgerror {m} {append ::res $m} + set ::res {} + ::tcl::Bgerror msg {-level 0 -code 5} + rename bgerror {} + set ::res +} {command returned bad code: 5} test event-6.1 {BgErrorDeleteProc procedure} { catch {interp delete foo} @@ -285,6 +365,45 @@ test event-7.5 {correct behaviour when there is no bgerror [Bug 219142]} {exec} "error hello" ("after" script)}} +test event-7.6 {safe hidden bgerror fallback} { + variable result {} + interp create -safe safe + safe alias puts puts + safe alias result ::append [namespace which -variable result] + safe eval {proc bgerror m {result $m\n$::errorCode\n$::errorInfo\n}} + safe hide bgerror + safe eval after 0 error foo + update + interp delete safe + set result +} {foo +NONE +foo + while executing +"error foo" + ("after" script) +} + +test event-7.7 {safe hidden bgerror fallback} { + variable result {} + interp create -safe safe + safe alias puts puts + safe alias result ::append [namespace which -variable result] + safe eval {proc bgerror m {result $m\n$::errorCode\n$::errorInfo\n}} + safe hide bgerror + safe eval {proc bgerror m {error bar soom baz}} + safe eval after 0 error foo + update + interp delete safe + set result +} {foo +NONE +foo + while executing +"error foo" + ("after" script) +} + # someday : add a test checking that # when there is no bgerror, an error msg goes to stderr @@ -363,8 +482,8 @@ test event-9.4 {Tcl_DeleteExitHandler procedure} {stdio testexithandler} { test event-10.1 {Tcl_Exit procedure} {stdio} { set child [open |[list [interpreter]] r+] puts $child "exit 3" - list [catch {close $child} msg] $msg [lindex $errorCode 0] \ - [lindex $errorCode 2] + list [catch {close $child} msg] $msg [lindex $::errorCode 0] \ + [lindex $::errorCode 2] } {1 {child process exited abnormally} CHILDSTATUS 3} test event-11.1 {Tcl_VwaitCmd procedure} { @@ -405,7 +524,7 @@ test event-11.5 {Tcl_VwaitCmd procedure: round robin scheduling, 2 sources} {soc puts $s foobar close $s } - catch {set s1 [socket -server accept 0]} + catch {set s1 [socket -server accept -myaddr 127.0.0.1 0]} after 1000 catch {set s2 [socket 127.0.0.1 [lindex [fconfigure $s1 -sockname] 2]]} close $s1 diff --git a/tests/exec.test b/tests/exec.test index 46d4d92..810dfa6 100644 --- a/tests/exec.test +++ b/tests/exec.test @@ -27,6 +27,12 @@ set path(echo) [makeFile { exit } echo] +set path(echo2) [makeFile { + puts stdout [join $argv] + puts stderr [lindex $argv 1] + exit +} echo2] + set path(cat) [makeFile { if {$argv == {}} { set argv - @@ -79,6 +85,25 @@ set path(sh) [makeFile { } exit } sh] +set path(sh2) [makeFile { + if {[lindex $argv 0] != "-c"} { + error "sh: unexpected arguments $argv" + } + set cmd [lindex $argv 1] + lappend cmd ";" + + set newcmd {} + + foreach arg $cmd { + if {$arg == ";"} { + eval exec -ignorestderr >@stdout [list [info nameofexecutable]] $newcmd + set newcmd {} + continue + } + lappend newcmd $arg + } + exit +} sh2] set path(sleep) [makeFile { after [expr $argv*1000] @@ -215,8 +240,8 @@ test exec-4.5 {redirecting output and stderr to file} {exec} { # I/O redirection: input from file. -if { [set ::tcltest::testConstraints(exec)] } { -exec [interpreter] $path(echo) "Just a few thoughts" > $path(gorp.file) +if {[testConstraint exec]} { + exec [interpreter] $path(echo) "Just a few thoughts" > $path(gorp.file) } test exec-5.1 {redirecting input from file} {exec} { exec [interpreter] $path(cat) < $path(gorp.file) @@ -313,7 +338,7 @@ test exec-9.6 {commands returning errors} {exec} { } {1 {error msg}} test exec-9.7 {commands returning errors} {exec stdio} { list [catch {exec [interpreter] "$path(sh)" -c "\"$path(echo)\" error msg 1>&2 ; \"$path(sleep)\" 1" \ - | [interpreter] "$path(sh)" -c "\"$path(echo)\" error msg 1>&2 ; \"$path(sleep)\" 1"} msg] $msg + | [interpreter] "$path(sh)" -c "\"$path(echo)\" error msg 1>&2 ; \"$path(sleep)\" 1"} msg] $msg } {1 {error msg error msg}} @@ -430,11 +455,11 @@ test exec-11.5 {commands in background} {exec} { # Make sure that background commands are properly reaped when # they eventually die. -if { [set ::tcltest::testConstraints(exec)] } { -exec [interpreter] $path(sleep) 3 +if {[testConstraint exec]} { + exec [interpreter] $path(sleep) 3 } test exec-12.1 {reaping background processes} \ - {exec unixOnly nonPortable} { + {exec unix nonPortable} { for {set i 0} {$i < 20} {incr i} { exec echo foo > /dev/null & } @@ -443,7 +468,7 @@ test exec-12.1 {reaping background processes} \ lindex $msg 0 } 0 test exec-12.2 {reaping background processes} \ - {exec unixOnly nonPortable} { + {exec unix nonPortable} { exec sleep 2 | sleep 2 | sleep 2 & catch {exec ps | fgrep -i "sleep" | fgrep -i -v fgrep | wc} msg set x [lindex $msg 0] @@ -452,7 +477,7 @@ test exec-12.2 {reaping background processes} \ list $x [lindex $msg 0] } {3 0} test exec-12.3 {reaping background processes} \ - {exec unixOnly nonPortable} { + {exec unix nonPortable} { exec sleep 1000 & exec sleep 1000 & set x [exec ps | fgrep "sleep" | fgrep -v fgrep] @@ -520,7 +545,7 @@ test exec-13.5 {extended exit result codes: max value} { test exec-13.6 {extended exit result codes: signalled} { -constraints {win} -setup { - set tmp [makeFile {exit 0xffffffff} tmpfile.exec-13.6] + set tmp [makeFile {exit 0xC0000016} tmpfile.exec-13.6] } -body { list [catch {exec [interpreter] $tmp} err]\ @@ -542,10 +567,14 @@ test exec-14.2 {-keepnewline switch} {exec} { } {1 {wrong # args: should be "exec ?switches? arg ?arg ...?"}} test exec-14.3 {unknown switch} {exec} { list [catch {exec -gorp} msg] $msg -} {1 {bad switch "-gorp": must be -keepnewline or --}} +} {1 {bad switch "-gorp": must be -ignorestderr, -keepnewline, or --}} test exec-14.4 {-- switch} {exec} { list [catch {exec -- -gorp} msg] [string tolower $msg] } {1 {couldn't execute "-gorp": no such file or directory}} +test exec-14.5 {-ignorestderr switch} {exec} { + # Alas, the use of -ignorestderr is buried here :-( + exec [interpreter] $path(sh2) -c [list $path(echo2) foo bar] 2>@1 +} "foo bar\nbar" # Redirecting standard error separately from standard output @@ -677,7 +706,7 @@ test exec-19.1 {exec >> uses O_APPEND} { # cleanup -foreach file {script gorp.file gorp.file2 echo cat wc sh sleep exit err} { +foreach file {script gorp.file gorp.file2 echo echo2 cat wc sh sh2 sleep exit err} { removeFile $file } unset -nocomplain path diff --git a/tests/execute.test b/tests/execute.test index 1a95c44..b460cfe 100644 --- a/tests/execute.test +++ b/tests/execute.test @@ -19,22 +19,20 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -catch {eval namespace delete [namespace children :: test_ns_*]} +catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename foo ""} catch {unset x} catch {unset y} catch {unset msg} -::tcltest::testConstraint testobj \ - [expr {[info commands testobj] != {} \ - && [info commands testdoubleobj] != {} \ - && [info commands teststringobj] != {} \ - && [info commands testobj] != {}}] +testConstraint testobj [expr { + [llength [info commands testobj]] + && [llength [info commands testdoubleobj]] + && [llength [info commands teststringobj]] +}] -::tcltest::testConstraint longIs32bit \ - [expr {int(0x80000000) < 0}] -::tcltest::testConstraint testexprlongobj \ - [llength [info commands testexprlongobj]] +testConstraint longIs32bit [expr {int(0x80000000) < 0}] +testConstraint testexprlongobj [llength [info commands testexprlongobj]] # Tests for the omnibus TclExecuteByteCode function: @@ -507,7 +505,7 @@ test execute-3.77 {TclExecuteByteCode, INST_TRY_CVT_TO_NUMERIC, op is non-numeri # INST_PUSH_RETURN_CODE not tested test execute-4.1 {Tcl_GetCommandFromObj, convert to tclCmdNameType} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {unset x} catch {unset y} namespace eval test_ns_1 { @@ -525,7 +523,7 @@ test execute-4.1 {Tcl_GetCommandFromObj, convert to tclCmdNameType} { [catch {namespace which -command ${x}${y}:cmd2} msg] $msg } {::test_ns_1::test_ns_2::cmd1 0 {} 0 {}} test execute-4.2 {Tcl_GetCommandFromObj, check if cached tclCmdNameType is invalid} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename foo ""} catch {unset l} proc foo {} { @@ -547,7 +545,7 @@ test execute-4.2 {Tcl_GetCommandFromObj, check if cached tclCmdNameType is inval set l } {::foo ::test_ns_1::foo} test execute-4.3 {Tcl_GetCommandFromObj, command never found} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename foo ""} namespace eval test_ns_1 { proc foo {} { @@ -565,7 +563,7 @@ test execute-4.3 {Tcl_GetCommandFromObj, command never found} { } {::test_ns_1::foo {} 0 {}} test execute-5.1 {SetCmdNameFromAny, set cmd name to empty heap string if NULL} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {unset l} proc {} {} {return {}} {} @@ -632,7 +630,7 @@ test execute-6.6 {TclCompEvalObj: proc-body bytecode invalid for script} { test execute-6.7 {TclCompEvalObj: bytecode context validation} { set script { llength {} } namespace eval foo { - proc llength {args} {return AHA!} + proc llength {args} {return AHA!} } set result {} lappend result [if 1 $script] @@ -645,7 +643,7 @@ test execute-6.8 {TclCompEvalObj: bytecode name resolution epoch validation} { set result {} lappend result [namespace eval foo $script] namespace eval foo { - proc llength {args} {return AHA!} + proc llength {args} {return AHA!} } lappend result [namespace eval foo $script] namespace delete foo @@ -695,7 +693,7 @@ test execute-6.12 {Tcl_ExprObj: exprcode interp validation} { lappend result [e $e] interp delete slave interp create slave - interp alias {} e slave expr + interp alias {} e slave expr lappend result [e $e] interp delete slave set result @@ -715,7 +713,7 @@ test execute-6.13 {Tcl_ExprObj: exprcode epoch validation} { test execute-6.14 {Tcl_ExprObj: exprcode context validation} { set e { [llength {}]+1 } namespace eval foo { - proc llength {args} {return 1} + proc llength {args} {return 1} } set result {} lappend result [expr $e] @@ -728,7 +726,7 @@ test execute-6.15 {Tcl_ExprObj: exprcode name resolution epoch validation} { set result {} lappend result [namespace eval foo {expr $e}] namespace eval foo { - proc llength {args} {return 1} + proc llength {args} {return 1} } lappend result [namespace eval foo {expr $e}] namespace delete foo @@ -768,125 +766,124 @@ test execute-6.18 {Tcl_ExprObj: exprcode context validation} { set result } {0 1} - -test execute-7.0 {Wide int handling in INST_JUMP_FALSE/LAND} {longIs32bit} { +test execute-7.0 {Wide int handling in INST_JUMP_FALSE/LAND} { set x 0x100000000 expr {$x && 1} } 1 -test execute-7.1 {Wide int handling in INST_JUMP_FALSE/LAND} {longIs32bit} { +test execute-7.1 {Wide int handling in INST_JUMP_FALSE/LAND} { expr {0x100000000 && 1} } 1 -test execute-7.2 {Wide int handling in INST_JUMP_FALSE/LAND} {longIs32bit} { +test execute-7.2 {Wide int handling in INST_JUMP_FALSE/LAND} { expr {1 && 0x100000000} } 1 -test execute-7.3 {Wide int handling in INST_JUMP_FALSE/LAND} {longIs32bit} { +test execute-7.3 {Wide int handling in INST_JUMP_FALSE/LAND} { expr {wide(0x100000000) && 1} } 1 -test execute-7.4 {Wide int handling in INST_JUMP_FALSE/LAND} {longIs32bit} { +test execute-7.4 {Wide int handling in INST_JUMP_FALSE/LAND} { expr {1 && wide(0x100000000)} } 1 -test execute-7.5 {Wide int handling in INST_EQ} {longIs32bit} { +test execute-7.5 {Wide int handling in INST_EQ} { expr {4 == (wide(1)+wide(3))} } 1 -test execute-7.6 {Wide int handling in INST_EQ and [incr]} {longIs32bit} { +test execute-7.6 {Wide int handling in INST_EQ and [incr]} { set x 399999999999 expr {400000000000 == [incr x]} } 1 # wide ints have more bits of precision than doubles, but we convert anyway -test execute-7.7 {Wide int handling in INST_EQ and [incr]} {longIs32bit} { +test execute-7.7 {Wide int handling in INST_EQ and [incr]} { set x [expr {wide(1)<<62}] set y [expr {$x+1}] expr {double($x) == double($y)} } 1 -test execute-7.8 {Wide int conversions can change sign} {longIs32bit} { +test execute-7.8 {Wide int conversions can change sign} longIs32bit { set x 0x80000000 expr {int($x) < wide($x)} } 1 -test execute-7.9 {Wide int handling in INST_MOD} {longIs32bit} { +test execute-7.9 {Wide int handling in INST_MOD} { expr {(wide(1)<<60) % ((wide(47)<<45)-1)} } 316659348800185 -test execute-7.10 {Wide int handling in INST_MOD} {longIs32bit} { +test execute-7.10 {Wide int handling in INST_MOD} { expr {((wide(1)<<60)-1) % 0x400000000} } 17179869183 -test execute-7.11 {Wide int handling in INST_LSHIFT} {longIs32bit} { +test execute-7.11 {Wide int handling in INST_LSHIFT} { expr wide(42)<<30 } 45097156608 -test execute-7.12 {Wide int handling in INST_LSHIFT} {longIs32bit} { +test execute-7.12 {Wide int handling in INST_LSHIFT} { expr 12345678901<<3 } 98765431208 -test execute-7.13 {Wide int handling in INST_RSHIFT} {longIs32bit} { +test execute-7.13 {Wide int handling in INST_RSHIFT} { expr 0x543210febcda9876>>7 } 47397893236700464 -test execute-7.14 {Wide int handling in INST_RSHIFT} {longIs32bit} { - expr 0x9876543210febcda>>7 +test execute-7.14 {Wide int handling in INST_RSHIFT} { + expr wide(0x9876543210febcda)>>7 } -58286587177206407 -test execute-7.15 {Wide int handling in INST_BITOR} {longIs32bit} { - expr 0x9876543210febcda | 0x543210febcda9876 +test execute-7.15 {Wide int handling in INST_BITOR} { + expr wide(0x9876543210febcda) | 0x543210febcda9876 } -2560765885044310786 -test execute-7.16 {Wide int handling in INST_BITXOR} {longIs32bit} { - expr 0x9876543210febcda ^ 0x543210febcda9876 +test execute-7.16 {Wide int handling in INST_BITXOR} { + expr wide(0x9876543210febcda) ^ 0x543210febcda9876 } -3727778945703861076 -test execute-7.17 {Wide int handling in INST_BITAND} {longIs32bit} { - expr 0x9876543210febcda & 0x543210febcda9876 +test execute-7.17 {Wide int handling in INST_BITAND} { + expr wide(0x9876543210febcda) & 0x543210febcda9876 } 1167013060659550290 -test execute-7.18 {Wide int handling in INST_ADD} {longIs32bit} { +test execute-7.18 {Wide int handling in INST_ADD} { expr wide(0x7fffffff)+wide(0x7fffffff) } 4294967294 -test execute-7.19 {Wide int handling in INST_ADD} {longIs32bit} { +test execute-7.19 {Wide int handling in INST_ADD} { expr 0x7fffffff+wide(0x7fffffff) } 4294967294 -test execute-7.20 {Wide int handling in INST_ADD} {longIs32bit} { +test execute-7.20 {Wide int handling in INST_ADD} { expr wide(0x7fffffff)+0x7fffffff } 4294967294 -test execute-7.21 {Wide int handling in INST_ADD} {longIs32bit} { +test execute-7.21 {Wide int handling in INST_ADD} { expr double(0x7fffffff)+wide(0x7fffffff) } 4294967294.0 -test execute-7.22 {Wide int handling in INST_ADD} {longIs32bit} { +test execute-7.22 {Wide int handling in INST_ADD} { expr wide(0x7fffffff)+double(0x7fffffff) } 4294967294.0 -test execute-7.23 {Wide int handling in INST_SUB} {longIs32bit} { +test execute-7.23 {Wide int handling in INST_SUB} { expr 0x123456789a-0x20406080a } 69530054800 -test execute-7.24 {Wide int handling in INST_MULT} {longIs32bit} { +test execute-7.24 {Wide int handling in INST_MULT} { expr 0x123456789a*193 } 15090186251290 -test execute-7.25 {Wide int handling in INST_DIV} {longIs32bit} { +test execute-7.25 {Wide int handling in INST_DIV} { expr 0x123456789a/193 } 405116546 -test execute-7.26 {Wide int handling in INST_UPLUS} {longIs32bit} { +test execute-7.26 {Wide int handling in INST_UPLUS} { set x 0x123456871234568 expr {+ $x} } 81985533099853160 -test execute-7.27 {Wide int handling in INST_UMINUS} {longIs32bit} { +test execute-7.27 {Wide int handling in INST_UMINUS} { set x 0x123456871234568 expr {- $x} } -81985533099853160 -test execute-7.28 {Wide int handling in INST_LNOT} {longIs32bit} { +test execute-7.28 {Wide int handling in INST_LNOT} { set x 0x123456871234568 expr {! $x} } 0 -test execute-7.29 {Wide int handling in INST_BITNOT} {longIs32bit} { +test execute-7.29 {Wide int handling in INST_BITNOT} { set x 0x123456871234568 expr {~ $x} } -81985533099853161 -test execute-7.30 {Wide int handling in function call} {longIs32bit} { +test execute-7.30 {Wide int handling in function call} { set x 0x12345687123456 incr x expr {log($x) == log(double($x))} } 1 -test execute-7.31 {Wide int handling in abs()} {longIs32bit} { +test execute-7.31 {Wide int handling in abs()} { set x 0xa23456871234568 incr x set y 0x123456871234568 concat [expr {abs($x)}] [expr {abs($y)}] } {730503879441204585 81985533099853160} -test execute-7.32 {Wide int handling} {longIs32bit} { - expr {1024 * 1024 * 1024 * 1024} +test execute-7.32 {Wide int handling} longIs32bit { + expr {int(1024 * 1024 * 1024 * 1024)} } 0 -test execute-7.33 {Wide int handling} {longIs32bit} { - expr {0x1 * 1024 * 1024 * 1024 * 1024} +test execute-7.33 {Wide int handling} longIs32bit { + expr {int(0x1 * 1024 * 1024 * 1024 * 1024)} } 0 -test execute-7.34 {Wide int handling} {longIs32bit} { +test execute-7.34 {Wide int handling} { expr {wide(0x1) * 1024 * 1024 * 1024 * 1024} } 1099511627776 @@ -902,6 +899,77 @@ test execute-8.1 {Stack protection} -setup { rename whatever {} } -returnCodes error -match glob -result * +test execute-8.2 {Stack restoration} -body { + # Test for [Bug #816641], correct restoration + # of the stack top after the stack is grown + proc f {args} { f bee bop } + catch f msg + set msg + } -setup { + # Avoid crashes when system stack size is limited (thread-enabled!) + set limit [interp recursionlimit {}] + interp recursionlimit {} 100 + } -cleanup { + interp recursionlimit {} $limit + } -result {too many nested evaluations (infinite loop?)} + +test execute-8.3 {Stack restoration} -body { + # Test for [Bug #1055676], correct restoration + # of the stack top after the epoch is bumped and + # the stack is grown in a call from a nested evaluation + set arglst [string repeat "a " 1000] + proc f {args} "f $arglst" + proc run {} { + # bump the interp's epoch + rename ::set ::dummy + rename ::dummy ::set + catch f msg + set msg + } + run + } -setup { + # Avoid crashes when system stack size is limited (thread-enabled!) + set limit [interp recursionlimit {}] + interp recursionlimit {} 100 + } -cleanup { + interp recursionlimit {} $limit + } -result {too many nested evaluations (infinite loop?)} + +test execute-8.4 {Compile epoch bump effect on stack trace} -setup { + proc foo {} { + error bar + } + proc FOO {} { + catch {error bar} m o + rename ::set ::dummy + rename ::dummy ::set + return -options $o $m + } +} -body { + catch foo m o + set stack1 [dict get $o -errorinfo] + catch FOO m o + set stack2 [string map {FOO foo} [dict get $o -errorinfo]] + expr {$stack1 eq $stack2 ? {} : "These differ:\n$stack1\n$stack2"} +} -cleanup { + rename foo {} + rename FOO {} +} -result {} + +test execute-9.1 {Interp result resetting [Bug 1522803]} { + set c 0 + catch { + catch {set foo} + expr {1/$c} + } + if {[string match *foo* $::errorInfo]} { + set result "Bad errorInfo: $::errorInfo" + } else { + set result SUCCESS + } + set result +} SUCCESS + test execute-10.2 {Bug 2802881} -setup { interp create slave } -body { @@ -919,7 +987,7 @@ test execute-10.2 {Bug 2802881} -setup { if {[info commands testobj] != {}} { testobj freeallvars } -catch {eval namespace delete [namespace children :: test_ns_*]} +catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename foo ""} catch {rename p ""} catch {rename {} ""} @@ -929,3 +997,7 @@ catch {unset y} catch {unset msg} ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/expr-old.test b/tests/expr-old.test index 3f29341..c05a925 100644 --- a/tests/expr-old.test +++ b/tests/expr-old.test @@ -18,13 +18,74 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -if {([catch {expr T1()} msg] == 1) && ($msg == {unknown math function "T1"})} { - set gotT1 0 - puts "This application hasn't been compiled with the \"T1\" and" - puts "\"T2\" math functions, so I'll skip some of the expr tests." +testConstraint testexprlong [llength [info commands testexprlong]] +testConstraint testexprdouble [llength [info commands testexprdouble]] +testConstraint testexprstring [llength [info commands testexprstring]] +testConstraint longIs32bit [expr {int(0x80000000) < 0}] + +if {[catch {expr T1()} msg] && $msg eq {invalid command name "tcl::mathfunc::T1"}} { + testConstraint testmathfunctions 0 } else { - set gotT1 1 + testConstraint testmathfunctions 1 +} + +# Big test for correct ordering of data in [expr] + +proc testIEEE {} { + variable ieeeValues + binary scan [binary format dd -1.0 1.0] c* c + switch -exact -- $c { + {0 0 0 0 0 0 -16 -65 0 0 0 0 0 0 -16 63} { + # little endian + binary scan \x00\x00\x00\x00\x00\x00\xf0\xff d \ + ieeeValues(-Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf0\xbf d \ + ieeeValues(-Normal) + binary scan \x00\x00\x00\x00\x00\x00\x08\x80 d \ + ieeeValues(-Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\x00\x80 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x00\x00\x00\x00\x00\x08\x00 d \ + ieeeValues(+Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x3f d \ + ieeeValues(+Normal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x7f d \ + ieeeValues(+Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf8\x7f d \ + ieeeValues(NaN) + set ieeeValues(littleEndian) 1 + return 1 + } + {-65 -16 0 0 0 0 0 0 63 -16 0 0 0 0 0 0} { + binary scan \xff\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Infinity) + binary scan \xbf\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Normal) + binary scan \x80\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Subnormal) + binary scan \x80\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Subnormal) + binary scan \x3f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Normal) + binary scan \x7f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Infinity) + binary scan \x7f\xf8\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(NaN) + set ieeeValues(littleEndian) 0 + return 1 + } + default { + return 0 + } + } } +testConstraint ieeeFloatingPoint [testIEEE] # First, test all of the integer operators individually. @@ -91,7 +152,7 @@ test expr-old-1.53 {integer operators} { # automatic conversion to integers where needed. test expr-old-2.1 {floating-point operators} {expr -4.2} -4.2 -test expr-old-2.2 {floating-point operators} {expr -(1.1+4.2)} -5.3 +test expr-old-2.2 {floating-point operators} {expr -(1.125+4.25)} -5.375 test expr-old-2.3 {floating-point operators} {expr +5.7} 5.7 test expr-old-2.4 {floating-point operators} {expr +--+-62.0} -62.0 test expr-old-2.5 {floating-point operators} {expr !2.1} 0 @@ -194,12 +255,8 @@ test expr-old-4.25 {string operators} {expr {"abd" ne ""}} 1 test expr-old-4.26 {string operators} {expr {"" ne ""}} 0 test expr-old-4.27 {string operators} {expr {"longerstring" eq "shorter"}} 0 test expr-old-4.28 {string operators} {expr {"longerstring" ne "shorter"}} 1 - -# The following tests are non-portable because on some systems "+" -# and "-" can be parsed as numbers. - -test expr-old-4.29 {string operators} {nonPortable} {expr {"0" == "+"}} 0 -test expr-old-4.30 {string operators} {nonPortable} {expr {"0" == "-"}} 0 +test expr-old-4.29 {string operators} {expr {"0" == "+"}} 0 +test expr-old-4.30 {string operators} {expr {"0" == "-"}} 0 test expr-old-4.31 {string operators} {expr {1?"foo":"bar"}} foo test expr-old-4.32 {string operators} {expr {0?"foo":"bar"}} bar @@ -406,7 +463,7 @@ test expr-old-23.8 {double quotes} { # Numbers in various bases. test expr-old-24.1 {numbers in different bases} {expr 0x20} 32 -test expr-old-24.2 {numbers in different bases} {expr 015} 13 +test expr-old-24.2 {numbers in different bases} {expr 0o15} 13 # Conversions between various data types. @@ -428,7 +485,7 @@ test expr-old-25.15 {type conversions} {expr {24.1 > "24.1a"}} 0 test expr-old-25.16 {type conversions} {expr 2+2.5} 4.5 test expr-old-25.17 {type conversions} {expr 2+2.5} 4.5 test expr-old-25.18 {type conversions} {expr 2.0e2} 200.0 -test expr-old-25.19 {type conversions} {eformat} {expr 2.0e15} 2e+15 +test expr-old-25.19 {type conversions} {expr 2.0e15} 2000000000000000.0 test expr-old-25.20 {type conversions} {expr 10.0} 10.0 # Various error conditions. @@ -436,12 +493,12 @@ test expr-old-25.20 {type conversions} {expr 10.0} 10.0 test expr-old-26.1 {error conditions} { list [catch {expr 2+"a"} msg] $msg } {1 {can't use non-numeric string as operand of "+"}} -test expr-old-26.2 {error conditions} { - list [catch {expr 2+4*} msg] $msg -} {1 {syntax error in expression "2+4*": premature end of expression}} -test expr-old-26.3 {error conditions} { - list [catch {expr 2+4*(} msg] $msg -} {1 {syntax error in expression "2+4*(": premature end of expression}} +test expr-old-26.2 {error conditions} -body { + expr 2+4* +} -returnCodes error -match glob -result * +test expr-old-26.3 {error conditions} -body { + expr 2+4*( +} -returnCodes error -match glob -result * catch {unset _non_existent_} test expr-old-26.4 {error conditions} { list [catch {expr 2+$_non_existent_} msg] $msg @@ -453,45 +510,48 @@ test expr-old-26.5 {error conditions} { test expr-old-26.6 {error conditions} { list [catch {expr {2+[set a]}} msg] $msg } {1 {can't use non-numeric string as operand of "+"}} -test expr-old-26.7 {error conditions} { - list [catch {expr {2+(4}} msg] $msg -} {1 {syntax error in expression "2+(4": looking for close parenthesis}} +test expr-old-26.7 {error conditions} -body { + expr {2+(4} +} -returnCodes error -match glob -result * test expr-old-26.8 {error conditions} { list [catch {expr 2/0} msg] $msg $errorCode } {1 {divide by zero} {ARITH DIVZERO {divide by zero}}} test expr-old-26.9 {error conditions} { list [catch {expr 2%0} msg] $msg $errorCode } {1 {divide by zero} {ARITH DIVZERO {divide by zero}}} -test expr-old-26.10 {error conditions} { +test expr-old-26.10a {error conditions} !ieeeFloatingPoint { list [catch {expr 2.0/0.0} msg] $msg $errorCode } {1 {divide by zero} {ARITH DIVZERO {divide by zero}}} -test expr-old-26.11 {error conditions} { - list [catch {expr 2#} msg] $msg -} {1 {syntax error in expression "2#": extra tokens at end of expression}} -test expr-old-26.12 {error conditions} { - list [catch {expr a.b} msg] $msg -} {1 {syntax error in expression "a.b": variable references require preceding $}} +test expr-old-26.10b {error conditions} ieeeFloatingPoint { + list [catch {expr 2.0/0.0} msg] $msg +} {0 Inf} +test expr-old-26.11 {error conditions} -body { + expr 2# +} -returnCodes error -match glob -result * +test expr-old-26.12 {error conditions} -body { + expr a.b +} -returnCodes error -match glob -result * test expr-old-26.13 {error conditions} { list [catch {expr {"a"/"b"}} msg] $msg } {1 {can't use non-numeric string as operand of "/"}} -test expr-old-26.14 {error conditions} { - list [catch {expr 2:3} msg] $msg -} {1 {syntax error in expression "2:3": extra tokens at end of expression}} -test expr-old-26.15 {error conditions} { - list [catch {expr a@b} msg] $msg -} {1 {syntax error in expression "a@b": variable references require preceding $}} +test expr-old-26.14 {error conditions} -body { + expr 2:3 +} -returnCodes error -match glob -result * +test expr-old-26.15 {error conditions} -body { + expr a@b +} -returnCodes error -match glob -result * test expr-old-26.16 {error conditions} { list [catch {expr a[b} msg] $msg } {1 {missing close-bracket}} -test expr-old-26.17 {error conditions} { - list [catch {expr a`b} msg] $msg -} {1 {syntax error in expression "a`b": variable references require preceding $}} -test expr-old-26.18 {error conditions} { - list [catch {expr \"a\"\{b} msg] $msg -} {1 syntax\ error\ in\ expression\ \"\"a\"\{b\":\ extra\ tokens\ at\ end\ of\ expression} -test expr-old-26.19 {error conditions} { - list [catch {expr a} msg] $msg -} {1 {syntax error in expression "a": variable references require preceding $}} +test expr-old-26.17 {error conditions} -body { + expr a`b +} -returnCodes error -match glob -result * +test expr-old-26.18 {error conditions} -body { + expr \"a\"\{b +} -returnCodes error -match glob -result * +test expr-old-26.19 {error conditions} -body { + expr a +} -returnCodes error -match glob -result * test expr-old-26.20 {error conditions} { list [catch expr msg] $msg } {1 {wrong # args: should be "expr arg ?arg ...?"}} @@ -539,12 +599,12 @@ test expr-old-27.10 {cancelled evaluation} { set x -1.0 list [catch {expr {($x > 0) ? round(log($x)) : 0}} msg] $msg } {0 0} -test expr-old-27.11 {cancelled evaluation} { - list [catch {expr {0 && foo}} msg] $msg -} {1 {syntax error in expression "0 && foo": variable references require preceding $}} -test expr-old-27.12 {cancelled evaluation} { - list [catch {expr {0 ? 1 : foo}} msg] $msg -} {1 {syntax error in expression "0 ? 1 : foo": variable references require preceding $}} +test expr-old-27.11 {cancelled evaluation} -body { + expr {0 && foo} +} -returnCodes error -match glob -result * +test expr-old-27.12 {cancelled evaluation} -body { + expr {0 ? 1 : foo} +} -returnCodes error -match glob -result * # Tcl_ExprBool as used in "if" statements @@ -616,12 +676,12 @@ test expr-old-28.14 {Tcl_ExprBool usage} { # Operands enclosed in braces test expr-old-29.1 {braces} {expr {{abc}}} abc -test expr-old-29.2 {braces} {expr {{00010}}} 8 +test expr-old-29.2 {braces} {expr {{0o0010}}} 8 test expr-old-29.3 {braces} {expr {{3.1200000}}} 3.12 test expr-old-29.4 {braces} {expr {{a{b}{1 {2 3}}c}}} "a{b}{1 {2 3}}c" -test expr-old-29.5 {braces} { - list [catch {expr "\{abc"} msg] $msg -} {1 {missing close-brace}} +test expr-old-29.5 {braces} -body { + expr "\{abc" +} -returnCodes error -match glob -result * # Very long values @@ -642,15 +702,15 @@ test expr-old-30.2 {long values} { test expr-old-31.1 {multiple arguments to expr command} { expr 4 + ( 6 *12) -3 } 73 -test expr-old-31.2 {multiple arguments to expr command} { - list [catch {expr 2 + (3 + 4} msg] $msg -} {1 {syntax error in expression "2 + (3 + 4": looking for close parenthesis}} -test expr-old-31.3 {multiple arguments to expr command} { - list [catch {expr 2 + 3 +} msg] $msg -} {1 {syntax error in expression "2 + 3 +": premature end of expression}} -test expr-old-31.4 {multiple arguments to expr command} { - list [catch {expr 2 + 3 )} msg] $msg -} {1 {syntax error in expression "2 + 3 )": extra tokens at end of expression}} +test expr-old-31.2 {multiple arguments to expr command} -body { + expr 2 + (3 + 4 +} -returnCodes error -match glob -result * +test expr-old-31.3 {multiple arguments to expr command} -body { + expr 2 + 3 + +} -returnCodes error -match glob -result * +test expr-old-31.4 {multiple arguments to expr command} -body { + expr 2 + 3 ) +} -returnCodes error -match glob -result * # Math functions @@ -727,17 +787,13 @@ test expr-old-32.24 {math functions in expressions} { format %.6g [expr abs(66)] } {66} -# The following test is different for 32-bit versus 64-bit architectures. +test expr-old-32.25a {math functions in expressions} { + expr abs(0x8000000000000000) +} [expr 1<<63] -if {0x80000000 > 0} { - test expr-old-32.25 {math functions in expressions} {nonPortable} { - list [catch {expr abs(0x8000000000000000)} msg] $msg - } {1 {integer value too large to represent}} -} else { - test expr-old-32.25 {math functions in expressions} {nonPortable} { - list [catch {expr abs(0x80000000)} msg] $msg - } {1 {integer value too large to represent}} -} +test expr-old-32.25b {math functions in expressions} { + expr abs(0x80000000) +} 2147483648 test expr-old-32.26 {math functions in expressions} { expr double(1) @@ -761,11 +817,11 @@ test expr-old-32.32 {math functions in expressions} { expr int(-1.6) } {-1} test expr-old-32.33 {math functions in expressions} { - list [catch {expr int(1e60)} msg] $msg -} {1 {integer value too large to represent}} + expr int(1e60) +} 0 test expr-old-32.34 {math functions in expressions} { - list [catch {expr int(-1e60)} msg] $msg -} {1 {integer value too large to represent}} + expr int(-1e60) +} 0 test expr-old-32.35 {math functions in expressions} { expr round(1.49) } {1} @@ -779,40 +835,38 @@ test expr-old-32.38 {math functions in expressions} { expr round(-1.51) } {-2} test expr-old-32.39 {math functions in expressions} { - list [catch {expr round(1e60)} msg] $msg -} {1 {integer value too large to represent}} + expr round(1e60) +} 999999999999999949387135297074018866963645011013410073083904 test expr-old-32.40 {math functions in expressions} { - list [catch {expr round(-1e60)} msg] $msg -} {1 {integer value too large to represent}} + expr round(-1e60) +} -999999999999999949387135297074018866963645011013410073083904 test expr-old-32.41 {math functions in expressions} { list [catch {expr pow(1.0 + 3.0 - 2, .8 * 5)} msg] $msg } {0 16.0} test expr-old-32.42 {math functions in expressions} { list [catch {expr hypot(5*.8,3)} msg] $msg } {0 5.0} -if $gotT1 { - test expr-old-32.43 {math functions in expressions} { - expr 2*T1() - } 246 - test expr-old-32.44 {math functions in expressions} { - expr T2()*3 - } 1035 -} +test expr-old-32.43 {math functions in expressions} testmathfunctions { + expr 2*T1() +} 246 +test expr-old-32.44 {math functions in expressions} testmathfunctions { + expr T2()*3 +} 1035 test expr-old-32.45 {math functions in expressions} { expr (0 <= rand()) && (rand() < 1) } {1} -test expr-old-32.46 {math functions in expressions} { +test expr-old-32.46 {math functions in expressions} -body { list [catch {expr rand(24)} msg] $msg -} {1 {too many arguments for math function}} -test expr-old-32.47 {math functions in expressions} { +} -match glob -result {1 {too many arguments for math function*}} +test expr-old-32.47 {math functions in expressions} -body { list [catch {expr srand()} msg] $msg -} {1 {too few arguments for math function}} -test expr-old-32.48 {math functions in expressions} { - list [catch {expr srand(3.79)} msg] $msg -} {1 {expected integer but got "3.79"}} -test expr-old-32.49 {math functions in expressions} { - list [catch {expr srand("")} msg] $msg -} {1 {argument to math function didn't have numeric value}} +} -match glob -result {1 {too few arguments for math function*}} +test expr-old-32.48 {math functions in expressions} -body { + expr srand(3.79) +} -returnCodes error -match glob -result * +test expr-old-32.49 {math functions in expressions} -body { + expr srand("") +} -returnCodes error -match glob -result * test expr-old-32.50 {math functions in expressions} { set result [expr round(srand(12345) * 1000)] for {set i 0} {$i < 10} {incr i} { @@ -820,9 +874,9 @@ test expr-old-32.50 {math functions in expressions} { } set result } {97 834 948 36 12 51 766 585 914 784 333} -test expr-old-32.51 {math functions in expressions} { - list [catch {expr {srand([lindex "6ty" 0])}} msg] $msg -} {1 {argument to math function didn't have numeric value}} +test expr-old-32.51 {math functions in expressions} -body { + expr {srand([lindex "6ty" 0])} +} -returnCodes error -match glob -result * test expr-old-32.52 {math functions in expressions} { expr {srand(int(1<<37)) < 1} } {1} @@ -843,65 +897,70 @@ test expr-old-33.4 {conversions and fancy args to math functions} { format %.6g [expr cos(acos(0.1))] } 0.1 -test expr-old-34.1 {errors in math functions} { +test expr-old-34.1 {errors in math functions} -body { list [catch {expr func_2(1.0)} msg] $msg -} {1 {unknown math function "func_2"}} -test expr-old-34.2 {errors in math functions} { - list [catch {expr func|(1.0)} msg] $msg -} {1 {syntax error in expression "func|(1.0)": variable references require preceding $}} +} -match glob -result {1 {* "*func_2"}} +test expr-old-34.2 {errors in math functions} -body { + expr func|(1.0) +} -returnCodes error -match glob -result * test expr-old-34.3 {errors in math functions} { list [catch {expr {hypot("a b", 2.0)}} msg] $msg -} {1 {argument to math function didn't have numeric value}} -test expr-old-34.4 {errors in math functions} { - list [catch {expr hypot(1.0 2.0)} msg] $msg -} {1 {syntax error in expression "hypot(1.0 2.0)": missing close parenthesis at end of function call}} -test expr-old-34.5 {errors in math functions} { - list [catch {expr hypot(1.0, 2.0} msg] $msg -} {1 {syntax error in expression "hypot(1.0, 2.0": missing close parenthesis at end of function call}} -test expr-old-34.6 {errors in math functions} { - list [catch {expr hypot(1.0 ,} msg] $msg -} {1 {syntax error in expression "hypot(1.0 ,": premature end of expression}} -test expr-old-34.7 {errors in math functions} { +} {1 {expected floating-point number but got "a b"}} +test expr-old-34.4 {errors in math functions} -body { + expr hypot(1.0 2.0) +} -returnCodes error -match glob -result * +test expr-old-34.5 {errors in math functions} -body { + expr hypot(1.0, 2.0 +} -returnCodes error -match glob -result * +test expr-old-34.6 {errors in math functions} -body { + expr hypot(1.0 , +} -returnCodes error -match glob -result * +test expr-old-34.7 {errors in math functions} -body { list [catch {expr hypot(1.0)} msg] $msg -} {1 {too few arguments for math function}} -test expr-old-34.8 {errors in math functions} { +} -match glob -result {1 {too few arguments for math function*}} +test expr-old-34.8 {errors in math functions} -body { list [catch {expr hypot(1.0, 2.0, 3.0)} msg] $msg -} {1 {too many arguments for math function}} +} -match glob -result {1 {too many arguments for math function*}} test expr-old-34.9 {errors in math functions} { list [catch {expr acos(-2.0)} msg] $msg $errorCode } {1 {domain error: argument not in valid range} {ARITH DOMAIN {domain error: argument not in valid range}}} -test expr-old-34.10 {errors in math functions} {nonPortable} { - list [catch {expr pow(-3, 1000001)} msg] $msg $errorCode -} {1 {floating-point value too large to represent} {ARITH OVERFLOW {floating-point value too large to represent}}} -test expr-old-34.11 {errors in math functions} { +test expr-old-34.10 {errors in math functions} { + list [catch {expr pow(-3, 1000001)} msg] $msg +} {0 -Inf} +test expr-old-34.11a {errors in math functions} !ieeeFloatingPoint { list [catch {expr pow(3, 1000001)} msg] $msg $errorCode } {1 {floating-point value too large to represent} {ARITH OVERFLOW {floating-point value too large to represent}}} -test expr-old-34.12 {errors in math functions} { +test expr-old-34.11b {errors in math functions} ieeeFloatingPoint { + list [catch {expr pow(3, 1000001)} msg] $msg +} {0 Inf} +test expr-old-34.12a {errors in math functions} !ieeeFloatingPoint { list [catch {expr -14.0*exp(100000)} msg] $msg $errorCode } {1 {floating-point value too large to represent} {ARITH OVERFLOW {floating-point value too large to represent}}} +test expr-old-34.12b {errors in math functions} ieeeFloatingPoint { + list [catch {expr -14.0*exp(100000)} msg] $msg +} {0 -Inf} test expr-old-34.13 {errors in math functions} { - list [catch {expr int(1.0e30)} msg] $msg $errorCode -} {1 {integer value too large to represent} {ARITH IOVERFLOW {integer value too large to represent}}} + expr wide(1.0e30) +} 5076964154930102272 test expr-old-34.14 {errors in math functions} { - list [catch {expr int(-1.0e30)} msg] $msg $errorCode -} {1 {integer value too large to represent} {ARITH IOVERFLOW {integer value too large to represent}}} + expr wide(-1.0e30) +} -5076964154930102272 test expr-old-34.15 {errors in math functions} { - list [catch {expr round(1.0e30)} msg] $msg $errorCode -} {1 {integer value too large to represent} {ARITH IOVERFLOW {integer value too large to represent}}} + expr round(1.0e30) +} 1000000000000000019884624838656 test expr-old-34.16 {errors in math functions} { - list [catch {expr round(-1.0e30)} msg] $msg $errorCode -} {1 {integer value too large to represent} {ARITH IOVERFLOW {integer value too large to represent}}} -if $gotT1 { - test expr-old-34.17 {errors in math functions} { - list [catch {expr T1(4)} msg] $msg - } {1 {too many arguments for math function}} -} + expr round(-1.0e30) +} -1000000000000000019884624838656 +test expr-old-34.17 {errors in math functions} -constraints testmathfunctions \ + -body { + list [catch {expr T1(4)} msg] $msg + } -match glob -result {1 {too many arguments for math function*}} test expr-old-36.1 {ExprLooksLikeInt procedure} -body { - expr 0289 + expr 0o289 } -returnCodes error -match glob -result {*invalid octal number*} test expr-old-36.2 {ExprLooksLikeInt procedure} { - set x 0289 + set x 0o289 list [catch {expr {$x+1}} msg] $msg } {1 {can't use invalid octal number as operand of "+"}} test expr-old-36.3 {ExprLooksLikeInt procedure} { @@ -919,7 +978,7 @@ test expr-old-36.6 {ExprLooksLikeInt procedure} { set x { -22} list [catch {expr {$x+1}} msg] $msg } {0 -21} -test expr-old-36.7 {ExprLooksLikeInt procedure} {nonPortable unixOnly} { +test expr-old-36.7 {ExprLooksLikeInt procedure} { list [catch {expr nan} msg] $msg } {1 {domain error: argument not in valid range}} test expr-old-36.8 {ExprLooksLikeInt procedure} { @@ -928,16 +987,16 @@ test expr-old-36.8 {ExprLooksLikeInt procedure} { test expr-old-36.9 {ExprLooksLikeInt procedure} { list [catch {expr 24E1} msg] $msg } {0 240.0} -test expr-old-36.10 {ExprLooksLikeInt procedure} {nonPortable unixOnly} { - list [catch {expr 78e} msg] $msg -} {1 {syntax error in expression "78e"}} +test expr-old-36.10 {ExprLooksLikeInt procedure} -body { + expr 78e +} -returnCodes error -match glob -result * # test for [Bug #542588] test expr-old-36.11 {ExprLooksLikeInt procedure} { # define a "too large integer"; this one works also for 64bit arith set x 665802003400000000000000 - list [catch {expr {$x+1}} msg] $msg -} {1 {can't use integer value too large to represent as operand of "+"}} + expr {$x+1} +} 665802003400000000000001 # tests for [Bug #587140] test expr-old-36.12 {ExprLooksLikeInt procedure} { @@ -950,35 +1009,128 @@ test expr-old-36.13 {ExprLooksLikeInt procedure} { } {1 {can't use non-numeric string as operand of "+"}} test expr-old-36.14 {ExprLooksLikeInt procedure} { set x "123456789012345678901234567890 " - list [catch {expr {$x+1}} msg] $msg -} {1 {can't use integer value too large to represent as operand of "+"}} + expr {$x+1} +} 123456789012345678901234567891 test expr-old-36.15 {ExprLooksLikeInt procedure} { - set x "099 " + set x "0o99 " list [catch {expr {$x+1}} msg] $msg } {1 {can't use invalid octal number as operand of "+"}} test expr-old-36.16 {ExprLooksLikeInt procedure} { set x " 0xffffffffffffffffffffffffffffffffffffff " - list [catch {expr {$x+1}} msg] $msg -} {1 {can't use integer value too large to represent as operand of "+"}} + expr {$x+1} +} [expr 0x100000000000000000000000000000000000000] -if {[info commands testexprlong] == {}} { - puts "This application hasn't been compiled with the \"testexprlong\"" - puts "command, so I can't test Tcl_ExprLong etc." -} else { -test expr-old-37.1 {Check that Tcl_ExprLong doesn't modify interpreter result if no error} { - testexprlong +test expr-old-37.1 {Check that Tcl_ExprLong doesn't modify interpreter result if no error} testexprlong { + testexprlong 4+1 } {This is a result: 5} -} - -if {[info commands testexprstring] == {}} { - puts "This application hasn't been compiled with the \"testexprstring\"" - puts "command, so I can't test Tcl_ExprString etc." -} else { -test expr-old-38.1 {Verify Tcl_ExprString's basic operation} { +#Check for [Bug 1109484] +test expr-old-37.2 {Tcl_ExprLong handles wide ints gracefully} testexprlong { + testexprlong wide(1)+2 +} {This is a result: 3} + +test expr-old-37.3 {Tcl_ExprLong on the empty string} testexprlong { + testexprlong "" +} {This is a result: 0} +test expr-old-37.4 {Tcl_ExprLong coerces doubles} testexprlong { + testexprlong 3+.14159 +} {This is a result: 3} +test expr-old-37.5 {Tcl_ExprLong handles overflows} {testexprlong longIs32bit} { + testexprlong 0x80000000 +} {This is a result: -2147483648} +test expr-old-37.6 {Tcl_ExprLong handles overflows} {testexprlong longIs32bit} { + testexprlong 0xffffffff +} {This is a result: -1} +test expr-old-37.7 {Tcl_ExprLong handles overflows} \ + -constraints {testexprlong longIs32bit} \ + -match glob \ + -body { + list [catch {testexprlong 0x100000000} result] $result + } \ + -result {1 {integer value too large to represent*}} +test expr-old-37.8 {Tcl_ExprLong handles overflows} testexprlong { + testexprlong -0x80000000 +} {This is a result: -2147483648} +test expr-old-37.9 {Tcl_ExprLong handles overflows} {testexprlong longIs32bit} { + testexprlong -0xffffffff +} {This is a result: 1} +test expr-old-37.10 {Tcl_ExprLong handles overflows} \ + -constraints {testexprlong longIs32bit} \ + -match glob \ + -body { + list [catch {testexprlong -0x100000000} result] $result + } \ + -result {1 {integer value too large to represent*}} +test expr-old-37.11 {Tcl_ExprLong handles overflows} {testexprlong longIs32bit} { + testexprlong 2147483648. +} {This is a result: -2147483648} +test expr-old-37.12 {Tcl_ExprLong handles overflows} {testexprlong longIs32bit} { + testexprlong 4294967295. +} {This is a result: -1} +test expr-old-37.13 {Tcl_ExprLong handles overflows} \ + -constraints {testexprlong longIs32bit} \ + -match glob \ + -body { + list [catch {testexprlong 4294967296.} result] $result + } \ + -result {1 {integer value too large to represent*}} +test expr-old-37.14 {Tcl_ExprLong handles overflows} testexprlong { + testexprlong -2147483648. +} {This is a result: -2147483648} +test expr-old-37.15 {Tcl_ExprLong handles overflows} {testexprlong longIs32bit} { + testexprlong -4294967295. +} {This is a result: 1} +test expr-old-37.16 {Tcl_ExprLong handles overflows} \ + -constraints {testexprlong longIs32bit} \ + -match glob \ + -body { + list [catch {testexprlong 4294967296.} result] $result + } \ + -result {1 {integer value too large to represent*}} + +test expr-old-37.17 {Check that Tcl_ExprDouble doesn't modify interpreter result if no error} testexprdouble { + testexprdouble 4.+1. +} {This is a result: 5.0} +#Check for [Bug 1109484] +test expr-old-37.18 {Tcl_ExprDouble on the empty string} testexprdouble { + testexprdouble "" +} {This is a result: 0.0} +test expr-old-37.19 {Tcl_ExprDouble coerces wides} testexprdouble { + testexprdouble 1[string repeat 0 17] +} {This is a result: 1e+17} +test expr-old-37.20 {Tcl_ExprDouble coerces bignums} testexprdouble { + testexprdouble 1[string repeat 0 38] +} {This is a result: 1e+38} +test expr-old-37.21 {Tcl_ExprDouble handles overflows} testexprdouble { + testexprdouble 17976931348623157[string repeat 0 292]. +} {This is a result: 1.7976931348623157e+308} +test expr-old-37.22 {Tcl_ExprDouble handles overflows that look like int} \ + testexprdouble { + testexprdouble 17976931348623157[string repeat 0 292] + } {This is a result: 1.7976931348623157e+308} +test expr-old-37.23 {Tcl_ExprDouble handles overflows} \ + ieeeFloatingPoint&&testexprdouble { + testexprdouble 17976931348623165[string repeat 0 292]. + } {This is a result: Inf} +test expr-old-37.24 {Tcl_ExprDouble handles overflows that look like int} \ + ieeeFloatingPoint&&testexprdouble { + testexprdouble 17976931348623165[string repeat 0 292] + } {This is a result: Inf} +test expr-old-37.25 {Tcl_ExprDouble and NaN} \ + {ieeeFloatingPoint testexprdouble} { + list [catch {testexprdouble 0.0/0.0} result] $result + } {1 {domain error: argument not in valid range}} + +test expr-old-38.1 {Verify Tcl_ExprString's basic operation} -constraints {testexprstring} -body { list [testexprstring "1+4"] [testexprstring "2*3+4.2"] \ - [catch {testexprstring "1+"} msg] $msg -} {5 10.2 1 {syntax error in expression "1+": premature end of expression}} -} + [catch {testexprstring "1+"} msg] $msg +} -match glob -result {5 10.2 1 *} +test expr-old-38.2 {Tcl_ExprString} testexprstring { + # This one is "magical" + testexprstring {} +} 0 +test expr-old-38.3 {Tcl_ExprString} -constraints testexprstring -body { + testexprstring { } +} -returnCodes error -match glob -result * # # Test for bug #908375: rounding numbers that do not fit in a @@ -995,6 +1147,48 @@ test expr-old-39.1 {Rounding with wide result} { } {1 1} unset -nocomplain x y +# +# TIP #255 min and max math functions +# + +test expr-old-40.1 {min math function} -body { + expr {min(0)} +} -result 0 +test expr-old-40.2 {min math function} -body { + expr {min(0.0)} +} -result 0.0 +test expr-old-40.3 {min math function} -body { + list [catch {expr {min()}} msg] $msg +} -result {1 {too few arguments to math function "min"}} +test expr-old-40.4 {min math function} -body { + expr {min(wide(-1) << 30, 4.5, -10)} +} -result [expr {wide(-1) << 30}] +test expr-old-40.5 {min math function} -body { + expr {min("a", 0)} +} -returnCodes error -match glob -result * +test expr-old-40.6 {min math function} -body { + expr {min(300, "0xFF")} +} -result 255 + +test expr-old-41.1 {max math function} -body { + expr {max(0)} +} -result 0 +test expr-old-41.2 {max math function} -body { + expr {max(0.0)} +} -result 0.0 +test expr-old-41.3 {max math function} -body { + list [catch {expr {max()}} msg] $msg +} -result {1 {too few arguments to math function "max"}} +test expr-old-41.4 {max math function} -body { + expr {max(wide(1) << 30, 4.5, -10)} +} -result [expr {wide(1) << 30}] +test expr-old-41.5 {max math function} -body { + expr {max("a", 0)} +} -returnCodes error -match glob -result * +test expr-old-41.6 {max math function} -body { + expr {max(200, "0xFF")} +} -result 255 + # Special test for Pentium arithmetic bug of 1994: if {(4195835.0 - (4195835.0/3145727.0)*3145727.0) == 256.0} { @@ -1007,3 +1201,7 @@ if {(4195835.0 - (4195835.0/3145727.0)*3145727.0) == 256.0} { # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/expr.test b/tests/expr.test index 053b33a..42d0c79 100644 --- a/tests/expr.test +++ b/tests/expr.test @@ -11,15 +11,84 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2.1 namespace import -force ::tcltest::* } -testConstraint registeredMathFuncs [expr { - ([catch {expr T1()} msg] != 1) || ($msg ne {unknown math function "T1"}) +testConstraint testmathfunctions [expr { + ([catch {expr T1()} msg] != 1) || ($msg ne {invalid command name "tcl::mathfunc::T1"}) }] -testConstraint wideIs64bit [expr {(0x80000000 > 0) && (0x8000000000000000 < 0)}] +# Determine if "long int" type is a 32 bit number and if the wide +# type is a 64 bit number on this machine. + +testConstraint longIs32bit [expr {int(0x80000000) < 0}] +testConstraint longIs64bit [expr {int(0x8000000000000000) < 0}] +testConstraint wideIs64bit \ + [expr {(wide(0x80000000) > 0) && (wide(0x8000000000000000) < 0)}] + +# Big test for correct ordering of data in [expr] + +proc testIEEE {} { + variable ieeeValues + binary scan [binary format dd -1.0 1.0] c* c + switch -exact -- $c { + {0 0 0 0 0 0 -16 -65 0 0 0 0 0 0 -16 63} { + # little endian + binary scan \x00\x00\x00\x00\x00\x00\xf0\xff d \ + ieeeValues(-Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf0\xbf d \ + ieeeValues(-Normal) + binary scan \x00\x00\x00\x00\x00\x00\x08\x80 d \ + ieeeValues(-Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\x00\x80 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x00\x00\x00\x00\x00\x08\x00 d \ + ieeeValues(+Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x3f d \ + ieeeValues(+Normal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x7f d \ + ieeeValues(+Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf8\x7f d \ + ieeeValues(NaN) + binary scan \x00\x00\x00\x00\x00\x00\xf8\xff d \ + ieeeValues(-NaN) + set ieeeValues(littleEndian) 1 + return 1 + } + {-65 -16 0 0 0 0 0 0 63 -16 0 0 0 0 0 0} { + binary scan \xff\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Infinity) + binary scan \xbf\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Normal) + binary scan \x80\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Subnormal) + binary scan \x80\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Subnormal) + binary scan \x3f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Normal) + binary scan \x7f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Infinity) + binary scan \x7f\xf8\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(NaN) + binary scan \xff\xf8\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-NaN) + set ieeeValues(littleEndian) 0 + return 1 + } + default { + return 0 + } + } +} + +testConstraint ieeeFloatingPoint [testIEEE] # procedures used below proc put_hello_char {c} { @@ -62,7 +131,9 @@ proc do_twelve_days {} { global xxx set xxx "" 12days 1 1 1 - string length $xxx + set result [string length $xxx] + unset xxx + return $result } # start of tests @@ -130,60 +201,49 @@ test expr-1.15 {TclCompileExprCmd: second level of substitutions in expr with co test expr-2.1 {TclCompileExpr: are builtin functions registered?} { expr double(5*[llength "6 2"]) } 10.0 -test expr-2.2 {TclCompileExpr: error in expr} { - catch {expr 2**3} msg - set msg -} {syntax error in expression "2**3": unexpected operator *} -test expr-2.3 {TclCompileExpr: junk after legal expr} { - catch {expr 7*[llength "a b"]foo} msg - set msg -} {syntax error in expression "7*2foo": extra tokens at end of expression} +test expr-2.2 {TclCompileExpr: error in expr} -body { + expr 2***3 +} -returnCodes error -match glob -result * +test expr-2.3 {TclCompileExpr: junk after legal expr} -body { + expr 7*[llength "a b"]foo +} -returnCodes error -match glob -result * test expr-2.4 {TclCompileExpr: numeric expr string rep == formatted int rep} { expr {0001} } 1 test expr-3.1 {CompileCondExpr: just lor expr} {expr 3||0} 1 -test expr-3.2 {CompileCondExpr: error in lor expr} { - catch {expr x||3} msg - set msg -} {syntax error in expression "x||3": variable references require preceding $} +test expr-3.2 {CompileCondExpr: error in lor expr} -body { + expr x||3 +} -returnCodes error -match glob -result * test expr-3.3 {CompileCondExpr: test true arm} {expr 3>2?44:66} 44 -test expr-3.4 {CompileCondExpr: error compiling true arm} { - catch {expr 3>2?2**3:66} msg - set msg -} {syntax error in expression "3>2?2**3:66": unexpected operator *} +test expr-3.4 {CompileCondExpr: error compiling true arm} -body { + expr 3>2?2***3:66 +} -returnCodes error -match glob -result * test expr-3.5 {CompileCondExpr: test false arm} {expr 2>3?44:66} 66 -test expr-3.6 {CompileCondExpr: error compiling false arm} { - catch {expr 2>3?44:2**3} msg - set msg -} {syntax error in expression "2>3?44:2**3": unexpected operator *} -test expr-3.7 {CompileCondExpr: long arms & nested cond exprs} {unixOnly nonPortable} { - puts "Note: doing test expr-3.7 which can take several minutes to run" +test expr-3.6 {CompileCondExpr: error compiling false arm} -body { + expr 2>3?44:2***3 +} -returnCodes error -match glob -result * +test expr-3.7 {CompileCondExpr: long arms & nested cond exprs} { hello_world } {Hello world} -catch {unset xxx} -test expr-3.8 {CompileCondExpr: long arms & nested cond exprs} {unixOnly nonPortable} { - puts "Note: doing test expr-3.8 which can take several minutes to run" +test expr-3.8 {CompileCondExpr: long arms & nested cond exprs} unix { + # Fails with a stack overflow on threaded Windows builds do_twelve_days } 2358 -catch {unset xxx} test expr-4.1 {CompileLorExpr: just land expr} {expr 1.3&&3.3} 1 -test expr-4.2 {CompileLorExpr: error in land expr} { - catch {expr x&&3} msg - set msg -} {syntax error in expression "x&&3": variable references require preceding $} +test expr-4.2 {CompileLorExpr: error in land expr} -body { + expr x&&3 +} -returnCodes error -match glob -result * test expr-4.3 {CompileLorExpr: simple lor exprs} {expr 0||1.0} 1 test expr-4.4 {CompileLorExpr: simple lor exprs} {expr 3.0||0.0} 1 test expr-4.5 {CompileLorExpr: simple lor exprs} {expr 0||0||1} 1 -test expr-4.6 {CompileLorExpr: error compiling lor arm} { - catch {expr 2**3||4.0} msg - set msg -} {syntax error in expression "2**3||4.0": unexpected operator *} -test expr-4.7 {CompileLorExpr: error compiling lor arm} { - catch {expr 1.3||2**3} msg - set msg -} {syntax error in expression "1.3||2**3": unexpected operator *} +test expr-4.6 {CompileLorExpr: error compiling lor arm} -body { + expr 2***3||4.0 +} -returnCodes error -match glob -result * +test expr-4.7 {CompileLorExpr: error compiling lor arm} -body { + expr 1.3||2***3 +} -returnCodes error -match glob -result * test expr-4.8 {CompileLorExpr: error compiling lor arms} { list [catch {expr {"a"||"b"}} msg] $msg } {1 {expected boolean value but got "a"}} @@ -192,24 +252,30 @@ test expr-4.9 {CompileLorExpr: long lor arm} { set i 7 expr {[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]] || [string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]] || [string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]] || [string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]} } 1 +test expr-4.10 {CompileLorExpr: error compiling ! operand} { + list [catch {expr {!"a"}} msg] $msg +} {1 {can't use non-numeric string as operand of "!"}} +test expr-4.11 {CompileLorExpr: error compiling land arms} { + list [catch {expr {"a"||0}} msg] $msg +} {1 {expected boolean value but got "a"}} +test expr-4.12 {CompileLorExpr: error compiling land arms} { + list [catch {expr {0||"a"}} msg] $msg +} {1 {expected boolean value but got "a"}} test expr-5.1 {CompileLandExpr: just bitor expr} {expr 7|0x13} 23 -test expr-5.2 {CompileLandExpr: error in bitor expr} { - catch {expr x|3} msg - set msg -} {syntax error in expression "x|3": variable references require preceding $} +test expr-5.2 {CompileLandExpr: error in bitor expr} -body { + expr x|3 +} -returnCodes error -match glob -result * test expr-5.3 {CompileLandExpr: simple land exprs} {expr 0&&1.0} 0 test expr-5.4 {CompileLandExpr: simple land exprs} {expr 0&&0} 0 test expr-5.5 {CompileLandExpr: simple land exprs} {expr 3.0&&1.2} 1 test expr-5.6 {CompileLandExpr: simple land exprs} {expr 1&&1&&2} 1 -test expr-5.7 {CompileLandExpr: error compiling land arm} { - catch {expr 2**3&&4.0} msg - set msg -} {syntax error in expression "2**3&&4.0": unexpected operator *} -test expr-5.8 {CompileLandExpr: error compiling land arm} { - catch {expr 1.3&&2**3} msg - set msg -} {syntax error in expression "1.3&&2**3": unexpected operator *} +test expr-5.7 {CompileLandExpr: error compiling land arm} -body { + expr 2***3&&4.0 +} -returnCodes error -match glob -result * +test expr-5.8 {CompileLandExpr: error compiling land arm} -body { + expr 1.3&&2***3 +} -returnCodes error -match glob -result * test expr-5.9 {CompileLandExpr: error compiling land arm} { list [catch {expr {"a"&&"b"}} msg] $msg } {1 {expected boolean value but got "a"}} @@ -220,22 +286,19 @@ test expr-5.10 {CompileLandExpr: long land arms} { } 1 test expr-6.1 {CompileBitXorExpr: just bitand expr} {expr 7&0x13} 3 -test expr-6.2 {CompileBitXorExpr: error in bitand expr} { - catch {expr x|3} msg - set msg -} {syntax error in expression "x|3": variable references require preceding $} +test expr-6.2 {CompileBitXorExpr: error in bitand expr} -body { + expr x|3 +} -returnCodes error -match glob -result * test expr-6.3 {CompileBitXorExpr: simple bitxor exprs} {expr 7^0x13} 20 test expr-6.4 {CompileBitXorExpr: simple bitxor exprs} {expr 3^0x10} 19 test expr-6.5 {CompileBitXorExpr: simple bitxor exprs} {expr 0^7} 7 test expr-6.6 {CompileBitXorExpr: simple bitxor exprs} {expr -1^7} -8 -test expr-6.7 {CompileBitXorExpr: error compiling bitxor arm} { - catch {expr 2**3|6} msg - set msg -} {syntax error in expression "2**3|6": unexpected operator *} -test expr-6.8 {CompileBitXorExpr: error compiling bitxor arm} { - catch {expr 2^x} msg - set msg -} {syntax error in expression "2^x": variable references require preceding $} +test expr-6.7 {CompileBitXorExpr: error compiling bitxor arm} -body { + expr 2***3|6 +} -returnCodes error -match glob -result * +test expr-6.8 {CompileBitXorExpr: error compiling bitxor arm} -body { + expr 2^x +} -returnCodes error -match glob -result * test expr-6.9 {CompileBitXorExpr: runtime error in bitxor arm} { list [catch {expr {24.0^3}} msg] $msg } {1 {can't use floating-point value as operand of "^"}} @@ -247,22 +310,19 @@ test expr-7.1 {CompileBitAndExpr: just equality expr} {expr 3==2} 0 test expr-7.2 {CompileBitAndExpr: just equality expr} {expr 2.0==2} 1 test expr-7.3 {CompileBitAndExpr: just equality expr} {expr 3.2!=2.2} 1 test expr-7.4 {CompileBitAndExpr: just equality expr} {expr {"abc" == "abd"}} 0 -test expr-7.5 {CompileBitAndExpr: error in equality expr} { - catch {expr x==3} msg - set msg -} {syntax error in expression "x==3": variable references require preceding $} +test expr-7.5 {CompileBitAndExpr: error in equality expr} -body { + expr x==3 +} -returnCodes error -match glob -result * test expr-7.6 {CompileBitAndExpr: simple bitand exprs} {expr 7&0x13} 3 test expr-7.7 {CompileBitAndExpr: simple bitand exprs} {expr 0xf2&0x53} 82 test expr-7.8 {CompileBitAndExpr: simple bitand exprs} {expr 3&6} 2 test expr-7.9 {CompileBitAndExpr: simple bitand exprs} {expr -1&-7} -7 -test expr-7.10 {CompileBitAndExpr: error compiling bitand arm} { - catch {expr 2**3&6} msg - set msg -} {syntax error in expression "2**3&6": unexpected operator *} -test expr-7.11 {CompileBitAndExpr: error compiling bitand arm} { - catch {expr 2&x} msg - set msg -} {syntax error in expression "2&x": variable references require preceding $} +test expr-7.10 {CompileBitAndExpr: error compiling bitand arm} -body { + expr 2***3&6 +} -returnCodes error -match glob -result * +test expr-7.11 {CompileBitAndExpr: error compiling bitand arm} -body { + expr 2&x +} -returnCodes error -match glob -result * test expr-7.12 {CompileBitAndExpr: runtime error in bitand arm} { list [catch {expr {24.0&3}} msg] $msg } {1 {can't use floating-point value as operand of "&"}} @@ -271,31 +331,27 @@ test expr-7.13 {CompileBitAndExpr: runtime error in bitand arm} { } {1 {can't use non-numeric string as operand of "&"}} test expr-7.14 {CompileBitAndExpr: equality expr} {expr 3eq2} 0 test expr-7.18 {CompileBitAndExpr: equality expr} {expr {"abc" eq "abd"}} 0 -test expr-7.20 {CompileBitAndExpr: error in equality expr} { - catch {expr xne3} msg - set msg -} {syntax error in expression "xne3": variable references require preceding $} +test expr-7.20 {CompileBitAndExpr: error in equality expr} -body { + expr xne3 +} -returnCodes error -match glob -result * test expr-8.1 {CompileEqualityExpr: just relational expr} {expr 3>=2} 1 test expr-8.2 {CompileEqualityExpr: just relational expr} {expr 2<=2.1} 1 test expr-8.3 {CompileEqualityExpr: just relational expr} {expr 3.2>"2.2"} 1 test expr-8.4 {CompileEqualityExpr: just relational expr} {expr {"0y"<"0x12"}} 0 -test expr-8.5 {CompileEqualityExpr: error in relational expr} { - catch {expr x>3} msg - set msg -} {syntax error in expression "x>3": variable references require preceding $} +test expr-8.5 {CompileEqualityExpr: error in relational expr} -body { + expr x>3 +} -returnCodes error -match glob -result * test expr-8.6 {CompileEqualityExpr: simple equality exprs} {expr 7==0x13} 0 test expr-8.7 {CompileEqualityExpr: simple equality exprs} {expr -0xf2!=0x53} 1 test expr-8.8 {CompileEqualityExpr: simple equality exprs} {expr {"12398712938788234-1298379" != ""}} 1 test expr-8.9 {CompileEqualityExpr: simple equality exprs} {expr -1!="abc"} 1 -test expr-8.10 {CompileEqualityExpr: error compiling equality arm} { - catch {expr 2**3==6} msg - set msg -} {syntax error in expression "2**3==6": unexpected operator *} -test expr-8.11 {CompileEqualityExpr: error compiling equality arm} { - catch {expr 2!=x} msg - set msg -} {syntax error in expression "2!=x": variable references require preceding $} +test expr-8.10 {CompileEqualityExpr: error compiling equality arm} -body { + expr 2***3==6 +} -returnCodes error -match glob -result * +test expr-8.11 {CompileEqualityExpr: error compiling equality arm} -body { + expr 2!=x +} -returnCodes error -match glob -result * test expr-8.12 {CompileBitAndExpr: equality expr} {expr {"a"eq"a"}} 1 test expr-8.13 {CompileBitAndExpr: equality expr} { set s \u00fc @@ -307,66 +363,97 @@ test expr-8.16 {CompileBitAndExpr: equality expr} {expr 3.2ne2.2} 1 test expr-8.17 {CompileBitAndExpr: equality expr} {expr 01eq1} 0 test expr-8.18 {CompileBitAndExpr: equality expr} {expr {"abc" eq "abd"}} 0 test expr-8.19 {CompileBitAndExpr: equality expr} {expr {"abc" ne "abd"}} 1 -test expr-8.20 {CompileBitAndExpr: error in equality expr} { - catch {expr x ne3} msg - set msg -} {syntax error in expression "x ne3": variable references require preceding $} -test expr-8.21 {CompileBitAndExpr: error in equality expr} { +test expr-8.20 {CompileBitAndExpr: error in equality expr} -body { + expr x ne3 +} -returnCodes error -match glob -result * +test expr-8.21 {CompileBitAndExpr: error in equality expr} -body { # These should be ""ed to avoid the error - catch {expr a eq b} msg - set msg -} {syntax error in expression "a eq b": variable references require preceding $} + expr a eq b +} -returnCodes error -match glob -result * +test expr-8.22 {CompileBitAndExpr: error in equality expr} -body { + expr {false eqfalse} +} -returnCodes error -match glob -result * +test expr-8.23 {CompileBitAndExpr: error in equality expr} -body { + expr {false nefalse} +} -returnCodes error -match glob -result * +test expr-8.24 {CompileEqualityExpr: simple equality exprs} { + set x 12398712938788234 + expr {$x == 100} +} 0 +test expr-8.25 {CompileEqualityExpr: simple equality exprs} { + expr {"0x12 " == "0x12"} +} 1 +test expr-8.26 {CompileEqualityExpr: simple equality exprs} { + expr {"0x12 " eq "0x12"} +} 0 +test expr-8.27 {CompileEqualityExpr: simple equality exprs} { + expr {"1.0e100000000" == "0.0"} +} 0 +test expr-8.28 {CompileEqualityExpr: just relational expr} { + expr {"0y" == "0x0"} +} 0 +test expr-8.29 {CompileEqualityExpr: just relational expr} { + # Compare original strings from variables. + set v1 "0y" + set v2 "0x12" + expr {$v1 < $v2} +} 0 +test expr-8.30 {CompileEqualityExpr: simple equality exprs} { + expr {"fake" != "bob"} +} 1 +test expr-8.31 {expr edge cases} -body { + expr {1e} +} -returnCodes error -match glob -result * +test expr-8.32 {expr edge cases} -body { + expr {1E} +} -returnCodes error -match glob -result * +test expr-8.33 {expr edge cases} -body { + expr {1e+} +} -returnCodes error -match glob -result * +test expr-8.34 {expr edge cases} -body { + expr {1E+} +} -returnCodes error -match glob -result * +test expr-8.35 {expr edge cases} -body { + expr {1ea} +} -returnCodes error -match glob -result * test expr-9.1 {CompileRelationalExpr: just shift expr} {expr 3<<2} 12 test expr-9.2 {CompileRelationalExpr: just shift expr} {expr 0xff>>2} 63 test expr-9.3 {CompileRelationalExpr: just shift expr} {expr -1>>2} -1 test expr-9.4 {CompileRelationalExpr: just shift expr} {expr {1<<3}} 8 - -# The following test is different for 32-bit versus 64-bit -# architectures because LONG_MIN is different - -if {0x80000000 > 0} { - test expr-9.5 {CompileRelationalExpr: shift expr producing LONG_MIN} {nonPortable} { - expr {1<<63} - } -9223372036854775808 -} else { - test expr-9.5 {CompileRelationalExpr: shift expr producing LONG_MIN} {nonPortable} { - expr {1<<31} - } -2147483648 -} -test expr-9.6 {CompileRelationalExpr: error in shift expr} { - catch {expr x>>3} msg - set msg -} {syntax error in expression "x>>3": variable references require preceding $} +test expr-9.5a {CompileRelationalExpr: shift expr producing LONG_MIN} longIs64bit { + expr {int(1<<63)} +} -9223372036854775808 +test expr-9.5b {CompileRelationalExpr: shift expr producing LONG_MIN} longIs32bit { + expr {int(1<<31)} +} -2147483648 +test expr-9.6 {CompileRelationalExpr: error in shift expr} -body { + expr x>>3 +} -returnCodes error -match glob -result * test expr-9.7 {CompileRelationalExpr: simple relational exprs} {expr 0xff>=+0x3} 1 test expr-9.8 {CompileRelationalExpr: simple relational exprs} {expr -0xf2<0x3} 1 -test expr-9.9 {CompileRelationalExpr: error compiling relational arm} { - catch {expr 2**3>6} msg - set msg -} {syntax error in expression "2**3>6": unexpected operator *} -test expr-9.10 {CompileRelationalExpr: error compiling relational arm} { - catch {expr 2<x} msg - set msg -} {syntax error in expression "2<x": variable references require preceding $} +test expr-9.9 {CompileRelationalExpr: error compiling relational arm} -body { + expr 2***3>6 +} -returnCodes error -match glob -result * +test expr-9.10 {CompileRelationalExpr: error compiling relational arm} -body { + expr 2<x +} -returnCodes error -match glob -result * test expr-10.1 {CompileShiftExpr: just add expr} {expr 4+-2} 2 test expr-10.2 {CompileShiftExpr: just add expr} {expr 0xff-2} 253 test expr-10.3 {CompileShiftExpr: just add expr} {expr -1--2} 1 -test expr-10.4 {CompileShiftExpr: just add expr} {expr 1-0123} -82 -test expr-10.5 {CompileShiftExpr: error in add expr} { - catch {expr x+3} msg - set msg -} {syntax error in expression "x+3": variable references require preceding $} +test expr-10.4 {CompileShiftExpr: just add expr} {expr 1-0o123} -82 +test expr-10.5 {CompileShiftExpr: error in add expr} -body { + expr x+3 +} -returnCodes error -match glob -result * test expr-10.6 {CompileShiftExpr: simple shift exprs} {expr 0xff>>0x3} 31 test expr-10.7 {CompileShiftExpr: simple shift exprs} {expr -0xf2<<0x3} -1936 -test expr-10.8 {CompileShiftExpr: error compiling shift arm} { - catch {expr 2**3>>6} msg - set msg -} {syntax error in expression "2**3>>6": unexpected operator *} -test expr-10.9 {CompileShiftExpr: error compiling shift arm} { - catch {expr 2<<x} msg - set msg -} {syntax error in expression "2<<x": variable references require preceding $} +test expr-10.8 {CompileShiftExpr: error compiling shift arm} -body { + expr 2***3>>6 +} -returnCodes error -match glob -result * +test expr-10.9 {CompileShiftExpr: error compiling shift arm} -body { + expr 2<<x +} -returnCodes error -match glob -result * test expr-10.10 {CompileShiftExpr: runtime error} { list [catch {expr {24.0>>43}} msg] $msg } {1 {can't use floating-point value as operand of ">>"}} @@ -377,21 +464,18 @@ test expr-10.11 {CompileShiftExpr: runtime error} { test expr-11.1 {CompileAddExpr: just multiply expr} {expr 4*-2} -8 test expr-11.2 {CompileAddExpr: just multiply expr} {expr 0xff%2} 1 test expr-11.3 {CompileAddExpr: just multiply expr} {expr -1/2} -1 -test expr-11.4 {CompileAddExpr: just multiply expr} {expr 7891%0123} 6 -test expr-11.5 {CompileAddExpr: error in multiply expr} { - catch {expr x*3} msg - set msg -} {syntax error in expression "x*3": variable references require preceding $} +test expr-11.4 {CompileAddExpr: just multiply expr} {expr 7891%0o123} 6 +test expr-11.5 {CompileAddExpr: error in multiply expr} -body { + expr x*3 +} -returnCodes error -match glob -result * test expr-11.6 {CompileAddExpr: simple add exprs} {expr 0xff++0x3} 258 test expr-11.7 {CompileAddExpr: simple add exprs} {expr -0xf2--0x3} -239 -test expr-11.8 {CompileAddExpr: error compiling add arm} { - catch {expr 2**3+6} msg - set msg -} {syntax error in expression "2**3+6": unexpected operator *} -test expr-11.9 {CompileAddExpr: error compiling add arm} { - catch {expr 2-x} msg - set msg -} {syntax error in expression "2-x": variable references require preceding $} +test expr-11.8 {CompileAddExpr: error compiling add arm} -body { + expr 2***3+6 +} -returnCodes error -match glob -result * +test expr-11.9 {CompileAddExpr: error compiling add arm} -body { + expr 2-x +} -returnCodes error -match glob -result * test expr-11.10 {CompileAddExpr: runtime error} { list [catch {expr {24.0+"xx"}} msg] $msg } {1 {can't use non-numeric string as operand of "+"}} @@ -401,28 +485,28 @@ test expr-11.11 {CompileAddExpr: runtime error} { test expr-11.12 {CompileAddExpr: runtime error} { list [catch {expr {3/0}} msg] $msg } {1 {divide by zero}} -test expr-11.13 {CompileAddExpr: runtime error} { +test expr-11.13a {CompileAddExpr: runtime error} !ieeeFloatingPoint { list [catch {expr {2.3/0.0}} msg] $msg } {1 {divide by zero}} +test expr-11.13b {CompileAddExpr: runtime error} ieeeFloatingPoint { + list [catch {expr {2.3/0.0}} msg] $msg +} {0 Inf} test expr-12.1 {CompileMultiplyExpr: just unary expr} {expr ~4} -5 test expr-12.2 {CompileMultiplyExpr: just unary expr} {expr --5} 5 test expr-12.3 {CompileMultiplyExpr: just unary expr} {expr !27} 0 test expr-12.4 {CompileMultiplyExpr: just unary expr} {expr ~0xff00ff} -16711936 -test expr-12.5 {CompileMultiplyExpr: error in unary expr} { - catch {expr ~x} msg - set msg -} {syntax error in expression "~x": variable references require preceding $} +test expr-12.5 {CompileMultiplyExpr: error in unary expr} -body { + expr ~x +} -returnCodes error -match glob -result * test expr-12.6 {CompileMultiplyExpr: simple multiply exprs} {expr 0xff*0x3} 765 test expr-12.7 {CompileMultiplyExpr: simple multiply exprs} {expr -0xf2%-0x3} -2 -test expr-12.8 {CompileMultiplyExpr: error compiling multiply arm} { - catch {expr 2*3%%6} msg - set msg -} {syntax error in expression "2*3%%6": unexpected operator %} -test expr-12.9 {CompileMultiplyExpr: error compiling multiply arm} { - catch {expr 2*x} msg - set msg -} {syntax error in expression "2*x": variable references require preceding $} +test expr-12.8 {CompileMultiplyExpr: error compiling multiply arm} -body { + expr 2*3%%6 +} -returnCodes error -match glob -result * +test expr-12.9 {CompileMultiplyExpr: error compiling multiply arm} -body { + expr 2*x +} -returnCodes error -match glob -result * test expr-12.10 {CompileMultiplyExpr: runtime error} { list [catch {expr {24.0*"xx"}} msg] $msg } {1 {can't use non-numeric string as operand of "*"}} @@ -431,20 +515,18 @@ test expr-12.11 {CompileMultiplyExpr: runtime error} { } {1 {can't use non-numeric string as operand of "/"}} test expr-13.1 {CompileUnaryExpr: unary exprs} {expr -0xff} -255 -test expr-13.2 {CompileUnaryExpr: unary exprs} {expr +000123} 83 +test expr-13.2 {CompileUnaryExpr: unary exprs} {expr +0o00123} 83 test expr-13.3 {CompileUnaryExpr: unary exprs} {expr +--++36} 36 test expr-13.4 {CompileUnaryExpr: unary exprs} {expr !2} 0 test expr-13.5 {CompileUnaryExpr: unary exprs} {expr +--+-62.0} -62.0 test expr-13.6 {CompileUnaryExpr: unary exprs} {expr !0.0} 1 test expr-13.7 {CompileUnaryExpr: unary exprs} {expr !0xef} 0 -test expr-13.8 {CompileUnaryExpr: error compiling unary expr} { - catch {expr ~x} msg - set msg -} {syntax error in expression "~x": variable references require preceding $} -test expr-13.9 {CompileUnaryExpr: error compiling unary expr} { - catch {expr !1.x} msg - set msg -} {syntax error in expression "!1.x": extra tokens at end of expression} +test expr-13.8 {CompileUnaryExpr: error compiling unary expr} -body { + expr ~x +} -returnCodes error -match glob -result * +test expr-13.9 {CompileUnaryExpr: error compiling unary expr} -body { + expr !1.x +} -returnCodes error -match glob -result * test expr-13.10 {CompileUnaryExpr: runtime error} { list [catch {expr {~"xx"}} msg] $msg } {1 {can't use non-numeric string as operand of "~"}} @@ -472,7 +554,7 @@ test expr-13.17 {CompileUnaryExpr: negating non-numeric boolean literals} { test expr-14.1 {CompilePrimaryExpr: literal primary} {expr 1} 1 test expr-14.2 {CompilePrimaryExpr: literal primary} {expr 123} 123 test expr-14.3 {CompilePrimaryExpr: literal primary} {expr 0xff} 255 -test expr-14.4 {CompilePrimaryExpr: literal primary} {expr 00010} 8 +test expr-14.4 {CompilePrimaryExpr: literal primary} {expr 0o0010} 8 test expr-14.5 {CompilePrimaryExpr: literal primary} {expr 62.0} 62.0 test expr-14.6 {CompilePrimaryExpr: literal primary} { expr 3.1400000 @@ -509,15 +591,12 @@ test expr-14.15 {CompilePrimaryExpr: var reference primary} { catch {expr $i.2} msg set msg } 123.2 -test expr-14.16 {CompilePrimaryExpr: error compiling var reference primary} { - catch {expr {$a(foo}} msg - set errorInfo -} {missing ) - while compiling -"expr {$a(foo}"} -test expr-14.17 {CompilePrimaryExpr: string primary that looks like var ref} { +test expr-14.16 {CompilePrimaryExpr: error compiling var reference primary} -body { + expr {$a(foo} +} -returnCodes error -match glob -result * +test expr-14.17 {CompilePrimaryExpr: string primary that looks like var ref} -body { expr $ -} $ +} -returnCodes error -match glob -result * test expr-14.18 {CompilePrimaryExpr: quoted string primary} { expr "21" } 21 @@ -538,126 +617,110 @@ test expr-14.21 {CompilePrimaryExpr: error in quoted string primary} { test expr-14.22 {CompilePrimaryExpr: subcommand primary} { expr {[set i 123; set i]} } 123 -test expr-14.23 {CompilePrimaryExpr: error in subcommand primary} { +test expr-14.23 {CompilePrimaryExpr: error in subcommand primary} -body { catch {expr {[set]}} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling -"set" - while compiling -"expr {[set]}"} -test expr-14.24 {CompilePrimaryExpr: error in subcommand primary} { - catch {expr {[set i}} msg - set errorInfo -} {missing close-bracket - while compiling -"expr {[set i}"} + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing +"set"*} +test expr-14.24 {CompilePrimaryExpr: error in subcommand primary} -body { + expr {[set i} +} -returnCodes error -match glob -result * test expr-14.25 {CompilePrimaryExpr: math function primary} { format %.6g [expr exp(1.0)] } 2.71828 test expr-14.26 {CompilePrimaryExpr: math function primary} { format %.6g [expr pow(2.0+0.1,3.0+0.1)] } 9.97424 -test expr-14.27 {CompilePrimaryExpr: error in math function primary} { - catch {expr sinh::(2.0)} msg - set errorInfo -} {syntax error in expression "sinh::(2.0)": expected parenthesis enclosing function arguments - while compiling -"expr sinh::(2.0)"} +test expr-14.27 {CompilePrimaryExpr: error in math function primary} -body { + expr sinh::(2.0) +} -returnCodes error -match glob -result * test expr-14.28 {CompilePrimaryExpr: subexpression primary} { expr 2+(3*4) } 14 -test expr-14.29 {CompilePrimaryExpr: error in subexpression primary} { +test expr-14.29 {CompilePrimaryExpr: error in subexpression primary} -body { catch {expr 2+(3*[set])} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling -"set" - while compiling -"expr 2+(3*[set])"} -test expr-14.30 {CompilePrimaryExpr: missing paren in subexpression primary} { - catch {expr 2+(3*(4+5)} msg - set errorInfo -} {syntax error in expression "2+(3*(4+5)": looking for close parenthesis - while compiling -"expr 2+(3*(4+5)"} + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing +"set"*} +test expr-14.30 {CompilePrimaryExpr: missing paren in subexpression primary} -body { + expr 2+(3*(4+5) +} -returnCodes error -match glob -result * test expr-14.31 {CompilePrimaryExpr: just var ref in subexpression primary} { set i "5+10" list "[expr $i] == 15" "[expr ($i)] == 15" "[eval expr ($i)] == 15" } {{15 == 15} {15 == 15} {15 == 15}} -test expr-14.32 {CompilePrimaryExpr: unexpected token} { - catch {expr @} msg - set errorInfo -} {syntax error in expression "@": character not legal in expressions - while compiling -"expr @"} - -test expr-15.1 {CompileMathFuncCall: missing parenthesis} { - catch {expr sinh2.0)} msg - set errorInfo -} {syntax error in expression "sinh2.0)": variable references require preceding $ - while compiling -"expr sinh2.0)"} -test expr-15.2 {CompileMathFuncCall: unknown math function} { +test expr-14.32 {CompilePrimaryExpr: unexpected token} -body { + expr @ +} -returnCodes error -match glob -result * + +test expr-15.1 {CompileMathFuncCall: missing parenthesis} -body { + expr sinh2.0) +} -returnCodes error -match glob -result * +test expr-15.2 {CompileMathFuncCall: unknown math function} -body { catch {expr whazzathuh(1)} msg - set errorInfo -} {unknown math function "whazzathuh" - while compiling + set ::errorInfo +} -match glob -result {* "*whazzathuh" + while *ing "expr whazzathuh(1)"} -test expr-15.3 {CompileMathFuncCall: too many arguments} { +test expr-15.3 {CompileMathFuncCall: too many arguments} -body { catch {expr sin(1,2,3)} msg - set errorInfo -} {too many arguments for math function - while compiling + set ::errorInfo +} -match glob -result {too many arguments for math function* + while *ing "expr sin(1,2,3)"} -test expr-15.4 {CompileMathFuncCall: ')' found before last required arg} { +test expr-15.4 {CompileMathFuncCall: ')' found before last required arg} -body { catch {expr sin()} msg - set errorInfo -} {too few arguments for math function - while compiling + set ::errorInfo +} -match glob -result {too few arguments for math function* + while *ing "expr sin()"} -test expr-15.5 {CompileMathFuncCall: too few arguments} { +test expr-15.5 {CompileMathFuncCall: too few arguments} -body { catch {expr pow(1)} msg - set errorInfo -} {too few arguments for math function - while compiling + set ::errorInfo +} -match glob -result {too few arguments for math function* + while *ing "expr pow(1)"} -test expr-15.6 {CompileMathFuncCall: missing ')'} { - catch {expr sin(1} msg - set errorInfo -} {syntax error in expression "sin(1": missing close parenthesis at end of function call - while compiling -"expr sin(1"} -test expr-15.7 {CompileMathFuncCall: call registered math function} {registeredMathFuncs} { +test expr-15.6 {CompileMathFuncCall: missing ')'} -body { + expr sin(1 +} -returnCodes error -match glob -result * +test expr-15.7 {CompileMathFuncCall: call registered math function} {testmathfunctions} { expr 2*T1() } 246 -test expr-15.8 {CompileMathFuncCall: call registered math function} {registeredMathFuncs} { +test expr-15.8 {CompileMathFuncCall: call registered math function} {testmathfunctions} { expr T2()*3 } 1035 -test expr-15.9 {CompileMathFuncCall: call registered math function} {registeredMathFuncs} { +test expr-15.9 {CompileMathFuncCall: call registered math function} {testmathfunctions} { expr T3(21, 37) } 37 -test expr-15.10 {CompileMathFuncCall: call registered math function} {registeredMathFuncs} { +test expr-15.10 {CompileMathFuncCall: call registered math function} {testmathfunctions} { expr T3(21.2, 37) } 37.0 -test expr-15.11 {CompileMathFuncCall: call registered math function} {registeredMathFuncs} { +test expr-15.11 {CompileMathFuncCall: call registered math function} {testmathfunctions} { expr T3(-21.2, -17.5) } -17.5 -test expr-15.12 {ExprCallMathFunc: call registered math function} {registeredMathFuncs} { +test expr-15.12 {ExprCallMathFunc: call registered math function} {testmathfunctions} { expr T3(21, wide(37)) } 37 -test expr=15.13 {ExprCallMathFunc: call registered math function} {registeredMathFuncs} { +test expr=15.13 {ExprCallMathFunc: call registered math function} {testmathfunctions} { expr T3(wide(21), 37) } 37 -test expr=15.14 {ExprCallMathFunc: call registered math function} {registeredMathFuncs} { +test expr=15.14 {ExprCallMathFunc: call registered math function} {testmathfunctions} { expr T3(wide(21), wide(37)) } 37 -test expr-15.15 {ExprCallMathFunc: call registered math function} {registeredMathFuncs} { +test expr-15.15 {ExprCallMathFunc: call registered math function} {testmathfunctions} { expr T3(21.0, wide(37)) } 37.0 -test expr=15.16 {ExprCallMathFunc: call registered math function} {registeredMathFuncs} { +test expr-15.16 {ExprCallMathFunc: call registered math function} {testmathfunctions} { expr T3(wide(21), 37.0) } 37.0 +test expr-15.17 {ExprCallMathFunc: non-numeric arg} -constraints { + testmathfunctions +} -body { + expr T3(0,"a") +} -returnCodes error -result {argument to math function didn't have numeric value} + test expr-16.1 {GetToken: checks whether integer token starting with "0x" (e.g., "0x$") is invalid} { catch {unset a} @@ -725,7 +788,7 @@ test expr-20.1 {wrong brace matching} { set cmd "expr $l$q|$q == $q$r$q$r" list [catch $cmd a] $a } {1 {extra characters after close-brace}} -test expr-20.2 {double invocation of variable traces} { +test expr-20.2 {double invocation of variable traces} -body { set exprtracecounter 0 proc exprtraceproc {args} { upvar #0 exprtracecounter counter @@ -743,7 +806,7 @@ test expr-20.2 {double invocation of variable traces} { list [catch {expr "$exprtracevar + 20"} a] $a \ [catch {expr "$exprtracevar + 20"} b] $b \ [unset exprtracevar exprtracecounter] -} {1 {syntax error in expression "1 oops 10 + 20": extra tokens at end of expression} 0 32 {}} +} -match glob -result {1 * 0 32 {}} test expr-20.3 {broken substitution of integer digits} { # fails with 8.0.x, but not 8.1b2 list [set a 000; expr 0x1$a] [set a 1; expr ${a}000] @@ -776,56 +839,5834 @@ test expr-21.9 {non-numeric boolean literals} {expr !off } 1 test expr-21.10 {non-numeric boolean literals} {expr !on } 0 test expr-21.11 {non-numeric boolean literals} {expr !no } 1 test expr-21.12 {non-numeric boolean literals} {expr !yes } 0 +test expr-21.13 {non-numeric boolean literals} -body { + expr !truef +} -returnCodes error -match glob -result * +test expr-21.14 {non-numeric boolean literals} { + list [catch {expr !"truef"} err] $err +} {1 {can't use non-numeric string as operand of "!"}} +test expr-21.15 {non-numeric boolean variables} { + set v truef + list [catch {expr {!$v}} err] $err +} {1 {can't use non-numeric string as operand of "!"}} +test expr-21.16 {non-numeric boolean variables} { + set v "true " + list [catch {expr {!$v}} err] $err +} {1 {can't use non-numeric string as operand of "!"}} +test expr-21.17 {non-numeric boolean variables} { + set v "tru" + list [catch {expr {!$v}} err] $err +} {0 0} +test expr-21.18 {non-numeric boolean variables} { + set v "fal" + list [catch {expr {!$v}} err] $err +} {0 1} +test expr-21.19 {non-numeric boolean variables} { + set v "y" + list [catch {expr {!$v}} err] $err +} {0 0} +test expr-21.20 {non-numeric boolean variables} { + set v "of" + list [catch {expr {!$v}} err] $err +} {0 1} +test expr-21.21 {non-numeric boolean variables} { + set v "o" + list [catch {expr {!$v}} err] $err +} {1 {can't use non-numeric string as operand of "!"}} +test expr-21.22 {non-numeric boolean variables} { + set v "" + list [catch {expr {!$v}} err] $err +} {1 {can't use empty string as operand of "!"}} # Test for non-numeric float handling. -# -# These are non-portable because strtod()-support for "Inf" and "NaN" -# is so wildly variable. This sucks... -test expr-22.1 {non-numeric floats} nonPortable { +test expr-22.1 {non-numeric floats} { list [catch {expr {NaN + 1}} msg] $msg } {1 {can't use non-numeric floating-point value as operand of "+"}} -test expr-22.2 {non-numeric floats} nonPortable { +test expr-22.2 {non-numeric floats} !ieeeFloatingPoint { list [catch {expr {Inf + 1}} msg] $msg } {1 {can't use infinite floating-point value as operand of "+"}} -test expr-22.3 {non-numeric floats} nonPortable { +test expr-22.3 {non-numeric floats} { set nan NaN list [catch {expr {$nan + 1}} msg] $msg } {1 {can't use non-numeric floating-point value as operand of "+"}} -test expr-22.4 {non-numeric floats} nonPortable { +test expr-22.4 {non-numeric floats} !ieeeFloatingPoint { set inf Inf list [catch {expr {$inf + 1}} msg] $msg } {1 {can't use infinite floating-point value as operand of "+"}} -test expr-22.5 {non-numeric floats} nonPortable { +test expr-22.5 {non-numeric floats} { list [catch {expr NaN} msg] $msg } {1 {domain error: argument not in valid range}} -test expr-22.6 {non-numeric floats} nonPortable { +test expr-22.6 {non-numeric floats} !ieeeFloatingPoint { list [catch {expr Inf} msg] $msg } {1 {floating-point value too large to represent}} -test expr-22.7 {non-numeric floats} nonPortable { +test expr-22.7 {non-numeric floats} { list [catch {expr {1 / NaN}} msg] $msg } {1 {can't use non-numeric floating-point value as operand of "/"}} -test expr-22.8 {non-numeric floats} nonPortable { +test expr-22.8 {non-numeric floats} !ieeeFloatingPoint { list [catch {expr {1 / Inf}} msg] $msg } {1 {can't use infinite floating-point value as operand of "/"}} # Make sure [Bug 761471] stays fixed. -test expr-22.9 {non-numeric floats: shared object equality and NaN} nonPortable { +test expr-22.9 {non-numeric floats: shared object equality and NaN} { set x NaN expr {$x == $x} } 0 +# Tests for exponentiation handling +test expr-23.1 {CompileExponentialExpr: just exponential expr} {expr 4**2} 16 +test expr-23.2 {CompileExponentialExpr: just exponential expr} {expr 0xff**2} 65025 +test expr-23.3 {CompileExponentialExpr: just exponential expr} {expr -1**2} 1 +test expr-23.4 {CompileExponentialExpr: just exponential expr} {expr 18**07} 612220032 +test expr-23.5 {CompileExponentialExpr: error in exponential expr} -body { + expr x**3 +} -returnCodes error -match glob -result * +test expr-23.6 {CompileExponentialExpr: simple expo exprs} {expr 0xff**0x3} 16581375 +test expr-23.7 {CompileExponentialExpr: error compiling expo arm} -body { + expr (-3-)**6 +} -returnCodes error -match glob -result * +test expr-23.8 {CompileExponentialExpr: error compiling expo arm} -body { + expr 2**x +} -returnCodes error -match glob -result * +test expr-23.9 {CompileExponentialExpr: runtime error} { + list [catch {expr {24.0**"xx"}} msg] $msg +} {1 {can't use non-numeric string as operand of "**"}} +test expr-23.10 {CompileExponentialExpr: runtime error} { + list [catch {expr {"a"**2}} msg] $msg +} {1 {can't use non-numeric string as operand of "**"}} +test expr-23.11 {CompileExponentialExpr: runtime error} { + list [catch {expr {0**-1}} msg] $msg +} {1 {exponentiation of zero by negative power}} +test expr-23.12 {CompileExponentialExpr: runtime error} { + list [catch {expr {0.0**-1.0}} msg] $msg +} {1 {exponentiation of zero by negative power}} +test expr-23.13 {CompileExponentialExpr: runtime error} { + list [catch {expr {wide(0)**wide(-1)}} msg] $msg +} {1 {exponentiation of zero by negative power}} +test expr-23.14 {INST_EXPON: special cases} {expr {0**1}} 0 +test expr-23.15 {INST_EXPON: special cases} {expr {0**0}} 1 +test expr-23.16 {INST_EXPON: special cases} {expr {-2**-1}} 0 +test expr-23.17 {INST_EXPON: special cases} {expr {-2**0}} 1 +test expr-23.18 {INST_EXPON: special cases} {expr {-1**1}} -1 +test expr-23.19 {INST_EXPON: special cases} {expr {-1**0}} 1 +test expr-23.20 {INST_EXPON: special cases} {expr {-1**2}} 1 +test expr-23.21 {INST_EXPON: special cases} {expr {-1**-1}} -1 +test expr-23.22 {INST_EXPON: special cases} {expr {1**1234567}} 1 +test expr-23.23 {INST_EXPON: special cases} {expr {2**-2}} 0 +test expr-23.24 {INST_EXPON: special cases} {expr {wide(0)**wide(1)}} 0 +test expr-23.25 {INST_EXPON: special cases} {expr {wide(0)**wide(0)}} 1 +test expr-23.26 {INST_EXPON: special cases} {expr {wide(-2)**wide(-1)}} 0 +test expr-23.27 {INST_EXPON: special cases} {expr {wide(-2)**wide(0)}} 1 +test expr-23.28 {INST_EXPON: special cases} {expr {wide(-1)**wide(1)}} -1 +test expr-23.29 {INST_EXPON: special cases} {expr {wide(-1)**wide(0)}} 1 +test expr-23.30 {INST_EXPON: special cases} {expr {wide(-1)**wide(2)}} 1 +test expr-23.31 {INST_EXPON: special cases} {expr {wide(-1)**wide(-1)}} -1 +test expr-23.32 {INST_EXPON: special cases} {expr {wide(1)**wide(1234567)}} 1 +test expr-23.33 {INST_EXPON: special cases} {expr {wide(2)**wide(-2)}} 0 +test expr-23.34 {INST_EXPON: special cases} {expr {2**0}} 1 +test expr-23.35 {INST_EXPON: special cases} {expr {wide(2)**0}} 1 +test expr-23.36 {INST_EXPON: big integer} {expr {10**17}} 1[string repeat 0 17] +test expr-23.37 {INST_EXPON: big integer} {expr {10**18}} 1[string repeat 0 18] +test expr-23.38 {INST_EXPON: big integer} {expr {10**19}} 1[string repeat 0 19] +test expr-23.39 {INST_EXPON: big integer} { + expr 1[string repeat 0 30]**2 +} 1[string repeat 0 60] +test expr-23.40 {INST_EXPON: overflow to big integer} {expr {(-10)**3}} -1000 +test expr-23.41 {INST_EXPON: overflow to big integer} {expr 2**64} [expr 1<<64] +test expr-23.42 {INST_EXPON: overflow to big integer} {expr 4**32} [expr 1<<64] +test expr-23.43 {INST_EXPON: overflow to big integer} {expr 16**16} [expr 1<<64] +test expr-23.44 {INST_EXPON: overflow to big integer} {expr 256**8} [expr 1<<64] +test expr-23.45 {INST_EXPON: Bug 1555371} {expr 2**1} 2 +test expr-23.46 {INST_EXPON: Bug 1561260} -body { + expr 5**28 +} -match glob -result *5 +test expr-23.47 {INST_EXPON: Bug 1561260} { + expr 2**32*5**32 +} 1[string repeat 0 32] +test expr-23.48 {INST_EXPON: TIP 274: right assoc} { +expr 2**3**4 +} 2417851639229258349412352 +test expr-23.49 {INST_EXPON: optimize powers of 2} { + set trouble {test powers of 2} + for {set tval 0} {$tval <= 66} {incr tval} { + set is [expr {2 ** $tval}] + set sb [expr {1 << $tval}] + if {$is != $sb} { + append trouble \n "2**" $tval " is " $is " should be " $sb + } + if {$tval >= 1} { + set is [expr {-2 ** $tval}] + set sb [expr {1 << $tval}] + if {$tval & 1} { + set sb [expr {-$sb}] + } + if {$is != $sb} { + append trouble \n "-2**" $tval " is " $is " should be " $sb + } + } + } + set trouble +} {test powers of 2} +test expr-23.50 {INST_EXPON: small powers of 32-bit integers} { + set trouble {test small powers of 32-bit ints} + for {set base 3} {$base <= 45} {incr base} { + set sb $base + set sbm [expr {-$base}] + for {set expt 2} {$expt <= 8} {incr expt} { + set sb [expr {$sb * $base}] + set is [expr {$base ** $expt}] + if {$sb != $is} { + append trouble \n $base ** $expt " is " $is " should be " $sb + } + set sbm [expr {-$sbm * $base}] + set ism [expr {(-$base) ** $expt}] + if {$sbm != $ism} { + append trouble \n - $base ** $expt " is " $ism \ + " should be " $sbm + } + } + } + set trouble +} {test small powers of 32-bit ints} +test expr-23.51 {INST_EXPON: intermediate powers of 32-bit integers} { + set trouble {test intermediate powers of 32-bit ints} + for {set base 3} {$base <= 11} {incr base} { + set sb [expr {$base ** 8}] + set sbm $sb + for {set expt 9} {$expt <= 21} {incr expt} { + set sb [expr {$sb * $base}] + set sbm [expr {$sbm * -$base}] + set is [expr {$base ** $expt}] + set ism [expr {-$base ** $expt}] + if {$sb != $is} { + append trouble \n $base ** $expt " is " $is " should be " $sb + } + if {$sbm != $ism} { + append trouble \n - $base ** $expt " is " $ism \ + " should be " $sbm + } + } + } + set trouble +} {test intermediate powers of 32-bit ints} +test expr-23.52 {INST_EXPON: small integer powers with 64-bit results} { + set trouble {test small int powers with 64-bit results} + for {set exp 2} {$exp <= 16} {incr exp} { + set base [expr {entier(pow(double(0x7fffffffffffffff),(1.0/$exp)))}] + set sb 1 + set sbm 1 + for {set i 0} {$i < $exp} {incr i} { + set sb [expr {$sb * $base}] + set sbm [expr {$sbm * -$base}] + } + set is [expr {$base ** $exp}] + set ism [expr {-$base ** $exp}] + if {$sb != $is} { + append trouble \n $base ** $exp " is " $is " should be " $sb + } + if {$sbm != $ism} { + append trouble \n - $base ** $exp " is " $ism " should be " $sbm + } + incr base + set sb 1 + set sbm 1 + for {set i 0} {$i < $exp} {incr i} { + set sb [expr {$sb * $base}] + set sbm [expr {$sbm * -$base}] + } + set is [expr {$base ** $exp}] + set ism [expr {-$base ** $exp}] + if {$sb != $is} { + append trouble \n $base ** $exp " is " $is " should be " $sb + } + if {$sbm != $ism} { + append trouble \n - $base ** $exp " is " $ism " should be " $sbm + } + } + set trouble +} {test small int powers with 64-bit results} +test expr-23.53 {INST_EXPON: intermediate powers of 64-bit integers} { + set trouble {test intermediate powers of 64-bit ints} + for {set base 3} {$base <= 13} {incr base} { + set sb [expr {$base ** 15}] + set sbm [expr {-$sb}] + for {set expt 16} {$expt <= 39} {incr expt} { + set sb [expr {$sb * $base}] + set sbm [expr {$sbm * -$base}] + set is [expr {$base ** $expt}] + set ism [expr {-$base ** $expt}] + if {$sb != $is} { + append trouble \n $base ** $expt " is " $is " should be " $sb + } + if {$sbm != $ism} { + append trouble \n - $base ** $expt " is " $ism \ + " should be " $sbm + } + } + } + set trouble +} {test intermediate powers of 64-bit ints} +test expr-23.54.0 {INST_EXPON: Bug 2798543} { + expr {3**9 == 3**65545} +} 0 +test expr-23.54.1 {INST_EXPON: Bug 2798543} { + expr {3**10 == 3**65546} +} 0 +test expr-23.54.2 {INST_EXPON: Bug 2798543} { + expr {3**11 == 3**65547} +} 0 +test expr-23.54.3 {INST_EXPON: Bug 2798543} { + expr {3**12 == 3**65548} +} 0 +test expr-23.54.4 {INST_EXPON: Bug 2798543} { + expr {3**13 == 3**65549} +} 0 +test expr-23.54.5 {INST_EXPON: Bug 2798543} { + expr {3**14 == 3**65550} +} 0 +test expr-23.54.6 {INST_EXPON: Bug 2798543} { + expr {3**15 == 3**65551} +} 0 +test expr-23.54.7 {INST_EXPON: Bug 2798543} { + expr {3**16 == 3**65552} +} 0 +test expr-23.54.8 {INST_EXPON: Bug 2798543} { + expr {3**17 == 3**65553} +} 0 +test expr-23.54.9 {INST_EXPON: Bug 2798543} { + expr {3**18 == 3**65554} +} 0 +test expr-23.54.10 {INST_EXPON: Bug 2798543} { + expr {3**19 == 3**65555} +} 0 +test expr-23.54.11 {INST_EXPON: Bug 2798543} { + expr {3**9 == 3**131081} +} 0 +test expr-23.54.12 {INST_EXPON: Bug 2798543} -body { + expr {3**9 == 3**268435465} +} -returnCodes error -result {exponent too large} +test expr-23.54.13 {INST_EXPON: Bug 2798543} { + expr {(-3)**9 == (-3)**65545} +} 0 +test expr-23.55.0 {INST_EXPON: Bug 2798543} { + expr {4**9 == 4**65545} +} 0 +test expr-23.55.1 {INST_EXPON: Bug 2798543} { + expr {4**15 == 4**65551} +} 0 +test expr-23.55.2 {INST_EXPON: Bug 2798543} { + expr {4**9 == 4**131081} +} 0 +test expr-23.55.3 {INST_EXPON: Bug 2798543} -body { + expr {4**9 == 4**268435465} +} -returnCodes error -result {exponent too large} +test expr-23.55.4 {INST_EXPON: Bug 2798543} { + expr {(-4)**9 == (-4)**65545} +} 0 +test expr-23.56.0 {INST_EXPON: Bug 2798543} { + expr {5**9 == 5**65545} +} 0 +test expr-23.56.1 {INST_EXPON: Bug 2798543} { + expr {5**13 == 5**65549} +} 0 +test expr-23.56.2 {INST_EXPON: Bug 2798543} { + expr {5**9 == 5**131081} +} 0 +test expr-23.56.3 {INST_EXPON: Bug 2798543} -body { + expr {5**9 == 5**268435465} +} -returnCodes error -result {exponent too large} +test expr-23.56.4 {INST_EXPON: Bug 2798543} { + expr {(-5)**9 == (-5)**65545} +} 0 +test expr-23.57.0 {INST_EXPON: Bug 2798543} { + expr {6**9 == 6**65545} +} 0 +test expr-23.57.1 {INST_EXPON: Bug 2798543} { + expr {6**11 == 6**65547} +} 0 +test expr-23.57.2 {INST_EXPON: Bug 2798543} { + expr {6**9 == 6**131081} +} 0 +test expr-23.57.3 {INST_EXPON: Bug 2798543} -body { + expr {6**9 == 6**268435465} +} -returnCodes error -result {exponent too large} +test expr-23.57.4 {INST_EXPON: Bug 2798543} { + expr {(-6)**9 == (-6)**65545} +} 0 +test expr-23.58.0 {INST_EXPON: Bug 2798543} { + expr {7**9 == 7**65545} +} 0 +test expr-23.58.1 {INST_EXPON: Bug 2798543} { + expr {7**11 == 7**65547} +} 0 +test expr-23.58.2 {INST_EXPON: Bug 2798543} { + expr {7**9 == 7**131081} +} 0 +test expr-23.58.3 {INST_EXPON: Bug 2798543} -body { + expr {7**9 == 7**268435465} +} -returnCodes error -result {exponent too large} +test expr-23.58.4 {INST_EXPON: Bug 2798543} { + expr {(-7)**9 == (-7)**65545} +} 0 +test expr-23.59.0 {INST_EXPON: Bug 2798543} { + expr {8**9 == 8**65545} +} 0 +test expr-23.59.1 {INST_EXPON: Bug 2798543} { + expr {8**10 == 8**65546} +} 0 +test expr-23.59.2 {INST_EXPON: Bug 2798543} { + expr {8**9 == 8**131081} +} 0 +test expr-23.59.3 {INST_EXPON: Bug 2798543} -body { + expr {8**9 == 8**268435465} +} -returnCodes error -result {exponent too large} +test expr-23.59.4 {INST_EXPON: Bug 2798543} { + expr {(-8)**9 == (-8)**65545} +} 0 +test expr-23.60.0 {INST_EXPON: Bug 2798543} { + expr {9**9 == 9**65545} +} 0 +test expr-23.60.1 {INST_EXPON: Bug 2798543} { + expr {9**9 == 9**131081} +} 0 +test expr-23.60.2 {INST_EXPON: Bug 2798543} -body { + expr {9**9 == 9**268435465} +} -returnCodes error -result {exponent too large} +test expr-23.60.3 {INST_EXPON: Bug 2798543} { + expr {(-9)**9 == (-9)**65545} +} 0 +test expr-23.61.0 {INST_EXPON: Bug 2798543} { + expr {10**9 == 10**65545} +} 0 +test expr-23.61.1 {INST_EXPON: Bug 2798543} { + expr {10**9 == 10**131081} +} 0 +test expr-23.61.2 {INST_EXPON: Bug 2798543} -body { + expr {10**9 == 10**268435465} +} -returnCodes error -result {exponent too large} +test expr-23.61.3 {INST_EXPON: Bug 2798543} { + expr {(-10)**9 == (-10)**65545} +} 0 +test expr-23.62.0 {INST_EXPON: Bug 2798543} { + expr {11**9 == 11**65545} +} 0 +test expr-23.62.1 {INST_EXPON: Bug 2798543} { + expr {11**9 == 11**131081} +} 0 +test expr-23.62.2 {INST_EXPON: Bug 2798543} -body { + expr {11**9 == 11**268435465} +} -returnCodes error -result {exponent too large} +test expr-23.62.3 {INST_EXPON: Bug 2798543} { + expr {(-11)**9 == (-11)**65545} +} 0 +test expr-23.63.0 {INST_EXPON: Bug 2798543} { + expr {3**20 == 3**65556} +} 0 +test expr-23.63.1 {INST_EXPON: Bug 2798543} { + expr {3**39 == 3**65575} +} 0 +test expr-23.63.2 {INST_EXPON: Bug 2798543} { + expr {3**20 == 3**131092} +} 0 +test expr-23.63.3 {INST_EXPON: Bug 2798543} -body { + expr {3**20 == 3**268435476} +} -returnCodes error -result {exponent too large} +test expr-23.63.4 {INST_EXPON: Bug 2798543} { + expr {(-3)**20 == (-3)**65556} +} 0 +test expr-23.64.0 {INST_EXPON: Bug 2798543} { + expr {4**17 == 4**65553} +} 0 +test expr-23.64.1 {INST_EXPON: Bug 2798543} { + expr {4**31 == 4**65567} +} 0 +test expr-23.64.2 {INST_EXPON: Bug 2798543} { + expr {4**17 == 4**131089} +} 0 +test expr-23.64.3 {INST_EXPON: Bug 2798543} -body { + expr {4**17 == 4**268435473} +} -returnCodes error -result {exponent too large} +test expr-23.64.4 {INST_EXPON: Bug 2798543} { + expr {(-4)**17 == (-4)**65553} +} 0 +test expr-23.65.0 {INST_EXPON: Bug 2798543} { + expr {5**17 == 5**65553} +} 0 +test expr-23.65.1 {INST_EXPON: Bug 2798543} { + expr {5**27 == 5**65563} +} 0 +test expr-23.65.2 {INST_EXPON: Bug 2798543} { + expr {5**17 == 5**131089} +} 0 +test expr-23.65.3 {INST_EXPON: Bug 2798543} -body { + expr {5**17 == 5**268435473} +} -returnCodes error -result {exponent too large} +test expr-23.65.4 {INST_EXPON: Bug 2798543} { + expr {(-5)**17 == (-5)**65553} +} 0 +test expr-23.66.0 {INST_EXPON: Bug 2798543} { + expr {6**17 == 6**65553} +} 0 +test expr-23.66.1 {INST_EXPON: Bug 2798543} { + expr {6**24 == 6**65560} +} 0 +test expr-23.66.2 {INST_EXPON: Bug 2798543} { + expr {6**17 == 6**131089} +} 0 +test expr-23.66.3 {INST_EXPON: Bug 2798543} -body { + expr {6**17 == 6**268435473} +} -returnCodes error -result {exponent too large} +test expr-23.66.4 {INST_EXPON: Bug 2798543} { + expr {(-6)**17 == (-6)**65553} +} 0 +test expr-23.67.0 {INST_EXPON: Bug 2798543} { + expr {7**17 == 7**65553} +} 0 +test expr-23.67.1 {INST_EXPON: Bug 2798543} { + expr {7**22 == 7**65558} +} 0 +test expr-23.67.2 {INST_EXPON: Bug 2798543} { + expr {7**17 == 7**131089} +} 0 +test expr-23.67.3 {INST_EXPON: Bug 2798543} -body { + expr {7**17 == 7**268435473} +} -returnCodes error -result {exponent too large} +test expr-23.67.4 {INST_EXPON: Bug 2798543} { + expr {(-7)**17 == (-7)**65553} +} 0 +test expr-23.68.0 {INST_EXPON: Bug 2798543} { + expr {8**17 == 8**65553} +} 0 +test expr-23.68.1 {INST_EXPON: Bug 2798543} { + expr {8**20 == 8**65556} +} 0 +test expr-23.68.2 {INST_EXPON: Bug 2798543} { + expr {8**17 == 8**131089} +} 0 +test expr-23.68.3 {INST_EXPON: Bug 2798543} -body { + expr {8**17 == 8**268435473} +} -returnCodes error -result {exponent too large} +test expr-23.68.4 {INST_EXPON: Bug 2798543} { + expr {(-8)**17 == (-8)**65553} +} 0 +test expr-23.69.0 {INST_EXPON: Bug 2798543} { + expr {9**17 == 9**65553} +} 0 +test expr-23.69.1 {INST_EXPON: Bug 2798543} { + expr {9**19 == 9**65555} +} 0 +test expr-23.69.2 {INST_EXPON: Bug 2798543} { + expr {9**17 == 9**131089} +} 0 +test expr-23.69.3 {INST_EXPON: Bug 2798543} -body { + expr {9**17 == 9**268435473} +} -returnCodes error -result {exponent too large} +test expr-23.69.4 {INST_EXPON: Bug 2798543} { + expr {(-9)**17 == (-9)**65553} +} 0 +test expr-23.70.0 {INST_EXPON: Bug 2798543} { + expr {10**17 == 10**65553} +} 0 +test expr-23.70.1 {INST_EXPON: Bug 2798543} { + expr {10**18 == 10**65554} +} 0 +test expr-23.70.2 {INST_EXPON: Bug 2798543} { + expr {10**17 == 10**131089} +} 0 +test expr-23.70.3 {INST_EXPON: Bug 2798543} -body { + expr {10**17 == 10**268435473} +} -returnCodes error -result {exponent too large} +test expr-23.70.4 {INST_EXPON: Bug 2798543} { + expr {(-10)**17 == (-10)**65553} +} 0 +test expr-23.71.0 {INST_EXPON: Bug 2798543} { + expr {11**17 == 11**65553} +} 0 +test expr-23.71.1 {INST_EXPON: Bug 2798543} { + expr {11**18 == 11**65554} +} 0 +test expr-23.71.2 {INST_EXPON: Bug 2798543} { + expr {11**17 == 11**131089} +} 0 +test expr-23.71.3 {INST_EXPON: Bug 2798543} -body { + expr {11**17 == 11**268435473} +} -returnCodes error -result {exponent too large} +test expr-23.71.4 {INST_EXPON: Bug 2798543} { + expr {(-11)**17 == (-11)**65553} +} 0 +test expr-23.72.0 {INST_EXPON: Bug 2798543} { + expr {12**17 == 12**65553} +} 0 +test expr-23.72.1 {INST_EXPON: Bug 2798543} { + expr {12**17 == 12**131089} +} 0 +test expr-23.72.2 {INST_EXPON: Bug 2798543} -body { + expr {12**17 == 12**268435473} +} -returnCodes error -result {exponent too large} +test expr-23.72.3 {INST_EXPON: Bug 2798543} { + expr {(-12)**17 == (-12)**65553} +} 0 +test expr-23.73.0 {INST_EXPON: Bug 2798543} { + expr {13**17 == 13**65553} +} 0 +test expr-23.73.1 {INST_EXPON: Bug 2798543} { + expr {13**17 == 13**131089} +} 0 +test expr-23.73.2 {INST_EXPON: Bug 2798543} -body { + expr {13**17 == 13**268435473} +} -returnCodes error -result {exponent too large} +test expr-23.73.3 {INST_EXPON: Bug 2798543} { + expr {(-13)**17 == (-13)**65553} +} 0 +test expr-23.74.0 {INST_EXPON: Bug 2798543} { + expr {14**17 == 14**65553} +} 0 +test expr-23.74.1 {INST_EXPON: Bug 2798543} { + expr {14**17 == 14**131089} +} 0 +test expr-23.74.2 {INST_EXPON: Bug 2798543} -body { + expr {14**17 == 14**268435473} +} -returnCodes error -result {exponent too large} +test expr-23.74.3 {INST_EXPON: Bug 2798543} { + expr {(-14)**17 == (-14)**65553} +} 0 + + # Some compilers get this wrong; ensure that we work around it correctly -test expr-24.1 {expr edge cases; shifting} {expr int(5)>>31} 0 +test expr-24.1 {expr edge cases; shifting} {expr int(5)>>32} 0 test expr-24.2 {expr edge cases; shifting} {expr int(5)>>63} 0 -test expr-24.3 {expr edge cases; shifting} {expr wide(5)>>31} 0 +test expr-24.3 {expr edge cases; shifting} {expr wide(5)>>32} 0 test expr-24.4 {expr edge cases; shifting} {expr wide(5)>>63} 0 -test expr-24.5 {expr edge cases; shifting} nonPortable {expr int(5)<<31} 0 -test expr-24.6 {expr edge cases; shifting} nonPortable {expr int(5)<<63} 0 -test expr-24.7 {expr edge cases; shifting} {expr wide(5)<<31} 10737418240 -test expr-24.8 {expr edge cases; shifting} nonPortable {expr wide(5)<<63} -9223372036854775808 +test expr-24.5 {expr edge cases; shifting} longIs32bit {expr int(5<<32)} 0 +test expr-24.6 {expr edge cases; shifting} longIs32bit {expr int(5<<63)} 0 +test expr-24.7 {expr edge cases; shifting} {expr wide(5)<<32} 21474836480 +test expr-24.8 {expr edge cases; shifting} {expr wide(10<<63)} 0 test expr-24.9 {expr edge cases; shifting} {expr 5>>32} 0 +test expr-24.10 {INST_LSHIFT: Bug 1567222} {expr 500000000000000<<28} 134217728000000000000000 + +# List membership tests +test expr-25.1 {'in' operator} {expr {"a" in "a b c"}} 1 +test expr-25.2 {'in' operator} {expr {"a" in "b a c"}} 1 +test expr-25.3 {'in' operator} {expr {"a" in "b c a"}} 1 +test expr-25.4 {'in' operator} {expr {"a" in ""}} 0 +test expr-25.5 {'in' operator} {expr {"" in {a b c ""}}} 1 +test expr-25.6 {'in' operator} {expr {"" in "a b c"}} 0 +test expr-25.7 {'in' operator} {expr {"" in ""}} 0 + +test expr-26.1 {'ni' operator} {expr {"a" ni "a b c"}} 0 +test expr-26.2 {'ni' operator} {expr {"a" ni "b a c"}} 0 +test expr-26.3 {'ni' operator} {expr {"a" ni "b c a"}} 0 +test expr-26.4 {'ni' operator} {expr {"a" ni ""}} 1 +test expr-26.5 {'ni' operator} {expr {"" ni {a b c ""}}} 0 +test expr-26.6 {'ni' operator} {expr {"" ni "a b c"}} 1 +test expr-26.7 {'ni' operator} {expr {"" ni ""}} 1 + +foreach op {< <= == != > >=} { + proc test$op {a b} [list expr "\$a $op \$b"] +} + +test expr-27.1 {expr - correct ordering - not compiled} ieeeFloatingPoint { + set problems {} + # Ordering should be: -Infinity < -Normal < Subnormal < -0 + # < +0 < +Subnormal < +Normal < +Infinity + # with equality within each class. + set names { + -Infinity -Normal -Subnormal -0 +0 +Subnormal +Normal +Infinity + } + set weights { + -3 -2 -1 0 0 1 2 3 + } + foreach name1 $names weight1 $weights { + foreach name2 $names weight2 $weights { + foreach op {< <= == != >= >} { + set shouldBe [expr "$weight1 $op $weight2"] + set is [expr "\$ieeeValues($name1) $op \$ieeeValues($name2)"] + if { $is != $shouldBe } { + append problems $name1 { } $op { } $name2 \ + ":result is " $is ", should be $shouldBe" \n + } + } + } + } + set problems +} {} +test expr-27.2 {expr - correct ordering - compiled} ieeeFloatingPoint { + set problems {} + # Ordering should be: -Infinity < -Normal < Subnormal < -0 + # < +0 < +Subnormal < +Normal < +Infinity + # with equality within each class. + set names { + -Infinity -Normal -Subnormal -0 +0 +Subnormal +Normal +Infinity + } + set weights { + -3 -2 -1 0 0 1 2 3 + } + foreach name1 $names weight1 $weights { + foreach name2 $names weight2 $weights { + foreach op {< <= == != >= >} { + set shouldBe [expr "$weight1 $op $weight2"] + set is [test$op $ieeeValues($name1) $ieeeValues($name2)] + if { $is != $shouldBe } { + append problems $name1 { } $op { } $name2 \ + ":result is " $is ", should be $shouldBe" \n + } + } + } + } + set problems +} {} +test expr-27.3 {expr - NaN is unordered - not compiled} { + set problems {} + set names { + -Infinity -Normal -Subnormal -0 +0 +Subnormal +Normal +Infinity NaN + } + foreach name1 $names { + foreach op {< <= == != >= >} sb {0 0 0 1 0 0} { + if "(\$ieeeValues($name1) $op \$ieeeValues(NaN)) != $sb " { + append problems $name1 { } $op { } NaN \ + ": result is 1, should be $sb" \n + } + if "(\$ieeeValues(NaN) $op \$ieeeValues($name1)) != $sb" { + append problems NaN { } $op { } $name1 \ + ": result is 1, should be $sb" \n + } + } + } + set problems +} {} +test expr-27.4 {expr - NaN is unordered - compiled} { + set problems {} + set names { + -Infinity -Normal -Subnormal -0 +0 +Subnormal +Normal +Infinity NaN + } + foreach name1 $names { + foreach op {< <= == != >= >} sb {0 0 0 1 0 0} { + if { [test$op $ieeeValues($name1) $ieeeValues(NaN)] != $sb } { + append problems $ieeeValues($name1) { } $op { } $ieeeValues(NaN) \ + ": result is 1, should be $sb" \n + } + if { [test$op $ieeeValues(NaN) $ieeeValues($name1)] != $sb } { + append problems NaN { } $op { } $ieeeValues($name1) \ + ": result is 1, should be $sb" \n + } + } + } + set problems +} {} + +proc convertToDouble { x } { + variable ieeeValues + binary scan [binary format d $x] c* bytes + set result 0x + if { $ieeeValues(littleEndian) } { + for { set i 7 } { $i >= 0 } { incr i -1 } { + append result [format %02x [expr { [lindex $bytes $i] & 0xff }]] + } + } else { + foreach byte $bytes { + append result [format %02x [expr { $byte & 0xff }]] + } + } + return $result +} + +test expr-28.1 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d ALL 0 E0 OK 00000000000000 E-1023 + convertToDouble 0E0 +} 0x0000000000000000 +test expr-28.2 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d ALL -0 E0 OK -0000000000000 E-1023 + convertToDouble -0E0 +} 0x8000000000000000 +test expr-28.3 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d ALL 1 E0 OK 10000000000000 E0 + convertToDouble 1E0 +} 0x3ff0000000000000 +test expr-28.4 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d ALL 15 E-1 OK 18000000000000 E0 + convertToDouble 15E-1 +} 0x3ff8000000000000 +test expr-28.5 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d ALL 125 E-2 OK 14000000000000 E0 + convertToDouble 125E-2 +} 0x3ff4000000000000 +test expr-28.6 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d ALL 1125 E-3 OK 12000000000000 E0 + convertToDouble 1125E-3 +} 0x3ff2000000000000 +test expr-28.7 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d ALL 10625 E-4 OK 11000000000000 E0 + convertToDouble 10625E-4 +} 0x3ff1000000000000 +test expr-28.8 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d ALL 103125 E-5 OK 10800000000000 E0 + convertToDouble 103125E-5 +} 0x3ff0800000000000 +test expr-28.9 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d ALL 1015625 E-6 OK 10400000000000 E0 + convertToDouble 1015625E-6 +} 0x3ff0400000000000 +test expr-28.10 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d ALL 10078125 E-7 OK 10200000000000 E0 + convertToDouble 10078125E-7 +} 0x3ff0200000000000 +test expr-28.11 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d ALL 100390625 E-8 OK 10100000000000 E0 + convertToDouble 100390625E-8 +} 0x3ff0100000000000 +test expr-28.12 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee ALL 1001953125 E-9 OK 10080000000000 E0 + convertToDouble 1001953125E-9 +} 0x3ff0080000000000 +test expr-28.13 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee ALL 10009765625 E-10 OK 10040000000000 E0 + convertToDouble 10009765625E-10 +} 0x3ff0040000000000 +test expr-28.14 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee ALL 100048828125 E-11 OK 10020000000000 E0 + convertToDouble 100048828125E-11 +} 0x3ff0020000000000 +test expr-28.15 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee ALL 1000244140625 E-12 OK 10010000000000 E0 + convertToDouble 1000244140625E-12 +} 0x3ff0010000000000 +test expr-28.16 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee ALL 10001220703125 E-13 OK 10008000000000 E0 + convertToDouble 10001220703125E-13 +} 0x3ff0008000000000 +test expr-28.17 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee ALL 100006103515625 E-14 OK 10004000000000 E0 + convertToDouble 100006103515625E-14 +} 0x3ff0004000000000 +test expr-28.18 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee ALL 1000030517578125 E-15 OK 10002000000000 E0 + convertToDouble 1000030517578125E-15 +} 0x3ff0002000000000 +test expr-28.19 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee ALL 10000152587890625 E-16 OK 10001000000000 E0 + convertToDouble 10000152587890625E-16 +} 0x3ff0001000000000 +test expr-28.20 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8 E153 x 1317e5ef3ab327_0000000001& E511 + convertToDouble +8E153 +} 0x5fe317e5ef3ab327 +test expr-28.21 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -1 E153 x -1317e5ef3ab327_0000000001& E508 + convertToDouble -1E153 +} 0xdfb317e5ef3ab327 +test expr-28.22 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +9 E306 x 19a2028368022e_00000000001& E1019 + convertToDouble +9E306 +} 0x7fa9a2028368022e +test expr-28.23 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -2 E153 x -1317e5ef3ab327_0000000001& E509 + convertToDouble -2E153 +} 0xdfc317e5ef3ab327 +test expr-28.24 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7 E-304 x 1eb8e84fa0b278_00000000001& E-1008 + convertToDouble +7E-304 +} 0x00feb8e84fa0b278 +test expr-28.25 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3 E-49 x -1c0f92a6276c9d_000000001& E-162 + convertToDouble -3E-49 +} 0xb5dc0f92a6276c9d +test expr-28.26 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7 E-303 x 13339131c46f8b_00000000001& E-1004 + convertToDouble +7E-303 +} 0x0133339131c46f8b +test expr-28.27 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -6 E-49 x -1c0f92a6276c9d_000000001& E-161 + convertToDouble -6E-49 +} 0xb5ec0f92a6276c9d +test expr-28.28 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +9 E43 x 102498ea6df0c3_11111111110& E146 + convertToDouble +9E43 +} 0x49102498ea6df0c4 +test expr-28.29 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -9 E44 x -142dbf25096cf4_1111111110& E149 + convertToDouble -9E44 +} 0xc9442dbf25096cf5 +test expr-28.30 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8 E303 x 1754e31cd072d9_1111111110& E1009 + convertToDouble +8E303 +} 0x7f0754e31cd072da +test expr-28.31 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -1 E303 x -1754e31cd072d9_1111111110& E1006 + convertToDouble -1E303 +} 0xfed754e31cd072da +test expr-28.32 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7 E-287 x 1551603777f798_111111110& E-951 + convertToDouble +7E-287 +} 0x048551603777f799 +test expr-28.33 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -2 E-204 x -1410d9f9b2f7f2_11111110& E-677 + convertToDouble -2E-204 +} 0x95a410d9f9b2f7f3 +test expr-28.34 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +2 E-205 x 100d7b2e28c65b_11111110& E-680 + convertToDouble +2E-205 +} 0x15700d7b2e28c65c +test expr-28.35 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -9 E-47 x -10711fed5b19a3_11111110& E-153 + convertToDouble -9E-47 +} 0xb660711fed5b19a4 +test expr-28.36 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +34 E195 x 1d1c26db7d0dae_000000000001& E652 + convertToDouble +34E195 +} 0x68bd1c26db7d0dae +test expr-28.37 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -68 E195 x -1d1c26db7d0dae_000000000001& E653 + convertToDouble -68E195 +} 0xe8cd1c26db7d0dae +test expr-28.38 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +85 E194 x 1d1c26db7d0dae_000000000001& E650 + convertToDouble +85E194 +} 0x689d1c26db7d0dae +test expr-28.39 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -67 E97 x -139ac1ce2cc95f_000000000001& E328 + convertToDouble -67E97 +} 0xd4739ac1ce2cc95f +test expr-28.40 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +93 E-234 x 127b2e4f210075_0000000000000001& E-771 + convertToDouble +93E-234 +} 0x0fc27b2e4f210075 +test expr-28.41 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -19 E-87 x -12e5f5dfa4fe9d_00000000000001& E-285 + convertToDouble -19E-87 +} 0xae22e5f5dfa4fe9d +test expr-28.42 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +38 E-87 x 12e5f5dfa4fe9d_00000000000001& E-284 + convertToDouble +38E-87 +} 0x2e32e5f5dfa4fe9d +test expr-28.43 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -38 E-88 x -1e3cbc9907fdc8_00000000000001& E-288 + convertToDouble -38E-88 +} 0xadfe3cbc9907fdc8 +test expr-28.44 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -69 E220 x -1e8aa8823a5db3_11111111110& E736 + convertToDouble -69E220 +} 0xedfe8aa8823a5db4 +test expr-28.45 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +18 E43 x 102498ea6df0c3_11111111110& E147 + convertToDouble +18E43 +} 0x49202498ea6df0c4 +test expr-28.46 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -36 E43 x -102498ea6df0c3_11111111110& E148 + convertToDouble -36E43 +} 0xc9302498ea6df0c4 +test expr-28.47 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +61 E-99 x 10ad836f269a16_11111111111110& E-323 + convertToDouble +61E-99 +} 0x2bc0ad836f269a17 +test expr-28.48 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -43 E-92 x -1c0794d9d40e95_111111111111110& E-301 + convertToDouble -43E-92 +} 0xad2c0794d9d40e96 +test expr-28.49 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +86 E-92 x 1c0794d9d40e95_111111111111110& E-300 + convertToDouble +86E-92 +} 0x2d3c0794d9d40e96 +test expr-28.50 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -51 E-74 x -1cd5bee57763e5_1111111111111110& E-241 + convertToDouble -51E-74 +} 0xb0ecd5bee57763e6 +test expr-28.51 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +283 E85 x 16c309024bab4b_00000000000000001& E290 + convertToDouble +283E85 +} 0x5216c309024bab4b +test expr-28.52 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -566 E85 x -16c309024bab4b_00000000000000001& E291 + convertToDouble -566E85 +} 0xd226c309024bab4b +test expr-28.53 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +589 E187 x 1526be9c22eb17_00000000000000001& E630 + convertToDouble +589E187 +} 0x675526be9c22eb17 +test expr-28.54 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -839 E143 x -1ae03f245703e2_000000000000001& E484 + convertToDouble -839E143 +} 0xde3ae03f245703e2 +test expr-28.55 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -744 E-234 x -127b2e4f210075_0000000000000001& E-768 + convertToDouble -744E-234 +} 0x8ff27b2e4f210075 +test expr-28.56 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +930 E-235 x 127b2e4f210075_0000000000000001& E-771 + convertToDouble +930E-235 +} 0x0fc27b2e4f210075 +test expr-28.57 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -186 E-234 x -127b2e4f210075_0000000000000001& E-770 + convertToDouble -186E-234 +} 0x8fd27b2e4f210075 +test expr-28.58 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +604 E175 x 17d93193f78fc5_1111111111111111110& E590 + convertToDouble +604E175 +} 0x64d7d93193f78fc6 +test expr-28.59 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -302 E175 x -17d93193f78fc5_1111111111111111110& E589 + convertToDouble -302E175 +} 0xe4c7d93193f78fc6 +test expr-28.60 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +755 E174 x 17d93193f78fc5_1111111111111111110& E587 + convertToDouble +755E174 +} 0x64a7d93193f78fc6 +test expr-28.61 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -151 E175 x -17d93193f78fc5_1111111111111111110& E588 + convertToDouble -151E175 +} 0xe4b7d93193f78fc6 +test expr-28.62 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +662 E-213 x 1bdb90e62a8cbc_1111111111111110& E-699 + convertToDouble +662E-213 +} 0x144bdb90e62a8cbd +test expr-28.63 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -408 E-74 x -1cd5bee57763e5_1111111111111110& E-238 + convertToDouble -408E-74 +} 0xb11cd5bee57763e6 +test expr-28.64 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +510 E-75 x 1cd5bee57763e5_1111111111111110& E-241 + convertToDouble +510E-75 +} 0x30ecd5bee57763e6 +test expr-28.65 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +6782 E55 x 159bd3ad46e346_0000000000000000001& E195 + convertToDouble +6782E55 +} 0x4c259bd3ad46e346 +test expr-28.66 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -2309 E92 x -1bac6f7d64d119_000000000000000001& E316 + convertToDouble -2309E92 +} 0xd3bbac6f7d64d119 +test expr-28.67 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7963 E34 x 1df4170f0fdecc_00000000000000000001& E125 + convertToDouble +7963E34 +} 0x47cdf4170f0fdecc +test expr-28.68 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3391 E55 x -159bd3ad46e346_0000000000000000001& E194 + convertToDouble -3391E55 +} 0xcc159bd3ad46e346 +test expr-28.69 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7903 E-96 x 107c2d27a5b989_0000000000000000001& E-306 + convertToDouble +7903E-96 +} 0x2cd07c2d27a5b989 +test expr-28.70 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -7611 E-226 x -119b8744033457_0000000000000000001& E-738 + convertToDouble -7611E-226 +} 0x91d19b8744033457 +test expr-28.71 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +4907 E-196 x 11e90a8711440f_000000000000000001& E-639 + convertToDouble +4907E-196 +} 0x1801e90a8711440f +test expr-28.72 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -5547 E-311 x -13f190452a29f4_000000000000000001& E-1021 + convertToDouble -5547E-311 +} 0x8023f190452a29f4 +test expr-28.73 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +5311 E241 x 1f1ce3c887c25f_11111111111111111110& E812 + convertToDouble +5311E241 +} 0x72bf1ce3c887c260 +test expr-28.74 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -5311 E243 x -184e91f4aa0fda_11111111111111111110& E819 + convertToDouble -5311E243 +} 0xf3284e91f4aa0fdb +test expr-28.75 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +5311 E242 x 13720e5d54d97b_11111111111111111110& E816 + convertToDouble +5311E242 +} 0x72f3720e5d54d97c +test expr-28.76 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +9269 E-45 x 19d69455a53bd8_111111111111111111110& E-137 + convertToDouble +9269E-45 +} 0x3769d69455a53bd9 +test expr-28.77 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -8559 E-289 x -104a81d35952fe_11111111111111111110& E-947 + convertToDouble -8559E-289 +} 0x84c04a81d35952ff +test expr-28.78 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8699 E-276 x 12d2df246ecd2c_1111111111111111111110& E-904 + convertToDouble +8699E-276 +} 0x0772d2df246ecd2d +test expr-28.79 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -8085 E-64 x -14c98fce16152d_1111111111111111110& E-200 + convertToDouble -8085E-64 +} 0xb374c98fce16152e +test expr-28.80 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +74819 E201 x 1dd455061eb3f1_0000000000000000000001& E683 + convertToDouble +74819E201 +} 0x6aadd455061eb3f1 +test expr-28.81 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -82081 E41 x -170105df3d47cb_000000000000000000000000001& E152 + convertToDouble -82081E41 +} 0xc9770105df3d47cb +test expr-28.82 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +51881 E37 x 17d2950dc76da4_000000000000000000001& E138 + convertToDouble +51881E37 +} 0x4897d2950dc76da4 +test expr-28.83 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -55061 E157 x -1394fc0f33536c_000000000000000000001& E537 + convertToDouble -55061E157 +} 0xe18394fc0f33536c +test expr-28.84 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +77402 E-215 x 10492a4a8a37fd_0000000000000000000000001& E-698 + convertToDouble +77402E-215 +} 0x1450492a4a8a37fd +test expr-28.85 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -33891 E-92 x -1592f9932c06bd_00000000000000000000001& E-291 + convertToDouble -33891E-92 +} 0xadc592f9932c06bd +test expr-28.86 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +38701 E-215 x 10492a4a8a37fd_0000000000000000000000001& E-699 + convertToDouble +38701E-215 +} 0x1440492a4a8a37fd +test expr-28.87 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -82139 E-76 x -1d0681489839d5_00000000000000000000001& E-237 + convertToDouble -82139E-76 +} 0xb12d0681489839d5 +test expr-28.88 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +75859 E25 x 132645e1ba93ef_11111111111111111111110& E99 + convertToDouble +75859E25 +} 0x46232645e1ba93f0 +test expr-28.89 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +89509 E140 x 16f02bee68670c_1111111111111111111110& E481 + convertToDouble +89509E140 +} 0x5e06f02bee68670d +test expr-28.90 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -57533 E287 x -1272ed2307f569_1111111111111111111110& E969 + convertToDouble -57533E287 +} 0xfc8272ed2307f56a +test expr-28.91 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +46073 E-32 x 12405b773fbdf2_11111111111111111111110& E-91 + convertToDouble +46073E-32 +} 0x3a42405b773fbdf3 +test expr-28.92 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -92146 E-32 x -12405b773fbdf2_11111111111111111111110& E-90 + convertToDouble -92146E-32 +} 0xba52405b773fbdf3 +test expr-28.93 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +83771 E-74 x 17206bfc4ccabd_11111111111111111111110& E-230 + convertToDouble +83771E-74 +} 0x3197206bfc4ccabe +test expr-28.94 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -34796 E-276 x -12d2df246ecd2c_1111111111111111111110& E-902 + convertToDouble -34796E-276 +} 0x8792d2df246ecd2d +test expr-28.95 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +584169 E229 x 1d657059dc79aa_00000000000000000000000000001& E779 + convertToDouble +584169E229 +} 0x70ad657059dc79aa +test expr-28.96 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +164162 E41 x 170105df3d47cb_000000000000000000000000001& E153 + convertToDouble +164162E41 +} 0x49870105df3d47cb +test expr-28.97 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -328324 E41 x -170105df3d47cb_000000000000000000000000001& E154 + convertToDouble -328324E41 +} 0xc9970105df3d47cb +test expr-28.98 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +209901 E-11 x 119b96f36ec68b_00000000000000000000000001& E-19 + convertToDouble +209901E-11 +} 0x3ec19b96f36ec68b +test expr-28.99 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -419802 E-11 x -119b96f36ec68b_00000000000000000000000001& E-18 + convertToDouble -419802E-11 +} 0xbed19b96f36ec68b +test expr-28.100 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +940189 E-112 x 1b99d6240c1a28_00000000000000000000000001& E-353 + convertToDouble +940189E-112 +} 0x29eb99d6240c1a28 +test expr-28.101 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -892771 E-213 x -125818c7294f27_0000000000000000000000000001& E-688 + convertToDouble -892771E-213 +} 0x94f25818c7294f27 +test expr-28.102 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +757803 E120 x 11e968b555bb80_11111111111111111111111111110& E418 + convertToDouble +757803E120 +} 0x5a11e968b555bb81 +test expr-28.103 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -252601 E120 x -17e1e0f1c7a4ab_11111111111111111111111111110& E416 + convertToDouble -252601E120 +} 0xd9f7e1e0f1c7a4ac +test expr-28.104 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +252601 E121 x 1dda592e398dd6_1111111111111111111111111110& E419 + convertToDouble +252601E121 +} 0x5a2dda592e398dd7 +test expr-28.105 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -505202 E120 x -17e1e0f1c7a4ab_11111111111111111111111111110& E417 + convertToDouble -505202E120 +} 0xda07e1e0f1c7a4ac +test expr-28.106 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +970811 E-264 x 1dda6b965c9629_11111111111111111111111110& E-858 + convertToDouble +970811E-264 +} 0x0a5dda6b965c962a +test expr-28.107 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -654839 E-60 x -100e7db3b3f241_111111111111111111111111110& E-180 + convertToDouble -654839E-60 +} 0xb4b00e7db3b3f242 +test expr-28.108 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +289767 E-178 x 1caad28f23a100_11111111111111111111111110& E-574 + convertToDouble +289767E-178 +} 0x1c1caad28f23a101 +test expr-28.109 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -579534 E-178 x -1caad28f23a100_11111111111111111111111110& E-573 + convertToDouble -579534E-178 +} 0x9c2caad28f23a101 +test expr-28.110 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -8823691 E130 x -1e597c0b94b7ae_00000000000000000000000000000001& E454 + convertToDouble -8823691E130 +} 0xdc5e597c0b94b7ae +test expr-28.111 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +9346704 E229 x 1d657059dc79aa_00000000000000000000000000001& E783 + convertToDouble +9346704E229 +} 0x70ed657059dc79aa +test expr-28.112 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -1168338 E229 x -1d657059dc79aa_00000000000000000000000000001& E780 + convertToDouble -1168338E229 +} 0xf0bd657059dc79aa +test expr-28.113 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -6063369 E-136 x -1ae6148e3902b3_000000000000000000000000000001& E-430 + convertToDouble -6063369E-136 +} 0xa51ae6148e3902b3 +test expr-28.114 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +3865421 E-225 x 15d4fe53afec65_00000000000000000000000000001& E-726 + convertToDouble +3865421E-225 +} 0x1295d4fe53afec65 +test expr-28.115 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -5783893 E-127 x -17e5902ce0e151_000000000000000000000000000000001& E-400 + convertToDouble -5783893E-127 +} 0xa6f7e5902ce0e151 +test expr-28.116 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +2572231 E223 x 10f73be1dff9ac_111111111111111111111111111110& E762 + convertToDouble +2572231E223 +} 0x6f90f73be1dff9ad +test expr-28.117 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -5144462 E223 x -10f73be1dff9ac_111111111111111111111111111110& E763 + convertToDouble -5144462E223 +} 0xefa0f73be1dff9ad +test expr-28.118 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +1817623 E109 x 1d85f96f3fe659_11111111111111111111111111110& E382 + convertToDouble +1817623E109 +} 0x57dd85f96f3fe65a +test expr-28.119 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +6431543 E-97 x 14f6493f34a0bc_11111111111111111111111111110& E-300 + convertToDouble +6431543E-97 +} 0x2d34f6493f34a0bd +test expr-28.120 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -5444097 E-21 x -18849dd33c95ae_11111111111111111111111111110& E-48 + convertToDouble -5444097E-21 +} 0xbcf8849dd33c95af +test expr-28.121 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8076999 E-121 x 1fd332f7e2e3b2_11111111111111111111111111110& E-380 + convertToDouble +8076999E-121 +} 0x283fd332f7e2e3b3 +test expr-28.122 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -9997649 E-270 x -1425e9d29e558d_1111111111111111111111111110& E-874 + convertToDouble -9997649E-270 +} 0x895425e9d29e558e +test expr-28.123 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +50609263 E157 x 1193aff1f1c8e3_000000000000000000000000000000001& E547 + convertToDouble +50609263E157 +} 0x622193aff1f1c8e3 +test expr-28.124 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +70589528 E130 x 1e597c0b94b7ae_00000000000000000000000000000001& E457 + convertToDouble +70589528E130 +} 0x5c8e597c0b94b7ae +test expr-28.125 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -88236910 E129 x -1e597c0b94b7ae_00000000000000000000000000000001& E454 + convertToDouble -88236910E129 +} 0xdc5e597c0b94b7ae +test expr-28.126 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +87575437 E-310 x 1805c19e680456_0000000000000000000000000000000000001& E-1004 + convertToDouble +87575437E-310 +} 0x013805c19e680456 +test expr-28.127 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -23135572 E-127 x -17e5902ce0e151_000000000000000000000000000000001& E-398 + convertToDouble -23135572E-127 +} 0xa717e5902ce0e151 +test expr-28.128 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +85900881 E177 x 14375b2214e1b4_111111111111111111111111111111110& E614 + convertToDouble +85900881E177 +} 0x6654375b2214e1b5 +test expr-28.129 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -84863171 E113 x -1a4a8e56474b8b_111111111111111111111111111111110& E401 + convertToDouble -84863171E113 +} 0xd90a4a8e56474b8c +test expr-28.130 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +68761586 E232 x 1a662c350f37f2_1111111111111111111111111111110& E796 + convertToDouble +68761586E232 +} 0x71ba662c350f37f3 +test expr-28.131 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -50464069 E286 x -1948dd06de561e_1111111111111111111111111111110& E975 + convertToDouble -50464069E286 +} 0xfce948dd06de561f +test expr-28.132 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +27869147 E-248 x 1dbbac6f83a820_111111111111111111111111111111111110& E-800 + convertToDouble +27869147E-248 +} 0x0dfdbbac6f83a821 +test expr-28.133 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -55738294 E-248 x -1dbbac6f83a820_111111111111111111111111111111111110& E-799 + convertToDouble -55738294E-248 +} 0x8e0dbbac6f83a821 +test expr-28.134 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +70176353 E-53 x 100683a21de854_1111111111111111111111111111111110& E-150 + convertToDouble +70176353E-53 +} 0x36900683a21de855 +test expr-28.135 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -80555086 E-32 x -1f29ca0ff893b0_111111111111111111111111111111110& E-81 + convertToDouble -80555086E-32 +} 0xbaef29ca0ff893b1 +test expr-28.136 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -491080654 E121 x -1c569e968e0944_00000000000000000000000000000000000000001& E430 + convertToDouble -491080654E121 +} 0xdadc569e968e0944 +test expr-28.137 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +526250918 E287 x 14997a298b2f2e_0000000000000000000000000000000000001& E982 + convertToDouble +526250918E287 +} 0x7d54997a298b2f2e +test expr-28.138 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -245540327 E121 x -1c569e968e0944_00000000000000000000000000000000000000001& E429 + convertToDouble -245540327E121 +} 0xdacc569e968e0944 +test expr-28.139 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -175150874 E-310 x -1805c19e680456_0000000000000000000000000000000000001& E-1003 + convertToDouble -175150874E-310 +} 0x814805c19e680456 +test expr-28.140 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +350301748 E-310 x 1805c19e680456_0000000000000000000000000000000000001& E-1002 + convertToDouble +350301748E-310 +} 0x015805c19e680456 +test expr-28.141 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -437877185 E-311 x -1805c19e680456_0000000000000000000000000000000000001& E-1005 + convertToDouble -437877185E-311 +} 0x812805c19e680456 +test expr-28.142 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +458117166 E52 x 16ce94febdc7a4_1111111111111111111111111111111111110& E201 + convertToDouble +458117166E52 +} 0x4c86ce94febdc7a5 +test expr-28.143 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -916234332 E52 x -16ce94febdc7a4_1111111111111111111111111111111111110& E202 + convertToDouble -916234332E52 +} 0xcc96ce94febdc7a5 +test expr-28.144 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +229058583 E52 x 16ce94febdc7a4_1111111111111111111111111111111111110& E200 + convertToDouble +229058583E52 +} 0x4c76ce94febdc7a5 +test expr-28.145 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -525789935 E98 x -16ecdc2a58fc64_11111111111111111111111111111111110& E354 + convertToDouble -525789935E98 +} 0xd616ecdc2a58fc65 +test expr-28.146 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +282926897 E-227 x 1ff5a70d3d2fee_1111111111111111111111111111111111110& E-727 + convertToDouble +282926897E-227 +} 0x128ff5a70d3d2fef +test expr-28.147 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -565853794 E-227 x -1ff5a70d3d2fee_1111111111111111111111111111111111110& E-726 + convertToDouble -565853794E-227 +} 0x929ff5a70d3d2fef +test expr-28.148 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +667284113 E-240 x 109355f8050c01_111111111111111111111111111111111110& E-768 + convertToDouble +667284113E-240 +} 0x0ff09355f8050c02 +test expr-28.149 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -971212611 E-126 x -1397d3c9745d2e_111111111111111111111111111111111111110& E-389 + convertToDouble -971212611E-126 +} 0xa7a397d3c9745d2f +test expr-28.150 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +9981396317 E-182 x 18afe10a2a66aa_0000000000000000000000000000000000000001& E-572 + convertToDouble +9981396317E-182 +} 0x1c38afe10a2a66aa +test expr-28.151 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -5035231965 E-156 x -101891fc4717fd_00000000000000000000000000000000000001& E-486 + convertToDouble -5035231965E-156 +} 0xa1901891fc4717fd +test expr-28.152 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8336960483 E-153 x 1a06a1024b95e1_000000000000000000000000000000000000001& E-476 + convertToDouble +8336960483E-153 +} 0x223a06a1024b95e1 +test expr-28.153 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -8056371144 E-155 x -101891fc4717fd_00000000000000000000000000000000000001& E-482 + convertToDouble -8056371144E-155 +} 0xa1d01891fc4717fd +test expr-28.154 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +6418488827 E79 x 1021f14ed7b3f9_11111111111111111111111111111111111111110& E295 + convertToDouble +6418488827E79 +} 0x526021f14ed7b3fa +test expr-28.155 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3981006983 E252 x -102ebaf189d5f1_1111111111111111111111111111111111111110& E869 + convertToDouble -3981006983E252 +} 0xf6402ebaf189d5f2 +test expr-28.156 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7962013966 E252 x 102ebaf189d5f1_1111111111111111111111111111111111111110& E870 + convertToDouble +7962013966E252 +} 0x76502ebaf189d5f2 +test expr-28.157 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -4713898551 E261 x -11d8813536e0df_11111111111111111111111111111111111110& E899 + convertToDouble -4713898551E261 +} 0xf821d8813536e0e0 +test expr-28.158 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8715380633 E-58 x 14614c3219891e_11111111111111111111111111111111111111110& E-160 + convertToDouble +8715380633E-58 +} 0x35f4614c3219891f +test expr-28.159 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -9078555839 E-109 x -1fc575867314ed_111111111111111111111111111111111111111111110& E-330 + convertToDouble -9078555839E-109 +} 0xab5fc575867314ee +test expr-28.160 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +9712126110 E-127 x 1397d3c9745d2e_111111111111111111111111111111111111110& E-389 + convertToDouble +9712126110E-127 +} 0x27a397d3c9745d2f +test expr-28.161 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +42333842451 E201 x 10189a26df575f_000000000000000000000000000000000000000000001& E703 + convertToDouble +42333842451E201 +} 0x6be0189a26df575f +test expr-28.162 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -84667684902 E201 x -10189a26df575f_000000000000000000000000000000000000000000001& E704 + convertToDouble -84667684902E201 +} 0xebf0189a26df575f +test expr-28.163 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +23792120709 E-315 x 10b517dc5d3212_00000000000000000000000000000000000000001& E-1012 + convertToDouble +23792120709E-315 +} 0x00b0b517dc5d3212 +test expr-28.164 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -78564021519 E-227 x -1155515fd37265_00000000000000000000000000000000000000000001& E-718 + convertToDouble -78564021519E-227 +} 0x931155515fd37265 +test expr-28.165 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +71812054883 E-188 x 1747b46d78c6fe_00000000000000000000000000000000000000001& E-589 + convertToDouble +71812054883E-188 +} 0x1b2747b46d78c6fe +test expr-28.166 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -30311163631 E-116 x -163ef6f560afe7_00000000000000000000000000000000000000001& E-351 + convertToDouble -30311163631E-116 +} 0xaa063ef6f560afe7 +test expr-28.167 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +71803914657 E292 x 10c0c44cdc2c05_11111111111111111111111111111111111111111110& E1006 + convertToDouble +71803914657E292 +} 0x7ed0c0c44cdc2c06 +test expr-28.168 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +36314223356 E-109 x 1fc575867314ed_111111111111111111111111111111111111111111110& E-328 + convertToDouble +36314223356E-109 +} 0x2b7fc575867314ee +test expr-28.169 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +18157111678 E-109 x 1fc575867314ed_111111111111111111111111111111111111111111110& E-329 + convertToDouble +18157111678E-109 +} 0x2b6fc575867314ee +test expr-28.170 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -45392779195 E-110 x -1fc575867314ed_111111111111111111111111111111111111111111110& E-331 + convertToDouble -45392779195E-110 +} 0xab4fc575867314ee +test expr-28.171 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +778380362293 E218 x 19ab8261990292_0000000000000000000000000000000000000000000000000001& E763 + convertToDouble +778380362293E218 +} 0x6fa9ab8261990292 +test expr-28.172 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -685763015669 E280 x -15fd7aa44d9477_000000000000000000000000000000000000000000000001& E969 + convertToDouble -685763015669E280 +} 0xfc85fd7aa44d9477 +test expr-28.173 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +952918668151 E70 x 14177a9915fbf8_00000000000000000000000000000000000000000000001& E272 + convertToDouble +952918668151E70 +} 0x50f4177a9915fbf8 +test expr-28.174 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -548357443505 E32 x -13abde2775e9b5_0000000000000000000000000000000000000000000001& E145 + convertToDouble -548357443505E32 +} 0xc903abde2775e9b5 +test expr-28.175 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +384865004907 E-285 x 1aa65b58639e69_00000000000000000000000000000000000000000000001& E-909 + convertToDouble +384865004907E-285 +} 0x072aa65b58639e69 +test expr-28.176 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -769730009814 E-285 x -1aa65b58639e69_00000000000000000000000000000000000000000000001& E-908 + convertToDouble -769730009814E-285 +} 0x873aa65b58639e69 +test expr-28.177 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +697015418417 E-93 x 152847dad80453_0000000000000000000000000000000000000000000001& E-270 + convertToDouble +697015418417E-93 +} 0x2f152847dad80453 +test expr-28.178 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -915654049301 E-28 x -1a645598d05989_0000000000000000000000000000000000000000000001& E-54 + convertToDouble -915654049301E-28 +} 0xbc9a645598d05989 +test expr-28.179 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +178548656339 E169 x 1b89d67c5b6d24_111111111111111111111111111111111111111111110& E598 + convertToDouble +178548656339E169 +} 0x655b89d67c5b6d25 +test expr-28.180 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -742522891517 E259 x -1c1c352fc3c308_11111111111111111111111111111111111111111111110& E899 + convertToDouble -742522891517E259 +} 0xf82c1c352fc3c309 +test expr-28.181 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +742522891517 E258 x 167cf7596968d3_11111111111111111111111111111111111111111111110& E896 + convertToDouble +742522891517E258 +} 0x77f67cf7596968d4 +test expr-28.182 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -357097312678 E169 x -1b89d67c5b6d24_111111111111111111111111111111111111111111110& E599 + convertToDouble -357097312678E169 +} 0xe56b89d67c5b6d25 +test expr-28.183 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3113521449172 E218 x -19ab8261990292_0000000000000000000000000000000000000000000000000001& E765 + convertToDouble -3113521449172E218 +} 0xefc9ab8261990292 +test expr-28.184 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +3891901811465 E217 x 19ab8261990292_0000000000000000000000000000000000000000000000000001& E762 + convertToDouble +3891901811465E217 +} 0x6f99ab8261990292 +test expr-28.185 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -1556760724586 E218 x -19ab8261990292_0000000000000000000000000000000000000000000000000001& E764 + convertToDouble -1556760724586E218 +} 0xefb9ab8261990292 +test expr-28.186 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +9997878507563 E-195 x 153db2fea1ea31_0000000000000000000000000000000000000000000000001& E-605 + convertToDouble +9997878507563E-195 +} 0x1a253db2fea1ea31 +test expr-28.187 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -7247563029154 E-319 x -10493f056e9ef3_0000000000000000000000000000000000000000000000001& E-1017 + convertToDouble -7247563029154E-319 +} 0x8060493f056e9ef3 +test expr-28.188 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +3623781514577 E-319 x 10493f056e9ef3_0000000000000000000000000000000000000000000000001& E-1018 + convertToDouble +3623781514577E-319 +} 0x0050493f056e9ef3 +test expr-28.189 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3092446298323 E-200 x -113918353bbc47_0000000000000000000000000000000000000000000000001& E-623 + convertToDouble -3092446298323E-200 +} 0x99013918353bbc47 +test expr-28.190 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +6363857920591 E145 x 128a61cf9483b6_1111111111111111111111111111111111111111111111111110& E524 + convertToDouble +6363857920591E145 +} 0x60b28a61cf9483b7 +test expr-28.191 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -8233559360849 E94 x -11f324d11d4861_1111111111111111111111111111111111111111111111110& E355 + convertToDouble -8233559360849E94 +} 0xd621f324d11d4862 +test expr-28.192 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +2689845954547 E49 x 10bd2bfd34f98a_1111111111111111111111111111111111111111111111110& E204 + convertToDouble +2689845954547E49 +} 0x4cb0bd2bfd34f98b +test expr-28.193 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -5379691909094 E49 x -10bd2bfd34f98a_1111111111111111111111111111111111111111111111110& E205 + convertToDouble -5379691909094E49 +} 0xccc0bd2bfd34f98b +test expr-28.194 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +5560322501926 E-301 x 15acc2053064c1_11111111111111111111111111111111111111111111111110& E-958 + convertToDouble +5560322501926E-301 +} 0x0415acc2053064c2 +test expr-28.195 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -7812878489261 E-179 x -126dae7bbeda74_11111111111111111111111111111111111111111111111111110& E-552 + convertToDouble -7812878489261E-179 +} 0x9d726dae7bbeda75 +test expr-28.196 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8439398533053 E-256 x 170cc285f2d209_1111111111111111111111111111111111111111111111110& E-808 + convertToDouble +8439398533053E-256 +} 0x0d770cc285f2d20a +test expr-28.197 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -2780161250963 E-301 x -15acc2053064c1_11111111111111111111111111111111111111111111111110& E-959 + convertToDouble -2780161250963E-301 +} 0x8405acc2053064c2 +test expr-28.198 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -87605699161665 E155 x -12920f96e7f9ef_00000000000000000000000000000000000000000000000000001& E561 + convertToDouble -87605699161665E155 +} 0xe302920f96e7f9ef +test expr-28.199 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -17521139832333 E156 x -12920f96e7f9ef_00000000000000000000000000000000000000000000000000001& E562 + convertToDouble -17521139832333E156 +} 0xe312920f96e7f9ef +test expr-28.200 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -88218101363513 E-170 x -18395688592faf_0000000000000000000000000000000000000000000000000001& E-519 + convertToDouble -88218101363513E-170 +} 0x9f88395688592faf +test expr-28.201 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +38639244311627 E-115 x 114ef3e205c817_0000000000000000000000000000000000000000000000000001& E-337 + convertToDouble +38639244311627E-115 +} 0x2ae14ef3e205c817 +test expr-28.202 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +35593959807306 E261 x 1072f3819c1320_11111111111111111111111111111111111111111111111111110& E912 + convertToDouble +35593959807306E261 +} 0x78f072f3819c1321 +test expr-28.203 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -53390939710959 E260 x -13bd243521b08d_11111111111111111111111111111111111111111111111111110& E909 + convertToDouble -53390939710959E260 +} 0xf8c3bd243521b08e +test expr-28.204 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +71187919614612 E261 x 1072f3819c1320_11111111111111111111111111111111111111111111111111110& E913 + convertToDouble +71187919614612E261 +} 0x790072f3819c1321 +test expr-28.205 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -88984899518265 E260 x -1072f3819c1320_11111111111111111111111111111111111111111111111111110& E910 + convertToDouble -88984899518265E260 +} 0xf8d072f3819c1321 +test expr-28.206 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +77003665618895 E-73 x 18bf7e7fa6f029_111111111111111111111111111111111111111111111111111111110& E-197 + convertToDouble +77003665618895E-73 +} 0x33a8bf7e7fa6f02a +test expr-28.207 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -15400733123779 E-72 x -18bf7e7fa6f029_111111111111111111111111111111111111111111111111111111110& E-196 + convertToDouble -15400733123779E-72 +} 0xb3b8bf7e7fa6f02a +test expr-28.208 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +61602932495116 E-72 x 18bf7e7fa6f029_111111111111111111111111111111111111111111111111111111110& E-194 + convertToDouble +61602932495116E-72 +} 0x33d8bf7e7fa6f02a +test expr-28.209 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -30801466247558 E-72 x -18bf7e7fa6f029_111111111111111111111111111111111111111111111111111111110& E-195 + convertToDouble -30801466247558E-72 +} 0xb3c8bf7e7fa6f02a +test expr-28.210 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +834735494917063 E-300 x 1fc6c26f899dd1_0000000000000000000000000000000000000000000000000000000001& E-948 + convertToDouble +834735494917063E-300 +} 0x04bfc6c26f899dd1 +test expr-28.211 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -589795149206434 E-151 x -15f2df5e675a0f_0000000000000000000000000000000000000000000000000000000001& E-453 + convertToDouble -589795149206434E-151 +} 0xa3a5f2df5e675a0f +test expr-28.212 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +475603213226859 E-42 x 12d73088f4050a_000000000000000000000000000000000000000000000000000000001& E-91 + convertToDouble +475603213226859E-42 +} 0x3a42d73088f4050a +test expr-28.213 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -294897574603217 E-151 x -15f2df5e675a0f_0000000000000000000000000000000000000000000000000000000001& E-454 + convertToDouble -294897574603217E-151 +} 0xa395f2df5e675a0f +test expr-28.214 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +850813008001913 E93 x 172f7a1831ad70_11111111111111111111111111111111111111111111111111111110& E358 + convertToDouble +850813008001913E93 +} 0x56572f7a1831ad71 +test expr-28.215 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -203449172043339 E185 x -1102b47e4af987_11111111111111111111111111111111111111111111111111111110& E662 + convertToDouble -203449172043339E185 +} 0xe95102b47e4af988 +test expr-28.216 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +406898344086678 E185 x 1102b47e4af987_11111111111111111111111111111111111111111111111111111110& E663 + convertToDouble +406898344086678E185 +} 0x696102b47e4af988 +test expr-28.217 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -813796688173356 E185 x -1102b47e4af987_11111111111111111111111111111111111111111111111111111110& E664 + convertToDouble -813796688173356E185 +} 0xe97102b47e4af988 +test expr-28.218 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +6045338514609393 E244 x 1f746182e6cd5d_00000000000000000000000000000000000000000000000000000000001& E862 + convertToDouble +6045338514609393E244 +} 0x75df746182e6cd5d +test expr-28.219 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -5145963778954906 E142 x -1dfc11fbf46087_00000000000000000000000000000000000000000000000000000000001& E523 + convertToDouble -5145963778954906E142 +} 0xe0adfc11fbf46087 +test expr-28.220 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +2572981889477453 E142 x 1dfc11fbf46087_00000000000000000000000000000000000000000000000000000000001& E522 + convertToDouble +2572981889477453E142 +} 0x609dfc11fbf46087 +test expr-28.221 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -6965949469487146 E74 x -15e2c10ad970b0_0000000000000000000000000000000000000000000000000000000001& E298 + convertToDouble -6965949469487146E74 +} 0xd295e2c10ad970b0 +test expr-28.222 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +6182410494241627 E-119 x 11b96458445d07_0000000000000000000000000000000000000000000000000000000000001& E-343 + convertToDouble +6182410494241627E-119 +} 0x2a81b96458445d07 +test expr-28.223 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -8510309498186985 E-277 x -1acc46749dccfe_000000000000000000000000000000000000000000000000000000000001& E-868 + convertToDouble -8510309498186985E-277 +} 0x89bacc46749dccfe +test expr-28.224 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +6647704637273331 E-212 x 13e07d2c0cb1e9_0000000000000000000000000000000000000000000000000000000000001& E-652 + convertToDouble +6647704637273331E-212 +} 0x1733e07d2c0cb1e9 +test expr-28.225 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -2215901545757777 E-212 x -1a80a6e566428c_000000000000000000000000000000000000000000000000000000000001& E-654 + convertToDouble -2215901545757777E-212 +} 0x971a80a6e566428c +test expr-28.226 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +3771476185376383 E276 x 183010aba78a53_111111111111111111111111111111111111111111111111111111111110& E968 + convertToDouble +3771476185376383E276 +} 0x7c783010aba78a54 +test expr-28.227 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3729901848043846 E212 x -1f7d6721f7f143_111111111111111111111111111111111111111111111111111111111110& E755 + convertToDouble -3729901848043846E212 +} 0xef2f7d6721f7f144 +test expr-28.228 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +3771476185376383 E277 x 1e3c14d6916ce8_111111111111111111111111111111111111111111111111111111111110& E971 + convertToDouble +3771476185376383E277 +} 0x7cae3c14d6916ce9 +test expr-28.229 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -9977830465649166 E119 x -15f6de9d5d6b5a_111111111111111111111111111111111111111111111111111111111110& E448 + convertToDouble -9977830465649166E119 +} 0xdbf5f6de9d5d6b5b +test expr-28.230 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8439928496349319 E-142 x 12483a0f125699_111111111111111111111111111111111111111111111111111111111110& E-419 + convertToDouble +8439928496349319E-142 +} 0x25c2483a0f12569a +test expr-28.231 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -8204230082070882 E-59 x -1d460f4fca1d36_1111111111111111111111111111111111111111111111111111111110& E-144 + convertToDouble -8204230082070882E-59 +} 0xb6fd460f4fca1d37 +test expr-28.232 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8853686434843997 E-244 x 157a340eb5d4f0_11111111111111111111111111111111111111111111111111111111110& E-758 + convertToDouble +8853686434843997E-244 +} 0x10957a340eb5d4f1 +test expr-28.233 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -5553274272288559 E-104 x -1c47d20a19d1ed_1111111111111111111111111111111111111111111111111111111110& E-294 + convertToDouble -5553274272288559E-104 +} 0xad9c47d20a19d1ee +test expr-28.234 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +36149023611096162 E144 x 1491daad0ba280_0000000000000000000000000000000000000000000000000000000000000001& E533 + convertToDouble +36149023611096162E144 +} 0x614491daad0ba280 +test expr-28.235 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -36149023611096162 E147 x -14166f8cfd5cb1_0000000000000000000000000000000000000000000000000000000000000001& E543 + convertToDouble -36149023611096162E147 +} 0xe1e4166f8cfd5cb1 +test expr-28.236 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +18074511805548081 E146 x 1011f2d73116f4_0000000000000000000000000000000000000000000000000000000000000001& E539 + convertToDouble +18074511805548081E146 +} 0x61a011f2d73116f4 +test expr-28.237 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -18074511805548081 E147 x -14166f8cfd5cb1_0000000000000000000000000000000000000000000000000000000000000001& E542 + convertToDouble -18074511805548081E147 +} 0xe1d4166f8cfd5cb1 +test expr-28.238 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +97338774138954421 E-290 x 10d9b828199006_0000000000000000000000000000000000000000000000000000000000000001& E-907 + convertToDouble +97338774138954421E-290 +} 0x0740d9b828199006 +test expr-28.239 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -88133809804950961 E-308 x -119710dc581911_000000000000000000000000000000000000000000000000000000000000001& E-967 + convertToDouble -88133809804950961E-308 +} 0x83819710dc581911 +test expr-28.240 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +94080055902682397 E-243 x 11d467e94b856e_0000000000000000000000000000000000000000000000000000000000000001& E-751 + convertToDouble +94080055902682397E-243 +} 0x1101d467e94b856e +test expr-28.241 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -24691002732654881 E-115 x -159a2783ce70ab_000000000000000000000000000000000000000000000000000000000000001& E-328 + convertToDouble -24691002732654881E-115 +} 0xab759a2783ce70ab +test expr-28.242 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +52306490527514614 E49 x 13de005bd620de_111111111111111111111111111111111111111111111111111111111111111110& E218 + convertToDouble +52306490527514614E49 +} 0x4d93de005bd620df +test expr-28.243 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -26153245263757307 E49 x -13de005bd620de_111111111111111111111111111111111111111111111111111111111111111110& E217 + convertToDouble -26153245263757307E49 +} 0xcd83de005bd620df +test expr-28.244 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +55188692254193604 E165 x 1a999ddec72ac9_11111111111111111111111111111111111111111111111111111111111110& E603 + convertToDouble +55188692254193604E165 +} 0x65aa999ddec72aca +test expr-28.245 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -68985865317742005 E164 x -1a999ddec72ac9_11111111111111111111111111111111111111111111111111111111111110& E600 + convertToDouble -68985865317742005E164 +} 0xe57a999ddec72aca +test expr-28.246 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +27176258005319167 E-261 x 17c0747bd76fa0_11111111111111111111111111111111111111111111111111111111111111110& E-813 + convertToDouble +27176258005319167E-261 +} 0x0d27c0747bd76fa1 +test expr-28.247 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -73169230107256116 E-248 x -122cea327fa99c_1111111111111111111111111111111111111111111111111111111111110& E-768 + convertToDouble -73169230107256116E-248 +} 0x8ff22cea327fa99d +test expr-28.248 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +91461537634070145 E-249 x 122cea327fa99c_1111111111111111111111111111111111111111111111111111111111110& E-771 + convertToDouble +91461537634070145E-249 +} 0x0fc22cea327fa99d +test expr-28.249 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -54352516010638334 E-261 x -17c0747bd76fa0_11111111111111111111111111111111111111111111111111111111111111110& E-812 + convertToDouble -54352516010638334E-261 +} 0x8d37c0747bd76fa1 +test expr-28.250 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +586144289638535878 E280 x 11eccbd6f62709_0000000000000000000000000000000000000000000000000000000000000000001& E989 + convertToDouble +586144289638535878E280 +} 0x7dc1eccbd6f62709 +test expr-28.251 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -601117006785295431 E245 x -1e8b3525b3737e_000000000000000000000000000000000000000000000000000000000000000001& E872 + convertToDouble -601117006785295431E245 +} 0xf67e8b3525b3737e +test expr-28.252 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +293072144819267939 E280 x 11eccbd6f62709_0000000000000000000000000000000000000000000000000000000000000000001& E988 + convertToDouble +293072144819267939E280 +} 0x7db1eccbd6f62709 +test expr-28.253 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -953184713238516652 E272 x -138fd93f1f5342_00000000000000000000000000000000000000000000000000000000000000001& E963 + convertToDouble -953184713238516652E272 +} 0xfc238fd93f1f5342 +test expr-28.254 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +902042358290366539 E-281 x 122dc01ca1cb8c_0000000000000000000000000000000000000000000000000000000000000000001& E-874 + convertToDouble +902042358290366539E-281 +} 0x09522dc01ca1cb8c +test expr-28.255 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -557035730189854663 E-294 x -13bfac6bc4767b_00000000000000000000000000000000000000000000000000000000000000000001& E-918 + convertToDouble -557035730189854663E-294 +} 0x8693bfac6bc4767b +test expr-28.256 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +902042358290366539 E-280 x 16b93023ca3e6f_0000000000000000000000000000000000000000000000000000000000000000001& E-871 + convertToDouble +902042358290366539E-280 +} 0x0986b93023ca3e6f +test expr-28.257 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -354944100507554393 E-238 x -19a91cece6ad07_000000000000000000000000000000000000000000000000000000000000000001& E-733 + convertToDouble -354944100507554393E-238 +} 0x9229a91cece6ad07 +test expr-28.258 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +272104041512242479 E199 x 1f92bacb3cb40b_11111111111111111111111111111111111111111111111111111111111111111111110& E718 + convertToDouble +272104041512242479E199 +} 0x6cdf92bacb3cb40c +test expr-28.259 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -816312124536727437 E199 x -17ae0c186d8708_11111111111111111111111111111111111111111111111111111111111111111111110& E720 + convertToDouble -816312124536727437E199 +} 0xecf7ae0c186d8709 +test expr-28.260 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +544208083024484958 E199 x 1f92bacb3cb40b_11111111111111111111111111111111111111111111111111111111111111111111110& E719 + convertToDouble +544208083024484958E199 +} 0x6cef92bacb3cb40c +test expr-28.261 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -792644927852378159 E78 x -17bff336d8ff05_111111111111111111111111111111111111111111111111111111111111111111110& E318 + convertToDouble -792644927852378159E78 +} 0xd3d7bff336d8ff06 +test expr-28.262 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -679406450132979175 E-263 x -17c0747bd76fa0_11111111111111111111111111111111111111111111111111111111111111110& E-815 + convertToDouble -679406450132979175E-263 +} 0x8d07c0747bd76fa1 +test expr-28.263 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +543525160106383340 E-262 x 17c0747bd76fa0_11111111111111111111111111111111111111111111111111111111111111110& E-812 + convertToDouble +543525160106383340E-262 +} 0x0d37c0747bd76fa1 +test expr-28.264 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7400253695682920196 E215 x 1dca94e3990085_00000000000000000000000000000000000000000000000000000000000000000000001& E776 + convertToDouble +7400253695682920196E215 +} 0x707dca94e3990085 +test expr-28.265 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -1850063423920730049 E215 x -1dca94e3990085_00000000000000000000000000000000000000000000000000000000000000000000001& E774 + convertToDouble -1850063423920730049E215 +} 0xf05dca94e3990085 +test expr-28.266 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +3700126847841460098 E215 x 1dca94e3990085_00000000000000000000000000000000000000000000000000000000000000000000001& E775 + convertToDouble +3700126847841460098E215 +} 0x706dca94e3990085 +test expr-28.267 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -9250317119603650245 E214 x -1dca94e3990085_00000000000000000000000000000000000000000000000000000000000000000000001& E773 + convertToDouble -9250317119603650245E214 +} 0xf04dca94e3990085 +test expr-28.268 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8396094300569779681 E-252 x 1ab223efcee35a_0000000000000000000000000000000000000000000000000000000000000000000000001& E-775 + convertToDouble +8396094300569779681E-252 +} 0x0f8ab223efcee35a +test expr-28.269 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3507665085003296281 E-75 x -160499b881ea50_00000000000000000000000000000000000000000000000000000000000000000000001& E-188 + convertToDouble -3507665085003296281E-75 +} 0xb4360499b881ea50 +test expr-28.270 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7015330170006592562 E-75 x 160499b881ea50_00000000000000000000000000000000000000000000000000000000000000000000001& E-187 + convertToDouble +7015330170006592562E-75 +} 0x34460499b881ea50 +test expr-28.271 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -7015330170006592562 E-74 x -1b85c026a264e4_00000000000000000000000000000000000000000000000000000000000000000000001& E-184 + convertToDouble -7015330170006592562E-74 +} 0xb47b85c026a264e4 +test expr-28.272 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7185620434951919351 E205 x 18d92d2bcc7a80_1111111111111111111111111111111111111111111111111111111111111111111111110& E743 + convertToDouble +7185620434951919351E205 +} 0x6e68d92d2bcc7a81 +test expr-28.273 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -1360520207561212395 E198 x -1f92bacb3cb40b_11111111111111111111111111111111111111111111111111111111111111111111110& E717 + convertToDouble -1360520207561212395E198 +} 0xeccf92bacb3cb40c +test expr-28.274 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +2178999185345151731 E-184 x 19b2c4d2a82335_1111111111111111111111111111111111111111111111111111111111111111111110& E-551 + convertToDouble +2178999185345151731E-184 +} 0x1d89b2c4d2a82336 +test expr-28.275 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -8691089486201567102 E-218 x -1a9c42e5b6d89e_1111111111111111111111111111111111111111111111111111111111111111111110& E-662 + convertToDouble -8691089486201567102E-218 +} 0x969a9c42e5b6d89f +test expr-28.276 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +4345544743100783551 E-218 x 1a9c42e5b6d89e_1111111111111111111111111111111111111111111111111111111111111111111110& E-663 + convertToDouble +4345544743100783551E-218 +} 0x168a9c42e5b6d89f +test expr-28.277 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -4357998370690303462 E-184 x -19b2c4d2a82335_1111111111111111111111111111111111111111111111111111111111111111111110& E-550 + convertToDouble -4357998370690303462E-184 +} 0x9d99b2c4d2a82336 +test expr-28.278 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +59825267349106892461 E177 x 199c476d7868df_000000000000000000000000000000000000000000000000000000000000000000000001& E653 + convertToDouble +59825267349106892461E177 +} 0x68c99c476d7868df +test expr-28.279 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -62259110684423957791 E47 x -1d8f2cfc20d6e8_0000000000000000000000000000000000000000000000000000000000000000000000001& E221 + convertToDouble -62259110684423957791E47 +} 0xcdcd8f2cfc20d6e8 +test expr-28.280 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +58380168477038565599 E265 x 1f686e9efbe48d_00000000000000000000000000000000000000000000000000000000000000000000000001& E945 + convertToDouble +58380168477038565599E265 +} 0x7b0f686e9efbe48d +test expr-28.281 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -62259110684423957791 E48 x -12797c1d948651_0000000000000000000000000000000000000000000000000000000000000000000000001& E225 + convertToDouble -62259110684423957791E48 +} 0xce02797c1d948651 +test expr-28.282 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -33584377202279118724 E-252 x -1ab223efcee35a_0000000000000000000000000000000000000000000000000000000000000000000000001& E-773 + convertToDouble -33584377202279118724E-252 +} 0x8faab223efcee35a +test expr-28.283 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -57484963479615354808 E205 x -18d92d2bcc7a80_1111111111111111111111111111111111111111111111111111111111111111111111110& E746 + convertToDouble -57484963479615354808E205 +} 0xee98d92d2bcc7a81 +test expr-28.284 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +71856204349519193510 E204 x 18d92d2bcc7a80_1111111111111111111111111111111111111111111111111111111111111111111111110& E743 + convertToDouble +71856204349519193510E204 +} 0x6e68d92d2bcc7a81 +test expr-28.285 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -14371240869903838702 E205 x -18d92d2bcc7a80_1111111111111111111111111111111111111111111111111111111111111111111111110& E744 + convertToDouble -14371240869903838702E205 +} 0xee78d92d2bcc7a81 +test expr-28.286 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +36992084760177624177 E-318 x 18c5f9551c2f99_111111111111111111111111111111111111111111111111111111111111111111111110& E-992 + convertToDouble +36992084760177624177E-318 +} 0x01f8c5f9551c2f9a +test expr-28.287 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -73984169520355248354 E-318 x -18c5f9551c2f99_111111111111111111111111111111111111111111111111111111111111111111111110& E-991 + convertToDouble -73984169520355248354E-318 +} 0x8208c5f9551c2f9a +test expr-28.288 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +99257763227713890244 E-115 x 15338a554b9ce0_11111111111111111111111111111111111111111111111111111111111111111111110& E-316 + convertToDouble +99257763227713890244E-115 +} 0x2c35338a554b9ce1 +test expr-28.289 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -87336362425182547697 E-280 x -1130304e7d9c32_11111111111111111111111111111111111111111111111111111111111111111111110& E-864 + convertToDouble -87336362425182547697E-280 +} 0x89f130304e7d9c33 +test expr-28.290 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7 E289 x 1cbb547777a284_10000000001& E962 + convertToDouble +7E289 +} 0x7c1cbb547777a285 +test expr-28.291 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3 E153 x -1ca3d8e6d80cba_100000001& E509 + convertToDouble -3E153 +} 0xdfcca3d8e6d80cbb +test expr-28.292 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +6 E153 x 1ca3d8e6d80cba_100000001& E510 + convertToDouble +6E153 +} 0x5fdca3d8e6d80cbb +test expr-28.293 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -5 E243 x -176ec98994f488_10000001& E809 + convertToDouble -5E243 +} 0xf2876ec98994f489 +test expr-28.294 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7 E-161 x 1f7e0db3799aa2_10000000001& E-533 + convertToDouble +7E-161 +} 0x1eaf7e0db3799aa3 +test expr-28.295 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -7 E-172 x -15a4337446ef2a_1000000001& E-569 + convertToDouble -7E-172 +} 0x9c65a4337446ef2b +test expr-28.296 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8 E-63 x 1a53fc9631d10c_10000001& E-207 + convertToDouble +8E-63 +} 0x330a53fc9631d10d +test expr-28.297 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -7 E-113 x -158c47e6eea282_10000001& E-373 + convertToDouble -7E-113 +} 0xa8a58c47e6eea283 +test expr-28.298 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8 E126 x 17a2ecc414a03f_0111111111110& E421 + convertToDouble +8E126 +} 0x5a47a2ecc414a03f +test expr-28.299 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -4 E126 x -17a2ecc414a03f_0111111111110& E420 + convertToDouble -4E126 +} 0xda37a2ecc414a03f +test expr-28.300 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +5 E125 x 17a2ecc414a03f_0111111111110& E417 + convertToDouble +5E125 +} 0x5a07a2ecc414a03f +test expr-28.301 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -1 E126 x -17a2ecc414a03f_0111111111110& E418 + convertToDouble -1E126 +} 0xda17a2ecc414a03f +test expr-28.302 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8 E-163 x 1708d0f84d3de7_011111110& E-539 + convertToDouble +8E-163 +} 0x1e4708d0f84d3de7 +test expr-28.303 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -1 E-163 x -1708d0f84d3de7_011111110& E-542 + convertToDouble -1E-163 +} 0x9e1708d0f84d3de7 +test expr-28.304 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +2 E-163 x 1708d0f84d3de7_011111110& E-541 + convertToDouble +2E-163 +} 0x1e2708d0f84d3de7 +test expr-28.305 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -4 E-163 x -1708d0f84d3de7_011111110& E-540 + convertToDouble -4E-163 +} 0x9e3708d0f84d3de7 +test expr-28.306 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +51 E195 x 15d51d249dca42_1000000000001& E653 + convertToDouble +51E195 +} 0x68c5d51d249dca43 +test expr-28.307 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -37 E46 x -1033d7eca0adee_100000000000001& E158 + convertToDouble -37E46 +} 0xc9d033d7eca0adef +test expr-28.308 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +74 E46 x 1033d7eca0adee_100000000000001& E159 + convertToDouble +74E46 +} 0x49e033d7eca0adef +test expr-28.309 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -56 E289 x -1cbb547777a284_10000000001& E965 + convertToDouble -56E289 +} 0xfc4cbb547777a285 +test expr-28.310 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +69 E-145 x 158a41b31c9a9a_100000000001& E-476 + convertToDouble +69E-145 +} 0x22358a41b31c9a9b +test expr-28.311 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -70 E-162 x -1f7e0db3799aa2_10000000001& E-533 + convertToDouble -70E-162 +} 0x9eaf7e0db3799aa3 +test expr-28.312 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +56 E-161 x 1f7e0db3799aa2_10000000001& E-530 + convertToDouble +56E-161 +} 0x1edf7e0db3799aa3 +test expr-28.313 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -21 E-303 x -1ccd59caa6a750_10000000001& E-1003 + convertToDouble -21E-303 +} 0x814ccd59caa6a751 +test expr-28.314 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +34 E-276 x 12d5a4350d30ff_011111111110& E-912 + convertToDouble +34E-276 +} 0x06f2d5a4350d30ff +test expr-28.315 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -68 E-276 x -12d5a4350d30ff_011111111110& E-911 + convertToDouble -68E-276 +} 0x8702d5a4350d30ff +test expr-28.316 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +85 E-277 x 12d5a4350d30ff_011111111110& E-914 + convertToDouble +85E-277 +} 0x06d2d5a4350d30ff +test expr-28.317 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -87 E-274 x -12d36cf48e7abd_011111111111110& E-904 + convertToDouble -87E-274 +} 0x8772d36cf48e7abd +test expr-28.318 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +829 E102 x 17221a79cdd1d8_1000000000000001& E348 + convertToDouble +829E102 +} 0x55b7221a79cdd1d9 +test expr-28.319 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -623 E100 x -1640a62f3a83de_10000000000000000001& E341 + convertToDouble -623E100 +} 0xd54640a62f3a83df +test expr-28.320 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +723 E-162 x 145457ee24abd2_1000000000000001& E-529 + convertToDouble +723E-162 +} 0x1ee45457ee24abd3 +test expr-28.321 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -457 E-102 x -1ffc81bc29f02a_100000000000000001& E-331 + convertToDouble -457E-102 +} 0xab4ffc81bc29f02b +test expr-28.322 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +914 E-102 x 1ffc81bc29f02a_100000000000000001& E-330 + convertToDouble +914E-102 +} 0x2b5ffc81bc29f02b +test expr-28.323 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -323 E-135 x -1d589ae4d70218_10000000000001& E-441 + convertToDouble -323E-135 +} 0xa46d589ae4d70219 +test expr-28.324 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +151 E176 x 1dcf7df8f573b7_0111111111111111110& E591 + convertToDouble +151E176 +} 0x64edcf7df8f573b7 +test expr-28.325 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -302 E176 x -1dcf7df8f573b7_0111111111111111110& E592 + convertToDouble -302E176 +} 0xe4fdcf7df8f573b7 +test expr-28.326 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +921 E90 x 1c420a45fd70ff_0111111111111110& E308 + convertToDouble +921E90 +} 0x533c420a45fd70ff +test expr-28.327 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -604 E176 x -1dcf7df8f573b7_0111111111111111110& E593 + convertToDouble -604E176 +} 0xe50dcf7df8f573b7 +test expr-28.328 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +823 E-206 x 14a48933c208ad_0111111111111110& E-675 + convertToDouble +823E-206 +} 0x15c4a48933c208ad +test expr-28.329 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -463 E-114 x -11d0c83f6378a5_011111111111110& E-370 + convertToDouble -463E-114 +} 0xa8d1d0c83f6378a5 +test expr-28.330 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +348 E-274 x 12d36cf48e7abd_011111111111110& E-902 + convertToDouble +348E-274 +} 0x0792d36cf48e7abd +test expr-28.331 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +9968 E100 x 1640a62f3a83de_10000000000000000001& E345 + convertToDouble +9968E100 +} 0x558640a62f3a83df +test expr-28.332 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -6230 E99 x -1640a62f3a83de_10000000000000000001& E341 + convertToDouble -6230E99 +} 0xd54640a62f3a83df +test expr-28.333 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +1246 E100 x 1640a62f3a83de_10000000000000000001& E342 + convertToDouble +1246E100 +} 0x555640a62f3a83df +test expr-28.334 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +6676 E-296 x 15519ac5142aaa_1000000000000000000001& E-971 + convertToDouble +6676E-296 +} 0x0345519ac5142aab +test expr-28.335 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -8345 E-297 x -15519ac5142aaa_1000000000000000000001& E-974 + convertToDouble -8345E-297 +} 0x8315519ac5142aab +test expr-28.336 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +1669 E-296 x 15519ac5142aaa_1000000000000000000001& E-973 + convertToDouble +1669E-296 +} 0x0325519ac5142aab +test expr-28.337 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3338 E-296 x -15519ac5142aaa_1000000000000000000001& E-972 + convertToDouble -3338E-296 +} 0x8335519ac5142aab +test expr-28.338 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +3257 E58 x 1444b34a6fb3eb_01111111111111111110& E204 + convertToDouble +3257E58 +} 0x4cb444b34a6fb3eb +test expr-28.339 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -6514 E58 x -1444b34a6fb3eb_01111111111111111110& E205 + convertToDouble -6514E58 +} 0xccc444b34a6fb3eb +test expr-28.340 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +2416 E176 x 1dcf7df8f573b7_0111111111111111110& E595 + convertToDouble +2416E176 +} 0x652dcf7df8f573b7 +test expr-28.341 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8085 E-63 x 19fbf3c19b9a79_0111111111111111110& E-197 + convertToDouble +8085E-63 +} 0x33a9fbf3c19b9a79 +test expr-28.342 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3234 E-62 x -19fbf3c19b9a79_0111111111111111110& E-195 + convertToDouble -3234E-62 +} 0xb3c9fbf3c19b9a79 +test expr-28.343 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +1617 E-62 x 19fbf3c19b9a79_0111111111111111110& E-196 + convertToDouble +1617E-62 +} 0x33b9fbf3c19b9a79 +test expr-28.344 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -6468 E-62 x -19fbf3c19b9a79_0111111111111111110& E-194 + convertToDouble -6468E-62 +} 0xb3d9fbf3c19b9a79 +test expr-28.345 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +53418 E111 x 15b1051df943a8_1000000000000000000001& E384 + convertToDouble +53418E111 +} 0x57f5b1051df943a9 +test expr-28.346 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -60513 E160 x -15043b64e56c72_1000000000000000000001& E547 + convertToDouble -60513E160 +} 0xe225043b64e56c73 +test expr-28.347 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +26709 E111 x 15b1051df943a8_1000000000000000000001& E383 + convertToDouble +26709E111 +} 0x57e5b1051df943a9 +test expr-28.348 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -99447 E166 x -10782189b336ae_1000000000000000000001& E568 + convertToDouble -99447E166 +} 0xe370782189b336af +test expr-28.349 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +12549 E48 x 10c52fe6dc6a1b_011111111111111111111110& E173 + convertToDouble +12549E48 +} 0x4ac0c52fe6dc6a1b +test expr-28.350 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -25098 E48 x -10c52fe6dc6a1b_011111111111111111111110& E174 + convertToDouble -25098E48 +} 0xcad0c52fe6dc6a1b +test expr-28.351 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +50196 E48 x 10c52fe6dc6a1b_011111111111111111111110& E175 + convertToDouble +50196E48 +} 0x4ae0c52fe6dc6a1b +test expr-28.352 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -62745 E47 x -10c52fe6dc6a1b_011111111111111111111110& E172 + convertToDouble -62745E47 +} 0xcab0c52fe6dc6a1b +test expr-28.353 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +83771 E-73 x 1ce886fb5ffd6d_0111111111111111111110& E-227 + convertToDouble +83771E-73 +} 0x31cce886fb5ffd6d +test expr-28.354 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -97451 E-167 x -1c0f220fb1c70d_01111111111111111111110& E-539 + convertToDouble -97451E-167 +} 0x9e4c0f220fb1c70d +test expr-28.355 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +86637 E-203 x 10943edb4e81db_0111111111111111111110& E-658 + convertToDouble +86637E-203 +} 0x16d0943edb4e81db +test expr-28.356 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -75569 E-254 x -15a462d91c6ab3_0111111111111111111111111110& E-828 + convertToDouble -75569E-254 +} 0x8c35a462d91c6ab3 +test expr-28.357 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +473806 E83 x 17d15bf3186080_1000000000000000000000001& E294 + convertToDouble +473806E83 +} 0x5257d15bf3186081 +test expr-28.358 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -947612 E83 x -17d15bf3186080_1000000000000000000000001& E295 + convertToDouble -947612E83 +} 0xd267d15bf3186081 +test expr-28.359 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +292369 E76 x 18a85eb277e644_100000000000000000000000001& E270 + convertToDouble +292369E76 +} 0x50d8a85eb277e645 +test expr-28.360 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -584738 E76 x -18a85eb277e644_100000000000000000000000001& E271 + convertToDouble -584738E76 +} 0xd0e8a85eb277e645 +test expr-28.361 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +933587 E-140 x 1b248728b9c116_100000000000000000000000001& E-446 + convertToDouble +933587E-140 +} 0x241b248728b9c117 +test expr-28.362 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -720919 E-14 x -1ef696965cbf04_10000000000000000000000001& E-28 + convertToDouble -720919E-14 +} 0xbe3ef696965cbf05 +test expr-28.363 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +535001 E-149 x 10b38e07c745ae_1000000000000000000000001& E-476 + convertToDouble +535001E-149 +} 0x2230b38e07c745af +test expr-28.364 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -890521 E-235 x -114828ee39c852_1000000000000000000000001& E-761 + convertToDouble -890521E-235 +} 0x90614828ee39c853 +test expr-28.365 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +548057 E81 x 11a1d9135cca53_0111111111111111111111110& E288 + convertToDouble +548057E81 +} 0x51f1a1d9135cca53 +test expr-28.366 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -706181 E88 x -1b156ac4c2d1e5_0111111111111111111111110& E311 + convertToDouble -706181E88 +} 0xd36b156ac4c2d1e5 +test expr-28.367 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +820997 E106 x 1b4f8b64fa125d_0111111111111111111111110& E371 + convertToDouble +820997E106 +} 0x572b4f8b64fa125d +test expr-28.368 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -320681 E63 x -17ca18a876c5ef_0111111111111111111111110& E227 + convertToDouble -320681E63 +} 0xce27ca18a876c5ef +test expr-28.369 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +928609 E-261 x 1be2dd66200bef_011111111111111111111111111110& E-848 + convertToDouble +928609E-261 +} 0x0afbe2dd66200bef +test expr-28.370 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -302276 E-254 x -15a462d91c6ab3_0111111111111111111111111110& E-826 + convertToDouble -302276E-254 +} 0x8c55a462d91c6ab3 +test expr-28.371 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +151138 E-254 x 15a462d91c6ab3_0111111111111111111111111110& E-827 + convertToDouble +151138E-254 +} 0x0c45a462d91c6ab3 +test expr-28.372 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +4691773 E45 x 19147b9330eaae_1000000000000000000000000001& E171 + convertToDouble +4691773E45 +} 0x4aa9147b9330eaaf +test expr-28.373 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -9383546 E45 x -19147b9330eaae_1000000000000000000000000001& E172 + convertToDouble -9383546E45 +} 0xcab9147b9330eaaf +test expr-28.374 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +3059949 E-243 x 13ecf22ea07862_10000000000000000000000000001& E-786 + convertToDouble +3059949E-243 +} 0x0ed3ecf22ea07863 +test expr-28.375 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -6119898 E-243 x -13ecf22ea07862_10000000000000000000000000001& E-785 + convertToDouble -6119898E-243 +} 0x8ee3ecf22ea07863 +test expr-28.376 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +5356626 E-213 x 1b84252abdf6ba_100000000000000000000000001& E-686 + convertToDouble +5356626E-213 +} 0x151b84252abdf6bb +test expr-28.377 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -4877378 E-199 x -11cd5cd90cb200_100000000000000000000000001& E-639 + convertToDouble -4877378E-199 +} 0x9801cd5cd90cb201 +test expr-28.378 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7716693 E223 x 1972d9d2cff683_01111111111111111111111111110& E763 + convertToDouble +7716693E223 +} 0x6fa972d9d2cff683 +test expr-28.379 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -5452869 E109 x -16247b136fecc3_01111111111111111111111111110& E384 + convertToDouble -5452869E109 +} 0xd7f6247b136fecc3 +test expr-28.380 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +4590831 E156 x 14689b4a5fa201_011111111111111111111111111110& E540 + convertToDouble +4590831E156 +} 0x61b4689b4a5fa201 +test expr-28.381 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -9181662 E156 x -14689b4a5fa201_011111111111111111111111111110& E541 + convertToDouble -9181662E156 +} 0xe1c4689b4a5fa201 +test expr-28.382 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3714436 E-261 x -1be2dd66200bef_011111111111111111111111111110& E-846 + convertToDouble -3714436E-261 +} 0x8b1be2dd66200bef +test expr-28.383 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +4643045 E-262 x 1be2dd66200bef_011111111111111111111111111110& E-849 + convertToDouble +4643045E-262 +} 0x0aebe2dd66200bef +test expr-28.384 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -7428872 E-261 x -1be2dd66200bef_011111111111111111111111111110& E-845 + convertToDouble -7428872E-261 +} 0x8b2be2dd66200bef +test expr-28.385 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +52942146 E130 x 16c31d08af89c2_10000000000000000000000000000001& E457 + convertToDouble +52942146E130 +} 0x5c86c31d08af89c3 +test expr-28.386 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -27966061 E145 x -155bcf72fd10f8_1000000000000000000000000000000001& E506 + convertToDouble -27966061E145 +} 0xdf955bcf72fd10f9 +test expr-28.387 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +26471073 E130 x 16c31d08af89c2_10000000000000000000000000000001& E456 + convertToDouble +26471073E130 +} 0x5c76c31d08af89c3 +test expr-28.388 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -55932122 E145 x -155bcf72fd10f8_1000000000000000000000000000000001& E507 + convertToDouble -55932122E145 +} 0xdfa55bcf72fd10f9 +test expr-28.389 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +95412548 E-99 x 18e0bfb98864c8_100000000000000000000000000000001& E-303 + convertToDouble +95412548E-99 +} 0x2d08e0bfb98864c9 +test expr-28.390 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -47706274 E-99 x -18e0bfb98864c8_100000000000000000000000000000001& E-304 + convertToDouble -47706274E-99 +} 0xacf8e0bfb98864c9 +test expr-28.391 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +23853137 E-99 x 18e0bfb98864c8_100000000000000000000000000000001& E-305 + convertToDouble +23853137E-99 +} 0x2ce8e0bfb98864c9 +test expr-28.392 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -78493654 E-301 x -140d76077b648e_10000000000000000000000000000001& E-974 + convertToDouble -78493654E-301 +} 0x83140d76077b648f +test expr-28.393 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +65346417 E29 x 13aa1ad778f23b_0111111111111111111111111111110& E122 + convertToDouble +65346417E29 +} 0x4793aa1ad778f23b +test expr-28.394 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -51083099 E167 x -14a75eb58df47b_0111111111111111111111111111110& E580 + convertToDouble -51083099E167 +} 0xe434a75eb58df47b +test expr-28.395 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +89396333 E264 x 1526f061ca9053_0111111111111111111111111111111110& E903 + convertToDouble +89396333E264 +} 0x786526f061ca9053 +test expr-28.396 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -84863171 E114 x -106e98f5ec8f37_0111111111111111111111111111111110& E405 + convertToDouble -84863171E114 +} 0xd9406e98f5ec8f37 +test expr-28.397 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +59540836 E-251 x 10430c2d075c07_011111111111111111111111111111110& E-808 + convertToDouble +59540836E-251 +} 0x0d70430c2d075c07 +test expr-28.398 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -74426045 E-252 x -10430c2d075c07_011111111111111111111111111111110& E-811 + convertToDouble -74426045E-252 +} 0x8d40430c2d075c07 +test expr-28.399 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +14885209 E-251 x 10430c2d075c07_011111111111111111111111111111110& E-810 + convertToDouble +14885209E-251 +} 0x0d50430c2d075c07 +test expr-28.400 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -29770418 E-251 x -10430c2d075c07_011111111111111111111111111111110& E-809 + convertToDouble -29770418E-251 +} 0x8d60430c2d075c07 +test expr-28.401 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +982161308 E122 x 11b6231e18c5ca_100000000000000000000000000000000000000001& E435 + convertToDouble +982161308E122 +} 0x5b21b6231e18c5cb +test expr-28.402 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -245540327 E122 x -11b6231e18c5ca_100000000000000000000000000000000000000001& E433 + convertToDouble -245540327E122 +} 0xdb01b6231e18c5cb +test expr-28.403 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +491080654 E122 x 11b6231e18c5ca_100000000000000000000000000000000000000001& E434 + convertToDouble +491080654E122 +} 0x5b11b6231e18c5cb +test expr-28.404 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +525452622 E-310 x 12045136ce0340_1000000000000000000000000000000000001& E-1001 + convertToDouble +525452622E-310 +} 0x0162045136ce0341 +test expr-28.405 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -771837113 E-134 x -14e61f991c4ed0_100000000000000000000000000000000001& E-416 + convertToDouble -771837113E-134 +} 0xa5f4e61f991c4ed1 +test expr-28.406 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +820858081 E-150 x 14050669985a86_10000000000000000000000000000000001& E-469 + convertToDouble +820858081E-150 +} 0x22a4050669985a87 +test expr-28.407 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -262726311 E-310 x -12045136ce0340_1000000000000000000000000000000000001& E-1002 + convertToDouble -262726311E-310 +} 0x8152045136ce0341 +test expr-28.408 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +923091487 E209 x 10bc60e6896717_011111111111111111111111111111111110& E724 + convertToDouble +923091487E209 +} 0x6d30bc60e6896717 +test expr-28.409 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -653777767 E273 x -120223f2b3a881_0111111111111111111111111111111111111110& E936 + convertToDouble -653777767E273 +} 0xfa720223f2b3a881 +test expr-28.410 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +842116236 E-53 x 1809c5732cdc7f_0111111111111111111111111111111110& E-147 + convertToDouble +842116236E-53 +} 0x36c809c5732cdc7f +test expr-28.411 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -741111169 E-202 x -15a3e1d1b73099_01111111111111111111111111111111110& E-642 + convertToDouble -741111169E-202 +} 0x97d5a3e1d1b73099 +test expr-28.412 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +839507247 E-284 x 129a1effc50859_0111111111111111111111111111111110& E-914 + convertToDouble +839507247E-284 +} 0x06d29a1effc50859 +test expr-28.413 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -951487269 E-264 x -1c92befccb5f59_0111111111111111111111111111111110& E-848 + convertToDouble -951487269E-264 +} 0x8afc92befccb5f59 +test expr-28.414 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -9821613080 E121 x -11b6231e18c5ca_100000000000000000000000000000000000000001& E435 + convertToDouble -9821613080E121 +} 0xdb21b6231e18c5cb +test expr-28.415 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +6677856011 E-31 x 193a6d11077292_100000000000000000000000000000000000001& E-71 + convertToDouble +6677856011E-31 +} 0x3b893a6d11077293 +test expr-28.416 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3573796826 E-266 x -112be2041a79fc_100000000000000000000000000000000000001& E-852 + convertToDouble -3573796826E-266 +} 0x8ab12be2041a79fd +test expr-28.417 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7147593652 E-266 x 112be2041a79fc_100000000000000000000000000000000000001& E-851 + convertToDouble +7147593652E-266 +} 0x0ac12be2041a79fd +test expr-28.418 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -9981396317 E-181 x -1edbd94cb50054_100000000000000000000000000000000000001& E-569 + convertToDouble -9981396317E-181 +} 0x9c6edbd94cb50055 +test expr-28.419 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +3268888835 E272 x 120223f2b3a881_0111111111111111111111111111111111111110& E935 + convertToDouble +3268888835E272 +} 0x7a620223f2b3a881 +test expr-28.420 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -2615111068 E273 x -120223f2b3a881_0111111111111111111111111111111111111110& E938 + convertToDouble -2615111068E273 +} 0xfa920223f2b3a881 +test expr-28.421 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +1307555534 E273 x 120223f2b3a881_0111111111111111111111111111111111111110& E937 + convertToDouble +1307555534E273 +} 0x7a820223f2b3a881 +test expr-28.422 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +2990671154 E-190 x 13db11ac608107_01111111111111111111111111111111111111110& E-600 + convertToDouble +2990671154E-190 +} 0x1a73db11ac608107 +test expr-28.423 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -1495335577 E-190 x -13db11ac608107_01111111111111111111111111111111111111110& E-601 + convertToDouble -1495335577E-190 +} 0x9a63db11ac608107 +test expr-28.424 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +5981342308 E-190 x 13db11ac608107_01111111111111111111111111111111111111110& E-599 + convertToDouble +5981342308E-190 +} 0x1a83db11ac608107 +test expr-28.425 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -7476677885 E-191 x -13db11ac608107_01111111111111111111111111111111111111110& E-602 + convertToDouble -7476677885E-191 +} 0x9a53db11ac608107 +test expr-28.426 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +82259684194 E-202 x 12c3e72d179606_1000000000000000000000000000000000000000001& E-635 + convertToDouble +82259684194E-202 +} 0x1842c3e72d179607 +test expr-28.427 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -93227267727 E-49 x -1960fe08d5847e_100000000000000000000000000000000000000001& E-127 + convertToDouble -93227267727E-49 +} 0xb80960fe08d5847f +test expr-28.428 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +41129842097 E-202 x 12c3e72d179606_1000000000000000000000000000000000000000001& E-636 + convertToDouble +41129842097E-202 +} 0x1832c3e72d179607 +test expr-28.429 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -47584241418 E-314 x -14e25dd3747e96_10000000000000000000000000000000000000001& E-1008 + convertToDouble -47584241418E-314 +} 0x80f4e25dd3747e97 +test expr-28.430 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -79360293406 E92 x -1c58a00bb31863_01111111111111111111111111111111111111110& E341 + convertToDouble -79360293406E92 +} 0xd54c58a00bb31863 +test expr-28.431 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +57332259349 E225 x 120811f528378b_01111111111111111111111111111111111111110& E783 + convertToDouble +57332259349E225 +} 0x70e20811f528378b +test expr-28.432 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -57202326162 E111 x -1626f1c480545b_01111111111111111111111111111111111111110& E404 + convertToDouble -57202326162E111 +} 0xd93626f1c480545b +test expr-28.433 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +86860597053 E-206 x 103b77d2b969d9_0111111111111111111111111111111111111111110& E-648 + convertToDouble +86860597053E-206 +} 0x17703b77d2b969d9 +test expr-28.434 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -53827010643 E-200 x -132fa69a69bd6d_0111111111111111111111111111111111111111110& E-629 + convertToDouble -53827010643E-200 +} 0x98a32fa69a69bd6d +test expr-28.435 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +53587107423 E-61 x 100a19a3ffd981_011111111111111111111111111111111111111111110& E-167 + convertToDouble +53587107423E-61 +} 0x35800a19a3ffd981 +test expr-28.436 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +635007636765 E200 x 1824e73a4f030e_100000000000000000000000000000000000000000001& E703 + convertToDouble +635007636765E200 +} 0x6be824e73a4f030f +test expr-28.437 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +508006109412 E201 x 1824e73a4f030e_100000000000000000000000000000000000000000001& E706 + convertToDouble +508006109412E201 +} 0x6c1824e73a4f030f +test expr-28.438 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -254003054706 E201 x -1824e73a4f030e_100000000000000000000000000000000000000000001& E705 + convertToDouble -254003054706E201 +} 0xec0824e73a4f030f +test expr-28.439 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +561029718715 E-72 x 1cd96a6972a14a_100000000000000000000000000000000000000000001& E-201 + convertToDouble +561029718715E-72 +} 0x336cd96a6972a14b +test expr-28.440 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -897647549944 E-71 x -1cd96a6972a14a_100000000000000000000000000000000000000000001& E-197 + convertToDouble -897647549944E-71 +} 0xb3acd96a6972a14b +test expr-28.441 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +112205943743 E-71 x 1cd96a6972a14a_100000000000000000000000000000000000000000001& E-200 + convertToDouble +112205943743E-71 +} 0x337cd96a6972a14b +test expr-28.442 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -873947086081 E-236 x -19e117541d04e6_1000000000000000000000000000000000000000000001& E-745 + convertToDouble -873947086081E-236 +} 0x9169e117541d04e7 +test expr-28.443 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +809184709177 E116 x 1de27e59fb0679_011111111111111111111111111111111111111111110& E424 + convertToDouble +809184709177E116 +} 0x5a7de27e59fb0679 +test expr-28.444 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -573112917422 E81 x -11958b36c5102b_01111111111111111111111111111111111111111111110& E308 + convertToDouble -573112917422E81 +} 0xd331958b36c5102b +test expr-28.445 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +286556458711 E81 x 11958b36c5102b_01111111111111111111111111111111111111111111110& E307 + convertToDouble +286556458711E81 +} 0x5321958b36c5102b +test expr-28.446 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +952805821491 E-259 x 1551767ef8a9a3_011111111111111111111111111111111111111111110& E-821 + convertToDouble +952805821491E-259 +} 0x0ca551767ef8a9a3 +test expr-28.447 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -132189992873 E-44 x -1b746cf242410b_011111111111111111111111111111111111111111110& E-110 + convertToDouble -132189992873E-44 +} 0xb91b746cf242410b +test expr-28.448 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -173696038493 E-144 x -1f8fefbb3249d3_011111111111111111111111111111111111111111110& E-442 + convertToDouble -173696038493E-144 +} 0xa45f8fefbb3249d3 +test expr-28.449 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +1831132757599 E-107 x 138e6edd48f2a2_1000000000000000000000000000000000000000000000001& E-315 + convertToDouble +1831132757599E-107 +} 0x2c438e6edd48f2a3 +test expr-28.450 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -9155663787995 E-108 x -138e6edd48f2a2_1000000000000000000000000000000000000000000000001& E-316 + convertToDouble -9155663787995E-108 +} 0xac338e6edd48f2a3 +test expr-28.451 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7324531030396 E-107 x 138e6edd48f2a2_1000000000000000000000000000000000000000000000001& E-313 + convertToDouble +7324531030396E-107 +} 0x2c638e6edd48f2a3 +test expr-28.452 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -9277338894969 E-200 x -19d5a44fd99a6a_1000000000000000000000000000000000000000000000001& E-622 + convertToDouble -9277338894969E-200 +} 0x9919d5a44fd99a6b +test expr-28.453 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8188292423973 E287 x 1390273bf8f983_0111111111111111111111111111111111111111111111110& E996 + convertToDouble +8188292423973E287 +} 0x7e3390273bf8f983 +test expr-28.454 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -5672557437938 E59 x -148c2bd60a1523_011111111111111111111111111111111111111111111110& E238 + convertToDouble -5672557437938E59 +} 0xced48c2bd60a1523 +test expr-28.455 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +2836278718969 E59 x 148c2bd60a1523_011111111111111111111111111111111111111111111110& E237 + convertToDouble +2836278718969E59 +} 0x4ec48c2bd60a1523 +test expr-28.456 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -9995153153494 E54 x -17ba37c4fbe993_01111111111111111111111111111111111111111111110& E222 + convertToDouble -9995153153494E54 +} 0xcdd7ba37c4fbe993 +test expr-28.457 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +9224786422069 E-291 x 14ee5d56b32957_011111111111111111111111111111111111111111111111110& E-924 + convertToDouble +9224786422069E-291 +} 0x0634ee5d56b32957 +test expr-28.458 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3142213164987 E-294 x -1d3409dfbca26f_011111111111111111111111111111111111111111111111110& E-936 + convertToDouble -3142213164987E-294 +} 0x857d3409dfbca26f +test expr-28.459 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +6284426329974 E-294 x 1d3409dfbca26f_011111111111111111111111111111111111111111111111110& E-935 + convertToDouble +6284426329974E-294 +} 0x058d3409dfbca26f +test expr-28.460 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -8340483752889 E-301 x -10419183e44b91_01111111111111111111111111111111111111111111111110& E-957 + convertToDouble -8340483752889E-301 +} 0x8420419183e44b91 +test expr-28.461 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +67039371486466 E89 x 17f203339c9628_10000000000000000000000000000000000000000000000000001& E341 + convertToDouble +67039371486466E89 +} 0x5547f203339c9629 +test expr-28.462 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -62150786615239 E197 x -12e79a035b9714_1000000000000000000000000000000000000000000000000001& E700 + convertToDouble -62150786615239E197 +} 0xebb2e79a035b9715 +test expr-28.463 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +33519685743233 E89 x 17f203339c9628_10000000000000000000000000000000000000000000000000001& E340 + convertToDouble +33519685743233E89 +} 0x5537f203339c9629 +test expr-28.464 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -52563419496999 E156 x -1bdb17625bf6e6_1000000000000000000000000000000000000000000000000001& E563 + convertToDouble -52563419496999E156 +} 0xe32bdb17625bf6e7 +test expr-28.465 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +32599460466991 E-65 x 1f395d4c779d8e_1000000000000000000000000000000000000000000000000001& E-172 + convertToDouble +32599460466991E-65 +} 0x353f395d4c779d8f +test expr-28.466 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -41010988798007 E-133 x -152e1c9e04ee06_100000000000000000000000000000000000000000000000001& E-397 + convertToDouble -41010988798007E-133 +} 0xa7252e1c9e04ee07 +test expr-28.467 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +65198920933982 E-65 x 1f395d4c779d8e_1000000000000000000000000000000000000000000000000001& E-171 + convertToDouble +65198920933982E-65 +} 0x354f395d4c779d8f +test expr-28.468 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -82021977596014 E-133 x -152e1c9e04ee06_100000000000000000000000000000000000000000000000001& E-396 + convertToDouble -82021977596014E-133 +} 0xa7352e1c9e04ee07 +test expr-28.469 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +80527976643809 E61 x 1c7c5aea080a49_0111111111111111111111111111111111111111111111111110& E248 + convertToDouble +80527976643809E61 +} 0x4f7c7c5aea080a49 +test expr-28.470 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -74712611505209 E158 x -1eeebe9ea010f3_011111111111111111111111111111111111111111111111110& E570 + convertToDouble -74712611505209E158 +} 0xe39eeebe9ea010f3 +test expr-28.471 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +53390939710959 E261 x 18ac6d426a1cb1_0111111111111111111111111111111111111111111111111110& E912 + convertToDouble +53390939710959E261 +} 0x78f8ac6d426a1cb1 +test expr-28.472 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -69277302659155 E225 x -1547166a3a2b0f_011111111111111111111111111111111111111111111111110& E793 + convertToDouble -69277302659155E225 +} 0xf18547166a3a2b0f +test expr-28.473 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +46202199371337 E-72 x 128f9edfbd341f_0111111111111111111111111111111111111111111111111111111110& E-194 + convertToDouble +46202199371337E-72 +} 0x33d28f9edfbd341f +test expr-28.474 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -23438635467783 E-179 x -1ba485b99e47af_0111111111111111111111111111111111111111111111111110& E-551 + convertToDouble -23438635467783E-179 +} 0x9d8ba485b99e47af +test expr-28.475 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +41921560615349 E-67 x 19b2a5c4041e4b_0111111111111111111111111111111111111111111111111110& E-178 + convertToDouble +41921560615349E-67 +} 0x34d9b2a5c4041e4b +test expr-28.476 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -92404398742674 E-72 x -128f9edfbd341f_0111111111111111111111111111111111111111111111111111111110& E-193 + convertToDouble -92404398742674E-72 +} 0xb3e28f9edfbd341f +test expr-28.477 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +738545606647197 E124 x 13d8886a766a20_100000000000000000000000000000000000000000000000000001& E461 + convertToDouble +738545606647197E124 +} 0x5cc3d8886a766a21 +test expr-28.478 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -972708181182949 E117 x -15ed1f039cebfe_1000000000000000000000000000000000000000000000000000001& E438 + convertToDouble -972708181182949E117 +} 0xdb55ed1f039cebff +test expr-28.479 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -837992143580825 E87 x -17f203339c9628_10000000000000000000000000000000000000000000000000001& E338 + convertToDouble -837992143580825E87 +} 0xd517f203339c9629 +test expr-28.480 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +609610927149051 E-255 x 104273b18918b0_100000000000000000000000000000000000000000000000000000001& E-798 + convertToDouble +609610927149051E-255 +} 0x0e104273b18918b1 +test expr-28.481 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -475603213226859 E-41 x -178cfcab31064c_10000000000000000000000000000000000000000000000000000001& E-88 + convertToDouble -475603213226859E-41 +} 0xba778cfcab31064d +test expr-28.482 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +563002800671023 E-177 x 1035e7b5183922_10000000000000000000000000000000000000000000000000000001& E-539 + convertToDouble +563002800671023E-177 +} 0x1e4035e7b5183923 +test expr-28.483 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -951206426453718 E-41 x -178cfcab31064c_10000000000000000000000000000000000000000000000000000001& E-87 + convertToDouble -951206426453718E-41 +} 0xba878cfcab31064d +test expr-28.484 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +805416432656519 E202 x 175d226331d039_01111111111111111111111111111111111111111111111111111110& E720 + convertToDouble +805416432656519E202 +} 0x6cf75d226331d039 +test expr-28.485 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -530658674694337 E159 x -112a13daa46fe3_0111111111111111111111111111111111111111111111111111110& E577 + convertToDouble -530658674694337E159 +} 0xe4012a13daa46fe3 +test expr-28.486 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +946574173863918 E208 x 1a2fbffdb7580b_011111111111111111111111111111111111111111111111111110& E740 + convertToDouble +946574173863918E208 +} 0x6e3a2fbffdb7580b +test expr-28.487 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -318329953318553 E113 x -178358811cbc95_011111111111111111111111111111111111111111111111111110& E423 + convertToDouble -318329953318553E113 +} 0xda678358811cbc95 +test expr-28.488 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -462021993713370 E-73 x -128f9edfbd341f_0111111111111111111111111111111111111111111111111111111110& E-194 + convertToDouble -462021993713370E-73 +} 0xb3d28f9edfbd341f +test expr-28.489 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +369617594970696 E-72 x 128f9edfbd341f_0111111111111111111111111111111111111111111111111111111110& E-191 + convertToDouble +369617594970696E-72 +} 0x34028f9edfbd341f +test expr-28.490 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +3666156212014994 E233 x 1a37935f3b71c8_100000000000000000000000000000000000000000000000000000001& E825 + convertToDouble +3666156212014994E233 +} 0x738a37935f3b71c9 +test expr-28.491 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -1833078106007497 E233 x -1a37935f3b71c8_100000000000000000000000000000000000000000000000000000001& E824 + convertToDouble -1833078106007497E233 +} 0xf37a37935f3b71c9 +test expr-28.492 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +8301790508624232 E174 x 1dcfee6690ffc6_100000000000000000000000000000000000000000000000000000001& E630 + convertToDouble +8301790508624232E174 +} 0x675dcfee6690ffc7 +test expr-28.493 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -1037723813578029 E174 x -1dcfee6690ffc6_100000000000000000000000000000000000000000000000000000001& E627 + convertToDouble -1037723813578029E174 +} 0xe72dcfee6690ffc7 +test expr-28.494 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7297662880581139 E-286 x 18ac8c79e1ff18_1000000000000000000000000000000000000000000000000000000000001& E-898 + convertToDouble +7297662880581139E-286 +} 0x07d8ac8c79e1ff19 +test expr-28.495 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -5106185698912191 E-276 x -141934d77659be_1000000000000000000000000000000000000000000000000000000000001& E-865 + convertToDouble -5106185698912191E-276 +} 0x89e41934d77659bf +test expr-28.496 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7487252720986826 E-165 x 18823a57adbef8_100000000000000000000000000000000000000000000000000000000000001& E-496 + convertToDouble +7487252720986826E-165 +} 0x20f8823a57adbef9 +test expr-28.497 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3743626360493413 E-165 x -18823a57adbef8_100000000000000000000000000000000000000000000000000000000000001& E-497 + convertToDouble -3743626360493413E-165 +} 0xa0e8823a57adbef9 +test expr-28.498 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +3773057430100257 E230 x 1ba10d818fdafd_0111111111111111111111111111111111111111111111111111111110& E815 + convertToDouble +3773057430100257E230 +} 0x72eba10d818fdafd +test expr-28.499 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -7546114860200514 E230 x -1ba10d818fdafd_0111111111111111111111111111111111111111111111111111111110& E816 + convertToDouble -7546114860200514E230 +} 0xf2fba10d818fdafd +test expr-28.500 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +4321222892463822 E58 x 18750ea732fdad_011111111111111111111111111111111111111111111111111111110& E244 + convertToDouble +4321222892463822E58 +} 0x4f38750ea732fdad +test expr-28.501 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -7793560217139653 E51 x -1280461b856ec5_0111111111111111111111111111111111111111111111111111111110& E222 + convertToDouble -7793560217139653E51 +} 0xcdd280461b856ec5 +test expr-28.502 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +26525993941010681 E112 x 187dcbf6ad5cf8_10000000000000000000000000000000000000000000000000000000000001& E426 + convertToDouble +26525993941010681E112 +} 0x5a987dcbf6ad5cf9 +test expr-28.503 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -53051987882021362 E112 x -187dcbf6ad5cf8_10000000000000000000000000000000000000000000000000000000000001& E427 + convertToDouble -53051987882021362E112 +} 0xdaa87dcbf6ad5cf9 +test expr-28.504 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +72844871414247907 E77 x 1bf00baf60b70c_100000000000000000000000000000000000000000000000000000000001& E311 + convertToDouble +72844871414247907E77 +} 0x536bf00baf60b70d +test expr-28.505 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -88839359596763261 E105 x -1133b1a33a1108_100000000000000000000000000000000000000000000000000000000001& E405 + convertToDouble -88839359596763261E105 +} 0xd94133b1a33a1109 +test expr-28.506 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +18718131802467065 E-166 x 18823a57adbef8_100000000000000000000000000000000000000000000000000000000000001& E-498 + convertToDouble +18718131802467065E-166 +} 0x20d8823a57adbef9 +test expr-28.507 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -14974505441973652 E-165 x -18823a57adbef8_100000000000000000000000000000000000000000000000000000000000001& E-495 + convertToDouble -14974505441973652E-165 +} 0xa108823a57adbef9 +test expr-28.508 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +73429396004640239 E106 x 11c5cb19ef3451_01111111111111111111111111111111111111111111111111111111111110& E408 + convertToDouble +73429396004640239E106 +} 0x5971c5cb19ef3451 +test expr-28.509 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -58483921078398283 E57 x -108ce499519ce3_0111111111111111111111111111111111111111111111111111111111111110& E245 + convertToDouble -58483921078398283E57 +} 0xcf408ce499519ce3 +test expr-28.510 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +41391519190645203 E165 x 13f33667156017_011111111111111111111111111111111111111111111111111111111111110& E603 + convertToDouble +41391519190645203E165 +} 0x65a3f33667156017 +test expr-28.511 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -82783038381290406 E165 x -13f33667156017_011111111111111111111111111111111111111111111111111111111111110& E604 + convertToDouble -82783038381290406E165 +} 0xe5b3f33667156017 +test expr-28.512 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +58767043776702677 E-163 x 12c92fee3a3867_0111111111111111111111111111111111111111111111111111111111110& E-486 + convertToDouble +58767043776702677E-163 +} 0x2192c92fee3a3867 +test expr-28.513 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -90506231831231999 E-129 x -1bdc4114397ff3_01111111111111111111111111111111111111111111111111111111111110& E-373 + convertToDouble -90506231831231999E-129 +} 0xa8abdc4114397ff3 +test expr-28.514 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +64409240769861689 E-159 x 192238f7987779_011111111111111111111111111111111111111111111111111111111111110& E-473 + convertToDouble +64409240769861689E-159 +} 0x22692238f7987779 +test expr-28.515 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -77305427432277771 E-190 x -1e978b7780b613_0111111111111111111111111111111111111111111111111111111111110& E-576 + convertToDouble -77305427432277771E-190 +} 0x9bfe978b7780b613 +test expr-28.516 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +476592356619258326 E273 x 1873cf8ee72812_10000000000000000000000000000000000000000000000000000000000000001& E965 + convertToDouble +476592356619258326E273 +} 0x7c4873cf8ee72813 +test expr-28.517 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -953184713238516652 E273 x -1873cf8ee72812_10000000000000000000000000000000000000000000000000000000000000001& E966 + convertToDouble -953184713238516652E273 +} 0xfc5873cf8ee72813 +test expr-28.518 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +899810892172646163 E283 x 1adf51fa055e02_100000000000000000000000000000000000000000000000000000000000000000001& E999 + convertToDouble +899810892172646163E283 +} 0x7e6adf51fa055e03 +test expr-28.519 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -929167076892018333 E187 x -1da2c42fce2bc4_10000000000000000000000000000000000000000000000000000000000000000001& E680 + convertToDouble -929167076892018333E187 +} 0xea7da2c42fce2bc5 +test expr-28.520 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +647761278967534239 E-312 x 1a7a2476ec0b3e_10000000000000000000000000000000000000000000000000000000000000001& E-978 + convertToDouble +647761278967534239E-312 +} 0x02da7a2476ec0b3f +test expr-28.521 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -644290479820542942 E-180 x -128d1407dfa832_10000000000000000000000000000000000000000000000000000000000000001& E-539 + convertToDouble -644290479820542942E-180 +} 0x9e428d1407dfa833 +test expr-28.522 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +926145344610700019 E-225 x 1307a67f1f69fe_10000000000000000000000000000000000000000000000000000000000000000001& E-688 + convertToDouble +926145344610700019E-225 +} 0x14f307a67f1f69ff +test expr-28.523 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -958507931896511964 E-246 x -17406753df2f0c_10000000000000000000000000000000000000000000000000000000000000001& E-758 + convertToDouble -958507931896511964E-246 +} 0x9097406753df2f0d +test expr-28.524 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +272104041512242479 E200 x 13bbb4bf05f087_011111111111111111111111111111111111111111111111111111111111111111111110& E722 + convertToDouble +272104041512242479E200 +} 0x6d13bbb4bf05f087 +test expr-28.525 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -792644927852378159 E79 x -1daff0048f3ec7_011111111111111111111111111111111111111111111111111111111111111111110& E321 + convertToDouble -792644927852378159E79 +} 0xd40daff0048f3ec7 +test expr-28.526 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +544208083024484958 E200 x 13bbb4bf05f087_011111111111111111111111111111111111111111111111111111111111111111111110& E723 + convertToDouble +544208083024484958E200 +} 0x6d23bbb4bf05f087 +test expr-28.527 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -929963218616126365 E290 x -108dcc0c505461_01111111111111111111111111111111111111111111111111111111111111110& E1023 + convertToDouble -929963218616126365E290 +} 0xffe08dcc0c505461 +test expr-28.528 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +305574339166810102 E-219 x 17f399fe02c4b9_011111111111111111111111111111111111111111111111111111111111111110& E-670 + convertToDouble +305574339166810102E-219 +} 0x1617f399fe02c4b9 +test expr-28.529 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -152787169583405051 E-219 x -17f399fe02c4b9_011111111111111111111111111111111111111111111111111111111111111110& E-671 + convertToDouble -152787169583405051E-219 +} 0x9607f399fe02c4b9 +test expr-28.530 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +611148678333620204 E-219 x 17f399fe02c4b9_011111111111111111111111111111111111111111111111111111111111111110& E-669 + convertToDouble +611148678333620204E-219 +} 0x1627f399fe02c4b9 +test expr-28.531 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -763935847917025255 E-220 x -17f399fe02c4b9_011111111111111111111111111111111111111111111111111111111111111110& E-672 + convertToDouble -763935847917025255E-220 +} 0x95f7f399fe02c4b9 +test expr-28.532 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +7439550220920798612 E158 x 177fe14f40159a_10000000000000000000000000000000000000000000000000000000000000000000001& E587 + convertToDouble +7439550220920798612E158 +} 0x64a77fe14f40159b +test expr-28.533 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -3719775110460399306 E158 x -177fe14f40159a_10000000000000000000000000000000000000000000000000000000000000000000001& E586 + convertToDouble -3719775110460399306E158 +} 0xe4977fe14f40159b +test expr-28.534 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +9299437776150998265 E157 x 177fe14f40159a_10000000000000000000000000000000000000000000000000000000000000000000001& E584 + convertToDouble +9299437776150998265E157 +} 0x64777fe14f40159b +test expr-28.535 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -7120190517612959703 E120 x -13220dcd5899fc_1000000000000000000000000000000000000000000000000000000000000000000000001& E461 + convertToDouble -7120190517612959703E120 +} 0xdcc3220dcd5899fd +test expr-28.536 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +3507665085003296281 E-73 x 11339818257f0e_100000000000000000000000000000000000000000000000000000000000000000000001& E-181 + convertToDouble +3507665085003296281E-73 +} 0x34a1339818257f0f +test expr-28.537 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -7015330170006592562 E-73 x -11339818257f0e_100000000000000000000000000000000000000000000000000000000000000000000001& E-180 + convertToDouble -7015330170006592562E-73 +} 0xb4b1339818257f0f +test expr-28.538 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -6684428762278255956 E-294 x -1d9f82a1a6b1b8_10000000000000000000000000000000000000000000000000000000000000000001& E-915 + convertToDouble -6684428762278255956E-294 +} 0x86cd9f82a1a6b1b9 +test expr-28.539 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -1088416166048969916 E200 x -13bbb4bf05f087_011111111111111111111111111111111111111111111111111111111111111111111110& E724 + convertToDouble -1088416166048969916E200 +} 0xed33bbb4bf05f087 +test expr-28.540 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -8707329328391759328 E200 x -13bbb4bf05f087_011111111111111111111111111111111111111111111111111111111111111111111110& E727 + convertToDouble -8707329328391759328E200 +} 0xed63bbb4bf05f087 +test expr-28.541 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +4439021781608558002 E-65 x 1038168b71e2c9_01111111111111111111111111111111111111111111111111111111111111111110& E-154 + convertToDouble +4439021781608558002E-65 +} 0x365038168b71e2c9 +test expr-28.542 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -8878043563217116004 E-65 x -1038168b71e2c9_01111111111111111111111111111111111111111111111111111111111111111110& E-153 + convertToDouble -8878043563217116004E-65 +} 0xb66038168b71e2c9 +test expr-28.543 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +2219510890804279001 E-65 x 1038168b71e2c9_01111111111111111111111111111111111111111111111111111111111111111110& E-155 + convertToDouble +2219510890804279001E-65 +} 0x364038168b71e2c9 +test expr-28.544 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +33051223951904955802 E55 x 1762068a24fd54_1000000000000000000000000000000000000000000000000000000000000000000000001& E247 + convertToDouble +33051223951904955802E55 +} 0x4f6762068a24fd55 +test expr-28.545 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -56961524140903677624 E120 x -13220dcd5899fc_1000000000000000000000000000000000000000000000000000000000000000000000001& E464 + convertToDouble -56961524140903677624E120 +} 0xdcf3220dcd5899fd +test expr-28.546 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +71201905176129597030 E119 x 13220dcd5899fc_1000000000000000000000000000000000000000000000000000000000000000000000001& E461 + convertToDouble +71201905176129597030E119 +} 0x5cc3220dcd5899fd +test expr-28.547 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +14030660340013185124 E-73 x 11339818257f0e_100000000000000000000000000000000000000000000000000000000000000000000001& E-179 + convertToDouble +14030660340013185124E-73 +} 0x34c1339818257f0f +test expr-28.548 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -17538325425016481405 E-74 x -11339818257f0e_100000000000000000000000000000000000000000000000000000000000000000000001& E-182 + convertToDouble -17538325425016481405E-74 +} 0xb491339818257f0f +test expr-28.549 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +67536228609141569109 E-133 x 10a1b35cf2a635_01111111111111111111111111111111111111111111111111111111111111111111110& E-376 + convertToDouble +67536228609141569109E-133 +} 0x2870a1b35cf2a635 +test expr-28.550 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -35620497849450218807 E-306 x -15b22082529425_0111111111111111111111111111111111111111111111111111111111111111111111110& E-952 + convertToDouble -35620497849450218807E-306 +} 0x8475b22082529425 +test expr-28.551 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN +66550376797582521751 E-126 x 13897c0ede6c69_01111111111111111111111111111111111111111111111111111111111111111111110& E-353 + convertToDouble +66550376797582521751E-126 +} 0x29e3897c0ede6c69 +test expr-28.552 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b d UN -71240995698900437614 E-306 x -15b22082529425_0111111111111111111111111111111111111111111111111111111111111111111111110& E-951 + convertToDouble -71240995698900437614E-306 +} 0x8485b22082529425 +test expr-28.553 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +3 E24 x 13da329b633647_0001& E81 + convertToDouble +3E24 +} 0x4503da329b633647 +test expr-28.554 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -6 E24 x -13da329b633647_0001& E82 + convertToDouble -6E24 +} 0xc513da329b633647 +test expr-28.555 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +6 E26 x 1f04ef12cb04cf_0001& E88 + convertToDouble +6E26 +} 0x457f04ef12cb04cf +test expr-28.556 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -7 E25 x -1cf389cd46047d_0000001& E85 + convertToDouble -7E25 +} 0xc54cf389cd46047d +test expr-28.557 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +1 E-14 x 16849b86a12b9b_00000001& E-47 + convertToDouble +1E-14 +} 0x3d06849b86a12b9b +test expr-28.558 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -2 E-14 x -16849b86a12b9b_00000001& E-46 + convertToDouble -2E-14 +} 0xbd16849b86a12b9b +test expr-28.559 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4 E-14 x 16849b86a12b9b_00000001& E-45 + convertToDouble +4E-14 +} 0x3d26849b86a12b9b +test expr-28.560 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8 E-14 x -16849b86a12b9b_00000001& E-44 + convertToDouble -8E-14 +} 0xbd36849b86a12b9b +test expr-28.561 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +5 E26 x 19d971e4fe8401_1110& E88 + convertToDouble +5E26 +} 0x4579d971e4fe8402 +test expr-28.562 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8 E27 x -19d971e4fe8401_1110& E92 + convertToDouble -8E27 +} 0xc5b9d971e4fe8402 +test expr-28.563 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +1 E27 x 19d971e4fe8401_1110& E89 + convertToDouble +1E27 +} 0x4589d971e4fe8402 +test expr-28.564 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -4 E27 x -19d971e4fe8401_1110& E91 + convertToDouble -4E27 +} 0xc5a9d971e4fe8402 +test expr-28.565 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +9 E-13 x 1faa7ab552a551_111110& E-41 + convertToDouble +9E-13 +} 0x3d6faa7ab552a552 +test expr-28.566 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -7 E-20 x -14a90ceafff9de_11110& E-64 + convertToDouble -7E-20 +} 0xbbf4a90ceafff9df +test expr-28.567 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +56 E25 x 1cf389cd46047d_0000001& E88 + convertToDouble +56E25 +} 0x457cf389cd46047d +test expr-28.568 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -70 E24 x -1cf389cd46047d_0000001& E85 + convertToDouble -70E24 +} 0xc54cf389cd46047d +test expr-28.569 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +51 E26 x 107a9f01fbda8e_0000001& E92 + convertToDouble +51E26 +} 0x45b07a9f01fbda8e +test expr-28.570 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +71 E-17 x 19949819f693d7_00000000001& E-51 + convertToDouble +71E-17 +} 0x3cc9949819f693d7 +test expr-28.571 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -31 E-5 x -1450efdc9c4da9_00000000001& E-12 + convertToDouble -31E-5 +} 0xbf3450efdc9c4da9 +test expr-28.572 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +62 E-5 x 1450efdc9c4da9_00000000001& E-11 + convertToDouble +62E-5 +} 0x3f4450efdc9c4da9 +test expr-28.573 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -94 E-8 x -1f8a89dc374df5_0000000001& E-21 + convertToDouble -94E-8 +} 0xbeaf8a89dc374df5 +test expr-28.574 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +67 E27 x 1b0fa33bba7231_11111110& E95 + convertToDouble +67E27 +} 0x45eb0fa33bba7232 +test expr-28.575 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -81 E24 x -10c01ab31bb5cb_1111110& E86 + convertToDouble -81E24 +} 0xc550c01ab31bb5cc +test expr-28.576 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +54 E23 x 11ddfa58a6173f_111110& E82 + convertToDouble +54E23 +} 0x4511ddfa58a61740 +test expr-28.577 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -54 E25 x -1bead72a838453_111110& E88 + convertToDouble -54E25 +} 0xc57bead72a838454 +test expr-28.578 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +63 E-22 x 1dc03b8fd70169_11111111110& E-68 + convertToDouble +63E-22 +} 0x3bbdc03b8fd7016a +test expr-28.579 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -63 E-23 x -17ccfc73126787_11111111110& E-71 + convertToDouble -63E-23 +} 0xbb87ccfc73126788 +test expr-28.580 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +43 E-4 x 119ce075f6fd21_111111110& E-8 + convertToDouble +43E-4 +} 0x3f719ce075f6fd22 +test expr-28.581 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -86 E-4 x -119ce075f6fd21_111111110& E-7 + convertToDouble -86E-4 +} 0xbf819ce075f6fd22 +test expr-28.582 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +942 E26 x 1306069e8681f3_00000000001& E96 + convertToDouble +942E26 +} 0x45f306069e8681f3 +test expr-28.583 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -471 E25 x -1e700a973d9cb8_0000000001& E91 + convertToDouble -471E25 +} 0xc5ae700a973d9cb8 +test expr-28.584 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +803 E24 x 14c1cee9cd666b_000000000001& E89 + convertToDouble +803E24 +} 0x4584c1cee9cd666b +test expr-28.585 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -471 E26 x -1306069e8681f3_00000000001& E95 + convertToDouble -471E26 +} 0xc5e306069e8681f3 +test expr-28.586 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -409 E-21 x -1e2dcaa4115622_000000000001& E-62 + convertToDouble -409E-21 +} 0xbc1e2dcaa4115622 +test expr-28.587 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +818 E-21 x 1e2dcaa4115622_000000000001& E-61 + convertToDouble +818E-21 +} 0x3c2e2dcaa4115622 +test expr-28.588 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -867 E-8 x -122eabba029aba_000000000001& E-17 + convertToDouble -867E-8 +} 0xbee22eabba029aba +test expr-28.589 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +538 E27 x 1b297cad9f70b5_1111111111111110& E98 + convertToDouble +538E27 +} 0x461b297cad9f70b6 +test expr-28.590 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -857 E24 x -16272678ba603b_11111111110& E89 + convertToDouble -857E24 +} 0xc586272678ba603c +test expr-28.591 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +269 E27 x 1b297cad9f70b5_1111111111111110& E97 + convertToDouble +269E27 +} 0x460b297cad9f70b6 +test expr-28.592 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -403 E26 x -1046ec1e31dd85_1111111110& E95 + convertToDouble -403E26 +} 0xc5e046ec1e31dd86 +test expr-28.593 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +959 E-7 x 1923bd746a3527_11111111111110& E-14 + convertToDouble +959E-7 +} 0x3f1923bd746a3528 +test expr-28.594 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -959 E-6 x -1f6cacd184c271_1111111111110& E-11 + convertToDouble -959E-6 +} 0xbf4f6cacd184c272 +test expr-28.595 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +373 E-27 x 1cdc06b20ef182_1111111111110& E-82 + convertToDouble +373E-27 +} 0x3adcdc06b20ef183 +test expr-28.596 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -746 E-27 x -1cdc06b20ef182_1111111111110& E-81 + convertToDouble -746E-27 +} 0xbaecdc06b20ef183 +test expr-28.597 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4069 E24 x 1a4b9887fbfe7a_0000000000001& E91 + convertToDouble +4069E24 +} 0x45aa4b9887fbfe7a +test expr-28.598 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -4069 E23 x -150946d32ffec8_0000000000001& E88 + convertToDouble -4069E23 +} 0xc5750946d32ffec8 +test expr-28.599 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8138 E24 x -1a4b9887fbfe7a_0000000000001& E92 + convertToDouble -8138E24 +} 0xc5ba4b9887fbfe7a +test expr-28.600 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +8294 E-15 x 123d1b5eb1d778_000000000000000001& E-37 + convertToDouble +8294E-15 +} 0x3da23d1b5eb1d778 +test expr-28.601 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -4147 E-14 x -16cc62365e4d56_00000000000000001& E-35 + convertToDouble -4147E-14 +} 0xbdc6cc62365e4d56 +test expr-28.602 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4147 E-15 x 123d1b5eb1d778_000000000000000001& E-38 + convertToDouble +4147E-15 +} 0x3d923d1b5eb1d778 +test expr-28.603 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8294 E-14 x -16cc62365e4d56_00000000000000001& E-34 + convertToDouble -8294E-14 +} 0xbdd6cc62365e4d56 +test expr-28.604 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +538 E27 x 1b297cad9f70b5_1111111111111110& E98 + convertToDouble +538E27 +} 0x461b297cad9f70b6 +test expr-28.605 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -2690 E26 x -1b297cad9f70b5_1111111111111110& E97 + convertToDouble -2690E26 +} 0xc60b297cad9f70b6 +test expr-28.606 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +269 E27 x 1b297cad9f70b5_1111111111111110& E97 + convertToDouble +269E27 +} 0x460b297cad9f70b6 +test expr-28.607 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -2152 E27 x -1b297cad9f70b5_1111111111111110& E100 + convertToDouble -2152E27 +} 0xc63b297cad9f70b6 +test expr-28.608 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +1721 E-17 x 136071dcae4564_111111111111110& E-46 + convertToDouble +1721E-17 +} 0x3d136071dcae4565 +test expr-28.609 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -7979 E-27 x -134ac304747faf_111111111111110& E-77 + convertToDouble -7979E-27 +} 0xbb234ac304747fb0 +test expr-28.610 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +6884 E-17 x 136071dcae4564_111111111111110& E-44 + convertToDouble +6884E-17 +} 0x3d336071dcae4565 +test expr-28.611 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8605 E-18 x -136071dcae4564_111111111111110& E-47 + convertToDouble -8605E-18 +} 0xbd036071dcae4565 +test expr-28.612 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +82854 E27 x 10570ed9e3cecc_00000000000000001& E106 + convertToDouble +82854E27 +} 0x4690570ed9e3cecc +test expr-28.613 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -55684 E24 x -167d9735144ae3_00000000000000001& E95 + convertToDouble -55684E24 +} 0xc5e67d9735144ae3 +test expr-28.614 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +27842 E24 x 167d9735144ae3_00000000000000001& E94 + convertToDouble +27842E24 +} 0x45d67d9735144ae3 +test expr-28.615 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -48959 E25 x -18b7cd6ca56f85_00000000000000001& E98 + convertToDouble -48959E25 +} 0xc618b7cd6ca56f85 +test expr-28.616 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +81921 E-17 x 1cd2c9a6cdd003_000000000000000000001& E-41 + convertToDouble +81921E-17 +} 0x3d6cd2c9a6cdd003 +test expr-28.617 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -76207 E-8 x -18f8b4dd16f1df_0000000000000000001& E-11 + convertToDouble -76207E-8 +} 0xbf48f8b4dd16f1df +test expr-28.618 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4147 E-15 x 123d1b5eb1d778_000000000000000001& E-38 + convertToDouble +4147E-15 +} 0x3d923d1b5eb1d778 +test expr-28.619 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -41470 E-16 x -123d1b5eb1d778_000000000000000001& E-38 + convertToDouble -41470E-16 +} 0xbd923d1b5eb1d778 +test expr-28.620 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +89309 E24 x 12092ac5f2019e_1111111111111111110& E96 + convertToDouble +89309E24 +} 0x45f2092ac5f2019f +test expr-28.621 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +75859 E26 x 17efd75a2938eb_1111111111111111111110& E102 + convertToDouble +75859E26 +} 0x4657efd75a2938ec +test expr-28.622 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -75859 E25 x -132645e1ba93ef_1111111111111111111110& E99 + convertToDouble -75859E25 +} 0xc6232645e1ba93f0 +test expr-28.623 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +14257 E-23 x 150a246ecd44f2_1111111111111111110& E-63 + convertToDouble +14257E-23 +} 0x3c050a246ecd44f3 +test expr-28.624 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -28514 E-23 x -150a246ecd44f2_1111111111111111110& E-62 + convertToDouble -28514E-23 +} 0xbc150a246ecd44f3 +test expr-28.625 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +57028 E-23 x 150a246ecd44f2_1111111111111111110& E-61 + convertToDouble +57028E-23 +} 0x3c250a246ecd44f3 +test expr-28.626 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -71285 E-24 x -150a246ecd44f2_1111111111111111110& E-64 + convertToDouble -71285E-24 +} 0xbbf50a246ecd44f3 +test expr-28.627 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +344863 E27 x 1100c873963d6d_00000000000000000001& E108 + convertToDouble +344863E27 +} 0x46b100c873963d6d +test expr-28.628 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -951735 E27 x -17764ad224e24a_000000000000000000001& E109 + convertToDouble -951735E27 +} 0xc6c7764ad224e24a +test expr-28.629 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +200677 E23 x 1035e73135b834_0000000000000000001& E94 + convertToDouble +200677E23 +} 0x45d035e73135b834 +test expr-28.630 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -401354 E24 x -144360fd832641_0000000000000000001& E98 + convertToDouble -401354E24 +} 0xc6144360fd832641 +test expr-28.631 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +839604 E-11 x 119b96f36ec68b_00000000000000000000000001& E-17 + convertToDouble +839604E-11 +} 0x3ee19b96f36ec68b +test expr-28.632 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -209901 E-11 x -119b96f36ec68b_00000000000000000000000001& E-19 + convertToDouble -209901E-11 +} 0xbec19b96f36ec68b +test expr-28.633 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +419802 E-11 x 119b96f36ec68b_00000000000000000000000001& E-18 + convertToDouble +419802E-11 +} 0x3ed19b96f36ec68b +test expr-28.634 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -537734 E-24 x -13d6c1088ae40e_0000000000000000000001& E-61 + convertToDouble -537734E-24 +} 0xbc23d6c1088ae40e +test expr-28.635 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +910308 E26 x 11f3e1839eeab0_11111111111111111111110& E106 + convertToDouble +910308E26 +} 0x4691f3e1839eeab1 +test expr-28.636 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -227577 E26 x -11f3e1839eeab0_11111111111111111111110& E104 + convertToDouble -227577E26 +} 0xc671f3e1839eeab1 +test expr-28.637 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +455154 E26 x 11f3e1839eeab0_11111111111111111111110& E105 + convertToDouble +455154E26 +} 0x4681f3e1839eeab1 +test expr-28.638 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -531013 E25 x -10c17d25834171_11111111111111111111110& E102 + convertToDouble -531013E25 +} 0xc650c17d25834172 +test expr-28.639 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +963019 E-21 x 11592429784914_11111111111111111111110& E-50 + convertToDouble +963019E-21 +} 0x3cd1592429784915 +test expr-28.640 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -519827 E-13 x -1be872a8b30d7c_11111111111111111111110& E-25 + convertToDouble -519827E-13 +} 0xbe6be872a8b30d7d +test expr-28.641 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +623402 E-27 x 178d2c97bde2a0_11111111111111111111110& E-71 + convertToDouble +623402E-27 +} 0x3b878d2c97bde2a1 +test expr-28.642 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -311701 E-27 x -178d2c97bde2a0_11111111111111111111110& E-72 + convertToDouble -311701E-27 +} 0xbb778d2c97bde2a1 +test expr-28.643 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +9613651 E26 x 17b31116270d9b_000000000000000000000001& E109 + convertToDouble +9613651E26 +} 0x46c7b31116270d9b +test expr-28.644 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -9191316 E23 x -1733bfae0801fd_0000000000000000000001& E99 + convertToDouble -9191316E23 +} 0xc62733bfae0801fd +test expr-28.645 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4595658 E23 x 1733bfae0801fd_0000000000000000000001& E98 + convertToDouble +4595658E23 +} 0x461733bfae0801fd +test expr-28.646 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -2297829 E23 x -1733bfae0801fd_0000000000000000000001& E97 + convertToDouble -2297829E23 +} 0xc60733bfae0801fd +test expr-28.647 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -1679208 E-11 x -119b96f36ec68b_00000000000000000000000001& E-16 + convertToDouble -1679208E-11 +} 0xbef19b96f36ec68b +test expr-28.648 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +3379223 E27 x 14d3794ce2fc25_1111111111111111111111110& E111 + convertToDouble +3379223E27 +} 0x46e4d3794ce2fc26 +test expr-28.649 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -6758446 E27 x -14d3794ce2fc25_1111111111111111111111110& E112 + convertToDouble -6758446E27 +} 0xc6f4d3794ce2fc26 +test expr-28.650 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +5444097 E-21 x 18849dd33c95ae_11111111111111111111111111110& E-48 + convertToDouble +5444097E-21 +} 0x3cf8849dd33c95af +test expr-28.651 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8399969 E-27 x -13d5783e85fcf7_1111111111111111111111110& E-67 + convertToDouble -8399969E-27 +} 0xbbc3d5783e85fcf8 +test expr-28.652 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +8366487 E-16 x 1cbf3d630403af_1111111111111111111111110& E-31 + convertToDouble +8366487E-16 +} 0x3e0cbf3d630403b0 +test expr-28.653 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8366487 E-15 x -11f7865de2824d_11111111111111111111111110& E-27 + convertToDouble -8366487E-15 +} 0xbe41f7865de2824e +test expr-28.654 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +65060671 E25 x 1009e7d474572a_0000000000000000000000000001& E109 + convertToDouble +65060671E25 +} 0x46c009e7d474572a +test expr-28.655 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +65212389 E23 x 1493d098d37657_000000000000000000000000001& E102 + convertToDouble +65212389E23 +} 0x465493d098d37657 +test expr-28.656 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +55544957 E-13 x 174c1826f3010c_00000000000000000000000000001& E-18 + convertToDouble +55544957E-13 +} 0x3ed74c1826f3010c +test expr-28.657 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -51040905 E-20 x -11f55b23c8bf2d_0000000000000000000000000001& E-41 + convertToDouble -51040905E-20 +} 0xbd61f55b23c8bf2d +test expr-28.658 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +99585767 E-22 x 166cba8699f0f2_0000000000000000000000000001& E-47 + convertToDouble +99585767E-22 +} 0x3d066cba8699f0f2 +test expr-28.659 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -99585767 E-23 x -11f095387b2728_0000000000000000000000000001& E-50 + convertToDouble -99585767E-23 +} 0xbcd1f095387b2728 +test expr-28.660 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +40978393 E26 x 1941401cca2bfd_1111111111111111111111111110& E111 + convertToDouble +40978393E26 +} 0x46e941401cca2bfe +test expr-28.661 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -67488159 E24 x -1a9e90059d12db_11111111111111111111111111110& E105 + convertToDouble -67488159E24 +} 0xc68a9e90059d12dc +test expr-28.662 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +69005339 E23 x 15c634f6ef1f95_111111111111111111111111110& E102 + convertToDouble +69005339E23 +} 0x4655c634f6ef1f96 +test expr-28.663 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -81956786 E26 x -1941401cca2bfd_1111111111111111111111111110& E112 + convertToDouble -81956786E26 +} 0xc6f941401cca2bfe +test expr-28.664 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -87105552 E-21 x -18849dd33c95ae_11111111111111111111111111110& E-44 + convertToDouble -87105552E-21 +} 0xbd38849dd33c95af +test expr-28.665 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +10888194 E-21 x 18849dd33c95ae_11111111111111111111111111110& E-47 + convertToDouble +10888194E-21 +} 0x3d08849dd33c95af +test expr-28.666 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -21776388 E-21 x -18849dd33c95ae_11111111111111111111111111110& E-46 + convertToDouble -21776388E-21 +} 0xbd18849dd33c95af +test expr-28.667 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +635806667 E27 x 1e9cec176c96f8_000000000000000000000000000000001& E118 + convertToDouble +635806667E27 +} 0x475e9cec176c96f8 +test expr-28.668 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -670026614 E25 x -14a593f89f4194_00000000000000000000000000000001& E112 + convertToDouble -670026614E25 +} 0xc6f4a593f89f4194 +test expr-28.669 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +335013307 E26 x 19cef8f6c711f9_0000000000000000000000000000001& E114 + convertToDouble +335013307E26 +} 0x4719cef8f6c711f9 +test expr-28.670 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -335013307 E25 x -14a593f89f4194_00000000000000000000000000000001& E111 + convertToDouble -335013307E25 +} 0xc6e4a593f89f4194 +test expr-28.671 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +371790617 E-24 x 1aca538c61ba9c_000000000000000000000000000000001& E-52 + convertToDouble +371790617E-24 +} 0x3cbaca538c61ba9c +test expr-28.672 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -371790617 E-25 x -156ea93d1afbb0_0000000000000000000000000000000001& E-55 + convertToDouble -371790617E-25 +} 0xbc856ea93d1afbb0 +test expr-28.673 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +743581234 E-24 x 1aca538c61ba9c_000000000000000000000000000000001& E-51 + convertToDouble +743581234E-24 +} 0x3ccaca538c61ba9c +test expr-28.674 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -743581234 E-25 x -156ea93d1afbb0_0000000000000000000000000000000001& E-54 + convertToDouble -743581234E-25 +} 0xbc956ea93d1afbb0 +test expr-28.675 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +202464477 E24 x 13f6ec0435ce24_111111111111111111111111111110& E107 + convertToDouble +202464477E24 +} 0x46a3f6ec0435ce25 +test expr-28.676 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -404928954 E24 x -13f6ec0435ce24_111111111111111111111111111110& E108 + convertToDouble -404928954E24 +} 0xc6b3f6ec0435ce25 +test expr-28.677 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +997853758 E27 x 1805bfa33b98fa_111111111111111111111111111110& E119 + convertToDouble +997853758E27 +} 0x476805bfa33b98fb +test expr-28.678 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -997853758 E26 x -1337cc829613fb_111111111111111111111111111110& E116 + convertToDouble -997853758E26 +} 0xc73337cc829613fc +test expr-28.679 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +405498418 E-17 x 116a8093df66a6_111111111111111111111111111111110& E-28 + convertToDouble +405498418E-17 +} 0x3e316a8093df66a7 +test expr-28.680 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -582579084 E-14 x -186f653140a658_111111111111111111111111111111110& E-18 + convertToDouble -582579084E-14 +} 0xbed86f653140a659 +test expr-28.681 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +608247627 E-18 x 14e633e4a5ae61_111111111111111111111111111111110& E-31 + convertToDouble +608247627E-18 +} 0x3e04e633e4a5ae62 +test expr-28.682 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -291289542 E-14 x -186f653140a658_111111111111111111111111111111110& E-19 + convertToDouble -291289542E-14 +} 0xbec86f653140a659 +test expr-28.683 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -9537100005 E26 x -16f5b11191713a_000000000000000000000000000000001& E119 + convertToDouble -9537100005E26 +} 0xc766f5b11191713a +test expr-28.684 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +6358066670 E27 x 1322138ea3de5b_000000000000000000000000000000001& E122 + convertToDouble +6358066670E27 +} 0x479322138ea3de5b +test expr-28.685 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -1271613334 E27 x -1e9cec176c96f8_000000000000000000000000000000001& E119 + convertToDouble -1271613334E27 +} 0xc76e9cec176c96f8 +test expr-28.686 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +5229646999 E-16 x 118c3b89731f3d_000000000000000000000000000000000001& E-21 + convertToDouble +5229646999E-16 +} 0x3ea18c3b89731f3d +test expr-28.687 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +5229646999 E-17 x 1c13927584fec8_00000000000000000000000000000000001& E-25 + convertToDouble +5229646999E-17 +} 0x3e6c13927584fec8 +test expr-28.688 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4429943614 E24 x 1b4d37fa06864a_1111111111111111111111111111111110& E111 + convertToDouble +4429943614E24 +} 0x46eb4d37fa06864b +test expr-28.689 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8859887228 E24 x -1b4d37fa06864a_1111111111111111111111111111111110& E112 + convertToDouble -8859887228E24 +} 0xc6fb4d37fa06864b +test expr-28.690 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +2214971807 E24 x 1b4d37fa06864a_1111111111111111111111111111111110& E110 + convertToDouble +2214971807E24 +} 0x46db4d37fa06864b +test expr-28.691 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -4176887093 E26 x -141c692c5bd07a_111111111111111111111111111111110& E118 + convertToDouble -4176887093E26 +} 0xc7541c692c5bd07b +test expr-28.692 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4003495257 E-20 x 16026b2e07ec06_111111111111111111111111111111111110& E-35 + convertToDouble +4003495257E-20 +} 0x3dc6026b2e07ec07 +test expr-28.693 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -4361901637 E-23 x -188e29a9d7c5b8_11111111111111111111111111111111110& E-45 + convertToDouble -4361901637E-23 +} 0xbd288e29a9d7c5b9 +test expr-28.694 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +8723803274 E-23 x 188e29a9d7c5b8_11111111111111111111111111111111110& E-44 + convertToDouble +8723803274E-23 +} 0x3d388e29a9d7c5b9 +test expr-28.695 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8006990514 E-20 x -16026b2e07ec06_111111111111111111111111111111111110& E-34 + convertToDouble -8006990514E-20 +} 0xbdd6026b2e07ec07 +test expr-28.696 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +72835110098 E27 x 1b65c41711fb6d_0000000000000000000000000000000000001& E125 + convertToDouble +72835110098E27 +} 0x47cb65c41711fb6d +test expr-28.697 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -36417555049 E27 x -1b65c41711fb6d_0000000000000000000000000000000000001& E124 + convertToDouble -36417555049E27 +} 0xc7bb65c41711fb6d +test expr-28.698 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +84279630104 E25 x 144a221b1cf62e_000000000000000000000000000000000001& E119 + convertToDouble +84279630104E25 +} 0x47644a221b1cf62e +test expr-28.699 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -84279630104 E24 x -103b4e7c172b58_000000000000000000000000000000000001& E116 + convertToDouble -84279630104E24 +} 0xc7303b4e7c172b58 +test expr-28.700 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +21206176437 E-27 x 1872f563ae0cc9_0000000000000000000000000000000000001& E-56 + convertToDouble +21206176437E-27 +} 0x3c7872f563ae0cc9 +test expr-28.701 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -66461566917 E-22 x -1d3ae83e4322b3_00000000000000000000000000000000000001& E-38 + convertToDouble -66461566917E-22 +} 0xbd9d3ae83e4322b3 +test expr-28.702 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +64808355539 E-16 x 1b2ebe83265fbf_00000000000000000000000000000000000001& E-18 + convertToDouble +64808355539E-16 +} 0x3edb2ebe83265fbf +test expr-28.703 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -84932679673 E-19 x -123d39339f1bf6_00000000000000000000000000000000000001& E-27 + convertToDouble -84932679673E-19 +} 0xbe423d39339f1bf6 +test expr-28.704 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +65205430094 E26 x 139f3e5d7fd76a_1111111111111111111111111111111111110& E122 + convertToDouble +65205430094E26 +} 0x47939f3e5d7fd76b +test expr-28.705 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -68384463429 E25 x -107684982f634e_1111111111111111111111111111111111111110& E119 + convertToDouble -68384463429E25 +} 0xc7607684982f634f +test expr-28.706 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +32602715047 E26 x 139f3e5d7fd76a_1111111111111111111111111111111111110& E121 + convertToDouble +32602715047E26 +} 0x47839f3e5d7fd76b +test expr-28.707 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -62662203426 E27 x -1792269424688d_111111111111111111111111111111111110& E125 + convertToDouble -62662203426E27 +} 0xc7c792269424688e +test expr-28.708 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +58784444678 E-18 x 1f8f45c64b4682_111111111111111111111111111111111111110& E-25 + convertToDouble +58784444678E-18 +} 0x3e6f8f45c64b4683 +test expr-28.709 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -50980203373 E-21 x -1c06d366394440_11111111111111111111111111111111111111111110& E-35 + convertToDouble -50980203373E-21 +} 0xbdcc06d366394441 +test expr-28.710 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +29392222339 E-18 x 1f8f45c64b4682_111111111111111111111111111111111111110& E-26 + convertToDouble +29392222339E-18 +} 0x3e5f8f45c64b4683 +test expr-28.711 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -75529940323 E-27 x -15c5203c0aad52_1111111111111111111111111111111111111110& E-54 + convertToDouble -75529940323E-27 +} 0xbc95c5203c0aad53 +test expr-28.712 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -937495906299 E26 x -11a1e0ebb6af11_000000000000000000000000000000000000000001& E126 + convertToDouble -937495906299E26 +} 0xc7d1a1e0ebb6af11 +test expr-28.713 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +842642485799 E-20 x 121879decdd7cb_000000000000000000000000000000000000000001& E-27 + convertToDouble +842642485799E-20 +} 0x3e421879decdd7cb +test expr-28.714 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -387824150699 E-23 x -110e8302245571_00000000000000000000000000000000000000001& E-38 + convertToDouble -387824150699E-23 +} 0xbd910e8302245571 +test expr-28.715 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +924948814726 E-27 x 10a992d1fc6ded_00000000000000000000000000000000000000001& E-50 + convertToDouble +924948814726E-27 +} 0x3cd0a992d1fc6ded +test expr-28.716 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -775648301398 E-23 x -110e8302245571_00000000000000000000000000000000000000001& E-37 + convertToDouble -775648301398E-23 +} 0xbda10e8302245571 +test expr-28.717 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +547075707432 E25 x 107684982f634e_1111111111111111111111111111111111111110& E122 + convertToDouble +547075707432E25 +} 0x47907684982f634f +test expr-28.718 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +683844634290 E24 x 107684982f634e_1111111111111111111111111111111111111110& E119 + convertToDouble +683844634290E24 +} 0x47607684982f634f +test expr-28.719 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -136768926858 E25 x -107684982f634e_1111111111111111111111111111111111111110& E120 + convertToDouble -136768926858E25 +} 0xc7707684982f634f +test expr-28.720 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +509802033730 E-22 x 1c06d366394440_11111111111111111111111111111111111111111110& E-35 + convertToDouble +509802033730E-22 +} 0x3dcc06d366394441 +test expr-28.721 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +101960406746 E-21 x 1c06d366394440_11111111111111111111111111111111111111111110& E-34 + convertToDouble +101960406746E-21 +} 0x3ddc06d366394441 +test expr-28.722 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -815683253968 E-21 x -1c06d366394440_11111111111111111111111111111111111111111110& E-31 + convertToDouble -815683253968E-21 +} 0xbe0c06d366394441 +test expr-28.723 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +7344124123524 E24 x 1619b519dd6833_00000000000000000000000000000000000000000001& E122 + convertToDouble +7344124123524E24 +} 0x479619b519dd6833 +test expr-28.724 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -9180155154405 E23 x -1619b519dd6833_00000000000000000000000000000000000000000001& E119 + convertToDouble -9180155154405E23 +} 0xc76619b519dd6833 +test expr-28.725 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +6479463327323 E27 x 130a9b3e9bd05e_00000000000000000000000000000000000000000001& E132 + convertToDouble +6479463327323E27 +} 0x48330a9b3e9bd05e +test expr-28.726 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -1836031030881 E24 x -1619b519dd6833_00000000000000000000000000000000000000000001& E120 + convertToDouble -1836031030881E24 +} 0xc77619b519dd6833 +test expr-28.727 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4337269293039 E-19 x 1d1b5f354c63d6_00000000000000000000000000000000000000000001& E-22 + convertToDouble +4337269293039E-19 +} 0x3e9d1b5f354c63d6 +test expr-28.728 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -4599163554373 E-23 x -1948bf4d34088d_00000000000000000000000000000000000000000001& E-35 + convertToDouble -4599163554373E-23 +} 0xbdc948bf4d34088d +test expr-28.729 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +9198327108746 E-23 x 1948bf4d34088d_00000000000000000000000000000000000000000001& E-34 + convertToDouble +9198327108746E-23 +} 0x3dd948bf4d34088d +test expr-28.730 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4812803938347 E27 x 1c4980a4ee94ce_111111111111111111111111111111111111111111110& E131 + convertToDouble +4812803938347E27 +} 0x482c4980a4ee94cf +test expr-28.731 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8412030890011 E23 x -14405075e52db9_11111111111111111111111111111111111111111110& E119 + convertToDouble -8412030890011E23 +} 0xc764405075e52dba +test expr-28.732 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +9625607876694 E27 x 1c4980a4ee94ce_111111111111111111111111111111111111111111110& E132 + convertToDouble +9625607876694E27 +} 0x483c4980a4ee94cf +test expr-28.733 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -4739968828249 E24 x -1c87140cdf8a1d_1111111111111111111111111111111111111111110& E121 + convertToDouble -4739968828249E24 +} 0xc78c87140cdf8a1e +test expr-28.734 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +9697183891673 E-23 x 1aa7c959b6a666_11111111111111111111111111111111111111111111110& E-34 + convertToDouble +9697183891673E-23 +} 0x3ddaa7c959b6a667 +test expr-28.735 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -7368108517543 E-20 x -13c7535bbd85a1_1111111111111111111111111111111111111111111110& E-24 + convertToDouble -7368108517543E-20 +} 0xbe73c7535bbd85a2 +test expr-28.736 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +51461358161422 E25 x 18326f87d4cae0_0000000000000000000000000000000000000000000000001& E128 + convertToDouble +51461358161422E25 +} 0x47f8326f87d4cae0 +test expr-28.737 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -77192037242133 E26 x -16af488f577e32_0000000000000000000000000000000000000000000000001& E132 + convertToDouble -77192037242133E26 +} 0xc836af488f577e32 +test expr-28.738 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +77192037242133 E25 x 1225d3a5df9828_0000000000000000000000000000000000000000000000001& E129 + convertToDouble +77192037242133E25 +} 0x480225d3a5df9828 +test expr-28.739 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -51461358161422 E27 x -12e767221e3e7f_0000000000000000000000000000000000000000000000001& E135 + convertToDouble -51461358161422E27 +} 0xc862e767221e3e7f +test expr-28.740 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +43999661561541 E-21 x 179f4476d372a3_0000000000000000000000000000000000000000000000001& E-25 + convertToDouble +43999661561541E-21 +} 0x3e679f4476d372a3 +test expr-28.741 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -87999323123082 E-21 x -179f4476d372a3_0000000000000000000000000000000000000000000000001& E-24 + convertToDouble -87999323123082E-21 +} 0xbe779f4476d372a3 +test expr-28.742 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +48374886826137 E-26 x 110538f23350d5_00000000000000000000000000000000000000000000001& E-41 + convertToDouble +48374886826137E-26 +} 0x3d610538f23350d5 +test expr-28.743 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -57684246567111 E-23 x -13d1f5c1b8a912_00000000000000000000000000000000000000000000001& E-31 + convertToDouble -57684246567111E-23 +} 0xbe03d1f5c1b8a912 +test expr-28.744 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +87192805957686 E23 x 1a3d16e55a9664_1111111111111111111111111111111111111111111110& E122 + convertToDouble +87192805957686E23 +} 0x479a3d16e55a9665 +test expr-28.745 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -75108713005913 E24 x -1c40b4baa79655_11111111111111111111111111111111111111111111110& E125 + convertToDouble -75108713005913E24 +} 0xc7cc40b4baa79656 +test expr-28.746 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +64233110587487 E27 x 179873e38669a6_1111111111111111111111111111111111111111111110& E135 + convertToDouble +64233110587487E27 +} 0x48679873e38669a7 +test expr-28.747 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -77577471133384 E-23 x -1aa7c959b6a666_11111111111111111111111111111111111111111111110& E-31 + convertToDouble -77577471133384E-23 +} 0xbe0aa7c959b6a667 +test expr-28.748 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +48485919458365 E-24 x 1aa7c959b6a666_11111111111111111111111111111111111111111111110& E-35 + convertToDouble +48485919458365E-24 +} 0x3dcaa7c959b6a667 +test expr-28.749 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -56908598265713 E-26 x -1405deef4bdef5_111111111111111111111111111111111111111111111110& E-41 + convertToDouble -56908598265713E-26 +} 0xbd6405deef4bdef6 +test expr-28.750 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +589722294620133 E23 x 162ed1b287caef_00000000000000000000000000000000000000000000000001& E125 + convertToDouble +589722294620133E23 +} 0x47c62ed1b287caef +test expr-28.751 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +652835804449289 E-22 x 118640e490b087_0000000000000000000000000000000000000000000000000001& E-24 + convertToDouble +652835804449289E-22 +} 0x3e718640e490b087 +test expr-28.752 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -656415363936202 E-23 x -1c315cfe25d201_00000000000000000000000000000000000000000000000001& E-28 + convertToDouble -656415363936202E-23 +} 0xbe3c315cfe25d201 +test expr-28.753 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +579336749585745 E-25 x 1fd9709d9aeb19_00000000000000000000000000000000000000000000000001& E-35 + convertToDouble +579336749585745E-25 +} 0x3dcfd9709d9aeb19 +test expr-28.754 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -381292764980839 E-26 x -10c4f9921c3f8f_00000000000000000000000000000000000000000000000001& E-38 + convertToDouble -381292764980839E-26 +} 0xbd90c4f9921c3f8f +test expr-28.755 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +965265859649698 E23 x 12279607edcb0c_1111111111111111111111111111111111111111111111110& E126 + convertToDouble +965265859649698E23 +} 0x47d2279607edcb0d +test expr-28.756 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -848925235434882 E27 x -137d88ba4b43e3_1111111111111111111111111111111111111111111111111110& E139 + convertToDouble -848925235434882E27 +} 0xc8a37d88ba4b43e4 +test expr-28.757 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +536177612222491 E23 x 142b33dd3acafd_11111111111111111111111111111111111111111111111110& E125 + convertToDouble +536177612222491E23 +} 0x47c42b33dd3acafe +test expr-28.758 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -424462617717441 E27 x -137d88ba4b43e3_1111111111111111111111111111111111111111111111111110& E138 + convertToDouble -424462617717441E27 +} 0xc8937d88ba4b43e4 +test expr-28.759 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +276009279888989 E-27 x 136c242313c288_111111111111111111111111111111111111111111111111110& E-42 + convertToDouble +276009279888989E-27 +} 0x3d536c242313c289 +test expr-28.760 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -608927158043691 E-26 x -1ac7e909c22f09_11111111111111111111111111111111111111111111111110& E-38 + convertToDouble -608927158043691E-26 +} 0xbd9ac7e909c22f0a +test expr-28.761 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +552018559777978 E-27 x 136c242313c288_111111111111111111111111111111111111111111111111110& E-41 + convertToDouble +552018559777978E-27 +} 0x3d636c242313c289 +test expr-28.762 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -425678377667758 E-22 x -16da7aa49bdcd5_1111111111111111111111111111111111111111111111110& E-25 + convertToDouble -425678377667758E-22 +} 0xbe66da7aa49bdcd6 +test expr-28.763 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +8013702726927119 E26 x 126607f8f1b29e_00000000000000000000000000000000000000000000000000001& E139 + convertToDouble +8013702726927119E26 +} 0x48a26607f8f1b29e +test expr-28.764 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +8862627962362001 E27 x 196f3b0e7787c2_00000000000000000000000000000000000000000000000000001& E142 + convertToDouble +8862627962362001E27 +} 0x48d96f3b0e7787c2 +test expr-28.765 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -5068007907757162 E26 x -17456a27848397_00000000000000000000000000000000000000000000000000001& E138 + convertToDouble -5068007907757162E26 +} 0xc897456a27848397 +test expr-28.766 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -7379714799828406 E-23 x -13cf4d2839e036_00000000000000000000000000000000000000000000000000001& E-24 + convertToDouble -7379714799828406E-23 +} 0xbe73cf4d2839e036 +test expr-28.767 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4114538064016107 E-27 x 12188eda98010c_0000000000000000000000000000000000000000000000000001& E-38 + convertToDouble +4114538064016107E-27 +} 0x3d92188eda98010c +test expr-28.768 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -3689857399914203 E-23 x -13cf4d2839e036_00000000000000000000000000000000000000000000000000001& E-25 + convertToDouble -3689857399914203E-23 +} 0xbe63cf4d2839e036 +test expr-28.769 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +5575954851815478 E23 x 1a37cfbf2ffdb5_1111111111111111111111111111111111111111111111111110& E128 + convertToDouble +5575954851815478E23 +} 0x47fa37cfbf2ffdb6 +test expr-28.770 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +3395700941739528 E27 x 137d88ba4b43e3_1111111111111111111111111111111111111111111111111110& E141 + convertToDouble +3395700941739528E27 +} 0x48c37d88ba4b43e4 +test expr-28.771 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4115535777581961 E-23 x 1618596be30fe4_111111111111111111111111111111111111111111111111111110& E-25 + convertToDouble +4115535777581961E-23 +} 0x3e6618596be30fe5 +test expr-28.772 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8231071555163922 E-23 x -1618596be30fe4_111111111111111111111111111111111111111111111111111110& E-24 + convertToDouble -8231071555163922E-23 +} 0xbe7618596be30fe5 +test expr-28.773 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +6550246696190871 E-26 x 1201538b0f8c69_111111111111111111111111111111111111111111111111111110& E-34 + convertToDouble +6550246696190871E-26 +} 0x3dd201538b0f8c6a +test expr-28.774 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -68083046403986701 E27 x -186c70ba8ba28d_000000000000000000000000000000000000000000000000000000001& E145 + convertToDouble -68083046403986701E27 +} 0xc9086c70ba8ba28d +test expr-28.775 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +43566388595783643 E27 x 1f41e1bf48b03f_111111111111111111111111111111111111111111111111111111110& E144 + convertToDouble +43566388595783643E27 +} 0x48ff41e1bf48b040 +test expr-28.776 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -87132777191567286 E27 x -1f41e1bf48b03f_111111111111111111111111111111111111111111111111111111110& E145 + convertToDouble -87132777191567286E27 +} 0xc90f41e1bf48b040 +test expr-28.777 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +59644881059342141 E25 x 1b6338d9d8ae38_11111111111111111111111111111111111111111111111111111110& E138 + convertToDouble +59644881059342141E25 +} 0x489b6338d9d8ae39 +test expr-28.778 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -83852770718576667 E23 x -18a4619ed6f442_111111111111111111111111111111111111111111111111111111110& E132 + convertToDouble -83852770718576667E23 +} 0xc838a4619ed6f443 +test expr-28.779 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +99482967418206961 E-25 x 155d224bfed7ac_11111111111111111111111111111111111111111111111111111111110& E-27 + convertToDouble +99482967418206961E-25 +} 0x3e455d224bfed7ad +test expr-28.780 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -99482967418206961 E-26 x -11174ea3324623_11111111111111111111111111111111111111111111111111111111110& E-30 + convertToDouble -99482967418206961E-26 +} 0xbe11174ea3324624 +test expr-28.781 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +87446669969994614 E-27 x 1809832942376d_11111111111111111111111111111111111111111111111111111110& E-34 + convertToDouble +87446669969994614E-27 +} 0x3dd809832942376e +test expr-28.782 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -43723334984997307 E-27 x -1809832942376d_11111111111111111111111111111111111111111111111111111110& E-35 + convertToDouble -43723334984997307E-27 +} 0xbdc809832942376e +test expr-28.783 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +5 E24 x 108b2a2c280290_1001& E82 + convertToDouble +5E24 +} 0x45108b2a2c280291 +test expr-28.784 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8 E25 x -108b2a2c280290_1001& E86 + convertToDouble -8E25 +} 0xc5508b2a2c280291 +test expr-28.785 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +1 E25 x 108b2a2c280290_1001& E83 + convertToDouble +1E25 +} 0x45208b2a2c280291 +test expr-28.786 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -4 E25 x -108b2a2c280290_1001& E85 + convertToDouble -4E25 +} 0xc5408b2a2c280291 +test expr-28.787 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +2 E-5 x 14f8b588e368f0_100001& E-16 + convertToDouble +2E-5 +} 0x3ef4f8b588e368f1 +test expr-28.788 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -5 E-6 x -14f8b588e368f0_100001& E-18 + convertToDouble -5E-6 +} 0xbed4f8b588e368f1 +test expr-28.789 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4 E-5 x 14f8b588e368f0_100001& E-15 + convertToDouble +4E-5 +} 0x3f04f8b588e368f1 +test expr-28.790 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -3 E-20 x -11b578c96db19a_100001& E-65 + convertToDouble -3E-20 +} 0xbbe1b578c96db19b +test expr-28.791 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +3 E27 x 1363156bbee301_0110& E91 + convertToDouble +3E27 +} 0x45a363156bbee301 +test expr-28.792 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -9 E26 x -1743b34e18439b_010& E89 + convertToDouble -9E26 +} 0xc58743b34e18439b +test expr-28.793 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +7 E25 x 1cf389cd46047d_00& E85 + convertToDouble +7E25 +} 0x454cf389cd46047d +test expr-28.794 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -6 E27 x -1363156bbee301_0110& E92 + convertToDouble -6E27 +} 0xc5b363156bbee301 +test expr-28.795 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +2 E-21 x 12e3b40a0e9b4f_0111110& E-69 + convertToDouble +2E-21 +} 0x3ba2e3b40a0e9b4f +test expr-28.796 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -5 E-22 x -12e3b40a0e9b4f_0111110& E-71 + convertToDouble -5E-22 +} 0xbb82e3b40a0e9b4f +test expr-28.797 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -4 E-21 x -12e3b40a0e9b4f_0111110& E-68 + convertToDouble -4E-21 +} 0xbbb2e3b40a0e9b4f +test expr-28.798 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +87 E25 x 167d2d5406637c_10001& E89 + convertToDouble +87E25 +} 0x45867d2d5406637d +test expr-28.799 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -97 E24 x -140f232256e982_1000000001& E86 + convertToDouble -97E24 +} 0xc5540f232256e983 +test expr-28.800 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +82 E-24 x 18c87154dff6c6_1000000001& E-74 + convertToDouble +82E-24 +} 0x3b58c87154dff6c7 +test expr-28.801 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -41 E-24 x -18c87154dff6c6_1000000001& E-75 + convertToDouble -41E-24 +} 0xbb48c87154dff6c7 +test expr-28.802 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +76 E-23 x 1cb644dc1633c0_10000001& E-71 + convertToDouble +76E-23 +} 0x3b8cb644dc1633c1 +test expr-28.803 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +83 E25 x 15747ab143e353_011111111110& E89 + convertToDouble +83E25 +} 0x4585747ab143e353 +test expr-28.804 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -50 E27 x -1431e0fae6d721_0111110& E95 + convertToDouble -50E27 +} 0xc5e431e0fae6d721 +test expr-28.805 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +25 E27 x 1431e0fae6d721_0111110& E94 + convertToDouble +25E27 +} 0x45d431e0fae6d721 +test expr-28.806 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -99 E27 x -13fe2e171cda19_011110& E96 + convertToDouble -99E27 +} 0xc5f3fe2e171cda19 +test expr-28.807 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +97 E-10 x 14d4a1a3157dc7_011111110& E-27 + convertToDouble +97E-10 +} 0x3e44d4a1a3157dc7 +test expr-28.808 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -57 E-20 x -15077f6f3242e7_011111110& E-61 + convertToDouble -57E-20 +} 0xbc25077f6f3242e7 +test expr-28.809 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +997 E23 x 149e12f51c1a3c_10000000001& E86 + convertToDouble +997E23 +} 0x45549e12f51c1a3d +test expr-28.810 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +776 E24 x 140f232256e982_1000000001& E89 + convertToDouble +776E24 +} 0x45840f232256e983 +test expr-28.811 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -388 E24 x -140f232256e982_1000000001& E88 + convertToDouble -388E24 +} 0xc5740f232256e983 +test expr-28.812 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +521 E-10 x 1bf891c92c0890_100000000001& E-25 + convertToDouble +521E-10 +} 0x3e6bf891c92c0891 +test expr-28.813 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -506 E-26 x -1877fa0260beb2_10000000001& E-78 + convertToDouble -506E-26 +} 0xbb1877fa0260beb3 +test expr-28.814 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +739 E-10 x 13d65e8c76722c_10000000001& E-24 + convertToDouble +739E-10 +} 0x3e73d65e8c76722d +test expr-28.815 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -867 E-7 x -16ba56a8834168_100000000001& E-14 + convertToDouble -867E-7 +} 0xbf16ba56a8834169 +test expr-28.816 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -415 E24 x -15747ab143e353_011111111110& E88 + convertToDouble -415E24 +} 0xc575747ab143e353 +test expr-28.817 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +332 E25 x 15747ab143e353_011111111110& E91 + convertToDouble +332E25 +} 0x45a5747ab143e353 +test expr-28.818 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -664 E25 x -15747ab143e353_011111111110& E92 + convertToDouble -664E25 +} 0xc5b5747ab143e353 +test expr-28.819 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +291 E-13 x 1ffeebfc8b81b5_01111111111110& E-36 + convertToDouble +291E-13 +} 0x3dbffeebfc8b81b5 +test expr-28.820 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -982 E-8 x -14981285e98e79_0111111111110& E-17 + convertToDouble -982E-8 +} 0xbee4981285e98e79 +test expr-28.821 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +582 E-13 x 1ffeebfc8b81b5_01111111111110& E-35 + convertToDouble +582E-13 +} 0x3dcffeebfc8b81b5 +test expr-28.822 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -491 E-8 x -14981285e98e79_0111111111110& E-18 + convertToDouble -491E-8 +} 0xbed4981285e98e79 +test expr-28.823 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4574 E26 x 1717c1a612f954_100000000001& E98 + convertToDouble +4574E26 +} 0x461717c1a612f955 +test expr-28.824 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8609 E26 x -15bb6f942546ee_1000000000001& E99 + convertToDouble -8609E26 +} 0xc625bb6f942546ef +test expr-28.825 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +2287 E26 x 1717c1a612f954_100000000001& E97 + convertToDouble +2287E26 +} 0x460717c1a612f955 +test expr-28.826 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -4818 E24 x -1f22b65eb419a0_10000000001& E91 + convertToDouble -4818E24 +} 0xc5af22b65eb419a1 +test expr-28.827 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +6529 E-8 x 111d89a8b5c142_100000000000001& E-14 + convertToDouble +6529E-8 +} 0x3f111d89a8b5c143 +test expr-28.828 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8151 E-21 x -12cb804b61b898_1000000000000001& E-57 + convertToDouble -8151E-21 +} 0xbc62cb804b61b899 +test expr-28.829 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +1557 E-12 x 1abfc227ab1026_10000000000001& E-30 + convertToDouble +1557E-12 +} 0x3e1abfc227ab1027 +test expr-28.830 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -2573 E-18 x -172cef1ebbca44_10000000000001& E-49 + convertToDouble -2573E-18 +} 0xbce72cef1ebbca45 +test expr-28.831 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4929 E-16 x 1157a604ed019f_0111111111111110& E-41 + convertToDouble +4929E-16 +} 0x3d6157a604ed019f +test expr-28.832 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -3053 E-22 x -1686f435fe6b6b_011111111111110& E-62 + convertToDouble -3053E-22 +} 0xbc1686f435fe6b6b +test expr-28.833 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +9858 E-16 x 1157a604ed019f_0111111111111110& E-40 + convertToDouble +9858E-16 +} 0x3d7157a604ed019f +test expr-28.834 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -7767 E-11 x -14d971170ed055_011111111111110& E-24 + convertToDouble -7767E-11 +} 0xbe74d971170ed055 +test expr-28.835 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +54339 E26 x 1125782ec15cbe_100000000000000001& E102 + convertToDouble +54339E26 +} 0x465125782ec15cbf +test expr-28.836 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -62409 E25 x -1f822c980d4bb2_100000000000000001& E98 + convertToDouble -62409E25 +} 0xc61f822c980d4bb3 +test expr-28.837 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +32819 E27 x 19e3be885fc16a_100000000000001& E104 + convertToDouble +32819E27 +} 0x4679e3be885fc16b +test expr-28.838 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -89849 E27 x -11b8371b6dda04_1000000000000001& E106 + convertToDouble -89849E27 +} 0xc691b8371b6dda05 +test expr-28.839 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +63876 E-20 x 1703856844bdbe_1000000000000000000001& E-51 + convertToDouble +63876E-20 +} 0x3cc703856844bdbf +test expr-28.840 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -15969 E-20 x -1703856844bdbe_1000000000000000000001& E-53 + convertToDouble -15969E-20 +} 0xbca703856844bdbf +test expr-28.841 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +31938 E-20 x 1703856844bdbe_1000000000000000000001& E-52 + convertToDouble +31938E-20 +} 0x3cb703856844bdbf +test expr-28.842 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -79845 E-21 x -1703856844bdbe_1000000000000000000001& E-54 + convertToDouble -79845E-21 +} 0xbc9703856844bdbf +test expr-28.843 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +89306 E27 x 119cccff237e17_011111111111110& E106 + convertToDouble +89306E27 +} 0x46919cccff237e17 +test expr-28.844 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -25487 E24 x -1496968ba07117_01111111111110& E94 + convertToDouble -25487E24 +} 0xc5d496968ba07117 +test expr-28.845 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +79889 E24 x 10222a1c7e27d3_01111111111110& E96 + convertToDouble +79889E24 +} 0x45f0222a1c7e27d3 +test expr-28.846 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -97379 E26 x -1eba3685911519_011111111111111110& E102 + convertToDouble -97379E26 +} 0xc65eba3685911519 +test expr-28.847 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +81002 E-8 x 1a8af0b45d9531_0111111111111111110& E-11 + convertToDouble +81002E-8 +} 0x3f4a8af0b45d9531 +test expr-28.848 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -43149 E-25 x -146064de6ecbed_011111111111111110& E-68 + convertToDouble -43149E-25 +} 0xbbb46064de6ecbed +test expr-28.849 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +40501 E-8 x 1a8af0b45d9531_0111111111111111110& E-12 + convertToDouble +40501E-8 +} 0x3f3a8af0b45d9531 +test expr-28.850 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -60318 E-10 x -194c988f217e51_011111111111111110& E-18 + convertToDouble -60318E-10 +} 0xbed94c988f217e51 +test expr-28.851 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -648299 E27 x -1ff6af0bf00100_10000000000000000001& E108 + convertToDouble -648299E27 +} 0xc6bff6af0bf00101 +test expr-28.852 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +780649 E24 x 13b4d36f9edd18_10000000000000000001& E99 + convertToDouble +780649E24 +} 0x4623b4d36f9edd19 +test expr-28.853 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +720919 E-14 x 1ef696965cbf04_10000000000000000000000001& E-28 + convertToDouble +720919E-14 +} 0x3e3ef696965cbf05 +test expr-28.854 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -629703 E-11 x -1a69626d2629d0_1000000000000000000000001& E-18 + convertToDouble -629703E-11 +} 0xbeda69626d2629d1 +test expr-28.855 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +557913 E24 x 1c2adb44b394bf_01111111111111111110& E98 + convertToDouble +557913E24 +} 0x461c2adb44b394bf +test expr-28.856 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -847899 E23 x -111f88fb93dce9_011111111111111111110& E96 + convertToDouble -847899E23 +} 0xc5f11f88fb93dce9 +test expr-28.857 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +565445 E27 x 1be0eb55770d4d_0111111111111111110& E108 + convertToDouble +565445E27 +} 0x46bbe0eb55770d4d +test expr-28.858 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -736531 E24 x -1297b853d64ac7_01111111111111111110& E99 + convertToDouble -736531E24 +} 0xc62297b853d64ac7 +test expr-28.859 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +680013 E-19 x 13240293e95c3b_01111111111111111111110& E-44 + convertToDouble +680013E-19 +} 0x3d33240293e95c3b +test expr-28.860 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -529981 E-10 x -1bc948d999ac11_011111111111111111110& E-15 + convertToDouble -529981E-10 +} 0xbf0bc948d999ac11 +test expr-28.861 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +382923 E-23 x 11a8c1c10a1fc5_011111111111111111110& E-58 + convertToDouble +382923E-23 +} 0x3c51a8c1c10a1fc5 +test expr-28.862 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -633614 E-18 x -164b166995a9b7_011111111111111111110& E-41 + convertToDouble -633614E-18 +} 0xbd664b166995a9b7 +test expr-28.863 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +2165479 E27 x 1ab10c016c34b8_100000000000000000000001& E110 + convertToDouble +2165479E27 +} 0x46dab10c016c34b9 +test expr-28.864 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8661916 E27 x -1ab10c016c34b8_100000000000000000000001& E112 + convertToDouble -8661916E27 +} 0xc6fab10c016c34b9 +test expr-28.865 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4330958 E27 x 1ab10c016c34b8_100000000000000000000001& E111 + convertToDouble +4330958E27 +} 0x46eab10c016c34b9 +test expr-28.866 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -9391993 E22 x -12f78bec748c98_1000000000000000000001& E96 + convertToDouble -9391993E22 +} 0xc5f2f78bec748c99 +test expr-28.867 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -5767352 E-14 x -1ef696965cbf04_10000000000000000000000001& E-25 + convertToDouble -5767352E-14 +} 0xbe6ef696965cbf05 +test expr-28.868 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +7209190 E-15 x 1ef696965cbf04_10000000000000000000000001& E-28 + convertToDouble +7209190E-15 +} 0x3e3ef696965cbf05 +test expr-28.869 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -1441838 E-14 x -1ef696965cbf04_10000000000000000000000001& E-27 + convertToDouble -1441838E-14 +} 0xbe4ef696965cbf05 +test expr-28.870 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +8478990 E22 x 111f88fb93dce9_011111111111111111110& E96 + convertToDouble +8478990E22 +} 0x45f11f88fb93dce9 +test expr-28.871 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +1473062 E24 x 1297b853d64ac7_01111111111111111110& E100 + convertToDouble +1473062E24 +} 0x463297b853d64ac7 +test expr-28.872 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +8366487 E-14 x 167567f55b22e1_0111111111111111111111110& E-24 + convertToDouble +8366487E-14 +} 0x3e767567f55b22e1 +test expr-28.873 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8399969 E-25 x -1efd8be1b15b43_011111111111111111111110& E-61 + convertToDouble -8399969E-25 +} 0xbc2efd8be1b15b43 +test expr-28.874 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +9366737 E-12 x 13a4ba87ddc13f_011111111111111111111110& E-17 + convertToDouble +9366737E-12 +} 0x3ee3a4ba87ddc13f +test expr-28.875 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -9406141 E-13 x -1f8fd047c84d49_0111111111111111111111110& E-21 + convertToDouble -9406141E-13 +} 0xbeaf8fd047c84d49 +test expr-28.876 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +65970979 E24 x 1a055dd68f3e3c_1000000000000000000000000001& E105 + convertToDouble +65970979E24 +} 0x468a055dd68f3e3d +test expr-28.877 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -65060671 E26 x -140c61c9916cf4_100000000000000000000000001& E112 + convertToDouble -65060671E26 +} 0xc6f40c61c9916cf5 +test expr-28.878 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +54923002 E27 x 1527d37d8b38ea_10000000000000000000000001& E115 + convertToDouble +54923002E27 +} 0x472527d37d8b38eb +test expr-28.879 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -63846927 E25 x -1f7a9d79dad9b4_10000000000000000000000001& E108 + convertToDouble -63846927E25 +} 0xc6bf7a9d79dad9b5 +test expr-28.880 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +99585767 E-21 x 1c07e928406d2e_100000000000000000000000001& E-44 + convertToDouble +99585767E-21 +} 0x3d3c07e928406d2f +test expr-28.881 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +67488159 E25 x 10a31a03822bc9_011111111111111111111111111110& E109 + convertToDouble +67488159E25 +} 0x46c0a31a03822bc9 +test expr-28.882 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -69005339 E24 x -1b37c234aae77b_011111111111111111111111110& E105 + convertToDouble -69005339E24 +} 0xc68b37c234aae77b +test expr-28.883 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +81956786 E27 x 1f919023fcb6fd_0111111111111111111111111110& E115 + convertToDouble +81956786E27 +} 0x472f919023fcb6fd +test expr-28.884 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -40978393 E27 x -1f919023fcb6fd_0111111111111111111111111110& E114 + convertToDouble -40978393E27 +} 0xc71f919023fcb6fd +test expr-28.885 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +77505754 E-12 x 145152b6f85e09_0111111111111111111111111110& E-14 + convertToDouble +77505754E-12 +} 0x3f145152b6f85e09 +test expr-28.886 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -38752877 E-12 x -145152b6f85e09_0111111111111111111111111110& E-15 + convertToDouble -38752877E-12 +} 0xbf045152b6f85e09 +test expr-28.887 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +82772981 E-15 x 16381dae63505f_0111111111111111111111111111110& E-24 + convertToDouble +82772981E-15 +} 0x3e76381dae63505f +test expr-28.888 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -95593517 E-25 x -160ad862d8537d_0111111111111111111111111110& E-57 + convertToDouble -95593517E-25 +} 0xbc660ad862d8537d +test expr-28.889 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +200036989 E25 x 18a80dedbc575e_10000000000000000000000000001& E110 + convertToDouble +200036989E25 +} 0x46d8a80dedbc575f +test expr-28.890 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -772686455 E27 x -129a0c45ceca7a_1000000000000000000000000000001& E119 + convertToDouble -772686455E27 +} 0xc7629a0c45ceca7b +test expr-28.891 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +859139907 E23 x 10f18c4dd0ffe2_10000000000000000000000000001& E106 + convertToDouble +859139907E23 +} 0x4690f18c4dd0ffe3 +test expr-28.892 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -400073978 E25 x -18a80dedbc575e_10000000000000000000000000001& E111 + convertToDouble -400073978E25 +} 0xc6e8a80dedbc575f +test expr-28.893 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +569014327 E-14 x 17ddbeac19d3b2_100000000000000000000000000001& E-18 + convertToDouble +569014327E-14 +} 0x3ed7ddbeac19d3b3 +test expr-28.894 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -794263862 E-15 x -1aa6acb41dfc52_1000000000000000000000000000001& E-21 + convertToDouble -794263862E-15 +} 0xbeaaa6acb41dfc53 +test expr-28.895 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +397131931 E-15 x 1aa6acb41dfc52_1000000000000000000000000000001& E-22 + convertToDouble +397131931E-15 +} 0x3e9aa6acb41dfc53 +test expr-28.896 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -380398957 E-16 x -146c29d8331024_100000000000000000000000000001& E-25 + convertToDouble -380398957E-16 +} 0xbe646c29d8331025 +test expr-28.897 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +567366773 E27 x 1b5155dd5417f9_0111111111111111111111111111110& E118 + convertToDouble +567366773E27 +} 0x475b5155dd5417f9 +test expr-28.898 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -337440795 E24 x -10a31a03822bc9_011111111111111111111111111110& E108 + convertToDouble -337440795E24 +} 0xc6b0a31a03822bc9 +test expr-28.899 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +134976318 E25 x 10a31a03822bc9_011111111111111111111111111110& E110 + convertToDouble +134976318E25 +} 0x46d0a31a03822bc9 +test expr-28.900 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -269952636 E25 x -10a31a03822bc9_011111111111111111111111111110& E111 + convertToDouble -269952636E25 +} 0xc6e0a31a03822bc9 +test expr-28.901 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +932080597 E-20 x 147f25b4941e5b_0111111111111111111111111111110& E-37 + convertToDouble +932080597E-20 +} 0x3da47f25b4941e5b +test expr-28.902 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -331091924 E-15 x -16381dae63505f_0111111111111111111111111111110& E-22 + convertToDouble -331091924E-15 +} 0xbe96381dae63505f +test expr-28.903 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -413864905 E-16 x -16381dae63505f_0111111111111111111111111111110& E-25 + convertToDouble -413864905E-16 +} 0xbe66381dae63505f +test expr-28.904 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +8539246247 E26 x 148eb7813eaeba_10000000000000000000000000000001& E119 + convertToDouble +8539246247E26 +} 0x47648eb7813eaebb +test expr-28.905 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -5859139791 E26 x -1c35f28719d478_10000000000000000000000000000001& E118 + convertToDouble -5859139791E26 +} 0xc75c35f28719d479 +test expr-28.906 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +6105010149 E24 x 12d000fb2b138a_1000000000000000000000000000000001& E112 + convertToDouble +6105010149E24 +} 0x46f2d000fb2b138b +test expr-28.907 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -3090745820 E27 x -129a0c45ceca7a_1000000000000000000000000000001& E121 + convertToDouble -3090745820E27 +} 0xc7829a0c45ceca7b +test expr-28.908 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +3470877773 E-20 x 1314d381f2c31e_1000000000000000000000000000000001& E-35 + convertToDouble +3470877773E-20 +} 0x3dc314d381f2c31f +test expr-28.909 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -6136309089 E-27 x -1c4c799fab4328_1000000000000000000000000000000001& E-58 + convertToDouble -6136309089E-27 +} 0xbc5c4c799fab4329 +test expr-28.910 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +8917758713 E-19 x 1ea424bda7d7f4_100000000000000000000000000000001& E-31 + convertToDouble +8917758713E-19 +} 0x3e0ea424bda7d7f5 +test expr-28.911 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -6941755546 E-20 x -1314d381f2c31e_1000000000000000000000000000000001& E-34 + convertToDouble -6941755546E-20 +} 0xbdd314d381f2c31f +test expr-28.912 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +9194900535 E25 x 11b56f9c090dfb_011111111111111111111111111111111110& E116 + convertToDouble +9194900535E25 +} 0x4731b56f9c090dfb +test expr-28.913 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -1838980107 E26 x -11b56f9c090dfb_011111111111111111111111111111111110& E117 + convertToDouble -1838980107E26 +} 0xc741b56f9c090dfb +test expr-28.914 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +7355920428 E26 x 11b56f9c090dfb_011111111111111111111111111111111110& E119 + convertToDouble +7355920428E26 +} 0x4761b56f9c090dfb +test expr-28.915 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -3677960214 E26 x -11b56f9c090dfb_011111111111111111111111111111111110& E118 + convertToDouble -3677960214E26 +} 0xc751b56f9c090dfb +test expr-28.916 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +8473634343 E-17 x 16bf0984b232b7_0111111111111111111111111111111110& E-24 + convertToDouble +8473634343E-17 +} 0x3e76bf0984b232b7 +test expr-28.917 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8870766274 E-16 x -1dc3ee22137269_0111111111111111111111111111111110& E-21 + convertToDouble -8870766274E-16 +} 0xbeadc3ee22137269 +test expr-28.918 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +4435383137 E-16 x 1dc3ee22137269_0111111111111111111111111111111110& E-22 + convertToDouble +4435383137E-16 +} 0x3e9dc3ee22137269 +test expr-28.919 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -9598990129 E-15 x -14216b286031e7_01111111111111111111111111111111110& E-17 + convertToDouble -9598990129E-15 +} 0xbee4216b286031e7 +test expr-28.920 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +71563496764 E26 x 15890d1ef6a0da_10000000000000000000000000000000000001& E122 + convertToDouble +71563496764E26 +} 0x4795890d1ef6a0db +test expr-28.921 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -89454370955 E25 x -15890d1ef6a0da_10000000000000000000000000000000000001& E119 + convertToDouble -89454370955E25 +} 0xc765890d1ef6a0db +test expr-28.922 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +17890874191 E26 x 15890d1ef6a0da_10000000000000000000000000000000000001& E120 + convertToDouble +17890874191E26 +} 0x4775890d1ef6a0db +test expr-28.923 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -35781748382 E26 x -15890d1ef6a0da_10000000000000000000000000000000000001& E121 + convertToDouble -35781748382E26 +} 0xc785890d1ef6a0db +test expr-28.924 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +57973447842 E-19 x 18e63f7cf5313c_1000000000000000000000000000000000000001& E-28 + convertToDouble +57973447842E-19 +} 0x3e38e63f7cf5313d +test expr-28.925 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -28986723921 E-19 x -18e63f7cf5313c_1000000000000000000000000000000000000001& E-29 + convertToDouble -28986723921E-19 +} 0xbe28e63f7cf5313d +test expr-28.926 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +76822711313 E-19 x 107f5f8b3bf818_100000000000000000000000000000000001& E-27 + convertToDouble +76822711313E-19 +} 0x3e407f5f8b3bf819 +test expr-28.927 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -97699466874 E-20 x -10c8de34de806e_10000000000000000000000000000000001& E-30 + convertToDouble -97699466874E-20 +} 0xbe10c8de34de806f +test expr-28.928 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +67748656762 E27 x 197bf5559b31fd_01111111111111111111111111111111111110& E125 + convertToDouble +67748656762E27 +} 0x47c97bf5559b31fd +test expr-28.929 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -19394840991 E24 x -1de1ea791a6e7d_0111111111111111111111111111111111110& E113 + convertToDouble -19394840991E24 +} 0xc70de1ea791a6e7d +test expr-28.930 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +38789681982 E24 x 1de1ea791a6e7d_0111111111111111111111111111111111110& E114 + convertToDouble +38789681982E24 +} 0x471de1ea791a6e7d +test expr-28.931 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -33874328381 E27 x -197bf5559b31fd_01111111111111111111111111111111111110& E124 + convertToDouble -33874328381E27 +} 0xc7b97bf5559b31fd +test expr-28.932 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +54323763886 E-27 x 1f50c5c63e5441_0111111111111111111111111111111111110& E-55 + convertToDouble +54323763886E-27 +} 0x3c8f50c5c63e5441 +test expr-28.933 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -58987193887 E-20 x -14449185a4c829_011111111111111111111111111111111111110& E-31 + convertToDouble -58987193887E-20 +} 0xbe04449185a4c829 +test expr-28.934 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +27161881943 E-27 x 1f50c5c63e5441_0111111111111111111111111111111111110& E-56 + convertToDouble +27161881943E-27 +} 0x3c7f50c5c63e5441 +test expr-28.935 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -93042648033 E-19 x -13fb12dc023fd3_0111111111111111111111111111111111110& E-27 + convertToDouble -93042648033E-19 +} 0xbe43fb12dc023fd3 +test expr-28.936 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +520831059055 E27 x 187d469cb69dd0_10000000000000000000000000000000000000001& E128 + convertToDouble +520831059055E27 +} 0x47f87d469cb69dd1 +test expr-28.937 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -768124264394 E25 x -171d6a019edae8_1000000000000000000000000000000000000001& E122 + convertToDouble -768124264394E25 +} 0xc7971d6a019edae9 +test expr-28.938 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +384062132197 E25 x 171d6a019edae8_1000000000000000000000000000000000000001& E121 + convertToDouble +384062132197E25 +} 0x47871d6a019edae9 +test expr-28.939 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +765337749889 E-25 x 158ad6f5d0a854_100000000000000000000000000000000000000001& E-44 + convertToDouble +765337749889E-25 +} 0x3d358ad6f5d0a855 +test expr-28.940 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +794368912771 E25 x 17e79872f2f7ef_01111111111111111111111111111111111111110& E122 + convertToDouble +794368912771E25 +} 0x4797e79872f2f7ef +test expr-28.941 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -994162090146 E23 x -132598f85e658b_011111111111111111111111111111111111110& E116 + convertToDouble -994162090146E23 +} 0xc7332598f85e658b +test expr-28.942 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +781652779431 E26 x 1d670adf52038f_01111111111111111111111111111111111110& E125 + convertToDouble +781652779431E26 +} 0x47cd670adf52038f +test expr-28.943 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +910077190046 E-26 x 147e3ce1871d79_01111111111111111111111111111111111111110& E-47 + convertToDouble +910077190046E-26 +} 0x3d047e3ce1871d79 +test expr-28.944 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -455038595023 E-26 x -147e3ce1871d79_01111111111111111111111111111111111111110& E-48 + convertToDouble -455038595023E-26 +} 0xbcf47e3ce1871d79 +test expr-28.945 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +471897551096 E-20 x 14449185a4c829_011111111111111111111111111111111111110& E-28 + convertToDouble +471897551096E-20 +} 0x3e34449185a4c829 +test expr-28.946 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -906698409911 E-21 x -1f27674f7d5745_0111111111111111111111111111111111111110& E-31 + convertToDouble -906698409911E-21 +} 0xbe0f27674f7d5745 +test expr-28.947 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +8854128003935 E25 x 10a71b8948faac_100000000000000000000000000000000000000001& E126 + convertToDouble +8854128003935E25 +} 0x47d0a71b8948faad +test expr-28.948 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8146122716299 E27 x -17f0762ac05654_1000000000000000000000000000000000000000001& E132 + convertToDouble -8146122716299E27 +} 0xc837f0762ac05655 +test expr-28.949 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +7083302403148 E26 x 10a71b8948faac_100000000000000000000000000000000000000001& E129 + convertToDouble +7083302403148E26 +} 0x4800a71b8948faad +test expr-28.950 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -3541651201574 E26 x -10a71b8948faac_100000000000000000000000000000000000000001& E128 + convertToDouble -3541651201574E26 +} 0xc7f0a71b8948faad +test expr-28.951 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +8394920649291 E-25 x 1d8978e8c1cc78_100000000000000000000000000000000000000000001& E-41 + convertToDouble +8394920649291E-25 +} 0x3d6d8978e8c1cc79 +test expr-28.952 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -7657975756753 E-22 x -1a5006d695fef0_1000000000000000000000000000000000000000000001& E-31 + convertToDouble -7657975756753E-22 +} 0xbe0a5006d695fef1 +test expr-28.953 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +5473834002228 E-20 x 1d632e1f745624_100000000000000000000000000000000000000000001& E-25 + convertToDouble +5473834002228E-20 +} 0x3e6d632e1f745625 +test expr-28.954 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -6842292502785 E-21 x -1d632e1f745624_100000000000000000000000000000000000000000001& E-28 + convertToDouble -6842292502785E-21 +} 0xbe3d632e1f745625 +test expr-28.955 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -2109568884597 E25 x -1fbdc386609b13_011111111111111111111111111111111111111110& E123 + convertToDouble -2109568884597E25 +} 0xc7afbdc386609b13 +test expr-28.956 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +8438275538388 E25 x 1fbdc386609b13_011111111111111111111111111111111111111110& E125 + convertToDouble +8438275538388E25 +} 0x47cfbdc386609b13 +test expr-28.957 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -4219137769194 E25 x -1fbdc386609b13_011111111111111111111111111111111111111110& E124 + convertToDouble -4219137769194E25 +} 0xc7bfbdc386609b13 +test expr-28.958 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +3200141789841 E-25 x 1684dcea3829f7_0111111111111111111111111111111111111111110& E-42 + convertToDouble +3200141789841E-25 +} 0x3d5684dcea3829f7 +test expr-28.959 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8655689322607 E-22 x -1dbd9ff5dc8991_011111111111111111111111111111111111111110& E-31 + convertToDouble -8655689322607E-22 +} 0xbe0dbd9ff5dc8991 +test expr-28.960 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +6400283579682 E-25 x 1684dcea3829f7_0111111111111111111111111111111111111111110& E-41 + convertToDouble +6400283579682E-25 +} 0x3d6684dcea3829f7 +test expr-28.961 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -8837719634493 E-21 x -12fa9676d2585b_011111111111111111111111111111111111111110& E-27 + convertToDouble -8837719634493E-21 +} 0xbe42fa9676d2585b +test expr-28.962 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +19428217075297 E24 x 1d3b7a1d154aba_10000000000000000000000000000000000000000000001& E123 + convertToDouble +19428217075297E24 +} 0x47ad3b7a1d154abb +test expr-28.963 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -38856434150594 E24 x -1d3b7a1d154aba_10000000000000000000000000000000000000000000001& E124 + convertToDouble -38856434150594E24 +} 0xc7bd3b7a1d154abb +test expr-28.964 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +77712868301188 E24 x 1d3b7a1d154aba_10000000000000000000000000000000000000000000001& E125 + convertToDouble +77712868301188E24 +} 0x47cd3b7a1d154abb +test expr-28.965 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -77192037242133 E27 x -1c5b1ab32d5dbe_1000000000000000000000000000000000000000000000001& E135 + convertToDouble -77192037242133E27 +} 0xc86c5b1ab32d5dbf +test expr-28.966 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +76579757567530 E-23 x 1a5006d695fef0_1000000000000000000000000000000000000000000001& E-31 + convertToDouble +76579757567530E-23 +} 0x3e0a5006d695fef1 +test expr-28.967 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +15315951513506 E-22 x 1a5006d695fef0_1000000000000000000000000000000000000000000001& E-30 + convertToDouble +15315951513506E-22 +} 0x3e1a5006d695fef1 +test expr-28.968 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -38289878783765 E-23 x -1a5006d695fef0_1000000000000000000000000000000000000000000001& E-32 + convertToDouble -38289878783765E-23 +} 0xbdfa5006d695fef1 +test expr-28.969 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +49378033925202 E25 x 1737aa2567167b_0111111111111111111111111111111111111111111110& E128 + convertToDouble +49378033925202E25 +} 0x47f737aa2567167b +test expr-28.970 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -50940527102367 E24 x -132964f2944b05_0111111111111111111111111111111111111111111111110& E125 + convertToDouble -50940527102367E24 +} 0xc7c32964f2944b05 +test expr-28.971 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +98756067850404 E25 x 1737aa2567167b_0111111111111111111111111111111111111111111110& E129 + convertToDouble +98756067850404E25 +} 0x480737aa2567167b +test expr-28.972 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -99589397544892 E26 x -1d4446075c4933_0111111111111111111111111111111111111111111110& E132 + convertToDouble -99589397544892E26 +} 0xc83d4446075c4933 +test expr-28.973 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -56908598265713 E-25 x -190756ab1ed6b3_011111111111111111111111111111111111111111111110& E-38 + convertToDouble -56908598265713E-25 +} 0xbd990756ab1ed6b3 +test expr-28.974 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +97470695699657 E-22 x 14ee821710e655_01111111111111111111111111111111111111111111110& E-27 + convertToDouble +97470695699657E-22 +} 0x3e44ee821710e655 +test expr-28.975 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -35851901247343 E-25 x -1f8921657e1581_0111111111111111111111111111111111111111111110& E-39 + convertToDouble -35851901247343E-25 +} 0xbd8f8921657e1581 +test expr-28.976 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +154384074484266 E27 x 1c5b1ab32d5dbe_1000000000000000000000000000000000000000000000001& E136 + convertToDouble +154384074484266E27 +} 0x487c5b1ab32d5dbf +test expr-28.977 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -308768148968532 E27 x -1c5b1ab32d5dbe_1000000000000000000000000000000000000000000000001& E137 + convertToDouble -308768148968532E27 +} 0xc88c5b1ab32d5dbf +test expr-28.978 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +910990389005985 E23 x 112242592ae54a_100000000000000000000000000000000000000000000001& E126 + convertToDouble +910990389005985E23 +} 0x47d12242592ae54b +test expr-28.979 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +271742424169201 E-27 x 131f46bcf7b452_10000000000000000000000000000000000000000000000001& E-42 + convertToDouble +271742424169201E-27 +} 0x3d531f46bcf7b453 +test expr-28.980 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -543484848338402 E-27 x -131f46bcf7b452_10000000000000000000000000000000000000000000000001& E-41 + convertToDouble -543484848338402E-27 +} 0xbd631f46bcf7b453 +test expr-28.981 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +162192083357563 E-26 x 1c887b68658760_1000000000000000000000000000000000000000000000001& E-40 + convertToDouble +162192083357563E-26 +} 0x3d7c887b68658761 +test expr-28.982 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -869254552770081 E-23 x -12aac70665485e_1000000000000000000000000000000000000000000000000001& E-27 + convertToDouble -869254552770081E-23 +} 0xbe42aac70665485f +test expr-28.983 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +664831007626046 E24 x 1f429cb67eb075_011111111111111111111111111111111111111111111111110& E128 + convertToDouble +664831007626046E24 +} 0x47ff429cb67eb075 +test expr-28.984 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -332415503813023 E24 x -1f429cb67eb075_011111111111111111111111111111111111111111111111110& E127 + convertToDouble -332415503813023E24 +} 0xc7ef429cb67eb075 +test expr-28.985 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +943701829041427 E24 x 162fb2e38ee461_01111111111111111111111111111111111111111111111110& E129 + convertToDouble +943701829041427E24 +} 0x48062fb2e38ee461 +test expr-28.986 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -101881054204734 E24 x -132964f2944b05_0111111111111111111111111111111111111111111111110& E126 + convertToDouble -101881054204734E24 +} 0xc7d32964f2944b05 +test expr-28.987 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +828027839666967 E-27 x 1d2236349da3cd_011111111111111111111111111111111111111111111111110& E-41 + convertToDouble +828027839666967E-27 +} 0x3d6d2236349da3cd +test expr-28.988 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -280276135608777 E-27 x -13b901892fd0bf_0111111111111111111111111111111111111111111111110& E-42 + convertToDouble -280276135608777E-27 +} 0xbd53b901892fd0bf +test expr-28.989 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +212839188833879 E-21 x 1c91194dc2d40b_0111111111111111111111111111111111111111111111110& E-23 + convertToDouble +212839188833879E-21 +} 0x3e8c91194dc2d40b +test expr-28.990 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -113817196531426 E-25 x -190756ab1ed6b3_011111111111111111111111111111111111111111111110& E-37 + convertToDouble -113817196531426E-25 +} 0xbda90756ab1ed6b3 +test expr-28.991 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +9711553197796883 E27 x 1bdeec25c0f03e_10000000000000000000000000000000000000000000000000001& E142 + convertToDouble +9711553197796883E27 +} 0x48dbdeec25c0f03f +test expr-28.992 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -2739849386524269 E26 x -19295ade212370_1000000000000000000000000000000000000000000000000001& E137 + convertToDouble -2739849386524269E26 +} 0xc889295ade212371 +test expr-28.993 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +5479698773048538 E26 x 19295ade212370_1000000000000000000000000000000000000000000000000001& E138 + convertToDouble +5479698773048538E26 +} 0x4899295ade212371 +test expr-28.994 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +6124568318523113 E-25 x 150b3a2e0aff14_1000000000000000000000000000000000000000000000000000001& E-31 + convertToDouble +6124568318523113E-25 +} 0x3e050b3a2e0aff15 +test expr-28.995 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -1139777988171071 E-24 x -1394cbee428ea4_10000000000000000000000000000000000000000000000000001& E-30 + convertToDouble -1139777988171071E-24 +} 0xbe1394cbee428ea5 +test expr-28.996 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +6322612303128019 E-27 x 1bcea0ec21e250_1000000000000000000000000000000000000000000000000000001& E-38 + convertToDouble +6322612303128019E-27 +} 0x3d9bcea0ec21e251 +test expr-28.997 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -2955864564844617 E-25 x -1450030e26c6dc_10000000000000000000000000000000000000000000000000001& E-32 + convertToDouble -2955864564844617E-25 +} 0xbdf450030e26c6dd +test expr-28.998 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -9994029144998961 E25 x -125b2b7fed4a61_0111111111111111111111111111111111111111111111111110& E136 + convertToDouble -9994029144998961E25 +} 0xc8725b2b7fed4a61 +test expr-28.999 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -2971238324022087 E27 x -110dd7a301db67_0111111111111111111111111111111111111111111111111110& E141 + convertToDouble -2971238324022087E27 +} 0xc8c10dd7a301db67 +test expr-28.1000 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -1656055679333934 E-27 x -1d2236349da3cd_011111111111111111111111111111111111111111111111110& E-40 + convertToDouble -1656055679333934E-27 +} 0xbd7d2236349da3cd +test expr-28.1001 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -1445488709150234 E-26 x -1fc960c59526c7_0111111111111111111111111111111111111111111111110& E-37 + convertToDouble -1445488709150234E-26 +} 0xbdafc960c59526c7 +test expr-28.1002 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +55824717499885172 E27 x 1406b0cd17fd56_1000000000000000000000000000000000000000000000000000000001& E145 + convertToDouble +55824717499885172E27 +} 0x490406b0cd17fd57 +test expr-28.1003 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -69780896874856465 E26 x -1406b0cd17fd56_1000000000000000000000000000000000000000000000000000000001& E142 + convertToDouble -69780896874856465E26 +} 0xc8d406b0cd17fd57 +test expr-28.1004 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +84161538867545199 E25 x 13529217bdce6c_10000000000000000000000000000000000000000000000000000000001& E139 + convertToDouble +84161538867545199E25 +} 0x48a3529217bdce6d +test expr-28.1005 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -27912358749942586 E27 x -1406b0cd17fd56_1000000000000000000000000000000000000000000000000000000001& E144 + convertToDouble -27912358749942586E27 +} 0xc8f406b0cd17fd57 +test expr-28.1006 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +24711112462926331 E-25 x 153a07f6040d22_100000000000000000000000000000000000000000000000000000001& E-29 + convertToDouble +24711112462926331E-25 +} 0x3e253a07f6040d23 +test expr-28.1007 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -12645224606256038 E-27 x -1bcea0ec21e250_1000000000000000000000000000000000000000000000000000001& E-37 + convertToDouble -12645224606256038E-27 +} 0xbdabcea0ec21e251 +test expr-28.1008 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -12249136637046226 E-25 x -150b3a2e0aff14_1000000000000000000000000000000000000000000000000000001& E-30 + convertToDouble -12249136637046226E-25 +} 0xbe150b3a2e0aff15 +test expr-28.1009 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +74874448287465757 E27 x 1adc21d1d50b09_01111111111111111111111111111111111111111111111111111110& E145 + convertToDouble +74874448287465757E27 +} 0x490adc21d1d50b09 +test expr-28.1010 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -35642836832753303 E24 x -1a2fac2b421f53_0111111111111111111111111111111111111111111111111111110& E134 + convertToDouble -35642836832753303E24 +} 0xc85a2fac2b421f53 +test expr-28.1011 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -71285673665506606 E24 x -1a2fac2b421f53_0111111111111111111111111111111111111111111111111111110& E135 + convertToDouble -71285673665506606E24 +} 0xc86a2fac2b421f53 +test expr-28.1012 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +43723334984997307 E-26 x 1e0be3f392c549_01111111111111111111111111111111111111111111111111111110& E-32 + convertToDouble +43723334984997307E-26 +} 0x3dfe0be3f392c549 +test expr-28.1013 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN +10182419849537963 E-24 x 15ddd831ebbe53_011111111111111111111111111111111111111111111111111110& E-27 + convertToDouble +10182419849537963E-24 +} 0x3e45ddd831ebbe53 +test expr-28.1014 {input floating-point conversion} {ieeeFloatingPoint} { + # Ad2b dieee UN -93501703572661982 E-26 x -10103f97ea6e13_0111111111111111111111111111111111111111111111111110& E-30 + convertToDouble -93501703572661982E-26 +} 0xbe10103f97ea6e13 + +test expr-29.1 {smallest representible number} {ieeeFloatingPoint} { + list [catch {convertToDouble 4.9406564584124654e-324} result] \ + $result \ + [catch {convertToDouble 2.4703282292062327e-324} result] \ + $result \ + [catch {convertToDouble 2.47032822920623e-324} result] \ + $result +} {0 0x0000000000000001 0 0x0000000000000001 0 0x0000000000000000} +test expr-29.2 {smallest representible number} {ieeeFloatingPoint} { + list [catch {convertToDouble -4.9406564584124654e-324} result] \ + $result \ + [catch {convertToDouble -2.4703282292062327e-324} result] \ + $result \ + [catch {convertToDouble -2.47032822920623e-324} result] \ + $result +} {0 0x8000000000000001 0 0x8000000000000001 0 0x8000000000000000} +test expr-29.3 {silent underflow on input conversion} {ieeeFloatingPoint} { + set v ? + list [scan 2.47032822920623e-324 %g v] $v +} {1 0.0} +test expr-29.4 {silent underflow on input conversion} {ieeeFloatingPoint} { + set v ? + list [scan -2.47032822920623e-324 %g v] $v +} {1 -0.0} + +test expr-30.1 {largest representible number} {ieeeFloatingPoint} { + list [catch {convertToDouble 1.7976931348623155e+308} result] \ + $result \ + [catch {convertToDouble 1.7976931348623157e+308} result] \ + $result \ + [catch {convertToDouble 1.7976931348623159e+308} result] \ + $result +} {0 0x7feffffffffffffe 0 0x7fefffffffffffff 0 0x7ff0000000000000} +test expr-30.2 {largest representible number} {ieeeFloatingPoint} { + list [catch {convertToDouble -1.7976931348623155e+308} result] \ + $result \ + [catch {convertToDouble -1.7976931348623157e+308} result] \ + $result \ + [catch {convertToDouble -1.7976931348623159e+308} result] \ + $result +} {0 0xffeffffffffffffe 0 0xffefffffffffffff 0 0xfff0000000000000} +test expr-30.3 {silent overflow on input conversion} {ieeeFloatingPoint} { + set v ? + list [scan 1.7976931348623159e+308 %f v] $v +} {1 Inf} +test expr-30.4 {silent overflow on input conversion} {ieeeFloatingPoint} { + set v ? + list [scan -1.7976931348623159e+308 %f v] $v +} {1 -Inf} + +# bool() tests (TIP #182) +set i 0 +foreach s {yes true on} { + test expr-31.$i.0 {boolean conversion} {expr bool($s)} 1 + test expr-31.$i.1 {boolean conversion} {expr bool(!$s)} 0 + test expr-31.$i.2 {boolean conversion} {expr bool("$s")} 1 + test expr-31.$i.3 {boolean conversion} {expr bool(!"$s")} 0 + set j 1 + while {$j < [string length $s]-1} { + test expr-31.$i.4.$j {boolean conversion} { + expr bool([string range $s 0 $j]) + } 1 + test expr-31.$i.5.$j {boolean conversion} { + expr bool("[string range $s 0 $j]") + } 1 + incr j + } + incr i +} +test expr-31.0.4.0 {boolean conversion} {expr bool(y)} 1 +test expr-31.0.5.0 {boolean conversion} {expr bool("y")} 1 +test expr-31.1.4.0 {boolean conversion} {expr bool(t)} 1 +test expr-31.1.5.0 {boolean conversion} {expr bool("t")} 1 +test expr-31.2.4.0 {boolean conversion} -body { + expr bool(o) +} -returnCodes error -match glob -result * +test expr-31.2.5.0 {boolean conversion} -body { + expr bool("o") +} -returnCodes error -match glob -result * +foreach s {no false off} { + test expr-31.$i.0 {boolean conversion} {expr bool($s)} 0 + test expr-31.$i.1 {boolean conversion} {expr bool(!$s)} 1 + test expr-31.$i.2 {boolean conversion} {expr bool("$s")} 0 + test expr-31.$i.3 {boolean conversion} {expr bool(!"$s")} 1 + set j 1 + while {$j < [string length $s]-1} { + test expr-31.$i.4.$j {boolean conversion} { + expr bool([string range $s 0 $j]) + } 0 + test expr-31.$i.5.$j {boolean conversion} { + expr bool("[string range $s 0 $j]") + } 0 + incr j + } + incr i +} +test expr-31.3.4.0 {boolean conversion} {expr bool(n)} 0 +test expr-31.3.5.0 {boolean conversion} {expr bool("n")} 0 +test expr-31.4.4.0 {boolean conversion} {expr bool(f)} 0 +test expr-31.4.5.0 {boolean conversion} {expr bool("f")} 0 +test expr-31.6 {boolean conversion} {expr bool(-1 + 1)} 0 +test expr-31.7 {boolean conversion} {expr bool(0 + 1)} 1 +test expr-31.8 {boolean conversion} {expr bool(0.0)} 0 +test expr-31.9 {boolean conversion} {expr bool(0x0)} 0 +test expr-31.10 {boolean conversion} {expr bool(wide(0))} 0 +test expr-31.11 {boolean conversion} {expr bool(5.0)} 1 +test expr-31.12 {boolean conversion} {expr bool(5)} 1 +test expr-31.13 {boolean conversion} {expr bool(0x5)} 1 +test expr-31.14 {boolean conversion} {expr bool(wide(5))} 1 +test expr-31.15 {boolean conversion} -body { + expr bool("fred") +} -returnCodes error -match glob -result * + +test expr-32.1 {expr mod basics} { + set mod_nums [list \ + {-3 1} {-3 2} {-3 3} {-3 4} {-3 5} \ + {-3 -1} {-3 -2} {-3 -3} {-3 -4} {-3 -5} \ + {-2 1} {-2 2} {-2 3} {-2 4} {-2 5} \ + {-2 -1} {-2 -2} {-2 -3} {-2 -4} {-2 -5} \ + {-1 1} {-1 2} {-1 3} {-1 4} {-1 5} \ + {-1 -1} {-1 -2} {-1 -3} {-1 -4} {-1 -5} \ + {0 -100} {0 -1} {0 1} {0 100} \ + {1 1} {1 2} {1 3} {1 4} {1 5} \ + {1 -1} {1 -2} {1 -3} {1 -4} {1 -5} \ + {2 1} {2 2} {2 3} {2 4} {2 5} \ + {2 -1} {2 -2} {2 -3} {2 -4} {2 -5} \ + {3 1} {3 2} {3 3} {3 4} {3 5} \ + {3 -1} {3 -2} {3 -3} {3 -4} {3 -5} \ + ] + set results [list] + foreach pair $mod_nums { + set dividend [lindex $pair 0] + set divisor [lindex $pair 1] + lappend results [expr {$dividend % $divisor}] + } + set results +} [list \ + 0 1 0 1 2 \ + 0 -1 0 -3 -3 \ + 0 0 1 2 3 \ + 0 0 -2 -2 -2 \ + 0 1 2 3 4 \ + 0 -1 -1 -1 -1 \ + 0 0 0 0 \ + 0 1 1 1 1 \ + 0 -1 -2 -3 -4 \ + 0 0 2 2 2 \ + 0 0 -1 -2 -3 \ + 0 1 0 3 3 \ + 0 -1 0 -1 -2 \ + ] + +test expr-32.2 {expr div basics} { + set mod_nums [list \ + {-3 1} {-3 2} {-3 3} {-3 4} {-3 5} \ + {-3 -1} {-3 -2} {-3 -3} {-3 -4} {-3 -5} \ + {-2 1} {-2 2} {-2 3} {-2 4} {-2 5} \ + {-2 -1} {-2 -2} {-2 -3} {-2 -4} {-2 -5} \ + {-1 1} {-1 2} {-1 3} {-1 4} {-1 5} \ + {-1 -1} {-1 -2} {-1 -3} {-1 -4} {-1 -5} \ + {0 -100} {0 -1} {0 1} {0 100} \ + {1 1} {1 2} {1 3} {1 4} {1 5} \ + {1 -1} {1 -2} {1 -3} {1 -4} {1 -5} \ + {2 1} {2 2} {2 3} {2 4} {2 5} \ + {2 -1} {2 -2} {2 -3} {2 -4} {2 -5} \ + {3 1} {3 2} {3 3} {3 4} {3 5} \ + {3 -1} {3 -2} {3 -3} {3 -4} {3 -5} \ + ] + set results [list] + foreach pair $mod_nums { + set dividend [lindex $pair 0] + set divisor [lindex $pair 1] + lappend results [expr {$dividend / $divisor}] + } + set results +} [list \ + -3 -2 -1 -1 -1 \ + 3 1 1 0 0 \ + -2 -1 -1 -1 -1 \ + 2 1 0 0 0 \ + -1 -1 -1 -1 -1 \ + 1 0 0 0 0 \ + 0 0 0 0 \ + 1 0 0 0 0 \ + -1 -1 -1 -1 -1 \ + 2 1 0 0 0 \ + -2 -1 -1 -1 -1 \ + 3 1 1 0 0 \ + -3 -2 -1 -1 -1 \ + ] + +test expr-32.3 {Bug 1585704} { + expr 1%(1<<63) +} 1 +test expr-32.4 {Bug 1585704} { + expr -1%(1<<63) +} [expr (1<<63)-1] +test expr-32.5 {Bug 1585704} { + expr (1<<32)%(1<<63) +} [expr 1<<32] +test expr-32.6 {Bug 1585704} { + expr -(1<<32)%(1<<63) +} [expr (1<<63)-(1<<32)] + +test expr-33.1 {parse largest long value} longIs32bit { + set max_long_str 2147483647 + set max_long_hex "0x7FFFFFFF " + + # Convert to integer (long, not wide) internal rep + set max_long 2147483647 + string is integer $max_long + + list \ + [expr {" $max_long_str "}] \ + [expr {$max_long_str + 0}] \ + [expr {$max_long + 0}] \ + [expr {2147483647 + 0}] \ + [expr {$max_long == $max_long_hex}] \ + [expr {int(2147483647 + 1) < 0}] \ + +} {2147483647 2147483647 2147483647 2147483647 1 1} +test expr-33.2 {parse smallest long value} longIs32bit { + set min_long_str -2147483648 + set min_long_hex "-0x80000000 " + + set min_long -2147483648 + # This will convert to integer (not wide) internal rep + string is integer $min_long + + # Note: If the final expression returns 0 then the + # expression literal is being promoted to a wide type + # when it should be parsed as a long type. + list \ + [expr {" $min_long_str "}] \ + [expr {$min_long_str + 0}] \ + [expr {$min_long + 0}] \ + [expr {-2147483648 + 0}] \ + [expr {$min_long == $min_long_hex}] \ + [expr {int(-2147483648 - 1) == 0x7FFFFFFF}] \ + +} {-2147483648 -2147483648 -2147483648 -2147483648 1 1} +test expr-33.3 {parse largest wide value} wideIs64bit { + set max_wide_str 9223372036854775807 + set max_wide_hex "0x7FFFFFFFFFFFFFFF " + + # Convert to wide integer + set max_wide 9223372036854775807 + string is integer $max_wide + + list \ + [expr {" $max_wide_str "}] \ + [expr {$max_wide_str + 0}] \ + [expr {$max_wide + 0}] \ + [expr {9223372036854775807 + 0}] \ + [expr {$max_wide == $max_wide_hex}] \ + [expr {wide(9223372036854775807 + 1) < 0}] \ + +} {9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807 1 1} +test expr-33.4 {parse smallest wide value} wideIs64bit { + set min_wide_str -9223372036854775808 + set min_wide_hex "-0x8000000000000000 " + + set min_wide -9223372036854775808 + # Convert to wide integer + string is integer $min_wide + + # Note: If the final expression returns 0 then the + # wide integer is not being parsed correctly with + # the leading - sign. + list \ + [expr {" $min_wide_str "}] \ + [expr {$min_wide_str + 0}] \ + [expr {$min_wide + 0}] \ + [expr {-9223372036854775808 + 0}] \ + [expr {$min_wide == $min_wide_hex}] \ + [expr {wide(-9223372036854775808 - 1) == 0x7FFFFFFFFFFFFFFF}] \ + +} {-9223372036854775808 -9223372036854775808 -9223372036854775808 -9223372036854775808 1 1} + +set min -2147483648 +set max 2147483647 + +test expr-34.1 {expr edge cases} { + expr {$min / $min} +} {1} +test expr-34.2 {expr edge cases} { + expr {$min % $min} +} {0} +test expr-34.3 {expr edge cases} { + expr {$min / ($min + 1)} +} {1} +test expr-34.4 {expr edge cases} { + expr {$min % ($min + 1)} +} {-1} +test expr-34.5 {expr edge cases} { + expr {$min / ($min + 2)} +} {1} +test expr-34.6 {expr edge cases} { + expr {$min % ($min + 2)} +} {-2} +test expr-34.7 {expr edge cases} { + expr {$min / ($min + 3)} +} {1} +test expr-34.8 {expr edge cases} { + expr {$min % ($min + 3)} +} {-3} +test expr-34.9 {expr edge cases} { + expr {$min / -3} +} {715827882} +test expr-34.10 {expr edge cases} { + expr {$min % -3} +} {-2} +test expr-34.11 {expr edge cases} { + expr {$min / -2} +} {1073741824} +test expr-34.12 {expr edge cases} { + expr {$min % -2} +} {0} +test expr-34.13 {expr edge cases} longIs32bit { + expr {int($min / -1)} +} {-2147483648} +test expr-34.14 {expr edge cases} { + expr {$min % -1} +} {0} +test expr-34.15 {expr edge cases} longIs32bit { + expr {int($min * -1)} +} $min +test expr-34.16 {expr edge cases} longIs32bit { + expr {int(-$min)} +} $min +test expr-34.17 {expr edge cases} { + expr {$min / 1} +} $min +test expr-34.18 {expr edge cases} { + expr {$min % 1} +} {0} +test expr-34.19 {expr edge cases} { + expr {$min / 2} +} {-1073741824} +test expr-34.20 {expr edge cases} { + expr {$min % 2} +} {0} +test expr-34.21 {expr edge cases} { + expr {$min / 3} +} {-715827883} +test expr-34.22 {expr edge cases} { + expr {$min % 3} +} {1} +test expr-34.23 {expr edge cases} { + expr {$min / ($max - 3)} +} {-2} +test expr-34.24 {expr edge cases} { + expr {$min % ($max - 3)} +} {2147483640} +test expr-34.25 {expr edge cases} { + expr {$min / ($max - 2)} +} {-2} +test expr-34.26 {expr edge cases} { + expr {$min % ($max - 2)} +} {2147483642} +test expr-34.27 {expr edge cases} { + expr {$min / ($max - 1)} +} {-2} +test expr-34.28 {expr edge cases} { + expr {$min % ($max - 1)} +} {2147483644} +test expr-34.29 {expr edge cases} { + expr {$min / $max} +} {-2} +test expr-34.30 {expr edge cases} { + expr {$min % $max} +} {2147483646} +test expr-34.31 {expr edge cases} { + expr {$max / $max} +} {1} +test expr-34.32 {expr edge cases} { + expr {$max % $max} +} {0} +test expr-34.33 {expr edge cases} { + expr {$max / ($max - 1)} +} {1} +test expr-34.34 {expr edge cases} { + expr {$max % ($max - 1)} +} {1} +test expr-34.35 {expr edge cases} { + expr {$max / ($max - 2)} +} {1} +test expr-34.36 {expr edge cases} { + expr {$max % ($max - 2)} +} {2} +test expr-34.37 {expr edge cases} { + expr {$max / ($max - 3)} +} {1} +test expr-34.38 {expr edge cases} { + expr {$max % ($max - 3)} +} {3} +test expr-34.39 {expr edge cases} { + expr {$max / 3} +} {715827882} +test expr-34.40 {expr edge cases} { + expr {$max % 3} +} {1} +test expr-34.41 {expr edge cases} { + expr {$max / 2} +} {1073741823} +test expr-34.42 {expr edge cases} { + expr {$max % 2} +} {1} +test expr-34.43 {expr edge cases} { + expr {$max / 1} +} $max +test expr-34.44 {expr edge cases} { + expr {$max % 1} +} {0} +test expr-34.45 {expr edge cases} { + expr {$max / -1} +} "-$max" +test expr-34.46 {expr edge cases} { + expr {$max % -1} +} {0} +test expr-34.47 {expr edge cases} { + expr {$max / -2} +} {-1073741824} +test expr-34.48 {expr edge cases} { + expr {$max % -2} +} {-1} +test expr-34.49 {expr edge cases} { + expr {$max / -3} +} {-715827883} +test expr-34.50 {expr edge cases} { + expr {$max % -3} +} {-2} +test expr-34.51 {expr edge cases} { + expr {$max / ($min + 3)} +} {-2} +test expr-34.52 {expr edge cases} { + expr {$max % ($min + 3)} +} {-2147483643} +test expr-34.53 {expr edge cases} { + expr {$max / ($min + 2)} +} {-2} +test expr-34.54 {expr edge cases} { + expr {$max % ($min + 2)} +} {-2147483645} +test expr-34.55 {expr edge cases} { + expr {$max / ($min + 1)} +} {-1} +test expr-34.56 {expr edge cases} { + expr {$max % ($min + 1)} +} {0} +test expr-34.57 {expr edge cases} { + expr {$max / $min} +} {-1} +test expr-34.58 {expr edge cases} { + expr {$max % $min} +} {-1} +test expr-34.59 {expr edge cases} { + expr {($min + 1) / ($max - 1)} +} {-2} +test expr-34.60 {expr edge cases} { + expr {($min + 1) % ($max - 1)} +} {2147483645} +test expr-34.61 {expr edge cases} { + expr {($max - 1) / ($min + 1)} +} {-1} +test expr-34.62 {expr edge cases} { + expr {($max - 1) % ($min + 1)} +} {-1} +test expr-34.63 {expr edge cases} { + expr {($max - 1) / $min} +} {-1} +test expr-34.64 {expr edge cases} { + expr {($max - 1) % $min} +} {-2} +test expr-34.65 {expr edge cases} { + expr {($max - 2) / $min} +} {-1} +test expr-34.66 {expr edge cases} { + expr {($max - 2) % $min} +} {-3} +test expr-34.67 {expr edge cases} { + expr {($max - 3) / $min} +} {-1} +test expr-34.68 {expr edge cases} { + expr {($max - 3) % $min} +} {-4} +test expr-34.69 {expr edge cases} { + expr {-3 / $min} +} {0} +test expr-34.70 {expr edge cases} { + expr {-3 % $min} +} {-3} +test expr-34.71 {expr edge cases} { + expr {-2 / $min} +} {0} +test expr-34.72 {expr edge cases} { + expr {-2 % $min} +} {-2} +test expr-34.73 {expr edge cases} { + expr {-1 / $min} +} {0} +test expr-34.74 {expr edge cases} { + expr {-1 % $min} +} {-1} +test expr-34.75 {expr edge cases} { + expr {0 / $min} +} {0} +test expr-34.76 {expr edge cases} { + expr {0 % $min} +} {0} +test expr-34.77 {expr edge cases} { + expr {0 / ($min + 1)} +} {0} +test expr-34.78 {expr edge cases} { + expr {0 % ($min + 1)} +} {0} +test expr-34.79 {expr edge cases} { + expr {1 / $min} +} {-1} +test expr-34.80 {expr edge cases} { + expr {1 % $min} +} {-2147483647} +test expr-34.81 {expr edge cases} { + expr {1 / ($min + 1)} +} {-1} +test expr-34.82 {expr edge cases} { + expr {1 % ($min + 1)} +} {-2147483646} +test expr-34.83 {expr edge cases} { + expr {2 / $min} +} {-1} +test expr-34.84 {expr edge cases} { + expr {2 % $min} +} {-2147483646} +test expr-34.85 {expr edge cases} { + expr {2 / ($min + 1)} +} {-1} +test expr-34.86 {expr edge cases} { + expr {2 % ($min + 1)} +} {-2147483645} +test expr-34.87 {expr edge cases} { + expr {3 / $min} +} {-1} +test expr-34.88 {expr edge cases} { + expr {3 % $min} +} {-2147483645} +test expr-34.89 {expr edge cases} { + expr {3 / ($min + 1)} +} {-1} +test expr-34.90 {expr edge cases} { + expr {3 % ($min + 1)} +} {-2147483644} + +# Euclidean property: +# quotient * divisor + remainder = dividend + +test expr-35.1 {expr edge cases} { + set dividend $max + set divisor 2 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($divisor * $q) + $r}] +} {1073741823 * 2 + 1 = 2147483647} +test expr-35.2 {expr edge cases} { + set dividend [expr {$max - 1}] + set divisor 2 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {1073741823 * 2 + 0 = 2147483646} +test expr-35.3 {expr edge cases} { + set dividend [expr {$max - 2}] + set divisor 2 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {1073741822 * 2 + 1 = 2147483645} +test expr-35.4 {expr edge cases} { + set dividend $max + set divisor 3 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {715827882 * 3 + 1 = 2147483647} +test expr-35.5 {expr edge cases} { + set dividend [expr {$max - 1}] + set divisor 3 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {715827882 * 3 + 0 = 2147483646} +test expr-35.6 {expr edge cases} { + set dividend [expr {$max - 2}] + set divisor 3 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {715827881 * 3 + 2 = 2147483645} +test expr-35.7 {expr edge cases} { + set dividend $min + set divisor 2 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {-1073741824 * 2 + 0 = -2147483648} +test expr-35.8 {expr edge cases} { + set dividend [expr {$min + 1}] + set divisor 2 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {-1073741824 * 2 + 1 = -2147483647} +test expr-35.9 {expr edge cases} { + set dividend [expr {$min + 2}] + set divisor 2 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {-1073741823 * 2 + 0 = -2147483646} +test expr-35.10 {expr edge cases} { + # Two things could happen here. The multiplication + # could overflow a 32 bit type, so that when + # 1 is added it overflows again back to min. + # The multiplication could also use a wide type + # to hold ($min - 1) until 1 is added and + # the number becomes $min again. + set dividend $min + set divisor 3 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {-715827883 * 3 + 1 = -2147483648} +test expr-35.11 {expr edge cases} { + set dividend $min + set divisor -3 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {715827882 * -3 + -2 = -2147483648} +test expr-35.12 {expr edge cases} { + set dividend $min + set divisor $min + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {1 * -2147483648 + 0 = -2147483648} +test expr-35.13 {expr edge cases} { + set dividend $min + set divisor [expr {$min + 1}] + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {1 * -2147483647 + -1 = -2147483648} +test expr-35.14 {expr edge cases} { + set dividend $min + set divisor [expr {$min + 2}] + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {1 * -2147483646 + -2 = -2147483648} + +# 64bit wide integer checks + +set min -9223372036854775808 +set max 9223372036854775807 + +test expr-36.1 {expr edge cases} {wideIs64bit} { + expr {$min / $min} +} {1} +test expr-36.2 {expr edge cases} {wideIs64bit} { + expr {$min % $min} +} {0} +test expr-36.3 {expr edge cases} {wideIs64bit} { + expr {$min / ($min + 1)} +} {1} +test expr-36.4 {expr edge cases} {wideIs64bit} { + expr {$min % ($min + 1)} +} {-1} +test expr-36.5 {expr edge cases} {wideIs64bit} { + expr {$min / ($min + 2)} +} {1} +test expr-36.6 {expr edge cases} {wideIs64bit} { + expr {$min % ($min + 2)} +} {-2} +test expr-36.7 {expr edge cases} {wideIs64bit} { + expr {$min / ($min + 3)} +} {1} +test expr-36.8 {expr edge cases} {wideIs64bit} { + expr {$min % ($min + 3)} +} {-3} +test expr-36.9 {expr edge cases} {wideIs64bit} { + expr {$min / -3} +} {3074457345618258602} +test expr-36.10 {expr edge cases} {wideIs64bit} { + expr {$min % -3} +} {-2} +test expr-36.11 {expr edge cases} {wideIs64bit} { + expr {$min / -2} +} {4611686018427387904} +test expr-36.12 {expr edge cases} {wideIs64bit} { + expr {$min % -2} +} {0} +test expr-36.13 {expr edge cases} wideIs64bit { + expr {wide($min / -1)} +} $min +test expr-36.14 {expr edge cases} {wideIs64bit} { + expr {$min % -1} +} {0} +test expr-36.15 {expr edge cases} wideIs64bit { + expr {wide($min * -1)} +} $min +test expr-36.16 {expr edge cases} wideIs64bit { + expr {wide(-$min)} +} $min +test expr-36.17 {expr edge cases} {wideIs64bit} { + expr {$min / 1} +} $min +test expr-36.18 {expr edge cases} {wideIs64bit} { + expr {$min % 1} +} {0} +test expr-36.19 {expr edge cases} {wideIs64bit} { + expr {$min / 2} +} {-4611686018427387904} +test expr-36.20 {expr edge cases} {wideIs64bit} { + expr {$min % 2} +} {0} +test expr-36.21 {expr edge cases} {wideIs64bit} { + expr {$min / 3} +} {-3074457345618258603} +test expr-36.22 {expr edge cases} {wideIs64bit} { + expr {$min % 3} +} {1} +test expr-36.23 {expr edge cases} {wideIs64bit} { + expr {$min / ($max - 3)} +} {-2} +test expr-36.24 {expr edge cases} {wideIs64bit} { + expr {$min % ($max - 3)} +} {9223372036854775800} +test expr-36.25 {expr edge cases} {wideIs64bit} { + expr {$min / ($max - 2)} +} {-2} +test expr-36.26 {expr edge cases} {wideIs64bit} { + expr {$min % ($max - 2)} +} {9223372036854775802} +test expr-36.27 {expr edge cases} {wideIs64bit} { + expr {$min / ($max - 1)} +} {-2} +test expr-36.28 {expr edge cases} {wideIs64bit} { + expr {$min % ($max - 1)} +} {9223372036854775804} +test expr-36.29 {expr edge cases} {wideIs64bit} { + expr {$min / $max} +} {-2} +test expr-36.30 {expr edge cases} {wideIs64bit} { + expr {$min % $max} +} {9223372036854775806} +test expr-36.31 {expr edge cases} {wideIs64bit} { + expr {$max / $max} +} {1} +test expr-36.32 {expr edge cases} {wideIs64bit} { + expr {$max % $max} +} {0} +test expr-36.33 {expr edge cases} {wideIs64bit} { + expr {$max / ($max - 1)} +} {1} +test expr-36.34 {expr edge cases} {wideIs64bit} { + expr {$max % ($max - 1)} +} {1} +test expr-36.35 {expr edge cases} {wideIs64bit} { + expr {$max / ($max - 2)} +} {1} +test expr-36.36 {expr edge cases} {wideIs64bit} { + expr {$max % ($max - 2)} +} {2} +test expr-36.37 {expr edge cases} {wideIs64bit} { + expr {$max / ($max - 3)} +} {1} +test expr-36.38 {expr edge cases} {wideIs64bit} { + expr {$max % ($max - 3)} +} {3} +test expr-36.39 {expr edge cases} {wideIs64bit} { + expr {$max / 3} +} {3074457345618258602} +test expr-36.40 {expr edge cases} {wideIs64bit} { + expr {$max % 3} +} {1} +test expr-36.41 {expr edge cases} {wideIs64bit} { + expr {$max / 2} +} {4611686018427387903} +test expr-36.42 {expr edge cases} {wideIs64bit} { + expr {$max % 2} +} {1} +test expr-36.43 {expr edge cases} {wideIs64bit} { + expr {$max / 1} +} $max +test expr-36.44 {expr edge cases} {wideIs64bit} { + expr {$max % 1} +} {0} +test expr-36.45 {expr edge cases} {wideIs64bit} { + expr {$max / -1} +} "-$max" +test expr-36.46 {expr edge cases} {wideIs64bit} { + expr {$max % -1} +} {0} +test expr-36.47 {expr edge cases} {wideIs64bit} { + expr {$max / -2} +} {-4611686018427387904} +test expr-36.48 {expr edge cases} {wideIs64bit} { + expr {$max % -2} +} {-1} +test expr-36.49 {expr edge cases} {wideIs64bit} { + expr {$max / -3} +} {-3074457345618258603} +test expr-36.50 {expr edge cases} {wideIs64bit} { + expr {$max % -3} +} {-2} +test expr-36.51 {expr edge cases} {wideIs64bit} { + expr {$max / ($min + 3)} +} {-2} +test expr-36.52 {expr edge cases} {wideIs64bit} { + expr {$max % ($min + 3)} +} {-9223372036854775803} +test expr-36.53 {expr edge cases} {wideIs64bit} { + expr {$max / ($min + 2)} +} {-2} +test expr-36.54 {expr edge cases} {wideIs64bit} { + expr {$max % ($min + 2)} +} {-9223372036854775805} +test expr-36.55 {expr edge cases} {wideIs64bit} { + expr {$max / ($min + 1)} +} {-1} +test expr-36.56 {expr edge cases} {wideIs64bit} { + expr {$max % ($min + 1)} +} {0} +test expr-36.57 {expr edge cases} {wideIs64bit} { + expr {$max / $min} +} {-1} +test expr-36.58 {expr edge cases} {wideIs64bit} { + expr {$max % $min} +} {-1} +test expr-36.59 {expr edge cases} {wideIs64bit} { + expr {($min + 1) / ($max - 1)} +} {-2} +test expr-36.60 {expr edge cases} {wideIs64bit} { + expr {($min + 1) % ($max - 1)} +} {9223372036854775805} +test expr-36.61 {expr edge cases} {wideIs64bit} { + expr {($max - 1) / ($min + 1)} +} {-1} +test expr-36.62 {expr edge cases} {wideIs64bit} { + expr {($max - 1) % ($min + 1)} +} {-1} +test expr-36.63 {expr edge cases} {wideIs64bit} { + expr {($max - 1) / $min} +} {-1} +test expr-36.64 {expr edge cases} {wideIs64bit} { + expr {($max - 1) % $min} +} {-2} +test expr-36.65 {expr edge cases} {wideIs64bit} { + expr {($max - 2) / $min} +} {-1} +test expr-36.66 {expr edge cases} {wideIs64bit} { + expr {($max - 2) % $min} +} {-3} +test expr-36.67 {expr edge cases} {wideIs64bit} { + expr {($max - 3) / $min} +} {-1} +test expr-36.68 {expr edge cases} {wideIs64bit} { + expr {($max - 3) % $min} +} {-4} +test expr-36.69 {expr edge cases} {wideIs64bit} { + expr {-3 / $min} +} {0} +test expr-36.70 {expr edge cases} {wideIs64bit} { + expr {-3 % $min} +} {-3} +test expr-36.71 {expr edge cases} {wideIs64bit} { + expr {-2 / $min} +} {0} +test expr-36.72 {expr edge cases} {wideIs64bit} { + expr {-2 % $min} +} {-2} +test expr-36.73 {expr edge cases} {wideIs64bit} { + expr {-1 / $min} +} {0} +test expr-36.74 {expr edge cases} {wideIs64bit} { + expr {-1 % $min} +} {-1} +test expr-36.75 {expr edge cases} {wideIs64bit} { + expr {0 / $min} +} {0} +test expr-36.76 {expr edge cases} {wideIs64bit} { + expr {0 % $min} +} {0} +test expr-36.77 {expr edge cases} {wideIs64bit} { + expr {0 / ($min + 1)} +} {0} +test expr-36.78 {expr edge cases} {wideIs64bit} { + expr {0 % ($min + 1)} +} {0} +test expr-36.79 {expr edge cases} {wideIs64bit} { + expr {1 / $min} +} {-1} +test expr-36.80 {expr edge cases} {wideIs64bit} { + expr {1 % $min} +} {-9223372036854775807} +test expr-36.81 {expr edge cases} {wideIs64bit} { + expr {1 / ($min + 1)} +} {-1} +test expr-36.82 {expr edge cases} {wideIs64bit} { + expr {1 % ($min + 1)} +} {-9223372036854775806} +test expr-36.83 {expr edge cases} {wideIs64bit} { + expr {2 / $min} +} {-1} +test expr-36.84 {expr edge cases} {wideIs64bit} { + expr {2 % $min} +} {-9223372036854775806} +test expr-36.85 {expr edge cases} {wideIs64bit} { + expr {2 / ($min + 1)} +} {-1} +test expr-36.86 {expr edge cases} {wideIs64bit} { + expr {2 % ($min + 1)} +} {-9223372036854775805} +test expr-36.87 {expr edge cases} {wideIs64bit} { + expr {3 / $min} +} {-1} +test expr-36.88 {expr edge cases} {wideIs64bit} { + expr {3 % $min} +} {-9223372036854775805} +test expr-36.89 {expr edge cases} {wideIs64bit} { + expr {3 / ($min + 1)} +} {-1} +test expr-36.90 {expr edge cases} {wideIs64bit} { + expr {3 % ($min + 1)} +} {-9223372036854775804} + +test expr-37.1 {expr edge cases} {wideIs64bit} { + set dividend $max + set divisor 2 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($divisor * $q) + $r}] +} {4611686018427387903 * 2 + 1 = 9223372036854775807} +test expr-37.2 {expr edge cases} {wideIs64bit} { + set dividend [expr {$max - 1}] + set divisor 2 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {4611686018427387903 * 2 + 0 = 9223372036854775806} +test expr-37.3 {expr edge cases} {wideIs64bit} { + set dividend [expr {$max - 2}] + set divisor 2 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {4611686018427387902 * 2 + 1 = 9223372036854775805} +test expr-37.4 {expr edge cases} {wideIs64bit} { + set dividend $max + set divisor 3 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {3074457345618258602 * 3 + 1 = 9223372036854775807} +test expr-37.5 {expr edge cases} {wideIs64bit} { + set dividend [expr {$max - 1}] + set divisor 3 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {3074457345618258602 * 3 + 0 = 9223372036854775806} +test expr-37.6 {expr edge cases} {wideIs64bit} { + set dividend [expr {$max - 2}] + set divisor 3 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {3074457345618258601 * 3 + 2 = 9223372036854775805} +test expr-37.7 {expr edge cases} {wideIs64bit} { + set dividend $min + set divisor 2 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {-4611686018427387904 * 2 + 0 = -9223372036854775808} +test expr-37.8 {expr edge cases} {wideIs64bit} { + set dividend [expr {$min + 1}] + set divisor 2 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {-4611686018427387904 * 2 + 1 = -9223372036854775807} +test expr-37.9 {expr edge cases} {wideIs64bit} { + set dividend [expr {$min + 2}] + set divisor 2 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {-4611686018427387903 * 2 + 0 = -9223372036854775806} +test expr-37.10 {expr edge cases} {wideIs64bit} { + # Multiplication overflows 64 bit type here, + # so when the 1 is added it overflows + # again and we end up back at min. + set dividend $min + set divisor 3 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {-3074457345618258603 * 3 + 1 = -9223372036854775808} +test expr-37.11 {expr edge cases} {wideIs64bit} { + set dividend $min + set divisor -3 + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {3074457345618258602 * -3 + -2 = -9223372036854775808} +test expr-37.12 {expr edge cases} {wideIs64bit} { + set dividend $min + set divisor $min + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {1 * -9223372036854775808 + 0 = -9223372036854775808} +test expr-37.13 {expr edge cases} {wideIs64bit} { + set dividend $min + set divisor [expr {$min + 1}] + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {1 * -9223372036854775807 + -1 = -9223372036854775808} +test expr-37.14 {expr edge cases} {wideIs64bit} { + set dividend $min + set divisor [expr {$min + 2}] + set q [expr {$dividend / $divisor}] + set r [expr {$dividend % $divisor}] + list $q * $divisor + $r = [expr {($q * $divisor) + $r}] +} {1 * -9223372036854775806 + -2 = -9223372036854775808} + test expr-38.1 {abs of smallest 32-bit integer [Bug 1241572]} {wideIs64bit} { - expr {abs(int(-2147483648))} + expr {abs(-2147483648)} } 2147483648 test expr-38.2 {abs and -0 [Bug 1893815]} { expr {abs(-0)} @@ -833,14 +6674,271 @@ test expr-38.2 {abs and -0 [Bug 1893815]} { test expr-38.3 {abs and -0 [Bug 1893815]} { expr {abs(-0.0)} } 0.0 -# tests 38.4 to 38.8 not backported +test expr-38.4 {abs and -0 [Bug 1893815]} { + expr {abs(-1e-324)} +} 0.0 +test expr-38.5 {abs and -0 [Bug 1893815]} { + ::tcl::mathfunc::abs -0 +} 0 +test expr-38.6 {abs and -0 [Bug 1893815]} { + ::tcl::mathfunc::abs -0.0 +} 0.0 +test expr-38.7 {abs and -0 [Bug 1893815]} { + ::tcl::mathfunc::abs -1e-324 +} 0.0 +test expr-38.8 {abs and 0.0 [Bug 2954959]} { + ::tcl::mathfunc::abs 0.0 +} 0.0 test expr-38.9 {abs and 0.0 [Bug 2954959]} { expr {abs(0.0)} } 0.0 test expr-38.10 {abs and -0x0 [Bug 2954959]} { expr {abs(-0x0)} } 0 -# tests 38.11 to 38.13 not backported +test expr-38.11 {abs and 0x0 [Bug 2954959]} { + ::tcl::mathfunc::abs { 0x0} +} { 0x0} +test expr-38.12 {abs and -0x0 [Bug 2954959]} { + ::tcl::mathfunc::abs { -0x0} +} 0 +test expr-38.13 {abs and 0.0 [Bug 2954959]} { + ::tcl::mathfunc::abs 1e-324 +} 1e-324 + +testConstraint testexprlongobj [llength [info commands testexprlongobj]] +testConstraint testexprdoubleobj [llength [info commands testexprdoubleobj]] + +test expr-39.1 {Check that Tcl_ExprLongObj doesn't modify interpreter result if no error} testexprlongobj { + testexprlongobj 4+1 +} {This is a result: 5} +#Check for [Bug 1109484] +test expr-39.2 {Tcl_ExprLongObj handles wide ints gracefully} testexprlongobj { + testexprlongobj wide(1)+2 +} {This is a result: 3} + +test expr-39.3 {Tcl_ExprLongObj on the empty string} \ + -constraints {testexprlongobj}\ + -body {testexprlongobj ""} \ + -match glob \ + -returnCodes error -result * +test expr-39.4 {Tcl_ExprLongObj coerces doubles} testexprlongobj { + testexprlongobj 3+.14159 +} {This is a result: 3} +test expr-39.5 {Tcl_ExprLongObj handles overflows} {testexprlongobj longIs32bit} { + testexprlongobj 0x80000000 +} {This is a result: -2147483648} +test expr-39.6 {Tcl_ExprLongObj handles overflows} {testexprlongobj longIs32bit} { + testexprlongobj 0xffffffff +} {This is a result: -1} +test expr-39.7 {Tcl_ExprLongObj handles overflows} \ + -constraints {testexprlongobj longIs32bit} \ + -match glob \ + -body { + list [catch {testexprlongobj 0x100000000} result] $result + } \ + -result {1 {integer value too large to represent*}} +test expr-39.8 {Tcl_ExprLongObj handles overflows} testexprlongobj { + testexprlongobj -0x80000000 +} {This is a result: -2147483648} +test expr-39.9 {Tcl_ExprLongObj handles overflows} {testexprlongobj longIs32bit} { + testexprlongobj -0xffffffff +} {This is a result: 1} +test expr-39.10 {Tcl_ExprLongObj handles overflows} \ + -constraints {testexprlongobj longIs32bit} \ + -match glob \ + -body { + list [catch {testexprlongobj -0x100000000} result] $result + } \ + -result {1 {integer value too large to represent*}} +test expr-39.11 {Tcl_ExprLongObj handles overflows} {testexprlongobj longIs32bit} { + testexprlongobj 2147483648. +} {This is a result: -2147483648} +test expr-39.12 {Tcl_ExprLongObj handles overflows} {testexprlongobj longIs32bit} { + testexprlongobj 4294967295. +} {This is a result: -1} +test expr-39.13 {Tcl_ExprLongObj handles overflows} \ + -constraints {testexprlongobj longIs32bit} \ + -match glob \ + -body { + list [catch {testexprlongobj 4294967296.} result] $result + } \ + -result {1 {integer value too large to represent*}} +test expr-39.14 {Tcl_ExprLongObj handles overflows} testexprlongobj { + testexprlongobj -2147483648. +} {This is a result: -2147483648} +test expr-39.15 {Tcl_ExprLongObj handles overflows} {testexprlongobj longIs32bit} { + testexprlongobj -4294967295. +} {This is a result: 1} +test expr-39.16 {Tcl_ExprLongObj handles overflows} \ + -constraints {testexprlongobj longIs32bit} \ + -match glob \ + -body { + list [catch {testexprlongobj 4294967296.} result] $result + } \ + -result {1 {integer value too large to represent*}} + +test expr-39.17 {Check that Tcl_ExprDoubleObj doesn't modify interpreter result if no error} testexprdoubleobj { + testexprdoubleobj 4.+1. +} {This is a result: 5.0} +#Check for [Bug 1109484] +test expr-39.18 {Tcl_ExprDoubleObj on the empty string} \ + -constraints {testexprdoubleobj} \ + -match glob \ + -body {testexprdoubleobj ""} \ + -returnCodes error -result * +test expr-39.19 {Tcl_ExprDoubleObj coerces wides} testexprdoubleobj { + testexprdoubleobj 1[string repeat 0 17] +} {This is a result: 1e+17} +test expr-39.20 {Tcl_ExprDoubleObj coerces bignums} testexprdoubleobj { + testexprdoubleobj 1[string repeat 0 38] +} {This is a result: 1e+38} +test expr-39.21 {Tcl_ExprDoubleObj handles overflows} \ + testexprdoubleobj&&ieeeFloatingPoint { + testexprdoubleobj 17976931348623157[string repeat 0 292]. + } {This is a result: 1.7976931348623157e+308} +test expr-39.22 {Tcl_ExprDoubleObj handles overflows that look like int} \ + testexprdoubleobj&&ieeeFloatingPoint { + testexprdoubleobj 17976931348623157[string repeat 0 292] + } {This is a result: 1.7976931348623157e+308} +test expr-39.23 {Tcl_ExprDoubleObj handles overflows} \ + testexprdoubleobj&&ieeeFloatingPoint { + testexprdoubleobj 17976931348623165[string repeat 0 292]. + } {This is a result: Inf} +test expr-39.24 {Tcl_ExprDoubleObj handles overflows that look like int} \ + testexprdoubleobj&&ieeeFloatingPoint { + testexprdoubleobj 17976931348623165[string repeat 0 292] + } {This is a result: Inf} +test expr-39.25 {Tcl_ExprDoubleObj and NaN} \ + {testexprdoubleobj ieeeFloatingPoint} { + list [catch {testexprdoubleobj 0.0/0.0} result] $result + } {1 {domain error: argument not in valid range}} + +test expr-40.1 {large octal shift} { + expr 0o100000000000000000000000000000000 +} [expr 0x1000000000000000000000000] +test expr-40.2 {large octal shift} { + expr 0o100000000000000000000000000000001 +} [expr 0x1000000000000000000000001] + +test expr-41.1 {exponent overflow} { + expr 1.0e2147483630 +} Inf +test expr-41.2 {exponent underflow} { + expr 1.0e-2147483630 +} 0.0 + +test expr-42.1 {denormals} ieeeFloatingPoint { + expr 7e-324 +} 5e-324 + +# TIP 114 + +test expr-43.1 {0b notation} { + expr 0b0 +} 0 +test expr-43.2 {0b notation} { + expr 0b1 +} 1 +test expr-43.3 {0b notation} { + expr 0b10 +} 2 +test expr-43.4 {0b notation} { + expr 0b11 +} 3 +test expr-43.5 {0b notation} { + expr 0b100 +} 4 +test expr-43.6 {0b notation} { + expr 0b101 +} 5 +test expr-43.7 {0b notation} { + expr 0b1000 +} 8 +test expr-43.8 {0b notation} { + expr 0b1001 +} 9 +test expr-43.9 {0b notation} { + expr 0b1[string repeat 0 31] +} 2147483648 +test expr-43.10 {0b notation} { + expr 0b1[string repeat 0 30]1 +} 2147483649 +test expr-43.11 {0b notation} { + expr 0b[string repeat 1 64] +} 18446744073709551615 +test expr-43.12 {0b notation} { + expr 0b1[string repeat 0 64] +} 18446744073709551616 +test expr-43.13 {0b notation} { + expr 0b1[string repeat 0 63]1 +} 18446744073709551617 + +test expr-44.1 {0o notation} { + expr 0o0 +} 0 +test expr-44.2 {0o notation} { + expr 0o1 +} 1 +test expr-44.3 {0o notation} { + expr 0o7 +} 7 +test expr-44.4 {0o notation} { + expr 0o10 +} 8 +test expr-44.5 {0o notation} { + expr 0o11 +} 9 +test expr-44.6 {0o notation} { + expr 0o100 +} 64 +test expr-44.7 {0o notation} { + expr 0o101 +} 65 +test expr-44.8 {0o notation} { + expr 0o1000 +} 512 +test expr-44.9 {0o notation} { + expr 0o1001 +} 513 +test expr-44.10 {0o notation} { + expr 0o1[string repeat 7 21] +} 18446744073709551615 +test expr-44.11 {0o notation} { + expr 0o2[string repeat 0 21] +} 18446744073709551616 +test expr-44.12 {0o notation} { + expr 0o2[string repeat 0 20]1 +} 18446744073709551617 + +# TIP 237 again + +test expr-45.1 {entier} { + expr entier(0) +} 0 +test expr-45.2 {entier} { + expr entier(0.5) +} 0 +test expr-45.3 {entier} { + expr entier(1.0) +} 1 +test expr-45.4 {entier} { + expr entier(1.5) +} 1 +test expr-45.5 {entier} { + expr entier(2.0) +} 2 +test expr-45.6 {entier} { + expr entier(1e+22) +} 10000000000000000000000 +test expr-45.7 {entier} { + list [catch {expr entier(Inf)} result] $result +} {1 {integer value too large to represent}} +test expr-45.8 {entier} ieeeFloatingPoint { + list [catch {expr {entier($ieeeValues(NaN))}} result] $result +} {1 {floating point value is Not a Number}} +test expr-45.9 {entier} ieeeFloatingPoint { + list [catch {expr {entier($ieeeValues(-NaN))}} result] $result +} {1 {floating point value is Not a Number}} test expr-46.1 {round() rounds to +-infinity} { expr round(0.5) @@ -855,15 +6953,15 @@ test expr-46.4 {round() rounds to +-infinity} { expr round(-1.5) } -2 test expr-46.5 {round() overflow} { - list [catch {expr round(9.2233720368547758e+018)} result] $result -} {1 {integer value too large to represent}} + expr round(9.2233720368547758e+018) +} 9223372036854775808 test expr-46.6 {round() overflow} { - list [catch {expr round(-9.2233720368547758e+018)} result] $result -} {1 {integer value too large to represent}} -test expr-46.7 {round() bad value} { + expr round(-9.2233720368547758e+018) +} -9223372036854775808 +test expr-46.7 {round() bad value} -body { set x trash - list [catch {expr {round($x)}} result] $result -} {1 {argument to math function didn't have numeric value}} + expr {round($x)} +} -returnCodes error -match glob -result * test expr-46.8 {round() already an integer} { set x 123456789012 incr x @@ -884,7 +6982,7 @@ test expr-46.10 {round() boundary case - 1/2 + 1 ulp} { set x 0.75 set bit 0.125 while 1 { - set newx [expr { $x - $bit }] + set newx [expr {$x - $bit}] if { $newx == $x || $newx == 0.5 } break set x $newx set bit [expr { $bit / 2.0 }] @@ -895,7 +6993,7 @@ test expr-46.11 {round() boundary case - -1/2 - 1 ulp} { set x -0.75 set bit 0.125 while 1 { - set newx [expr { $x + $bit }] + set newx [expr {$x + $bit}] if { $newx == $x || $newx == -0.5 } break set x $newx set bit [expr { $bit / 2.0 }] @@ -906,14 +7004,13 @@ test expr-46.12 {round() boundary case - -1/2 + 1 ulp} { set x -0.25 set bit 0.125 while 1 { - set newx [expr { $x - $bit }] + set newx [expr {$x - $bit}] if { $newx == $x || $newx == -0.5 } break set x $newx set bit [expr { $bit / 2.0 }] } expr {round($x)} } 0 - test expr-46.13 {round() boundary case - round down} { expr {round(2147483647 - 0.51)} } 2147483646 @@ -937,9 +7034,146 @@ test expr-46.18 {round() boundary case - round down to wide} { expr {round(-2147483648 - 0.50)} } [expr {wide(-2147483648) - 1}] +test expr-46.19 {round() handling of long/bignum boundary} { + expr {round(double(0x7fffffffffffffff))} +} 9223372036854775808 + +test expr-47.1 {isqrt() - arg count} { + list [catch {expr {isqrt(1,2)}} result] $result +} {1 {too many arguments for math function "isqrt"}} + +test expr-47.2 {isqrt() - non-number} { + list [catch {expr {isqrt({rubbish})}} result] $result +} {1 {expected number but got "rubbish"}} + +test expr-47.3 {isqrt() - NaN} ieeeFloatingPoint { + list [catch {expr {isqrt(NaN)}} result] $result +} {1 {floating point value is Not a Number}} + +test expr-47.4 {isqrt() of negative floating point number} { + list [catch {expr {isqrt(-1.0)}} result] $result +} {1 {square root of negative argument}} + +test expr-47.5 {isqrt() of floating point zero} { + expr isqrt(0.0) +} 0 + +test expr-47.6 {isqrt() of exact floating point numbers} { + set trouble {} + for {set i 0} {$i < 16} {incr i} { + set root [expr {1 << $i}] + set rm1 [expr {$root - 1}] + set arg [expr {pow(2., (2 * $i))}] + if {isqrt($arg-1) != $rm1} { + append trouble "i = " $i ": isqrt( " $arg "-1) != " $rm1 "\n" + } + if {isqrt($arg) != $root} { + append trouble "i = " $i ": isqrt( " $arg ") != " $root "\n" + } + if {isqrt($arg+1) != $root} { + append trouble "i = " $i ": isqrt( " $arg "+1) != " $root "\n" + } + } + set trouble +} {} + +test expr-47.7 {isqrt() of exact floating point numbers} ieeeFloatingPoint { + set trouble {} + for {set i 17} {$i < 27} {incr i} { + set root [expr {1 << $i}] + set rm1 [expr {$root - 1}] + set arg [expr {pow(2., (2 * $i))}] + if {isqrt($arg-1.0) != $rm1} { + append trouble "i = " $i ": isqrt( " $arg "-1) != " $rm1 "\n" + } + if {isqrt($arg) != $root} { + append trouble "i = " $i ": isqrt( " $arg ") != " $root "\n" + } + if {isqrt($arg+1.0) != $root} { + append trouble "i = " $i ": isqrt( " $arg "+1) != " $root "\n" + } + } + set trouble +} {} + +test expr-47.8 {isqrt of inexact floating point number} ieeeFloatingPoint { + expr isqrt(2[string repeat 0 34]) +} 141421356237309504 + +test expr-47.9 {isqrt of negative int} { + list [catch {expr isqrt(-1)} result] $result +} {1 {square root of negative argument}} + +test expr-47.10 {isqrt of negative bignum} { + list [catch {expr isqrt(-1[string repeat 0 1000])} result] $result +} {1 {square root of negative argument}} + +test expr-47.11 {isqrt of zero} { + expr {isqrt(0)} +} 0 + +test expr-47.12 {isqrt of various sizes of integer} { + set faults 0 + set trouble {} + for {set i 0} {$faults < 10 && $i <= 1024} {incr i} { + set root [expr {1 << $i}] + set rm1 [expr {$root - 1}] + set arg [expr {1 << (2 * $i)}] + set tval [expr {isqrt($arg-1)}] + if {$tval != $rm1} { + append trouble "i = " $i ": isqrt(" $arg "-1) == " $tval \ + " != " $rm1 "\n" + incr faults + } + set tval [expr {isqrt($arg)}] + if {$tval != $root} { + append trouble "i = " $i ": isqrt(" $arg ") == " $tval \ + " != " $root "\n" + incr faults + } + set tval [expr {isqrt($arg+1)}] + if {$tval != $root} { + append trouble "i = " $i ": isqrt(" $arg "+1) == " $tval \ + " != " $root "\n" + incr faults + } + } + set trouble +} {} + +test expr-47.13 {isqrt and floating point rounding (Bug 2143288)} { + set trouble {} + set faults 0 + for {set i 0} {$i < 29 && $faults < 10} {incr i} { + for {set j 0} {$j <= $i} {incr j} { + set k [expr {isqrt((1<<56)+(1<<$i)+(1<<$j))}] + if {$k != (1<<28)} { + append trouble "i = $i, j = $j, k = $k\n" + incr faults + } + } + set k [expr {isqrt((1<<56)+(1<<29)+(1<<$i))}] + if {$k != (1<<28)+1} { + append trouble "i = $i, k = $k\n" + incr faults + } + } + set trouble +} {} + +test expr-48.1 {Bug 1770224} { + expr {-0x8000000000000001 >> 0x8000000000000000} +} -1 + # cleanup if {[info exists a]} { unset a } +catch {unset min} +catch {unset max} ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/fCmd.test b/tests/fCmd.test index c5ee676..96ab2d5 100644 --- a/tests/fCmd.test +++ b/tests/fCmd.test @@ -1,38 +1,50 @@ # This file tests the tclFCmd.c file. # -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. # # Copyright (c) 1996-1997 Sun Microsystems, Inc. # Copyright (c) 1999 by Scriptics Corporation. # -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest 2 namespace import -force ::tcltest::* } -tcltest::testConstraint testsetplatform [string equal testsetplatform [info commands testsetplatform]] -tcltest::testConstraint testchmod [string equal testchmod [info commands testchmod]] -tcltest::testConstraint notNetworkFilesystem 0 -testConstraint 95or98 [expr {[testConstraint 95] || [testConstraint 98]}] -testConstraint 2000orNewer [expr {![testConstraint 95or98]}] +cd [temporaryDirectory] + +testConstraint testsetplatform [llength [info commands testsetplatform]] +testConstraint testchmod [llength [info commands testchmod]] testConstraint winVista 0 testConstraint win2000orXP 0 testConstraint winOlderThan2000 0 +# Don't know how to determine this constraint correctly +testConstraint notNetworkFilesystem 0 +testConstraint 95or98 [expr {[testConstraint 95] || [testConstraint 98]}] +testConstraint 2000orNewer [expr {![testConstraint 95or98]}] -# Several tests require need to match results against the unix username -set user {} -if {$tcl_platform(platform) == "unix"} { - catch {set user [exec whoami]} - if {$user == ""} { - catch {regexp {^[^(]*\(([^)]*)\)} [exec id] dummy user} +set tmpspace /tmp;# default value +# Find a group that exists on this Unix system, or else skip tests that +# require Unix groups. +testConstraint foundGroup [expr {![testConstraint unix]}] +if {[testConstraint unix]} { + catch { + set groupList [exec groups] + set group [lindex $groupList 0] + testConstraint foundGroup 1 } - if {$user == ""} { - set user "root" + + proc dev dir { + file stat $dir stat + return $stat(dev) + } + + if {[catch {makeDirectory tcl[pid] /tmp} tmpspace] == 0} { + testConstraint xdev [expr {([dev .] != [dev $tmpspace])}] } } @@ -50,6 +62,33 @@ if {[testConstraint winOnly]} { } } +testConstraint darwin9 [expr {[testConstraint unix] && + $tcl_platform(os) eq "Darwin" && + int([string range $tcl_platform(osVersion) 0 \ + [string first . $tcl_platform(osVersion)]]) >= 9}] +testConstraint notDarwin9 [expr {![testConstraint darwin9]}] + +testConstraint fileSharing 0 +testConstraint notFileSharing 1 +testConstraint linkFile 1 +testConstraint linkDirectory 1 + +# Several tests require need to match results against the unix username +set user {} +if {[testConstraint unix]} { + catch { + set user [exec whoami] + } + if {$user eq ""} { + catch { + regexp {^[^(]*\(([^)]*)\)} [exec id] -> user + } + } + if {$user eq ""} { + set user "root" + } +} + proc createfile {file {string a}} { set f [open $file w] puts -nonewline $f $string @@ -57,17 +96,17 @@ proc createfile {file {string a}} { return $string } -# +# # checkcontent -- # -# Ensures that file "file" contains only the string "matchString" -# returns 0 if the file does not exist, or has a different content +# Ensures that file "file" contains only the string "matchString" returns 0 +# if the file does not exist, or has a different content # proc checkcontent {file matchString} { if {[catch { set f [open $file] set fileString [read $f] - close $f + close $f }]} { return 0 } @@ -93,7 +132,10 @@ proc cleanup {args} { set x [glob -directory $p tf* td*] } foreach file $x { - if {[catch {file delete -force -- $file}]} { + if { + [catch {file delete -force -- $file}] + && [testConstraint testchmod] + } then { catch {openup $file} catch {file delete -force -- $file} } @@ -102,33 +144,18 @@ proc cleanup {args} { } proc contents {file} { - set f [open $file r] + set f [open $file] set r [read $f] close $f - set r + return $r } -cd [temporaryDirectory] - -set ::tcltest::testConstraints(fileSharing) 0 -set ::tcltest::testConstraints(notFileSharing) 1 -set ::tcltest::testConstraints(xdev) 0 - -if {$tcl_platform(platform) == "unix"} { - if {[catch {set m1 [exec df .]; set m2 [exec df /tmp]}] == 0} { - set m1 [string range $m1 0 [expr [string first " " $m1]-1]] - set m2 [string range $m2 0 [expr [string first " " $m2]-1]] - if {$m1 != "" && $m2 != "" && $m1 != $m2 && [file exists $m1] && [file exists $m2]} { - set ::tcltest::testConstraints(xdev) 1 - } - } -} set root [lindex [file split [pwd]] 0] # A really long file name -# length of long is 1216 chars, which should be greater than any static -# buffer or allowable filename. +# length of long is 1216 chars, which should be greater than any static buffer +# or allowable filename. set long "abcdefghihjllmnopqrstuvwxyz01234567890" append long $long @@ -151,44 +178,49 @@ test fCmd-2.1 {TclFileCopyCmd} {notRoot} { lsort [glob tf*] } {tf1 tf2} -test fCmd-3.1 {FileCopyRename: FileForceOption fails} {notRoot} { - list [catch {file rename -xyz} msg] $msg -} {1 {bad option "-xyz": should be -force or --}} -test fCmd-3.2 {FileCopyRename: not enough args} {notRoot} { - list [catch {file rename xyz} msg] $msg -} {1 {wrong # args: should be "file rename ?options? source ?source ...? target"}} -test fCmd-3.3 {FileCopyRename: Tcl_TranslateFileName fails} {notRoot} { - list [catch {file rename xyz ~_totally_bogus_user} msg] $msg -} {1 {user "_totally_bogus_user" doesn't exist}} -test fCmd-3.4 {FileCopyRename: Tcl_TranslateFileName passes} {notRoot} { - cleanup - list [catch {file copy tf1 ~} msg] $msg -} {1 {error copying "tf1": no such file or directory}} -test fCmd-3.5 {FileCopyRename: target doesn't exist: stat(target) != 0} {notRoot} { - cleanup - list [catch {file rename tf1 tf2 tf3} msg] $msg -} {1 {error renaming: target "tf3" is not a directory}} -test fCmd-3.6 {FileCopyRename: target tf3 is not a dir: !S_ISDIR(target)} \ - {notRoot} { - cleanup +test fCmd-3.1 {FileCopyRename: FileForceOption fails} -constraints {notRoot} -body { + file rename -xyz +} -returnCodes error -result {bad option "-xyz": should be -force or --} +test fCmd-3.2 {FileCopyRename: not enough args} -constraints {notRoot} -body { + file rename xyz +} -returnCodes error -result {wrong # args: should be "file rename ?options? source ?source ...? target"} +test fCmd-3.3 {FileCopyRename: Tcl_TranslateFileName fails} -constraints {notRoot} -body { + file rename xyz ~_totally_bogus_user +} -returnCodes error -result {user "_totally_bogus_user" doesn't exist} +test fCmd-3.4 {FileCopyRename: Tcl_TranslateFileName passes} -setup { + cleanup +} -constraints {notRoot} -returnCodes error -body { + file copy tf1 ~ +} -result {error copying "tf1": no such file or directory} +test fCmd-3.5 {FileCopyRename: target doesn't exist: stat(target) != 0} -setup { + cleanup +} -constraints {notRoot} -returnCodes error -body { + file rename tf1 tf2 tf3 +} -result {error renaming: target "tf3" is not a directory} +test fCmd-3.6 {FileCopyRename: target tf3 is not a dir: !S_ISDIR(target)} -setup { + cleanup +} -constraints {notRoot} -returnCodes error -body { createfile tf3 - list [catch {file rename tf1 tf2 tf3} msg] $msg -} {1 {error renaming: target "tf3" is not a directory}} -test fCmd-3.7 {FileCopyRename: target exists & is directory} {notRoot} { + file rename tf1 tf2 tf3 +} -result {error renaming: target "tf3" is not a directory} +test fCmd-3.7 {FileCopyRename: target exists & is directory} -setup { cleanup +} -constraints {notRoot} -body { file mkdir td1 createfile tf1 tf1 file rename tf1 td1 contents [file join td1 tf1] -} {tf1} -test fCmd-3.8 {FileCopyRename: too many arguments: argc - i > 2} {notRoot} { +} -result {tf1} +test fCmd-3.8 {FileCopyRename: too many arguments: argc - i > 2} -setup { cleanup - list [catch {file rename tf1 tf2 tf3} msg] $msg -} {1 {error renaming: target "tf3" is not a directory}} -test fCmd-3.9 {FileCopyRename: too many arguments: argc - i > 2} {notRoot} { +} -constraints {notRoot} -returnCodes error -body { + file rename tf1 tf2 tf3 +} -result {error renaming: target "tf3" is not a directory} +test fCmd-3.9 {FileCopyRename: too many arguments: argc - i > 2} -setup { cleanup - list [catch {file copy -force -- tf1 tf2 tf3} msg] $msg -} {1 {error copying: target "tf3" is not a directory}} +} -constraints {notRoot} -returnCodes error -body { + file copy -force -- tf1 tf2 tf3 +} -result {error copying: target "tf3" is not a directory} test fCmd-3.10 {FileCopyRename: just 2 arguments} {notRoot} { cleanup createfile tf1 tf1 @@ -219,26 +251,29 @@ test fCmd-3.13 {FileCopyRename: move each source: multiple sources} {notRoot} { list [contents [file join td1 tf1]] [contents [file join td1 tf2]] \ [contents [file join td1 tf3]] [contents [file join td1 tf4]] } {tf1 tf2 tf3 tf4} -test fCmd-3.14 {FileCopyRename: FileBasename fails} {notRoot} { +test fCmd-3.14 {FileCopyRename: FileBasename fails} -setup { cleanup +} -constraints {notRoot} -returnCodes error -body { file mkdir td1 - list [catch {file rename ~_totally_bogus_user td1} msg] $msg -} {1 {user "_totally_bogus_user" doesn't exist}} -test fCmd-3.15 {FileCopyRename: source[0] == '\0'} {notRoot unixOrPc} { + file rename ~_totally_bogus_user td1 +} -result {user "_totally_bogus_user" doesn't exist} +test fCmd-3.15 {FileCopyRename: source[0] == '\0'} -setup { cleanup +} -constraints {notRoot unixOrPc} -returnCodes error -body { file mkdir td1 - list [catch {file rename / td1} msg] $msg -} {1 {error renaming "/" to "td1": file already exists}} -test fCmd-3.16 {FileCopyRename: break on first error} {notRoot} { - cleanup - createfile tf1 - createfile tf2 - createfile tf3 - createfile tf4 + file rename / td1 +} -result {error renaming "/" to "td1": file already exists} +test fCmd-3.16 {FileCopyRename: break on first error} -setup { + cleanup +} -constraints {notRoot} -returnCodes error -body { + createfile tf1 + createfile tf2 + createfile tf3 + createfile tf4 file mkdir td1 createfile [file join td1 tf3] - list [catch {file rename tf1 tf2 tf3 tf4 td1} msg] $msg -} [subst {1 {error renaming "tf3" to "[file join td1 tf3]": file already exists}}] + file rename tf1 tf2 tf3 tf4 td1 +} -result [subst {error renaming "tf3" to "[file join td1 tf3]": file already exists}] test fCmd-4.1 {TclFileMakeDirsCmd: make each dir: 1 dir} {notRoot} { cleanup @@ -256,15 +291,16 @@ test fCmd-4.3 {TclFileMakeDirsCmd: stops on first error} {notRoot} { catch {file mkdir td1 td2 tf1 td3 td4} glob td1 td2 tf1 td3 td4 } {td1 td2 tf1} -test fCmd-4.4 {TclFileMakeDirsCmd: Tcl_TranslateFileName fails} {notRoot} { +test fCmd-4.4 {TclFileMakeDirsCmd: Tcl_TranslateFileName fails} -setup { cleanup - list [catch {file mkdir ~_totally_bogus_user} msg] $msg -} {1 {user "_totally_bogus_user" doesn't exist}} -test fCmd-4.5 {TclFileMakeDirsCmd: Tcl_SplitPath returns 0: *name == '\0'} \ - {notRoot} { +} -constraints {notRoot} -returnCodes error -body { + file mkdir ~_totally_bogus_user +} -result {user "_totally_bogus_user" doesn't exist} +test fCmd-4.5 {TclFileMakeDirsCmd: Tcl_SplitPath returns 0: *name == '\0'} -setup { cleanup - list [catch {file mkdir ""} msg] $msg -} {1 {can't create directory "": no such file or directory}} +} -constraints {notRoot} -returnCodes error -body { + file mkdir "" +} -result {can't create directory "": no such file or directory} test fCmd-4.6 {TclFileMakeDirsCmd: one level deep} {notRoot} { cleanup file mkdir td1 @@ -282,11 +318,12 @@ test fCmd-4.8 {TclFileMakeDirsCmd: already exist: lstat(target) == 0} {notRoot} file mkdir td1 list $x [file exists td1] } {1 1} -test fCmd-4.9 {TclFileMakeDirsCmd: exists, not dir} {notRoot} { +test fCmd-4.9 {TclFileMakeDirsCmd: exists, not dir} -setup { cleanup +} -constraints {notRoot} -returnCodes error -body { createfile tf1 - list [catch {file mkdir tf1} msg] $msg -} [subst {1 {can't create directory "[file join tf1]": file already exists}}] + file mkdir tf1 +} -result [subst {can't create directory "[file join tf1]": file already exists}] test fCmd-4.10 {TclFileMakeDirsCmd: exists, is dir} {notRoot} { cleanup file mkdir td1 @@ -294,43 +331,45 @@ test fCmd-4.10 {TclFileMakeDirsCmd: exists, is dir} {notRoot} { file mkdir td1 list $x [file exists td1] } {1 1} -test fCmd-4.11 {TclFileMakeDirsCmd: doesn't exist: errno != ENOENT} \ - {unixOnly notRoot testchmod} { +test fCmd-4.11 {TclFileMakeDirsCmd: doesn't exist: errno != ENOENT} -setup { cleanup +} -constraints {unix notRoot testchmod} -returnCodes error -body { file mkdir td1/td2/td3 testchmod 000 td1/td2 - set msg [list [catch {file mkdir td1/td2/td3/td4} msg] $msg] + file mkdir td1/td2/td3/td4 +} -cleanup { testchmod 755 td1/td2 - set msg -} {1 {can't create directory "td1/td2/td3": permission denied}} -test fCmd-4.13 {TclFileMakeDirsCmd: doesn't exist: errno == ENOENT} {notRoot} { cleanup +} -result {can't create directory "td1/td2/td3": permission denied} +test fCmd-4.13 {TclFileMakeDirsCmd: doesn't exist: errno == ENOENT} -setup { + cleanup +} -constraints {notRoot} -body { set x [file exists td1] file mkdir td1 list $x [file exists td1] -} {0 1} -test fCmd-4.14 {TclFileMakeDirsCmd: TclpCreateDirectory fails} \ - {unixOnly notRoot} { +} -result {0 1} +test fCmd-4.14 {TclFileMakeDirsCmd: TclpCreateDirectory fails} -setup { cleanup file delete -force foo +} -constraints {unix notRoot} -body { file mkdir foo file attr foo -perm 040000 - set result [list [catch {file mkdir foo/tf1} msg] $msg] + file mkdir foo/tf1 +} -returnCodes error -cleanup { file delete -force foo - set result -} {1 {can't create directory "foo/tf1": permission denied}} +} -result {can't create directory "foo/tf1": permission denied} test fCmd-4.16 {TclFileMakeDirsCmd: TclpCreateDirectory succeeds} {notRoot} { cleanup file mkdir tf1 file exists tf1 } {1} -test fCmd-5.1 {TclFileDeleteCmd: FileForceOption fails} {notRoot} { - list [catch {file delete -xyz} msg] $msg -} {1 {bad option "-xyz": should be -force or --}} -test fCmd-5.2 {TclFileDeleteCmd: not enough args} {notRoot} { - list [catch {file delete -force -force} msg] $msg -} {1 {wrong # args: should be "file delete ?options? file ?file ...?"}} +test fCmd-5.1 {TclFileDeleteCmd: FileForceOption fails} -constraints {notRoot} -body { + file delete -xyz +} -returnCodes error -result {bad option "-xyz": should be -force or --} +test fCmd-5.2 {TclFileDeleteCmd: not enough args} -constraints {notRoot} -body { + file delete -force -force +} -returnCodes error -result {wrong # args: should be "file delete ?options? file ?file ...?"} test fCmd-5.3 {TclFileDeleteCmd: 1 file} {notRoot} { cleanup createfile tf1 @@ -356,9 +395,9 @@ test fCmd-5.5 {TclFileDeleteCmd: stop at first error} {notRoot unixOrPc} { catch {file delete tf1 td1 $root tf2} list [file exists tf1] [file exists tf2] [file exists td1] } {0 1 0} -test fCmd-5.6 {TclFileDeleteCmd: Tcl_TranslateFileName fails} {notRoot} { - list [catch {file delete ~_totally_bogus_user} msg] $msg -} {1 {user "_totally_bogus_user" doesn't exist}} +test fCmd-5.6 {TclFileDeleteCmd: Tcl_TranslateFileName fails} -constraints {notRoot} -body { + file delete ~_totally_bogus_user +} -returnCodes error -result {user "_totally_bogus_user" doesn't exist} test fCmd-5.7 {TclFileDeleteCmd: Tcl_TranslateFileName succeeds} {notRoot} { catch {file delete ~/tf1} createfile ~/tf1 @@ -369,28 +408,32 @@ test fCmd-5.8 {TclFileDeleteCmd: file doesn't exist: lstat(name) != 0} {notRoot} set x [file exists tf1] file delete tf1 list $x [file exists tf1] -} {0 0} +} {0 0} test fCmd-5.9 {TclFileDeleteCmd: is directory} {notRoot} { cleanup file mkdir td1 file delete td1 file exists td1 } {0} -test fCmd-5.10 {TclFileDeleteCmd: TclpRemoveDirectory fails} {notRoot} { +test fCmd-5.10 {TclFileDeleteCmd: TclpRemoveDirectory fails} -setup { cleanup +} -constraints {notRoot} -returnCodes error -body { file mkdir [file join td1 td2] - list [catch {file delete td1} msg] $msg -} {1 {error deleting "td1": directory not empty}} -test fCmd-5.11 {TclFileDeleteCmd: TclpRemoveDirectory with cwd inside} {notRoot} { + file delete td1 +} -result {error deleting "td1": directory not empty} +test fCmd-5.11 {TclFileDeleteCmd: TclpRemoveDirectory with cwd inside} -setup { cleanup set dir [pwd] +} -constraints {notRoot} -body { file mkdir [file join td1 td2] cd [file join td1 td2] set res [list [catch {file delete -force [file dirname [pwd]]} msg]] cd $dir lappend res [file exists td1] $msg -} {0 0 {}} -test fCmd-5.12 {TclFileDeleteCmd: TclpRemoveDirectory with bad perms} {unixOnly} { +} -cleanup { + cd $dir +} -result {0 0 {}} +test fCmd-5.12 {TclFileDeleteCmd: TclpRemoveDirectory with bad perms} {unix} { cleanup file mkdir [file join td1 td2] #exec chmod u-rwx [file join td1 td2] @@ -399,16 +442,17 @@ test fCmd-5.12 {TclFileDeleteCmd: TclpRemoveDirectory with bad perms} {unixOnly} lappend res [file exists td1] $msg } {0 0 {}} -test fCmd-6.1 {CopyRenameOneFile: bad source} {notRoot} { +test fCmd-6.1 {CopyRenameOneFile: bad source} {notRoot emptyTest} { # can't test this, because it's caught by FileCopyRename } {} -test fCmd-6.2 {CopyRenameOneFile: bad target} {notRoot} { +test fCmd-6.2 {CopyRenameOneFile: bad target} {notRoot emptyTest} { # can't test this, because it's caught by FileCopyRename } {} -test fCmd-6.3 {CopyRenameOneFile: lstat(source) != 0} {notRoot} { +test fCmd-6.3 {CopyRenameOneFile: lstat(source) != 0} -setup { cleanup - list [catch {file rename tf1 tf2} msg] $msg -} {1 {error renaming "tf1": no such file or directory}} +} -constraints {notRoot} -returnCodes error -body { + file rename tf1 tf2 +} -result {error renaming "tf1": no such file or directory} test fCmd-6.4 {CopyRenameOneFile: lstat(source) == 0} {notRoot} { cleanup createfile tf1 @@ -421,38 +465,42 @@ test fCmd-6.5 {CopyRenameOneFile: lstat(target) != 0} {notRoot} { file rename tf1 tf2 glob tf* } {tf2} -test fCmd-6.6 {CopyRenameOneFile: errno != ENOENT} {unixOnly notRoot testchmod} { +test fCmd-6.6 {CopyRenameOneFile: errno != ENOENT} -setup { cleanup +} -constraints {unix notRoot testchmod} -body { file mkdir td1 testchmod 000 td1 createfile tf1 - set msg [list [catch {file rename tf1 td1} msg] $msg] + file rename tf1 td1 +} -returnCodes error -cleanup { testchmod 755 td1 - set msg -} {1 {error renaming "tf1" to "td1/tf1": permission denied}} -test fCmd-6.7 {CopyRenameOneFile: errno != ENOENT} {pcOnly 95} { +} -result {error renaming "tf1" to "td1/tf1": permission denied} +test fCmd-6.7 {CopyRenameOneFile: errno != ENOENT} -setup { cleanup +} -constraints {win 95} -returnCodes error -body { createfile tf1 - list [catch {file rename tf1 $long} msg] $msg -} [subst {1 {error renaming "tf1" to "$long": file name too long}}] -test fCmd-6.9 {CopyRenameOneFile: errno == ENOENT} {unixOnly notRoot} { + file rename tf1 $long +} -result [subst {error renaming "tf1" to "$long": file name too long}] +test fCmd-6.9 {CopyRenameOneFile: errno == ENOENT} {unix notRoot} { cleanup createfile tf1 file rename tf1 tf2 glob tf* } {tf2} -test fCmd-6.10 {CopyRenameOneFile: lstat(target) == 0} {notRoot} { +test fCmd-6.10 {CopyRenameOneFile: lstat(target) == 0} -setup { cleanup +} -constraints {notRoot} -returnCodes error -body { createfile tf1 createfile tf2 - list [catch {file rename tf1 tf2} msg] $msg -} {1 {error renaming "tf1" to "tf2": file already exists}} -test fCmd-6.11 {CopyRenameOneFile: force == 0} {notRoot} { + file rename tf1 tf2 +} -result {error renaming "tf1" to "tf2": file already exists} +test fCmd-6.11 {CopyRenameOneFile: force == 0} -setup { cleanup +} -constraints {notRoot} -returnCodes error -body { createfile tf1 createfile tf2 - list [catch {file rename tf1 tf2} msg] $msg -} {1 {error renaming "tf1" to "tf2": file already exists}} + file rename tf1 tf2 +} -result {error renaming "tf1" to "tf2": file already exists} test fCmd-6.12 {CopyRenameOneFile: force != 0} {notRoot} { cleanup createfile tf1 @@ -460,176 +508,185 @@ test fCmd-6.12 {CopyRenameOneFile: force != 0} {notRoot} { file rename -force tf1 tf2 glob tf* } {tf2} -test fCmd-6.13 {CopyRenameOneFile: source is dir, target is file} {notRoot} { +test fCmd-6.13 {CopyRenameOneFile: source is dir, target is file} -setup { cleanup +} -constraints {notRoot} -returnCodes error -body { file mkdir td1 file mkdir td2 createfile [file join td2 td1] - list [catch {file rename -force td1 td2} msg] $msg -} [subst {1 {can't overwrite file "[file join td2 td1]" with directory "td1"}}] -test fCmd-6.14 {CopyRenameOneFile: source is file, target is dir} {notRoot} { + file rename -force td1 td2 +} -result [subst {can't overwrite file "[file join td2 td1]" with directory "td1"}] +test fCmd-6.14 {CopyRenameOneFile: source is file, target is dir} -setup { cleanup +} -constraints {notRoot} -returnCodes error -body { createfile tf1 file mkdir [file join td1 tf1] - list [catch {file rename -force tf1 td1} msg] $msg -} [subst {1 {can't overwrite directory "[file join td1 tf1]" with file "tf1"}}] -test fCmd-6.15 {CopyRenameOneFile: TclpRenameFile succeeds} {notRoot notNetworkFilesystem} { + file rename -force tf1 td1 +} -result [subst {can't overwrite directory "[file join td1 tf1]" with file "tf1"}] +test fCmd-6.15 {CopyRenameOneFile: TclpRenameFile succeeds} -setup { cleanup +} -constraints {notRoot notNetworkFilesystem} -body { file mkdir [file join td1 td2] file mkdir td2 createfile [file join td2 tf1] file rename -force td2 td1 file exists [file join td1 td2 tf1] -} {1} -test fCmd-6.16 {CopyRenameOneFile: TclpCopyRenameOneFile fails} {notRoot} { +} -result 1 +test fCmd-6.16 {CopyRenameOneFile: TclpCopyRenameOneFile fails} -setup { cleanup +} -constraints {notRoot} -body { file mkdir [file join td1 td2] createfile [file join td1 td2 tf1] file mkdir td2 - list [catch {file rename -force td2 td1} msg] $msg -} [subst {1 {error renaming "td2" to "[file join td1 td2]": file already exists}}] - -test fCmd-6.17 {CopyRenameOneFile: errno == EINVAL} {notRoot} { + file rename -force td2 td1 +} -returnCodes error -match glob -result \ + [subst {error renaming "td2" to "[file join td1 td2]": file *}] +test fCmd-6.17 {CopyRenameOneFile: errno == EINVAL} -setup { cleanup - list [catch {file rename -force $root tf1} msg] $msg -} [subst {1 {error renaming "$root" to "tf1": trying to rename a volume or move a directory into itself}}] -test fCmd-6.18 {CopyRenameOneFile: errno != EXDEV} {notRoot} { +} -constraints {notRoot} -returnCodes error -body { + file rename -force $root tf1 +} -result [subst {error renaming "$root" to "tf1": trying to rename a volume or move a directory into itself}] +test fCmd-6.18 {CopyRenameOneFile: errno != EXDEV} -setup { cleanup +} -constraints {notRoot} -body { file mkdir [file join td1 td2] createfile [file join td1 td2 tf1] file mkdir td2 - list [catch {file rename -force td2 td1} msg] $msg -} [subst {1 {error renaming "td2" to "[file join td1 td2]": file already exists}}] -test fCmd-6.19 {CopyRenameOneFile: errno == EXDEV} {unixOnly notRoot} { - cleanup /tmp + file rename -force td2 td1 +} -returnCodes error -match glob -result \ + [subst {error renaming "td2" to "[file join td1 td2]": file *}] +test fCmd-6.19 {CopyRenameOneFile: errno == EXDEV} {xdev notRoot} { + cleanup $tmpspace createfile tf1 - file rename tf1 /tmp - glob tf* /tmp/tf1 -} {/tmp/tf1} -test fCmd-6.20 {CopyRenameOneFile: errno == EXDEV} {pcOnly} { + file rename tf1 $tmpspace + glob -nocomplain tf* [file join $tmpspace tf1] +} [file join $tmpspace tf1] +test fCmd-6.20 {CopyRenameOneFile: errno == EXDEV} -constraints {win} -setup { catch {file delete -force c:/tcl8975@ d:/tcl8975@} +} -body { file mkdir c:/tcl8975@ - if [catch {file rename c:/tcl8975@ d:/}] { - set msg d:/tcl8975@ - } else { - set msg [glob c:/tcl8975@ d:/tcl8975@] - file delete -force d:/tcl8975@ + if {[catch {file rename c:/tcl8975@ d:/}]} { + return d:/tcl8975@ } + glob c:/tcl8975@ d:/tcl8975@ +} -cleanup { file delete -force c:/tcl8975@ - set msg -} {d:/tcl8975@} + catch {file delete -force d:/tcl8975@} +} -result {d:/tcl8975@} test fCmd-6.21 {CopyRenameOneFile: copy/rename: S_ISDIR(source)} \ - {unixOnly notRoot} { - cleanup /tmp + {xdev notRoot} { + cleanup $tmpspace file mkdir td1 - file rename td1 /tmp - glob td* /tmp/td* -} {/tmp/td1} + file rename td1 $tmpspace + glob -nocomplain td* [file join $tmpspace td*] +} [file join $tmpspace td1] test fCmd-6.22 {CopyRenameOneFile: copy/rename: !S_ISDIR(source)} \ - {unixOnly notRoot} { - cleanup /tmp + {xdev notRoot} { + cleanup $tmpspace createfile tf1 - file rename tf1 /tmp - glob tf* /tmp/tf* -} {/tmp/tf1} -test fCmd-6.23 {CopyRenameOneFile: TclpCopyDirectory failed} \ - {unixOnly notRoot xdev} { - cleanup /tmp + file rename tf1 $tmpspace + glob -nocomplain tf* [file join $tmpspace tf*] +} [file join $tmpspace tf1] +test fCmd-6.23 {CopyRenameOneFile: TclpCopyDirectory failed} -setup { + cleanup $tmpspace +} -constraints {notRoot xdev} -body { file mkdir td1/td2/td3 file attributes td1 -permissions 0000 - set msg [list [catch {file rename td1 /tmp} msg] $msg] + file rename td1 $tmpspace +} -returnCodes error -cleanup { file attributes td1 -permissions 0755 - set msg -} {1 {error renaming "td1": permission denied}} -test fCmd-6.24 {CopyRenameOneFile: error uses original name} \ - {unixOnly notRoot} { cleanup +} -match regexp -result {^error renaming "td1"( to "/tmp/tcl\d+/td1")?: permission denied$} +test fCmd-6.24 {CopyRenameOneFile: error uses original name} -setup { + cleanup +} -constraints {unix notRoot} -body { file mkdir ~/td1/td2 set td1name [file join [file dirname ~] [file tail ~] td1] file attributes $td1name -permissions 0000 - set msg [list [catch {file copy ~/td1 td1} msg] $msg] + file copy ~/td1 td1 +} -returnCodes error -cleanup { file attributes $td1name -permissions 0755 file delete -force ~/td1 - set msg -} {1 {error copying "~/td1": permission denied}} -test fCmd-6.25 {CopyRenameOneFile: error uses original name} \ - {unixOnly notRoot} { +} -result {error copying "~/td1": permission denied} +test fCmd-6.25 {CopyRenameOneFile: error uses original name} -setup { cleanup +} -constraints {unix notRoot} -body { file mkdir td2 file mkdir ~/td1 set td1name [file join [file dirname ~] [file tail ~] td1] file attributes $td1name -permissions 0000 - set msg [list [catch {file copy td2 ~/td1} msg] $msg] + file copy td2 ~/td1 +} -returnCodes error -cleanup { file attributes $td1name -permissions 0755 file delete -force ~/td1 - set msg -} {1 {error copying "td2" to "~/td1/td2": permission denied}} -test fCmd-6.26 {CopyRenameOneFile: doesn't use original name} \ - {unixOnly notRoot} { +} -result {error copying "td2" to "~/td1/td2": permission denied} +test fCmd-6.26 {CopyRenameOneFile: doesn't use original name} -setup { cleanup +} -constraints {unix notRoot} -body { file mkdir ~/td1/td2 set td2name [file join [file dirname ~] [file tail ~] td1 td2] file attributes $td2name -permissions 0000 - set msg [list [catch {file copy ~/td1 td1} msg] $msg] + file copy ~/td1 td1 +} -returnCodes error -cleanup { file attributes $td2name -permissions 0755 file delete -force ~/td1 - set msg -} "1 {error copying \"~/td1\" to \"td1\": \"[file join [file dirname ~] [file tail ~] td1 td2]\": permission denied}" -test fCmd-6.27 {CopyRenameOneFile: TclpCopyDirectory failed} \ - {unixOnly notRoot xdev} { - cleanup /tmp +} -result "error copying \"~/td1\" to \"td1\": \"[file join $::env(HOME) td1 td2]\": permission denied" +test fCmd-6.27 {CopyRenameOneFile: TclpCopyDirectory failed} -setup { + cleanup $tmpspace +} -constraints {notRoot xdev} -returnCodes error -body { file mkdir td1/td2/td3 - file mkdir /tmp/td1 - createfile /tmp/td1/tf1 - list [catch {file rename -force td1 /tmp} msg] $msg -} {1 {error renaming "td1" to "/tmp/td1": file already exists}} -test fCmd-6.28 {CopyRenameOneFile: TclpCopyDirectory failed} \ - {unixOnly notRoot xdev} { - cleanup /tmp + file mkdir [file join $tmpspace td1] + createfile [file join $tmpspace td1 tf1] + file rename -force td1 $tmpspace +} -match glob -result {error renaming "td1" to "/tmp/tcl*/td1": file already exists} +test fCmd-6.28 {CopyRenameOneFile: TclpCopyDirectory failed} -setup { + cleanup $tmpspace +} -constraints {notRoot xdev} -body { file mkdir td1/td2/td3 file attributes td1/td2/td3 -permissions 0000 - set msg [list [catch {file rename td1 /tmp} msg] $msg] + file rename td1 $tmpspace +} -returnCodes error -cleanup { file attributes td1/td2/td3 -permissions 0755 - set msg -} {1 {error renaming "td1" to "/tmp/td1": "td1/td2/td3": permission denied}} -test fCmd-6.29 {CopyRenameOneFile: TclpCopyDirectory passed} \ - {unixOnly notRoot xdev} { - cleanup /tmp + cleanup $tmpspace +} -match glob -result {error renaming "td1" to "/tmp/tcl*/td1": "td1/td2/td3": permission denied} +test fCmd-6.29 {CopyRenameOneFile: TclpCopyDirectory passed} -setup { + cleanup $tmpspace +} -constraints {notRoot xdev} -body { file mkdir td1/td2/td3 - file rename td1 /tmp - glob td* /tmp/td1/t* -} {/tmp/td1/td2} -test fCmd-6.30 {CopyRenameOneFile: TclpRemoveDirectory failed} \ - {unixOnly notRoot} { - cleanup + file rename td1 $tmpspace + glob td* [file join $tmpspace td1 t*] +} -result [file join $tmpspace td1 td2] +test fCmd-6.30 {CopyRenameOneFile: TclpRemoveDirectory failed} -setup { + cleanup $tmpspace +} -constraints {xdev notRoot} -body { file mkdir foo/bar file attr foo -perm 040555 - set catchResult [catch {file rename foo/bar /tmp} msg] - set msg [lindex [split $msg :] end] - catch {file delete /tmp/bar} + file rename foo/bar $tmpspace +} -returnCodes error -cleanup { + catch {file delete [file join $tmpspace bar]} catch {file attr foo -perm 040777} catch {file delete -force foo} - list $catchResult $msg -} {1 { permission denied}} -test fCmd-6.31 {CopyRenameOneFile: TclpDeleteFile passed} \ - {unixOnly notRoot xdev} { - catch {cleanup /tmp} - file mkdir /tmp/td1 - createfile /tmp/td1/tf1 - file rename /tmp/td1/tf1 tf1 - list [file exists /tmp/td1/tf1] [file exists tf1] -} {0 1} -test fCmd-6.32 {CopyRenameOneFile: copy} {notRoot} { - cleanup - list [catch {file copy tf1 tf2} msg] $msg -} {1 {error copying "tf1": no such file or directory}} -catch {cleanup /tmp} - -test fCmd-7.1 {FileForceOption: none} {notRoot} { +} -match glob -result {*: permission denied} +test fCmd-6.31 {CopyRenameOneFile: TclpDeleteFile passed} -setup { + cleanup $tmpspace +} -constraints {notRoot xdev} -body { + file mkdir [file join $tmpspace td1] + createfile [file join $tmpspace td1 tf1] + file rename [file join $tmpspace td1 tf1] tf1 + list [file exists [file join $tmpspace td1 tf1]] [file exists tf1] +} -result {0 1} +test fCmd-6.32 {CopyRenameOneFile: copy} -constraints {notRoot} -setup { + cleanup +} -returnCodes error -body { + file copy tf1 tf2 +} -result {error copying "tf1": no such file or directory} + +test fCmd-7.1 {FileForceOption: none} -constraints {notRoot} -setup { cleanup +} -returnCodes error -body { file mkdir [file join tf1 tf2] - list [catch {file delete tf1} msg] $msg -} {1 {error deleting "tf1": directory not empty}} + file delete tf1 +} -result {error deleting "tf1": directory not empty} test fCmd-7.2 {FileForceOption: -force} {notRoot} { cleanup file mkdir [file join tf1 tf2] @@ -639,68 +696,88 @@ test fCmd-7.3 {FileForceOption: --} {notRoot} { createfile -tf1 file delete -- -tf1 } {} -test fCmd-7.4 {FileForceOption: bad option} {notRoot} { +test fCmd-7.4 {FileForceOption: bad option} -constraints {notRoot} -setup { createfile -tf1 - set msg [list [catch {file delete -tf1} msg] $msg] +} -body { + file delete -tf1 +} -returnCodes error -cleanup { file delete -- -tf1 - set msg -} {1 {bad option "-tf1": should be -force or --}} -test fCmd-7.5 {FileForceOption: multiple times through loop} {notRoot} { +} -result {bad option "-tf1": should be -force or --} +test fCmd-7.5 {FileForceOption: multiple times through loop} -setup { + cleanup +} -constraints {notRoot} -returnCodes error -body { createfile -- createfile -force file delete -force -force -- -- -force - list [catch {glob -- -- -force} msg] $msg -} {1 {no files matched glob patterns "-- -force"}} + glob -- -- -force +} -result {no files matched glob patterns "-- -force"} test fCmd-8.1 {FileBasename: basename of ~user: argc == 1 && *path == ~} \ - {unixOnly notRoot knownBug} { + -constraints {unix notRoot knownBug} -body { # Labelled knownBug because it is dangerous [Bug: 3881] file mkdir td1 file attr td1 -perm 040000 - set result [list [catch {file rename ~$user td1} msg] $msg] + file rename ~$user td1 +} -returnCodes error -cleanup { file delete -force td1 - set result -} "1 {error renaming \"~$user\" to \"td1/[file tail ~$user]\": permission denied}" -test fCmd-8.2 {FileBasename: basename of ~user: argc == 1 && *path == ~} { +} -result "error renaming \"~$user\" to \"td1/[file tail ~$user]\": permission denied" +test fCmd-8.2 {FileBasename: basename of ~user: argc == 1 && *path == ~} \ + {unix notRoot} { string equal [file tail ~$user] ~$user } 0 -test fCmd-8.3 {file copy and path translation: ensure correct error} { - list [catch {file copy ~ [file join this file doesnt exist]} res] $res -} [list 1 \ - "error copying \"~\" to \"[file join this file doesnt exist]\":\ - no such file or directory"] +test fCmd-8.3 {file copy and path translation: ensure correct error} -body { + file copy ~ [file join this file doesnt exist] +} -returnCodes error -result [subst \ + {error copying "~" to "[file join this file doesnt exist]": no such file or directory}] -test fCmd-9.1 {file rename: comprehensive: EACCES} {unixOnly notRoot} { +test fCmd-9.1 {file rename: comprehensive: EACCES} -setup { cleanup +} -constraints {unix notRoot} -body { file mkdir td1 file mkdir td2 file attr td2 -perm 040000 - set result [list [catch {file rename td1 td2/} msg] $msg] + file rename td1 td2/ +} -returnCodes error -cleanup { file delete -force td2 file delete -force td1 - set result -} {1 {error renaming "td1" to "td2/td1": permission denied}} -test fCmd-9.2 {file rename: comprehensive: source doesn't exist} {notRoot} { +} -result {error renaming "td1" to "td2/td1": permission denied} +test fCmd-9.2 {file rename: comprehensive: source doesn't exist} -setup { cleanup - list [catch {file rename tf1 tf2} msg] $msg -} {1 {error renaming "tf1": no such file or directory}} -test fCmd-9.3 {file rename: comprehensive: file to new name} {notRoot testchmod} { +} -constraints {notRoot} -returnCodes error -body { + file rename tf1 tf2 +} -result {error renaming "tf1": no such file or directory} +test fCmd-9.3 {file rename: comprehensive: file to new name} -setup { cleanup +} -constraints {notRoot testchmod} -body { createfile tf1 createfile tf2 testchmod 444 tf2 file rename tf1 tf3 file rename tf2 tf4 list [lsort [glob tf*]] [file writable tf3] [file writable tf4] -} {{tf3 tf4} 1 0} -test fCmd-9.4 {file rename: comprehensive: dir to new name} {unixOrPc notRoot testchmod win2000orXP} { +} -result {{tf3 tf4} 1 0} +test fCmd-9.4.a {file rename: comprehensive: dir to new name} -setup { cleanup +} -constraints {testchmod win2000orXP} -body { file mkdir td1 td2 testchmod 555 td2 file rename td1 td3 file rename td2 td4 list [lsort [glob td*]] [file writable td3] [file writable td4] -} {{td3 td4} 1 0} +} -cleanup { + cleanup +} -result {{td3 td4} 1 0} +test fCmd-9.4.b {file rename: comprehensive: dir to new name} -setup { + cleanup +} -constraints {unix notRoot testchmod notDarwin9} -body { + file mkdir td1 td2 + testchmod 555 td2 + file rename td1 td3 + file rename td2 td4 + list [lsort [glob td*]] [file writable td3] [file writable td4] +} -cleanup { + cleanup +} -result {{td3 td4} 1 0} test fCmd-9.5 {file rename: comprehensive: file to self} {notRoot testchmod} { cleanup createfile tf1 tf1 @@ -709,18 +786,30 @@ test fCmd-9.5 {file rename: comprehensive: file to self} {notRoot testchmod} { file rename -force tf1 tf1 file rename -force tf2 tf2 list [contents tf1] [contents tf2] [file writable tf1] [file writable tf2] -} {tf1 tf2 1 0} -test fCmd-9.6 {file rename: comprehensive: dir to self} {notRoot unixOrPc testchmod win2000orXP} { +} {tf1 tf2 1 0} +test fCmd-9.6.a {file rename: comprehensive: dir to self} -setup { cleanup +} -constraints {testchmod win2000orXP} -body { file mkdir td1 file mkdir td2 testchmod 555 td2 file rename -force td1 . file rename -force td2 . list [lsort [glob td*]] [file writable td1] [file writable td2] -} {{td1 td2} 1 0} -test fCmd-9.7 {file rename: comprehensive: file to existing file} {notRoot testchmod} { +} -result {{td1 td2} 1 0} +test fCmd-9.6.b {file rename: comprehensive: dir to self} -setup { cleanup +} -constraints {notRoot unix testchmod} -body { + file mkdir td1 + file mkdir td2 + testchmod 555 td2 + file rename -force td1 . + file rename -force td2 . + list [lsort [glob td*]] [file writable td1] [file writable td2] +} -result {{td1 td2} 1 0} +test fCmd-9.7 {file rename: comprehensive: file to existing file} -setup { + cleanup +} -constraints {notRoot testchmod} -body { createfile tf1 createfile tf2 createfile tfs1 @@ -740,13 +829,14 @@ test fCmd-9.7 {file rename: comprehensive: file to existing file} {notRoot testc file rename -force tfs2 tfd2 file rename -force tfs3 tfd3 file rename -force tfs4 tfd4 - list [lsort [glob tf*]] $msg [file writable tfd1] [file writable tfd2] [file writable tfd3] [file writable tfd4] -} {{tf1 tf2 tfd1 tfd2 tfd3 tfd4} {1 {error renaming "tf1" to "tf2": file already exists}} 1 1 0 0} -test fCmd-9.8 {file rename: comprehensive: dir to empty dir} {notRoot testchmod notNetworkFilesystem} { + list [lsort [glob tf*]] $msg [file writable tfd1] [file writable tfd2] [file writable tfd3] [file writable tfd4] +} -result {{tf1 tf2 tfd1 tfd2 tfd3 tfd4} {1 {error renaming "tf1" to "tf2": file already exists}} 1 1 0 0} +test fCmd-9.8 {file rename: comprehensive: dir to empty dir} -setup { + cleanup +} -constraints {notRoot testchmod notNetworkFilesystem} -body { # Under unix, you can rename a read-only directory, but you can't # move it into another directory. - cleanup file mkdir td1 file mkdir [file join td2 td1] file mkdir tds1 @@ -757,7 +847,7 @@ test fCmd-9.8 {file rename: comprehensive: dir to empty dir} {notRoot testchmod file mkdir [file join tdd2 tds2] file mkdir [file join tdd3 tds3] file mkdir [file join tdd4 tds4] - if {$tcl_platform(platform) != "unix"} { + if {![testConstraint unix]} { testchmod 555 tds3 testchmod 555 tds4 } @@ -768,18 +858,20 @@ test fCmd-9.8 {file rename: comprehensive: dir to empty dir} {notRoot testchmod file rename -force tds2 tdd2 file rename -force tds3 tdd3 file rename -force tds4 tdd4 - if {$tcl_platform(platform) != "unix"} { - set w3 [file writable [file join tdd3 tds3]] - set w4 [file writable [file join tdd4 tds4]] - } else { + if {[testConstraint unix]} { set w3 0 set w4 0 + } else { + set w3 [file writable [file join tdd3 tds3]] + set w4 [file writable [file join tdd4 tds4]] } list [lsort [glob td*]] $msg [file writable [file join tdd1 tds1]] \ [file writable [file join tdd2 tds2]] $w3 $w4 -} [subst {{td1 td2 tdd1 tdd2 tdd3 tdd4} {1 {error renaming "td1" to "[file join td2 td1]": file already exists}} 1 1 0 0}] -test fCmd-9.9 {file rename: comprehensive: dir to non-empty dir} {notRoot testchmod} { +} -result [subst {{td1 td2 tdd1 tdd2 tdd3 tdd4} {1 {error renaming "td1" to "[file join td2 td1]": file already exists}} 1 1 0 0}] +# Test can hit EEXIST or EBUSY, depending on underlying filesystem +test fCmd-9.9 {file rename: comprehensive: dir to non-empty dir} -setup { cleanup +} -constraints {notRoot testchmod} -body { file mkdir tds1 file mkdir tds2 file mkdir [file join tdd1 tds1 xxx] @@ -789,13 +881,14 @@ test fCmd-9.9 {file rename: comprehensive: dir to non-empty dir} {notRoot testch } set a1 [list [catch {file rename -force tds1 tdd1} msg] $msg] set a2 [list [catch {file rename -force tds2 tdd2} msg] $msg] - if {!([testConstraint unix] || [testConstraint winVista])} { - set w2 [file writable tds2] - } else { + if {[testConstraint unix] || [testConstraint winVista]} { set w2 0 + } else { + set w2 [file writable tds2] } list [lsort [glob td*]] $a1 $a2 [file writable tds1] $w2 -} [subst {{tdd1 tdd2 tds1 tds2} {1 {error renaming "tds1" to "[file join tdd1 tds1]": file already exists}} {1 {error renaming "tds2" to "[file join tdd2 tds2]": file already exists}} 1 0}] +} -match glob -result \ + [subst {{tdd1 tdd2 tds1 tds2} {1 {error renaming "tds1" to "[file join tdd1 tds1]": file *}} {1 {error renaming "tds2" to "[file join tdd2 tds2]": file *}} 1 0}] test fCmd-9.10 {file rename: comprehensive: file to new name and dir} {notRoot testchmod} { cleanup createfile tf1 @@ -817,54 +910,88 @@ test fCmd-9.11 {file rename: comprehensive: dir to new name and dir} {notRoot te } file rename td1 [file join td3 td3] file rename td2 [file join td3 td4] - if {!([testConstraint unix] || [testConstraint winVista])} { - set w4 [file writable [file join td3 td4]] - } else { + if {[testConstraint unix] || [testConstraint winVista]} { set w4 0 + } else { + set w4 [file writable [file join td3 td4]] } list [lsort [glob td*]] [lsort [glob -directory td3 t*]] \ [file writable [file join td3 td3]] $w4 } [subst {td3 {[file join td3 td3] [file join td3 td4]} 1 0}] -test fCmd-9.12 {file rename: comprehensive: target exists} {notRoot testchmod notNetworkFilesystem} { +test fCmd-9.12 {file rename: comprehensive: target exists} -setup { cleanup +} -constraints {notRoot testchmod notNetworkFilesystem} -body { file mkdir [file join td1 td2] [file join td2 td1] - testchmod 555 [file join td2 td1] + testchmod 555 [file join td2 td1] file mkdir [file join td3 td4] [file join td4 td3] file rename -force td3 td4 - set msg [list [file exists td3] [file exists [file join td4 td3 td4]] \ - [catch {file rename td1 td2} msg] $msg] - testchmod 755 [file join td2 td1] - set msg -} [subst {0 1 1 {error renaming "td1" to "[file join td2 td1]": file already exists}}] -test fCmd-9.13 {file rename: comprehensive: can't overwrite target} {notRoot} { - cleanup + list [file exists td3] [file exists [file join td4 td3 td4]] \ + [catch {file rename td1 td2} msg] $msg +} -cleanup { + testchmod 755 [file join td2 td1] +} -result [subst {0 1 1 {error renaming "td1" to "[file join td2 td1]": file already exists}}] +# Test can hit EEXIST or EBUSY, depending on underlying filesystem +test fCmd-9.13 {file rename: comprehensive: can't overwrite target} -setup { + cleanup +} -constraints {notRoot} -body { file mkdir [file join td1 td2] [file join td2 td1 td4] - list [catch {file rename -force td1 td2} msg] $msg -} [subst {1 {error renaming "td1" to "[file join td2 td1]": file already exists}}] + file rename -force td1 td2 +} -returnCodes error -match glob -result \ + [subst {error renaming "td1" to "[file join td2 td1]": file *}] test fCmd-9.14 {file rename: comprehensive: dir into self} {notRoot} { cleanup file mkdir td1 list [glob td*] [list [catch {file rename td1 td1} msg] $msg] } [subst {td1 {1 {error renaming "td1" to "[file join td1 td1]": trying to rename a volume or move a directory into itself}}}] -test fCmd-9.15 {file rename: comprehensive: source and target incompatible} \ - {notRoot} { +test fCmd-9.14.1 {file rename: comprehensive: dir into self} {notRoot} { + cleanup + file mkdir td1 + file rename td1 td1x + file rename td1x td1 + set msg "ok" +} {ok} +test fCmd-9.14.2 {file rename: comprehensive: dir into self} -setup { cleanup + set dir [pwd] +} -constraints {nonPortable notRoot} -body { + file mkdir td1 + cd td1 + file rename [file join .. td1] [file join .. td1x] +} -returnCodes error -cleanup { + cd $dir +} -result [subst {error renaming "[file join .. td1]" to "[file join .. td1x]": permission denied}] +test fCmd-9.14.3 {file rename: comprehensive: dir into self} -setup { + cleanup + set dir [pwd] +} -constraints {notRoot} -body { + file mkdir td1 + cd td1 + file rename [file join .. td1] [file join .. td1 foo] +} -returnCodes error -cleanup { + cd $dir +} -result [subst {error renaming "[file join .. td1]" to "[file join .. td1 foo]": trying to rename a volume or move a directory into itself}] +test fCmd-9.15 {file rename: comprehensive: source and target incompatible} -setup { + cleanup +} -constraints {notRoot} -returnCodes error -body { file mkdir td1 createfile tf1 - list [catch {file rename -force td1 tf1} msg] $msg -} {1 {can't overwrite file "tf1" with directory "td1"}} -test fCmd-9.16 {file rename: comprehensive: source and target incompatible} \ - {notRoot} { + file rename -force td1 tf1 +} -cleanup { + cleanup +} -result {can't overwrite file "tf1" with directory "td1"} +test fCmd-9.16 {file rename: comprehensive: source and target incompatible} -setup { cleanup +} -constraints {notRoot} -returnCodes error -body { file mkdir td1/tf1 createfile tf1 - list [catch {file rename -force tf1 td1} msg] $msg -} [subst {1 {can't overwrite directory "[file join td1 tf1]" with file "tf1"}}] + file rename -force tf1 td1 +} -result [subst {can't overwrite directory "[file join td1 tf1]" with file "tf1"}] -test fCmd-10.1 {file copy: comprehensive: source doesn't exist} {notRoot} { +test fCmd-10.1 {file copy: comprehensive: source doesn't exist} -setup { cleanup - list [catch {file copy tf1 tf2} msg] $msg -} {1 {error copying "tf1": no such file or directory}} +} -constraints {notRoot} -returnCodes error -body { + file copy tf1 tf2 +} -result {error copying "tf1": no such file or directory} test fCmd-10.2 {file copy: comprehensive: file to new name} {notRoot testchmod} { cleanup createfile tf1 tf1 @@ -874,35 +1001,38 @@ test fCmd-10.2 {file copy: comprehensive: file to new name} {notRoot testchmod} file copy tf2 tf4 list [lsort [glob tf*]] [contents tf3] [contents tf4] [file writable tf3] [file writable tf4] } {{tf1 tf2 tf3 tf4} tf1 tf2 1 0} -test fCmd-10.3 {file copy: comprehensive: dir to new name} {notRoot unixOrPc 95or98 testchmod} { +test fCmd-10.3 {file copy: comprehensive: dir to new name} -setup { cleanup +} -constraints {notRoot unix testchmod} -body { file mkdir [file join td1 tdx] file mkdir [file join td2 tdy] testchmod 555 td2 file copy td1 td3 file copy td2 td4 - set msg [list [lsort [glob td*]] [glob -directory td3 t*] \ - [glob -directory td4 t*] [file writable td3] [file writable td4]] - testchmod 755 td2 - testchmod 755 td4 - set msg -} [subst {{td1 td2 td3 td4} [file join td3 tdx] [file join td4 tdy] 1 0}] -test fCmd-10.3.1 {file copy: comprehensive: dir to new name} {notRoot pc 2000orNewer testchmod} { - # On Windows with ACLs, copying a directory is defined like this + list [lsort [glob td*]] [glob -directory td3 t*] \ + [glob -directory td4 t*] [file writable td3] [file writable td4] +} -cleanup { + testchmod 755 td2 + testchmod 755 td4 +} -result [list {td1 td2 td3 td4} [file join td3 tdx] [file join td4 tdy] 1 0] +test fCmd-10.3.1 {file copy: comprehensive: dir to new name} -setup { cleanup +} -constraints {notRoot win 2000orNewer testchmod} -body { + # On Windows with ACLs, copying a directory is defined like this file mkdir [file join td1 tdx] file mkdir [file join td2 tdy] testchmod 555 td2 file copy td1 td3 file copy td2 td4 - set msg [list [lsort [glob td*]] [glob -directory td3 t*] \ - [glob -directory td4 t*] [file writable td3] [file writable td4]] + list [lsort [glob td*]] [glob -directory td3 t*] \ + [glob -directory td4 t*] [file writable td3] [file writable td4] +} -cleanup { testchmod 755 td2 testchmod 755 td4 - set msg -} [subst {{td1 td2 td3 td4} [file join td3 tdx] [file join td4 tdy] 1 1}] -test fCmd-10.4 {file copy: comprehensive: file to existing file} {notRoot testchmod} { +} -result [list {td1 td2 td3 td4} [file join td3 tdx] [file join td4 tdy] 1 1] +test fCmd-10.4 {file copy: comprehensive: file to existing file} -setup { cleanup +} -constraints {notRoot testchmod} -body { createfile tf1 createfile tf2 createfile tfs1 @@ -922,10 +1052,11 @@ test fCmd-10.4 {file copy: comprehensive: file to existing file} {notRoot testch file copy -force tfs2 tfd2 file copy -force tfs3 tfd3 file copy -force tfs4 tfd4 - list [lsort [glob tf*]] $msg [file writable tfd1] [file writable tfd2] [file writable tfd3] [file writable tfd4] -} {{tf1 tf2 tfd1 tfd2 tfd3 tfd4 tfs1 tfs2 tfs3 tfs4} {1 {error copying "tf1" to "tf2": file already exists}} 1 1 0 0} -test fCmd-10.5 {file copy: comprehensive: dir to empty dir} {notRoot testchmod} { + list [lsort [glob tf*]] $msg [file writable tfd1] [file writable tfd2] [file writable tfd3] [file writable tfd4] +} -result {{tf1 tf2 tfd1 tfd2 tfd3 tfd4 tfs1 tfs2 tfs3 tfs4} {1 {error copying "tf1" to "tf2": file already exists}} 1 1 0 0} +test fCmd-10.5 {file copy: comprehensive: dir to empty dir} -setup { cleanup +} -constraints {notRoot testchmod} -body { file mkdir td1 file mkdir [file join td2 td1] file mkdir tds1 @@ -936,20 +1067,20 @@ test fCmd-10.5 {file copy: comprehensive: dir to empty dir} {notRoot testchmod} file mkdir [file join tdd2 tds2] file mkdir [file join tdd3 tds3] file mkdir [file join tdd4 tds4] - testchmod 555 tds3 - testchmod 555 tds4 - testchmod 555 [file join tdd2 tds2] - testchmod 555 [file join tdd4 tds4] + testchmod 555 tds3 + testchmod 555 tds4 + testchmod 555 [file join tdd2 tds2] + testchmod 555 [file join tdd4 tds4] set a1 [list [catch {file copy td1 td2} msg] $msg] set a2 [list [catch {file copy -force tds1 tdd1} msg] $msg] set a3 [catch {file copy -force tds2 tdd2}] set a4 [catch {file copy -force tds3 tdd3}] set a5 [catch {file copy -force tds4 tdd4}] - list [lsort [glob td*]] $a1 $a2 $a3 $a4 $a5 -} [subst {{td1 td2 tdd1 tdd2 tdd3 tdd4 tds1 tds2 tds3 tds4} {1 {error copying "td1" to "[file join td2 td1]": file already exists}} {1 {error copying "tds1" to "[file join tdd1 tds1]": file already exists}} 1 1 1}] -test fCmd-10.6 {file copy: comprehensive: dir to non-empty dir} \ - {notRoot unixOrPc testchmod} { + list [lsort [glob td*]] $a1 $a2 $a3 $a4 $a5 +} -result [subst {{td1 td2 tdd1 tdd2 tdd3 tdd4 tds1 tds2 tds3 tds4} {1 {error copying "td1" to "[file join td2 td1]": file already exists}} {1 {error copying "tds1" to "[file join tdd1 tds1]": file already exists}} 1 1 1}] +test fCmd-10.6 {file copy: comprehensive: dir to non-empty dir} -setup { cleanup +} -constraints {notRoot unixOrPc testchmod} -body { file mkdir tds1 file mkdir tds2 file mkdir [file join tdd1 tds1 xxx] @@ -958,9 +1089,10 @@ test fCmd-10.6 {file copy: comprehensive: dir to non-empty dir} \ set a1 [list [catch {file copy -force tds1 tdd1} msg] $msg] set a2 [list [catch {file copy -force tds2 tdd2} msg] $msg] list [lsort [glob td*]] $a1 $a2 [file writable tds1] [file writable tds2] -} [subst {{tdd1 tdd2 tds1 tds2} {1 {error copying "tds1" to "[file join tdd1 tds1]": file already exists}} {1 {error copying "tds2" to "[file join tdd2 tds2]": file already exists}} 1 0}] -test fCmd-10.7 {file rename: comprehensive: file to new name and dir} {notRoot testchmod} { +} -result [subst {{tdd1 tdd2 tds1 tds2} {1 {error copying "tds1" to "[file join tdd1 tds1]": file already exists}} {1 {error copying "tds2" to "[file join tdd2 tds2]": file already exists}} 1 0}] +test fCmd-10.7 {file rename: comprehensive: file to new name and dir} -setup { cleanup +} -constraints {notRoot testchmod} -body { createfile tf1 createfile tf2 file mkdir td1 @@ -969,10 +1101,10 @@ test fCmd-10.7 {file rename: comprehensive: file to new name and dir} {notRoot t file copy tf2 [file join td1 tf4] list [lsort [glob tf*]] [lsort [glob -directory td1 t*]] \ [file writable [file join td1 tf3]] [file writable [file join td1 tf4]] -} [subst {{tf1 tf2} {[file join td1 tf3] [file join td1 tf4]} 1 0}] -test fCmd-10.8 {file rename: comprehensive: dir to new name and dir} \ - {notRoot unixOrPc 95or98 testchmod} { +} -result [subst {{tf1 tf2} {[file join td1 tf3] [file join td1 tf4]} 1 0}] +test fCmd-10.8 {file rename: comprehensive: dir to new name and dir} -setup { cleanup +} -constraints {notRoot unix testchmod} -body { file mkdir td1 file mkdir td2 file mkdir td3 @@ -981,11 +1113,11 @@ test fCmd-10.8 {file rename: comprehensive: dir to new name and dir} \ file copy td2 [file join td3 td4] list [lsort [glob td*]] [lsort [glob -directory td3 t*]] \ [file writable [file join td3 td3]] [file writable [file join td3 td4]] -} [subst {{td1 td2 td3} {[file join td3 td3] [file join td3 td4]} 1 0}] -test fCmd-10.8.1 {file rename: comprehensive: dir to new name and dir} \ - {notRoot pc 2000orNewer testchmod} { - # On Windows with ACLs, copying a directory is defined like this +} -result [subst {{td1 td2 td3} {[file join td3 td3] [file join td3 td4]} 1 0}] +test fCmd-10.8.1 {file rename: comprehensive: dir to new name and dir} -setup { cleanup +} -constraints {notRoot win 2000orNewer testchmod} -body { + # On Windows with ACLs, copying a directory is defined like this file mkdir td1 file mkdir td2 file mkdir td3 @@ -994,605 +1126,577 @@ test fCmd-10.8.1 {file rename: comprehensive: dir to new name and dir} \ file copy td2 [file join td3 td4] list [lsort [glob td*]] [lsort [glob -directory td3 t*]] \ [file writable [file join td3 td3]] [file writable [file join td3 td4]] -} [subst {{td1 td2 td3} {[file join td3 td3] [file join td3 td4]} 1 1}] -test fCmd-10.9 {file copy: comprehensive: source and target incompatible} \ - {notRoot} { +} -result [subst {{td1 td2 td3} {[file join td3 td3] [file join td3 td4]} 1 1}] +test fCmd-10.9 {file copy: comprehensive: source and target incompatible} -setup { cleanup +} -constraints {notRoot} -returnCodes error -body { file mkdir td1 createfile tf1 - list [catch {file copy -force td1 tf1} msg] $msg -} {1 {can't overwrite file "tf1" with directory "td1"}} -test fCmd-10.10 {file copy: comprehensive: source and target incompatible} \ - {notRoot} { + file copy -force td1 tf1 +} -result {can't overwrite file "tf1" with directory "td1"} +test fCmd-10.10 {file copy: comprehensive: source and target incompatible} -setup { cleanup +} -constraints {notRoot} -returnCodes error -body { file mkdir [file join td1 tf1] createfile tf1 - list [catch {file copy -force tf1 td1} msg] $msg -} [subst {1 {can't overwrite directory "[file join td1 tf1]" with file "tf1"}}] -test fCmd-10.11 {file copy: copy to empty file name} { + file copy -force tf1 td1 +} -result [subst {can't overwrite directory "[file join td1 tf1]" with file "tf1"}] +test fCmd-10.11 {file copy: copy to empty file name} -setup { cleanup +} -returnCodes error -body { createfile tf1 - list [catch {file copy tf1 ""} msg] $msg -} {1 {error copying "tf1" to "": no such file or directory}} -test fCmd-10.12 {file rename: rename to empty file name} { + file copy tf1 "" +} -result {error copying "tf1" to "": no such file or directory} +test fCmd-10.12 {file rename: rename to empty file name} -setup { cleanup +} -returnCodes error -body { createfile tf1 - list [catch {file rename tf1 ""} msg] $msg -} {1 {error renaming "tf1" to "": no such file or directory}} -cleanup + file rename tf1 "" +} -result {error renaming "tf1" to "": no such file or directory} +cleanup -# old tests +# old tests -test fCmd-11.1 {TclFileRenameCmd: -- option } {notRoot} { +test fCmd-11.1 {TclFileRenameCmd: -- option } -constraints notRoot -setup { catch {file delete -force -- -tfa1} +} -body { set s [createfile -tfa1] file rename -- -tfa1 tfa2 - set result [expr [checkcontent tfa2 $s] && ![file exists -tfa1]] + list [checkcontent tfa2 $s] [file exists -tfa1] +} -cleanup { file delete tfa2 - set result -} {1} - -test fCmd-11.2 {TclFileRenameCmd: bad option } {notRoot} { +} -result {1 0} +test fCmd-11.2 {TclFileRenameCmd: bad option } -constraints notRoot -setup { catch {file delete -force -- tfa1} +} -body { set s [createfile tfa1] - set r1 [catch {file rename -x tfa1 tfa2}] - set result [expr $r1 && [checkcontent tfa1 $s] && ![file exists tfa2]] + list [catch {file rename -x tfa1 tfa2}] \ + [checkcontent tfa1 $s] [file exists tfa2] +} -cleanup { file delete tfa1 - set result -} {1} - +} -result {1 1 0} test fCmd-11.3 {TclFileRenameCmd: bad \# args} { catch {file rename -- } } {1} - -test fCmd-11.4 {TclFileRenameCmd: target filename translation failing} {notRoot} { - global env - set temp $env(HOME) - unset env(HOME) - set result [catch {file rename tfa ~/foobar }] - set env(HOME) $temp - set result - } {1} - -test fCmd-11.5 {TclFileRenameCmd: > 1 source & target is not a dir} {notRoot} { +test fCmd-11.4 {TclFileRenameCmd: target filename translation failing} -setup { + set temp $::env(HOME) +} -constraints notRoot -body { + global env + unset env(HOME) + catch { file rename tfa ~/foobar } +} -cleanup { + set ::env(HOME) $temp +} -result 1 +test fCmd-11.5 {TclFileRenameCmd: > 1 source & target is not a dir} -setup { catch {file delete -force -- tfa1 tfa2 tfa3} - createfile tfa1 - createfile tfa2 - createfile tfa3 - set result [catch {file rename tfa1 tfa2 tfa3}] +} -constraints {notRoot} -body { + createfile tfa1 + createfile tfa2 + createfile tfa3 + catch {file rename tfa1 tfa2 tfa3} +} -cleanup { file delete tfa1 tfa2 tfa3 - set result -} {1} - -test fCmd-11.6 {TclFileRenameCmd: : single file into directory} {notRoot} { +} -result {1} +test fCmd-11.6 {TclFileRenameCmd: : single file into directory} -setup { catch {file delete -force -- tfa1 tfad} +} -constraints {notRoot} -body { set s [createfile tfa1] file mkdir tfad file rename tfa1 tfad - set result [expr [checkcontent tfad/tfa1 $s] && ![file exists tfa1]] + list [checkcontent tfad/tfa1 $s] [file exists tfa1] +} -cleanup { file delete -force tfad - set result -} {1} - -test fCmd-11.7 {TclFileRenameCmd: : multiple files into directory} {notRoot} { +} -result {1 0} +test fCmd-11.7 {TclFileRenameCmd: : multiple files into directory} -setup { catch {file delete -force -- tfa1 tfa2 tfad} - set s1 [createfile tfa1 ] - set s2 [createfile tfa2 ] +} -constraints {notRoot} -body { + set s1 [createfile tfa1] + set s2 [createfile tfa2] file mkdir tfad file rename tfa1 tfa2 tfad - set r1 [checkcontent tfad/tfa1 $s1] - set r2 [checkcontent tfad/tfa2 $s2] - - set result [expr $r1 && $r2 && ![file exists tfa1] && ![file exists tfa2]] - + list [checkcontent tfad/tfa1 $s1] [checkcontent tfad/tfa2 $s2] \ + [file exists tfa1] [file exists tfa2] +} -cleanup { file delete -force tfad - set result -} {1} - -test fCmd-11.8 {TclFileRenameCmd: error renaming file to directory} {notRoot} { +} -result {1 1 0 0} +test fCmd-11.8 {TclFileRenameCmd: error renaming file to directory} -setup { catch {file delete -force -- tfa tfad} - set s [createfile tfa ] +} -constraints {notRoot} -body { + set s [createfile tfa] file mkdir tfad file mkdir tfad/tfa - set r1 [catch {file rename tfa tfad}] - set r2 [checkcontent tfa $s] - set r3 [file isdir tfad] - set result [expr $r1 && $r2 && $r3 ] + list [catch {file rename tfa tfad}] [checkcontent tfa $s] [file isdir tfad] +} -cleanup { file delete -force tfa tfad - set result -} {1} +} -result {1 1 1} # # Coverage tests for renamefile() ; # -test fCmd-12.1 {renamefile: source filename translation failing} {notRoot} { +test fCmd-12.1 {renamefile: source filename translation failing} -setup { + set temp $::env(HOME) +} -constraints {notRoot} -body { global env - set temp $env(HOME) unset env(HOME) - set result [catch {file rename ~/tfa1 tfa2}] - set env(HOME) $temp - set result -} {1} - -test fCmd-12.2 {renamefile: src filename translation failing} {notRoot} { + catch {file rename ~/tfa1 tfa2} +} -cleanup { + set ::env(HOME) $temp +} -result {1} +test fCmd-12.2 {renamefile: src filename translation failing} -setup { + set temp $::env(HOME) +} -constraints {notRoot} -body { global env - set temp $env(HOME) unset env(HOME) set s [createfile tfa1] file mkdir tfad - set result [catch {file rename tfa1 ~/tfa2 tfad}] - set env(HOME) $temp + catch {file rename tfa1 ~/tfa2 tfad} +} -cleanup { + set ::env(HOME) $temp file delete -force tfad - set result -} {1} - -test fCmd-12.3 {renamefile: stat failing on source} {notRoot} { +} -result {1} +test fCmd-12.3 {renamefile: stat failing on source} -setup { catch {file delete -force -- tfa1 tfa2} - set r1 [catch {file rename tfa1 tfa2}] - expr {$r1 && ![file exists tfa1] && ![file exists tfa2]} -} {1} - -test fCmd-12.4 {renamefile: error renaming file to directory} {notRoot} { +} -constraints {notRoot} -body { + list [catch {file rename tfa1 tfa2}] [file exists tfa1] [file exists tfa2] +} -result {1 0 0} +test fCmd-12.4 {renamefile: error renaming file to directory} -setup { catch {file delete -force -- tfa tfad} - set s1 [createfile tfa ] +} -constraints {notRoot} -body { + set s1 [createfile tfa] file mkdir tfad file mkdir tfad/tfa - set r1 [catch {file rename tfa tfad}] - set r2 [checkcontent tfa $s1] - set r3 [file isdir tfad/tfa] - set result [expr $r1 && $r2 && $r3] + list [catch {file rename tfa tfad}] [checkcontent tfa $s1] \ + [file isdir tfad/tfa] +} -cleanup { file delete -force tfa tfad - set result -} {1} - -test fCmd-12.5 {renamefile: error renaming directory to file} {notRoot} { +} -result {1 1 1} +test fCmd-12.5 {renamefile: error renaming directory to file} -setup { catch {file delete -force -- tfa tfad} +} -constraints {notRoot} -body { file mkdir tfa file mkdir tfad set s [createfile tfad/tfa] - set r1 [catch {file rename tfa tfad}] - set r2 [checkcontent tfad/tfa $s] - set r3 [file isdir tfad] - set r4 [file isdir tfa] - set result [expr $r1 && $r2 && $r3 && $r4 ] + list [catch {file rename tfa tfad}] [checkcontent tfad/tfa $s] \ + [file isdir tfad] [file isdir tfa] +} -cleanup { file delete -force tfa tfad - set result -} {1} - -test fCmd-12.6 {renamefile: TclRenameFile succeeding} {notRoot} { +} -result {1 1 1 1} +test fCmd-12.6 {renamefile: TclRenameFile succeeding} -setup { catch {file delete -force -- tfa1 tfa2} +} -constraints {notRoot} -body { set s [createfile tfa1] file rename tfa1 tfa2 - set result [expr [checkcontent tfa2 $s] && ![file exists tfa1]] + list [checkcontent tfa2 $s] [file exists tfa1] +} -cleanup { file delete tfa2 - set result -} {1} - -test fCmd-12.7 {renamefile: renaming directory into offspring} {notRoot} { +} -result {1 0} +test fCmd-12.7 {renamefile: renaming directory into offspring} -setup { catch {file delete -force -- tfad} +} -constraints {notRoot} -body { file mkdir tfad file mkdir tfad/dir - set result [catch {file rename tfad tfad/dir}] - file delete -force tfad - set result -} {1} - -test fCmd-12.8 {renamefile: generic error} {unixOnly notRoot} { + catch {file rename tfad tfad/dir} +} -cleanup { + file delete -force tfad +} -result {1} +test fCmd-12.8 {renamefile: generic error} -setup { catch {file delete -force -- tfa} +} -constraints {unix notRoot} -body { file mkdir tfa file mkdir tfa/dir file attributes tfa -permissions 0555 - set result [catch {file rename tfa/dir tfa2}] - file attributes tfa -permissions 0777 + catch {file rename tfa/dir tfa2} +} -cleanup { + catch {file attributes tfa -permissions 0777} file delete -force tfa - set result -} {1} - - -test fCmd-12.9 {renamefile: moving a file across volumes} {unixOnly notRoot} { - catch {file delete -force -- tfa /tmp/tfa} - set s [createfile tfa ] - file rename tfa /tmp - set result [expr [checkcontent /tmp/tfa $s] && ![file exists tfa]] - file delete /tmp/tfa - set result -} {1} - -test fCmd-12.10 {renamefile: moving a directory across volumes } \ - {unixOnly notRoot} { - catch {file delete -force -- tfad /tmp/tfad} +} -result {1} +test fCmd-12.9 {renamefile: moving a file across volumes} -setup { + cleanup $tmpspace +} -constraints {xdev notRoot} -body { + set s [createfile tfa] + file rename tfa $tmpspace + list [checkcontent [file join $tmpspace tfa] $s] [file exists tfa] +} -cleanup { + cleanup $tmpspace +} -result {1 0} +test fCmd-12.10 {renamefile: moving a directory across volumes} -setup { + cleanup $tmpspace +} -constraints {xdev notRoot} -body { file mkdir tfad - set s [createfile tfad/a ] - file rename tfad /tmp - set restul [expr [checkcontent /tmp/tfad/a $s] && ![file exists tfad]] - file delete -force /tmp/tfad - set result -} {1} + set s [createfile tfad/a] + file rename tfad $tmpspace + list [checkcontent [file join $tmpspace tfad a] $s] [file exists tfad] +} -cleanup { + cleanup $tmpspace +} -result {1 0} # # Coverage tests for TclCopyFilesCmd() # -test fCmd-13.1 {TclCopyFilesCmd: -force option} {notRoot} { +test fCmd-13.1 {TclCopyFilesCmd: -force option} -constraints notRoot -setup { catch {file delete -force -- tfa1} +} -body { set s [createfile tfa1] file copy -force tfa1 tfa2 - set result [expr [checkcontent tfa2 $s] && [checkcontent tfa1 $s]] + list [checkcontent tfa2 $s] [checkcontent tfa1 $s] +} -cleanup { file delete tfa1 tfa2 - set result -} {1} - -test fCmd-13.2 {TclCopyFilesCmd: -- option} {notRoot} { +} -result {1 1} +test fCmd-13.2 {TclCopyFilesCmd: -- option} -constraints {notRoot} -setup { catch {file delete -force -- tfa1} +} -body { set s [createfile -tfa1] file copy -- -tfa1 tfa2 - set result [expr [checkcontent tfa2 $s] && [checkcontent -tfa1 $s]] + list [checkcontent tfa2 $s] [checkcontent -tfa1 $s] +} -cleanup { file delete -- -tfa1 tfa2 - set result -} {1} - -test fCmd-13.3 {TclCopyFilesCmd: bad option} {notRoot} { +} -result {1 1} +test fCmd-13.3 {TclCopyFilesCmd: bad option} -constraints {notRoot} -setup { catch {file delete -force -- tfa1} +} -body { set s [createfile tfa1] - set r1 [catch {file copy -x tfa1 tfa2}] - set result [expr $r1 && [checkcontent tfa1 $s] && ![file exists tfa2]] + list [catch {file copy -x tfa1 tfa2}] \ + [checkcontent tfa1 $s] [file exists tfa2] +} -cleanup { file delete tfa1 - set result -} {1} - +} -result {1 1 0} test fCmd-13.4 {TclCopyFilesCmd: bad \# args} {notRoot} { catch {file copy -- } } {1} - -test fCmd-13.5 {TclCopyFilesCmd: target filename translation failing} { - global env - set temp $env(HOME) +test fCmd-13.5 {TclCopyFilesCmd: target filename translation failing} -setup { + set temp $::env(HOME) +} -body { + global env unset env(HOME) - set result [catch {file copy tfa ~/foobar }] - set env(HOME) $temp - set result - } {1} - -test fCmd-13.6 {TclCopyFilesCmd: > 1 source & target is not a dir} {notRoot} { + catch { file copy tfa ~/foobar } +} -cleanup { + set ::env(HOME) $temp +} -result {1} +test fCmd-13.6 {TclCopyFilesCmd: > 1 source & target is not a dir} -setup { catch {file delete -force -- tfa1 tfa2 tfa3} - createfile tfa1 - createfile tfa2 - createfile tfa3 - set result [catch {file copy tfa1 tfa2 tfa3}] +} -constraints {notRoot} -body { + createfile tfa1 + createfile tfa2 + createfile tfa3 + catch {file copy tfa1 tfa2 tfa3} +} -cleanup { file delete tfa1 tfa2 tfa3 - set result -} {1} - -test fCmd-13.7 {TclCopyFilesCmd: single file into directory} {notRoot} { +} -result {1} +test fCmd-13.7 {TclCopyFilesCmd: single file into directory} -setup { catch {file delete -force -- tfa1 tfad} +} -constraints {notRoot} -body { set s [createfile tfa1] file mkdir tfad file copy tfa1 tfad - set result [expr [checkcontent tfad/tfa1 $s] && [checkcontent tfa1 $s]] + list [checkcontent tfad/tfa1 $s] [checkcontent tfa1 $s] +} -cleanup { file delete -force tfad tfa1 - set result -} {1} - -test fCmd-13.8 {TclCopyFilesCmd: multiple files into directory} {notRoot} { +} -result {1 1} +test fCmd-13.8 {TclCopyFilesCmd: multiple files into directory} -setup { catch {file delete -force -- tfa1 tfa2 tfad} +} -constraints {notRoot} -body { set s1 [createfile tfa1 ] set s2 [createfile tfa2 ] file mkdir tfad file copy tfa1 tfa2 tfad - set r1 [checkcontent tfad/tfa1 $s1] - set r2 [checkcontent tfad/tfa2 $s2] - set r3 [checkcontent tfa1 $s1] - set r4 [checkcontent tfa2 $s2] - set result [expr $r1 && $r2 && $r3 && $r4 ] - + list [checkcontent tfad/tfa1 $s1] [checkcontent tfad/tfa2 $s2] \ + [checkcontent tfa1 $s1] [checkcontent tfa2 $s2] +} -cleanup { file delete -force tfad tfa1 tfa2 - set result -} {1} - -test fCmd-13.9 {TclCopyFilesCmd: error copying file to directory} {notRoot} { +} -result {1 1 1 1} +test fCmd-13.9 {TclCopyFilesCmd: error copying file to directory} -setup { catch {file delete -force -- tfa tfad} - set s [createfile tfa ] +} -constraints {notRoot} -body { + set s [createfile tfa] file mkdir tfad file mkdir tfad/tfa - set r1 [catch {file copy tfa tfad}] - set r2 [expr [checkcontent tfa $s] && [file isdir tfad/tfa]] - set r3 [file isdir tfad] - set result [expr $r1 && $r2 && $r3 ] + list [catch {file copy tfa tfad}] [checkcontent tfa $s] \ + [file isdir tfad/tfa] [file isdir tfad] +} -cleanup { file delete -force tfa tfad - set result -} {1} +} -result {1 1 1 1} # # Coverage tests for copyfile() -# -test fCmd-14.1 {copyfile: source filename translation failing} {notRoot} { +# +test fCmd-14.1 {copyfile: source filename translation failing} -setup { + set temp $::env(HOME) +} -constraints {notRoot} -body { global env - set temp $env(HOME) unset env(HOME) - set result [catch {file copy ~/tfa1 tfa2}] - set env(HOME) $temp - set result -} {1} - -test fCmd-14.2 {copyfile: dst filename translation failing} {notRoot} { + catch {file copy ~/tfa1 tfa2} +} -cleanup { + set ::env(HOME) $temp +} -result {1} +test fCmd-14.2 {copyfile: dst filename translation failing} -setup { + set temp $::env(HOME) +} -constraints {notRoot} -body { global env - set temp $env(HOME) unset env(HOME) set s [createfile tfa1] file mkdir tfad - set r1 [catch {file copy tfa1 ~/tfa2 tfad}] - set result [expr $r1 && [checkcontent tfad/tfa1 $s]] - set env(HOME) $temp + list [catch {file copy tfa1 ~/tfa2 tfad}] [checkcontent tfad/tfa1 $s] +} -cleanup { + set ::env(HOME) $temp file delete -force tfa1 tfad - set result -} {1} - -test fCmd-14.3 {copyfile: stat failing on source} {notRoot} { +} -result {1 1} +test fCmd-14.3 {copyfile: stat failing on source} -setup { catch {file delete -force -- tfa1 tfa2} - set r1 [catch {file copy tfa1 tfa2}] - expr $r1 && ![file exists tfa1] && ![file exists tfa2] -} {1} - -test fCmd-14.4 {copyfile: error copying file to directory} {notRoot} { +} -constraints notRoot -body { + list [catch {file copy tfa1 tfa2}] [file exists tfa1] [file exists tfa2] +} -result {1 0 0} +test fCmd-14.4 {copyfile: error copying file to directory} -setup { catch {file delete -force -- tfa tfad} +} -constraints {notRoot} -body { set s1 [createfile tfa ] file mkdir tfad file mkdir tfad/tfa - set r1 [catch {file copy tfa tfad}] - set r2 [checkcontent tfa $s1] - set r3 [file isdir tfad] - set r4 [file isdir tfad/tfa] - set result [expr $r1 && $r2 && $r3 && $r4 ] + list [catch {file copy tfa tfad}] [checkcontent tfa $s1] \ + [file isdir tfad] [file isdir tfad/tfa] +} -cleanup { file delete -force tfa tfad - set result -} {1} - - test fCmd-14.5 {copyfile: error copying directory to file} {notRoot} { - catch {file delete -force -- tfa tfad} - file mkdir tfa - file mkdir tfad - set s [createfile tfad/tfa] - set r1 [catch {file copy tfa tfad}] - set r2 [checkcontent tfad/tfa $s] - set r3 [file isdir tfad] - set r4 [file isdir tfa] - set result [expr $r1 && $r2 && $r3 && $r4 ] +} -result {1 1 1 1} +test fCmd-14.5 {copyfile: error copying directory to file} -setup { + catch {file delete -force -- tfa tfad} +} -constraints {notRoot} -body { + file mkdir tfa + file mkdir tfad + set s [createfile tfad/tfa] + list [catch {file copy tfa tfad}] [checkcontent tfad/tfa $s] \ + [file isdir tfad] [file isdir tfa] +} -cleanup { file delete -force tfa tfad - set result -} {1} - -test fCmd-14.6 {copyfile: copy file succeeding} {notRoot} { +} -result {1 1 1 1} +test fCmd-14.6 {copyfile: copy file succeeding} -constraints notRoot -setup { catch {file delete -force -- tfa tfa2} +} -body { set s [createfile tfa] file copy tfa tfa2 - set result [expr [checkcontent tfa $s] && [checkcontent tfa2 $s]] + list [checkcontent tfa $s] [checkcontent tfa2 $s] +} -cleanup { file delete tfa tfa2 - set result -} {1} - -test fCmd-14.7 {copyfile: copy directory succeeding} {notRoot} { +} -result {1 1} +test fCmd-14.7 {copyfile: copy directory succeeding} -setup { catch {file delete -force -- tfa tfa2} +} -constraints {notRoot} -body { file mkdir tfa set s [createfile tfa/file] file copy tfa tfa2 - set result [expr [checkcontent tfa/file $s] && [checkcontent tfa2/file $s]] + list [checkcontent tfa/file $s] [checkcontent tfa2/file $s] +} -cleanup { file delete -force tfa tfa2 - set result -} {1} - -test fCmd-14.8 {copyfile: copy directory failing} {unixOnly notRoot} { +} -result {1 1} +test fCmd-14.8 {copyfile: copy directory failing} -setup { catch {file delete -force -- tfa} +} -constraints {unix notRoot} -body { file mkdir tfa/dir/a/b/c file attributes tfa/dir -permissions 0000 - set r1 [catch {file copy tfa tfa2}] + catch {file copy tfa tfa2} +} -cleanup { file attributes tfa/dir -permissions 0777 - set result $r1 file delete -force tfa tfa2 - set result -} {1} +} -result {1} # # Coverage tests for TclMkdirCmd() # -test fCmd-15.1 {TclMakeDirsCmd: target filename translation failing} {notRoot} { +test fCmd-15.1 {TclMakeDirsCmd: target filename translation failing} -setup { + set temp $::env(HOME) +} -constraints {notRoot} -body { global env - set temp $env(HOME) - unset env(HOME) - set result [catch {file mkdir ~/tfa}] - set env(HOME) $temp - set result -} {1} + unset env(HOME) + catch {file mkdir ~/tfa} +} -cleanup { + set ::env(HOME) $temp +} -result {1} # # Can Tcl_SplitPath return argc == 0? If so them we need a # test for that code. # -test fCmd-15.2 {TclMakeDirsCmd - one directory } {notRoot} { +test fCmd-15.2 {TclMakeDirsCmd - one directory } -setup { catch {file delete -force -- tfa} +} -constraints {notRoot} -body { file mkdir tfa - set result [file isdirectory tfa] + file isdirectory tfa +} -cleanup { file delete tfa - set result -} {1} - -test fCmd-15.3 {TclMakeDirsCmd: - two directories} {notRoot} { +} -result {1} +test fCmd-15.3 {TclMakeDirsCmd: - two directories} -setup { catch {file delete -force -- tfa1 tfa2} +} -constraints {notRoot} -body { file mkdir tfa1 tfa2 - set result [expr [file isdirectory tfa1] && [file isdirectory tfa2]] + list [file isdirectory tfa1] [file isdirectory tfa2] +} -cleanup { file delete tfa1 tfa2 - set result -} {1} - -test fCmd-15.4 {TclMakeDirsCmd - stat failing} {unixOnly notRoot} { +} -result {1 1} +test fCmd-15.4 {TclMakeDirsCmd - stat failing} -setup { catch {file delete -force -- tfa} +} -constraints {unix notRoot} -body { file mkdir tfa createfile tfa/file file attributes tfa -permissions 0000 - set result [catch {file mkdir tfa/file}] + catch {file mkdir tfa/file} +} -cleanup { file attributes tfa -permissions 0777 file delete -force tfa - set result -} {1} - -test fCmd-15.5 {TclMakeDirsCmd: - making a directory several levels deep} \ - {notRoot} { +} -result {1} +test fCmd-15.5 {TclMakeDirsCmd: - making a directory several levels deep} -setup { catch {file delete -force -- tfa} +} -constraints {notRoot} -body { file mkdir tfa/a/b/c - set result [file isdir tfa/a/b/c] + file isdir tfa/a/b/c +} -cleanup { file delete -force tfa - set result -} {1} - - -test fCmd-15.6 {TclMakeDirsCmd: - trying to overwrite a file} {notRoot} { +} -result {1} +test fCmd-15.6 {TclMakeDirsCmd: - trying to overwrite a file} -setup { catch {file delete -force -- tfa} +} -constraints {notRoot} -body { set s [createfile tfa] - set r1 [catch {file mkdir tfa}] - set r2 [file isdir tfa] - set r3 [file exists tfa] - set result [expr $r1 && !$r2 && $r3 && [checkcontent tfa $s]] + list [catch {file mkdir tfa}] [file isdir tfa] [file exists tfa] \ + [checkcontent tfa $s] +} -cleanup { file delete tfa - set result -} {1} - -test fCmd-15.7 {TclMakeDirsCmd - making several directories} {notRoot} { +} -result {1 0 1 1} +test fCmd-15.7 {TclMakeDirsCmd - making several directories} -setup { catch {file delete -force -- tfa1 tfa2} +} -constraints {notRoot} -body { file mkdir tfa1 tfa2/a/b/c - set result [expr [file isdir tfa1] && [file isdir tfa2/a/b/c]] + list [file isdir tfa1] [file isdir tfa2/a/b/c] +} -cleanup { file delete -force tfa1 tfa2 - set result -} {1} - -test fCmd-15.8 {TclFileMakeDirsCmd: trying to create an existing dir} {notRoot} { +} -result {1 1} +test fCmd-15.8 {TclFileMakeDirsCmd: trying to create an existing dir} -body { file mkdir tfa file mkdir tfa - set result [file isdir tfa] + file isdir tfa +} -constraints {notRoot} -cleanup { file delete tfa - set result -} {1} - +} -result {1} # Coverage tests for TclDeleteFilesCommand() -test fCmd-16.1 {test the -- argument} {notRoot} { +test fCmd-16.1 {test the -- argument} -constraints {notRoot} -setup { catch {file delete -force -- tfa} +} -body { createfile tfa file delete -- tfa file exists tfa -} {0} - -test fCmd-16.2 {test the -force and -- arguments} {notRoot} { +} -result 0 +test fCmd-16.2 {test the -force and -- arguments} -constraints notRoot -setup { catch {file delete -force -- tfa} +} -body { createfile tfa file delete -force -- tfa file exists tfa -} {0} - -test fCmd-16.3 {test bad option} {notRoot} { +} -result 0 +test fCmd-16.3 {test bad option} -constraints {notRoot} -setup { catch {file delete -force -- tfa} +} -body { createfile tfa - set result [catch {file delete -dog tfa}] + catch {file delete -dog tfa} +} -cleanup { file delete tfa - set result -} {1} - -test fCmd-16.4 {test not enough args} {notRoot} { - catch {file delete} -} {1} - -test fCmd-16.5 {test not enough args with options} {notRoot} { - catch {file delete --} -} {1} - -test fCmd-16.6 {delete: source filename translation failing} {notRoot} { +} -result {1} +test fCmd-16.4 {test not enough args} -constraints {notRoot} -body { + file delete +} -returnCodes error -match glob -result "wrong \# args: should be *" +test fCmd-16.5 {test not enough args with options} -constraints {notRoot} -body { + file delete -- +} -returnCodes error -match glob -result "wrong \# args: should be *" +test fCmd-16.6 {delete: source filename translation failing} -setup { + set temp $::env(HOME) +} -constraints {notRoot} -body { global env - set temp $env(HOME) unset env(HOME) - set result [catch {file delete ~/tfa}] - set env(HOME) $temp - set result -} {1} - -test fCmd-16.7 {remove a non-empty directory without -force } {notRoot} { + catch {file delete ~/tfa} +} -cleanup { + set ::env(HOME) $temp +} -result {1} +test fCmd-16.7 {remove a non-empty directory without -force} -setup { catch {file delete -force -- tfa} +} -constraints {notRoot} -body { file mkdir tfa createfile tfa/a - set result [catch {file delete tfa }] + catch {file delete tfa} +} -cleanup { file delete -force tfa - set result -} {1} - -test fCmd-16.8 {remove a normal file } {notRoot} { +} -result {1} +test fCmd-16.8 {remove a normal file} -constraints {notRoot} -setup { catch {file delete -force -- tfa} +} -body { file mkdir tfa createfile tfa/a - set result [catch {file delete tfa }] + catch {file delete tfa} +} -cleanup { file delete -force tfa - set result -} {1} - -test fCmd-16.9 {error while deleting file } {unixOnly notRoot} { +} -result {1} +test fCmd-16.9 {error while deleting file} -setup { catch {file delete -force -- tfa} +} -constraints {unix notRoot} -body { file mkdir tfa createfile tfa/a file attributes tfa -permissions 0555 - set result [catch {file delete tfa/a }] + catch {file delete tfa/a} ####### - ####### If any directory in a tree that is being removed does not - ####### have write permission, the process will fail! - ####### This is also the case with "rm -rf" + ####### If any directory in a tree that is being removed does not have + ####### write permission, the process will fail! This is also the case + ####### with "rm -rf" ####### +} -cleanup { file attributes tfa -permissions 0777 file delete -force tfa - set result -} {1} - -test fCmd-16.10 {deleting multiple files} {notRoot} { +} -result {1} +test fCmd-16.10 {deleting multiple files} -constraints {notRoot} -setup { catch {file delete -force -- tfa1 tfa2} +} -body { createfile tfa1 createfile tfa2 file delete tfa1 tfa2 - expr ![file exists tfa1] && ![file exists tfa2] -} {1} - -test fCmd-16.11 {TclFileDeleteCmd: removing a nonexistant file} {notRoot} { + list [file exists tfa1] [file exists tfa2] +} -result {0 0} +test fCmd-16.11 {TclFileDeleteCmd: removing a nonexistant file} -setup { catch {file delete -force -- tfa} +} -constraints {notRoot} -body { file delete tfa - set result 1 -} {1} +} -result {} # More coverage tests for mkpath() - test fCmd-17.1 {mkdir stat failing on target but not ENOENT} {unixOnly notRoot} { +test fCmd-17.1 {mkdir stat failing on target but not ENOENT} -setup { catch {file delete -force -- tfa1} +} -constraints {unix notRoot} -body { file mkdir tfa1 file attributes tfa1 -permissions 0555 - set result [catch {file mkdir tfa1/tfa2}] + catch {file mkdir tfa1/tfa2} +} -cleanup { file attributes tfa1 -permissions 0777 file delete -force tfa1 - set result -} {1} - -test fCmd-17.2 {mkdir several levels deep - relative } {notRoot} { +} -result {1} +test fCmd-17.2 {mkdir several levels deep - relative} -setup { catch {file delete -force -- tfa} +} -constraints {notRoot} -body { file mkdir tfa/a/b - set result [file isdir tfa/a/b ] + file isdir tfa/a/b +} -cleanup { file delete tfa/a/b tfa/a tfa - set result -} {1} - -test fCmd-17.3 {mkdir several levels deep - absolute } {notRoot} { +} -result 1 +test fCmd-17.3 {mkdir several levels deep - absolute} -setup { catch {file delete -force -- tfa} - set f [file join [pwd] tfa a ] +} -constraints {notRoot} -body { + set f [file join [pwd] tfa a] file mkdir $f - set result [file isdir $f ] + file isdir $f +} -cleanup { file delete $f [file join [pwd] tfa] - set result -} {1} +} -result {1} # # Functionality tests for TclFileRenameCmd() # test fCmd-18.1 {TclFileRenameCmd: rename (first form) in the same directory} \ - {notRoot} { + -setup { catch {file delete -force -- tfad} + set savedDir [pwd] +} -constraints {notRoot} -body { file mkdir tfad/dir cd tfad/dir set s [createfile foo ] @@ -1605,217 +1709,191 @@ test fCmd-18.1 {TclFileRenameCmd: rename (first form) in the same directory} \ file rename ../../tfad/dir/foo ../../tfad/dir/bar file rename [file join [pwd] bar] foo file rename foo [file join [pwd] bar] - set result [expr [checkcontent bar $s] && ![file exists foo]] - cd ../.. + list [checkcontent bar $s] [file exists foo] +} -cleanup { + cd $savedDir file delete -force tfad - set result -} {1} - -test fCmd-18.2 {TclFileRenameCmd: single dir to nonexistant} {notRoot} { +} -result {1 0} +test fCmd-18.2 {TclFileRenameCmd: single dir to nonexistant} -setup { catch {file delete -force -- tfa1 tfa2} +} -constraints {notRoot} -body { file mkdir tfa1 file rename tfa1 tfa2 - set result [expr [file exists tfa2] && ![file exists tfa1]] + list [file exists tfa2] [file exists tfa1] +} -cleanup { file delete tfa2 - set result -} {1} - -test fCmd-18.3 {TclFileRenameCmd: mixed dirs and files into directory} {notRoot} { +} -result {1 0} +test fCmd-18.3 {TclFileRenameCmd: mixed dirs and files into directory} -setup { catch {file delete -force -- tfa1 tfad1 tfad2} - set s [createfile tfa1 ] +} -constraints {notRoot} -body { + set s [createfile tfa1] file mkdir tfad1 tfad2 file rename tfa1 tfad1 tfad2 - set r1 [checkcontent tfad2/tfa1 $s] - set r2 [file isdir tfad2/tfad1] - set result [expr $r1 && $r2 && ![file exists tfa1] && ![file exists tfad1]] + list [checkcontent tfad2/tfa1 $s] [file isdir tfad2/tfad1] \ + [file exists tfa1] [file exists tfad1] +} -cleanup { file delete tfad2/tfa1 file delete -force tfad2 - set result -} {1} - -test fCmd-18.4 {TclFileRenameCmd: attempt to replace non-dir with dir} {notRoot} { +} -result {1 1 0 0} +test fCmd-18.4 {TclFileRenameCmd: attempt to replace non-dir with dir} -setup { catch {file delete -force -- tfa tfad} - set s [createfile tfa ] +} -constraints {notRoot} -body { + set s [createfile tfa] file mkdir tfad - set r1 [catch {file rename tfad tfa}] - set r2 [checkcontent tfa $s] - set r3 [file isdir tfad] - set result [expr $r1 && $r2 && $r3 ] + list [catch {file rename tfad tfa}] [checkcontent tfa $s] [file isdir tfad] +} -cleanup { file delete tfa tfad - set result -} {1} - -test fCmd-18.5 {TclFileRenameCmd: attempt to replace dir with non-dir} {notRoot} { +} -result {1 1 1} +test fCmd-18.5 {TclFileRenameCmd: attempt to replace dir with non-dir} -setup { catch {file delete -force -- tfa tfad} - set s [createfile tfa ] +} -constraints {notRoot} -body { + set s [createfile tfa] file mkdir tfad/tfa - set r1 [catch {file rename tfa tfad}] - set r2 [checkcontent tfa $s] - set r3 [file isdir tfad/tfa] - set result [expr $r1 && $r2 && $r3 ] - file delete -force tfa tfad - set result -} {1} - + list [catch {file rename tfa tfad}] [checkcontent tfa $s] \ + [file isdir tfad/tfa] +} -cleanup { + file delete -force tfa tfad +} -result {1 1 1} # # On Windows there is no easy way to determine if two files are the same # -test fCmd-18.6 {TclFileRenameCmd: rename a file to itself} {macOrUnix notRoot} { +test fCmd-18.6 {TclFileRenameCmd: rename a file to itself} -setup { catch {file delete -force -- tfa} +} -constraints {unix notRoot} -body { set s [createfile tfa] - set r1 [catch {file rename tfa tfa}] - set result [expr $r1 && [checkcontent tfa $s]] + list [catch {file rename tfa tfa}] [checkcontent tfa $s] +} -cleanup { file delete tfa - set result -} {1} - -test fCmd-18.7 {TclFileRenameCmd: rename dir on top of another empty dir w/o -force} \ - {notRoot} { +} -result {1 1} +test fCmd-18.7 {TclFileRenameCmd: rename dir on top of another empty dir w/o -force} -setup { catch {file delete -force -- tfa tfad} +} -constraints {notRoot} -body { file mkdir tfa tfad/tfa - set r1 [catch {file rename tfa tfad}] - set result [expr $r1 && [file isdir tfa]] + list [catch {file rename tfa tfad}] [file isdir tfa] +} -cleanup { file delete -force tfa tfad - set result -} {1} - -test fCmd-18.8 {TclFileRenameCmd: rename dir on top of another empty dir w/ -force} \ - {notRoot notNetworkFilesystem} { +} -result {1 1} +test fCmd-18.8 {TclFileRenameCmd: rename dir on top of another empty dir w/ -force} -setup { catch {file delete -force -- tfa tfad} +} -constraints {notRoot notNetworkFilesystem} -body { file mkdir tfa tfad/tfa file rename -force tfa tfad - set result [expr ![file isdir tfa]] + file isdir tfa +} -cleanup { file delete -force tfad - set result -} {1} - -test fCmd-18.9 {TclFileRenameCmd: rename dir on top of a non-empty dir w/o -force} \ - {notRoot} { +} -result 0 +test fCmd-18.9 {TclFileRenameCmd: rename dir on top of a non-empty dir w/o -force} -setup { catch {file delete -force -- tfa tfad} +} -constraints {notRoot} -body { file mkdir tfa tfad/tfa/file - set r1 [catch {file rename tfa tfad}] - set result [expr $r1 && [file isdir tfa] && [file isdir tfad/tfa/file]] + list [catch {file rename tfa tfad}] [file isdir tfa] \ + [file isdir tfad/tfa/file] +} -cleanup { file delete -force tfa tfad - set result -} {1} - -test fCmd-18.10 {TclFileRenameCmd: rename dir on top of a non-empty dir w/ -force} \ - {notRoot notNetworkFilesystem} { +} -result {1 1 1} +test fCmd-18.10 {TclFileRenameCmd: rename dir on top of a non-empty dir w/ -force} -setup { catch {file delete -force -- tfa tfad} +} -constraints {notRoot notNetworkFilesystem} -body { file mkdir tfa tfad/tfa/file - set r1 [catch {file rename -force tfa tfad}] - set result [expr $r1 && [file isdir tfa] && [file isdir tfad/tfa/file]] + list [catch {file rename -force tfa tfad}] [file isdir tfa] \ + [file isdir tfad/tfa/file] +} -cleanup { file delete -force tfa tfad - set result -} {1} - -test fCmd-18.11 {TclFileRenameCmd: rename a non-existant file} {notRoot} { +} -result {1 1 1} +test fCmd-18.11 {TclFileRenameCmd: rename a non-existant file} -setup { catch {file delete -force -- tfa1} - set r1 [catch {file rename tfa1 tfa2}] - set result [expr $r1 && ![file exists tfa1] && ![file exists tfa2]] -} {1} - -test fCmd-18.12 {TclFileRenameCmd : rename a symbolic link to file} \ - {unixOnly notRoot} { +} -constraints {notRoot} -body { + list [catch {file rename tfa1 tfa2}] [file exists tfa1] [file exists tfa2] +} -result {1 0 0} +test fCmd-18.12 {TclFileRenameCmd : rename a symbolic link to file} -setup { catch {file delete -force -- tfa1 tfa2 tfa3} - +} -constraints {unix notRoot} -body { set s [createfile tfa1] file link -symbolic tfa2 tfa1 file rename tfa2 tfa3 - set t [file type tfa3] - set result [expr {$t eq "link"}] + file type tfa3 +} -cleanup { file delete tfa1 tfa3 - set result -} {1} - -test fCmd-18.13 {TclFileRenameCmd : rename a symbolic link to dir} \ - {unixOnly notRoot} { +} -result link +test fCmd-18.13 {TclFileRenameCmd : rename a symbolic link to dir} -setup { catch {file delete -force -- tfa1 tfa2 tfa3} - +} -constraints {unix notRoot} -body { file mkdir tfa1 file link -symbolic tfa2 tfa1 file rename tfa2 tfa3 - set t [file type tfa3] - set result [expr {$t eq "link"}] + file type tfa3 +} -cleanup { file delete tfa1 tfa3 - set result -} {1} - -test fCmd-18.14 {TclFileRenameCmd : rename a path with sym link} \ - {unixOnly notRoot} { +} -result link +test fCmd-18.14 {TclFileRenameCmd : rename a path with sym link} -setup { catch {file delete -force -- tfa1 tfa2 tfa3} - +} -constraints {unix notRoot} -body { file mkdir tfa1/a/b/c/d file mkdir tfa2 - set f [file join [pwd] tfa1/a/b] + set f [file join [pwd] tfa1/a/b] set f2 [file join [pwd] {tfa2/b alias}] file link -symbolic $f2 $f file rename {tfa2/b alias/c} tfa3 - set r1 [file isdir tfa3] - set r2 [file exists tfa1/a/b/c] - set result [expr $r1 && !$r2] + list [file isdir tfa3] [file exists tfa1/a/b/c] +} -cleanup { file delete -force tfa1 tfa2 tfa3 - set result -} {1} - -test fCmd-18.15 {TclFileRenameCmd : rename a file to a symlink dir} \ - {unixOnly notRoot} { +} -result {1 0} +test fCmd-18.15 {TclFileRenameCmd : rename a file to a symlink dir} -setup { catch {file delete -force -- tfa1 tfa2 tfalink} - +} -constraints {unix notRoot} -body { file mkdir tfa1 set s [createfile tfa2] file link -symbolic tfalink tfa1 file rename tfa2 tfalink - set result [checkcontent tfa1/tfa2 $s ] + checkcontent tfa1/tfa2 $s +} -cleanup { file delete -force tfa1 tfalink - set result -} {1} - -test fCmd-18.16 {TclFileRenameCmd: rename a dangling symlink} {unixOnly notRoot} { +} -result {1} +test fCmd-18.16 {TclFileRenameCmd: rename a dangling symlink} -setup { catch {file delete -force -- tfa1 tfalink} - +} -constraints {unix notRoot} -body { file mkdir tfa1 file link -symbolic tfalink tfa1 - file delete tfa1 + file delete tfa1 file rename tfalink tfa2 - set result [expr [string compare [file type tfa2] "link"] == 0] + file type tfa2 +} -cleanup { file delete tfa2 - set result -} {1} - +} -result link # # Coverage tests for TclUnixRmdir # -test fCmd-19.1 {remove empty directory} {notRoot} { +test fCmd-19.1 {remove empty directory} -constraints {notRoot} -setup { catch {file delete -force -- tfa} +} -body { file mkdir tfa file delete tfa file exists tfa -} {0} - -test fCmd-19.2 {rmdir error besides EEXIST} {unixOnly notRoot} { +} -result {0} +test fCmd-19.2 {rmdir error besides EEXIST} -setup { catch {file delete -force -- tfa} +} -constraints {unix notRoot} -body { file mkdir tfa file mkdir tfa/a file attributes tfa -permissions 0555 - set result [catch {file delete tfa/a}] + catch {file delete tfa/a} +} -cleanup { file attributes tfa -permissions 0777 file delete -force tfa - set result -} {1} - -test fCmd-19.3 {recursive remove} {notRoot} { +} -result {1} +test fCmd-19.3 {recursive remove} -constraints {notRoot} -setup { catch {file delete -force -- tfa} +} -body { file mkdir tfa file mkdir tfa/a file delete -force tfa file exists tfa -} {0} +} -result {0} # -# TclUnixDeleteFile and TraversalDelete are covered by tests from the +# TclUnixDeleteFile and TraversalDelete are covered by tests from the # TclDeleteFilesCmd suite # # @@ -1824,235 +1902,229 @@ test fCmd-19.3 {recursive remove} {notRoot} { # Coverage tests for TraverseUnixTree(), called from TclDeleteFilesCmd # -test fCmd-20.1 {TraverseUnixTree : failure opening a subdirectory directory } \ - {unixOnly notRoot} { +test fCmd-20.1 {TraverseUnixTree : failure opening a subdirectory directory } -setup { catch {file delete -force -- tfa} +} -constraints {unix notRoot} -body { file mkdir tfa file mkdir tfa/a file attributes tfa/a -permissions 0000 - set result [catch {file delete -force tfa}] + catch {file delete -force tfa} +} -cleanup { file attributes tfa/a -permissions 0777 file delete -force tfa - set result -} {1} - -test fCmd-20.2 {TraverseUnixTree : recursive delete of large directory: Bug 1034337} \ - {unix notRoot} { +} -result {1} +test fCmd-20.2 {TraverseUnixTree : recursive delete of large directory: Bug 1034337} -setup { catch {file delete -force -- tfa} +} -constraints {unix notRoot} -body { file mkdir tfa - for {set i 1} {$i <= 300} {incr i} {createfile tfa/testfile_$i} - set result [catch {file delete -force tfa} msg] + for {set i 1} {$i <= 300} {incr i} { + createfile tfa/testfile_$i + } + file delete -force tfa +} -cleanup { while {[catch {file delete -force tfa}]} {} - list $result $msg -} {0 {}} +} -result {} # # Feature testing for TclCopyFilesCmd -# -test fCmd-21.1 {copy : single file to nonexistant } {notRoot} { +# +test fCmd-21.1 {copy : single file to nonexistant} -setup { catch {file delete -force -- tfa1 tfa2} +} -constraints {notRoot} -body { set s [createfile tfa1] file copy tfa1 tfa2 - set result [expr [checkcontent tfa2 $s] && [checkcontent tfa1 $s]] + list [checkcontent tfa2 $s] [checkcontent tfa1 $s] +} -cleanup { file delete tfa1 tfa2 - set result -} {1} - -test fCmd-21.2 {copy : single dir to nonexistant } {notRoot} { +} -result {1 1} +test fCmd-21.2 {copy : single dir to nonexistant} -setup { catch {file delete -force -- tfa1 tfa2} +} -constraints {notRoot} -body { file mkdir tfa1 file copy tfa1 tfa2 - set result [expr [file isdir tfa2] && [file isdir tfa1]] + list [file isdir tfa2] [file isdir tfa1] +} -cleanup { file delete tfa1 tfa2 - set result -} {1} - -test fCmd-21.3 {copy : single file into directory } {notRoot} { +} -result {1 1} +test fCmd-21.3 {copy : single file into directory} -setup { catch {file delete -force -- tfa1 tfad} +} -constraints {notRoot} -body { set s [createfile tfa1] file mkdir tfad file copy tfa1 tfad - set result [expr [checkcontent tfad/tfa1 $s] && [checkcontent tfa1 $s]] + list [checkcontent tfad/tfa1 $s] [checkcontent tfa1 $s] +} -cleanup { file delete -force tfa1 tfad - set result -} {1} - -test fCmd-21.4 {copy : more than one source and target is not a directory} \ - {notRoot} { +} -result {1 1} +test fCmd-21.4 {copy : more than one source and target is not a directory} -setup { catch {file delete -force -- tfa1 tfa2 tfa3} - createfile tfa1 - createfile tfa2 - createfile tfa3 - set result [catch {file copy tfa1 tfa2 tfa3}] +} -constraints {notRoot} -body { + createfile tfa1 + createfile tfa2 + createfile tfa3 + catch {file copy tfa1 tfa2 tfa3} +} -cleanup { file delete tfa1 tfa2 tfa3 - set result -} {1} - -test fCmd-21.5 {copy : multiple files into directory } {notRoot} { +} -result {1} +test fCmd-21.5 {copy : multiple files into directory} -constraints {notRoot} -setup { catch {file delete -force -- tfa1 tfa2 tfad} - set s1 [createfile tfa1 ] - set s2 [createfile tfa2 ] +} -body { + set s1 [createfile tfa1] + set s2 [createfile tfa2] file mkdir tfad file copy tfa1 tfa2 tfad - set r1 [checkcontent tfad/tfa1 $s1] - set r2 [checkcontent tfad/tfa2 $s2] - set r3 [checkcontent tfa1 $s1] - set r4 [checkcontent tfa2 $s2] - set result [expr $r1 && $r2 && $r3 && $r4] + list [checkcontent tfad/tfa1 $s1] [checkcontent tfad/tfa2 $s2] \ + [checkcontent tfa1 $s1] [checkcontent tfa2 $s2] +} -cleanup { file delete -force tfa1 tfa2 tfad - set result -} {1} - -test fCmd-21.6 {copy: mixed dirs and files into directory} \ - {notRoot notFileSharing} { +} -result {1 1 1 1} +test fCmd-21.6 {copy: mixed dirs and files into directory} -setup { catch {file delete -force -- tfa1 tfad1 tfad2} - set s [createfile tfa1 ] +} -constraints {notRoot notFileSharing} -body { + set s [createfile tfa1] file mkdir tfad1 tfad2 file copy tfa1 tfad1 tfad2 - set r1 [checkcontent [file join tfad2 tfa1] $s] - set r2 [file isdir [file join tfad2 tfad1]] - set r3 [checkcontent tfa1 $s] - set result [expr $r1 && $r2 && $r3 && [file isdir tfad1]] + list [checkcontent [file join tfad2 tfa1] $s] \ + [file isdir [file join tfad2 tfad1]] \ + [checkcontent tfa1 $s] [file isdir tfad1] +} -cleanup { file delete -force tfa1 tfad1 tfad2 - set result -} {1} - -test fCmd-21.7.1 {TclCopyFilesCmd: copy a dangling link} {unixOnly notRoot dontCopyLinks} { +} -result {1 1 1 1} +test fCmd-21.7.1 {TclCopyFilesCmd: copy a dangling link} -setup { + catch {file delete -force tfad1 tfalink tfalink2} +} -constraints {unix notRoot dontCopyLinks} -body { file mkdir tfad1 file link -symbolic tfalink tfad1 file delete tfad1 - set result [list [catch {file copy tfalink tfalink2} msg] $msg] - file delete -force tfalink tfalink2 - set result -} {1 {error copying "tfalink": the target of this link doesn't exist}} -test fCmd-21.7.2 {TclCopyFilesCmd: copy a dangling link} {unixOnly notRoot} { + file copy tfalink tfalink2 +} -returnCodes error -cleanup { + file delete -force tfalink tfalink2 +} -result {error copying "tfalink": the target of this link doesn't exist} +test fCmd-21.7.2 {TclCopyFilesCmd: copy a dangling link} -setup { + catch {file delete -force tfad1 tfalink tfalink2} +} -constraints {unix notRoot} -body { file mkdir tfad1 file link -symbolic tfalink tfad1 file delete tfad1 file copy tfalink tfalink2 - set result [string match [file type tfalink2] link] - file delete tfalink tfalink2 - set result -} {1} - -test fCmd-21.8.1 {TclCopyFilesCmd: copy a link } {unixOnly notRoot dontCopyLinks} { + file type tfalink2 +} -cleanup { + file delete tfalink tfalink2 +} -result link +test fCmd-21.8.1 {TclCopyFilesCmd: copy a link} -setup { + catch {file delete -force tfad1 tfalink tfalink2} +} -constraints {unix notRoot dontCopyLinks} -body { file mkdir tfad1 file link -symbolic tfalink tfad1 file copy tfalink tfalink2 - set r1 [file type tfalink]; # link - set r2 [file type tfalink2]; # directory - set r3 [file isdir tfad1]; # 1 - set result [expr {("$r1" == "link") && ("$r2" == "directory") && $r3}] + list [file type tfalink] [file type tfalink2] [file isdir tfad1] +} -cleanup { file delete -force tfad1 tfalink tfalink2 - set result -} {1} -test fCmd-21.8.2 {TclCopyFilesCmd: copy a link } {unixOnly notRoot} { +} -result {link directory 1} +test fCmd-21.8.2 {TclCopyFilesCmd: copy a link} -setup { + catch {file delete -force tfad1 tfalink tfalink2} +} -constraints {unix notRoot} -body { file mkdir tfad1 file link -symbolic tfalink tfad1 file copy tfalink tfalink2 - set r1 [file type tfalink]; # link - set r2 [file type tfalink2]; # link - set r3 [file isdir tfad1]; # 1 - set result [expr {("$r1" == "link") && ("$r2" == "link") && $r3}] + list [file type tfalink] [file type tfalink2] [file isdir tfad1] +} -cleanup { file delete -force tfad1 tfalink tfalink2 - set result -} {1} - -test fCmd-21.9 {TclCopyFilesCmd: copy dir with a link in it} {unixOnly notRoot} { +} -result {link link 1} +test fCmd-21.9 {TclCopyFilesCmd: copy dir with a link in it} -setup { + catch {file delete -force tfad1 tfad2} +} -constraints {unix notRoot} -body { file mkdir tfad1 file link -symbolic tfad1/tfalink "[pwd]/tfad1" file copy tfad1 tfad2 - set result [string match [file type tfad2/tfalink] link] + file type tfad2/tfalink +} -cleanup { file delete -force tfad1 tfad2 - set result -} {1} - -test fCmd-21.10 {TclFileCopyCmd: copy dir on top of another empty dir w/o -force} \ - {notRoot} { +} -result link +test fCmd-21.10 {TclFileCopyCmd: copy dir on top of another empty dir w/o -force} -setup { catch {file delete -force -- tfa tfad} +} -constraints {notRoot} -body { file mkdir tfa [file join tfad tfa] - set r1 [catch {file copy tfa tfad}] - set result [expr $r1 && [file isdir tfa]] + list [catch {file copy tfa tfad}] [file isdir tfa] +} -cleanup { file delete -force tfa tfad - set result -} {1} - -test fCmd-21.11 {TclFileCopyCmd: copy dir on top of a dir w/o -force} {notRoot} { +} -result {1 1} +test fCmd-21.11 {TclFileCopyCmd: copy dir on top of a dir w/o -force} -setup { catch {file delete -force -- tfa tfad} +} -constraints {notRoot} -body { file mkdir tfa [file join tfad tfa file] - set r1 [catch {file copy tfa tfad}] - set result [expr $r1 && [file isdir tfa] && [file isdir [file join tfad tfa file]]] + list [catch {file copy tfa tfad}] [file isdir tfa] \ + [file isdir [file join tfad tfa file]] +} -cleanup { file delete -force tfa tfad - set result -} {1} - -test fCmd-21.12 {TclFileCopyCmd: copy dir on top of a non-empty dir w/ -force} \ - {notRoot} { +} -result {1 1 1} +test fCmd-21.12 {TclFileCopyCmd: copy dir on top of a non-empty dir w/ -force} -setup { catch {file delete -force -- tfa tfad} +} -constraints {notRoot} -body { file mkdir tfa [file join tfad tfa file] - set r1 [catch {file copy -force tfa tfad}] - set result [expr $r1 && [file isdir tfa] && [file isdir [file join tfad tfa file]]] + list [catch {file copy -force tfa tfad}] [file isdir tfa] \ + [file isdir [file join tfad tfa file]] +} -cleanup { file delete -force tfa tfad - set result -} {1} +} -result {1 1 1} # # Coverage testing for TclpRenameFile # -test fCmd-22.1 {TclpRenameFile: rename and overwrite in a single dir} {notRoot} { +test fCmd-22.1 {TclpRenameFile: rename and overwrite in a single dir} -setup { catch {file delete -force -- tfa1 tfa2} +} -constraints {notRoot} -body { set s [createfile tfa1] set s2 [createfile tfa2 q] - - set r1 [catch {rename tfa1 tfa2}] + + set result [catch {file rename tfa1 tfa2}] file rename -force tfa1 tfa2 - set result [expr $r1 && [checkcontent tfa2 $s]] + lappend result [checkcontent tfa2 $s] +} -cleanup { file delete [glob tfa1 tfa2] - set result -} {1} - -test fCmd-22.2 {TclpRenameFile: attempt to overwrite itself} {macOrUnix notRoot} { +} -result {1 1} +test fCmd-22.2 {TclpRenameFile: attempt to overwrite itself} -setup { catch {file delete -force -- tfa1} - set s [createfile tfa1] +} -constraints {unix notRoot} -body { + set s [createfile tfa1] file rename -force tfa1 tfa1 - set result [checkcontent tfa1 $s] - file delete tfa1 - set result -} {1} - -test fCmd-22.3 {TclpRenameFile: rename dir to existing dir} {notRoot} { + checkcontent tfa1 $s +} -cleanup { + file delete tfa1 +} -result {1} +test fCmd-22.3 {TclpRenameFile: rename dir to existing dir} -setup { catch {file delete -force -- d1 tfad} +} -constraints {notRoot} -body { file mkdir d1 [file join tfad d1] - set r1 [catch {file rename d1 tfad}] - set result [expr $r1 && [file isdir d1] && [file isdir [file join tfad d1]]] + list [catch {file rename d1 tfad}] [file isdir d1] \ + [file isdir [file join tfad d1]] +} -cleanup { file delete -force d1 tfad - set result -} {1} - -test fCmd-22.4 {TclpRenameFile: rename dir to dir several levels deep} {notRoot} { +} -result {1 1 1} +test fCmd-22.4 {TclpRenameFile: rename dir to dir several levels deep} -setup { catch {file delete -force -- d1 tfad} +} -constraints {notRoot} -body { file mkdir d1 [file join tfad a b c] file rename d1 [file join tfad a b c d1] - set result [expr ![file isdir d1] && [file isdir [file join tfad a b c d1]]] + list [file isdir d1] [file isdir [file join tfad a b c d1]] +} -cleanup { file delete -force [glob d1 tfad] - set result -} {1} - - +} -result {0 1} # # TclMacCopyFile needs to be redone. # -test fCmd-22.5 {TclMacCopyFile: copy and overwrite in a single dir} {notRoot} { +test fCmd-22.5 {TclMacCopyFile: copy and overwrite in a single dir} -setup { catch {file delete -force -- tfa1 tfa2} +} -constraints {notRoot} -body { set s [createfile tfa1] set s2 [createfile tfa2 q] - set r1 [catch {file copy tfa1 tfa2}] + set result [catch {file copy tfa1 tfa2}] file copy -force tfa1 tfa2 - set result [expr $r1 && [checkcontent tfa2 $s] && [checkcontent tfa1 $s]] + lappend result [checkcontent tfa2 $s] [checkcontent tfa1 $s] +} -cleanup { file delete tfa1 tfa2 - set result -} {1} +} -result {1 1 1} # # TclMacMkdir - basic cases are covered elsewhere. @@ -2064,252 +2136,256 @@ test fCmd-22.5 {TclMacCopyFile: copy and overwrite in a single dir} {notRoot} { # Error cases are not covered. # -test fCmd-23.1 {TclMacRmdir: trying to remove a nonempty directory} {notRoot} { +test fCmd-23.1 {TclMacRmdir: trying to remove a nonempty directory} -setup { catch {file delete -force -- tfad} - +} -constraints {notRoot} -body { file mkdir [file join tfad dir] - - set result [catch {file delete tfad}] - file delete -force tfad - set result -} {1} + + list [catch {file delete tfad}] [file delete -force tfad] +} -cleanup { + catch {file delete -force tfad} +} -result {1 {}} # -# TclMacDeleteFile +# TclMacDeleteFile # Error cases are not covered. # -test fCmd-24.1 {TclMacDeleteFile: deleting a normal file} {notRoot} { +test fCmd-24.1 {TclMacDeleteFile: deleting a normal file} -setup { catch {file delete -force -- tfa1} - +} -constraints {notRoot} -body { createfile tfa1 file delete tfa1 file exists tfa1 -} {0} +} -cleanup { + catch {file delete -force tfa1} +} -result {0} # # TclMacCopyDirectory # Error cases are not covered. # -test fCmd-25.1 {TclMacCopyDirectory: copying a normal directory} {notRoot notFileSharing} { +test fCmd-25.1 {TclMacCopyDirectory: copying a normal directory} -setup { catch {file delete -force -- tfad1 tfad2} - +} -constraints {notRoot notFileSharing} -body { file mkdir [file join tfad1 a b c] file copy tfad1 tfad2 - set result [expr [file isdir [file join tfad1 a b c]] && [file isdir [file join tfad2 a b c]]] + list [file isdir [file join tfad1 a b c]] \ + [file isdir [file join tfad2 a b c]] +} -cleanup { file delete -force tfad1 tfad2 - set result -} {1} - -test fCmd-25.2 {TclMacCopyDirectory: copying a short path normal directory} {notRoot notFileSharing} { +} -result {1 1} +test fCmd-25.2 {TclMacCopyDirectory: copying a short path normal directory} -setup { catch {file delete -force -- tfad1 tfad2} - +} -constraints {notRoot notFileSharing} -body { file mkdir tfad1 file copy tfad1 tfad2 - set result [expr [file isdir tfad1] && [file isdir tfad2]] + list [file isdir tfad1] [file isdir tfad2] +} -cleanup { file delete tfad1 tfad2 - set result -} {1} - -test fCmd-25.3 {TclMacCopyDirectory: copying dirs between different dirs} {notRoot notFileSharing} { +} -result {1 1} +test fCmd-25.3 {TclMacCopyDirectory: copying dirs between different dirs} -setup { catch {file delete -force -- tfad1 tfad2} - +} -constraints {notRoot notFileSharing} -body { file mkdir [file join tfad1 x y z] file mkdir [file join tfad2 dir] file copy tfad1 [file join tfad2 dir] - set result [expr [file isdir [file join tfad1 x y z]] && [file isdir [file join tfad2 dir tfad1 x y z]]] + list [file isdir [file join tfad1 x y z]] \ + [file isdir [file join tfad2 dir tfad1 x y z]] +} -cleanup { file delete -force tfad1 tfad2 - set result -} {1} +} -result {1 1} # # Functionality tests for TclDeleteFilesCmd # -test fCmd-26.1 {TclDeleteFilesCmd: delete symlink} {unixOnly notRoot} { +test fCmd-26.1 {TclDeleteFilesCmd: delete symlink} -setup { catch {file delete -force -- tfad1 tfad2} - +} -constraints {unix notRoot} -body { file mkdir tfad1 file link -symbolic tfalink tfad1 file delete tfalink - set r1 [file isdir tfad1] - set r2 [file exists tfalink] - - set result [expr $r1 && !$r2] + list [file isdir tfad1] [file exists tfalink] +} -cleanup { file delete tfad1 - set result -} {1} - -test fCmd-26.2 {TclDeleteFilesCmd: delete dir with symlink} {unixOnly notRoot} { + catch {file delete tfalink} +} -result {1 0} +test fCmd-26.2 {TclDeleteFilesCmd: delete dir with symlink} -setup { catch {file delete -force -- tfad1 tfad2} - +} -constraints {unix notRoot} -body { file mkdir tfad1 file mkdir tfad2 - file link -symbolic [file join tfad2 link] tfad1 + file link -symbolic [file join tfad2 link] [file join .. tfad1] file delete -force tfad2 - set r1 [file isdir tfad1] - set r2 [file exists tfad2] - - set result [expr $r1 && !$r2] + list [file isdir tfad1] [file exists tfad2] +} -cleanup { file delete tfad1 - set result -} {1} - -test fCmd-26.3 {TclDeleteFilesCmd: delete dangling symlink} {unixOnly notRoot} { +} -result {1 0} +test fCmd-26.3 {TclDeleteFilesCmd: delete dangling symlink} -setup { catch {file delete -force -- tfad1 tfad2} - +} -constraints {unix notRoot} -body { file mkdir tfad1 file link -symbolic tfad2 tfad1 file delete tfad1 file delete tfad2 - set r1 [file exists tfad1] - set r2 [file exists tfad2] - - set result [expr !$r1 && !$r2] - set result -} {1} + list [file exists tfad1] [file exists tfad2] +} -result {0 0} -test fCmd-27.2 {TclFileAttrsCmd - Tcl_TranslateFileName fails} {testsetplatform} { +test fCmd-27.2 {TclFileAttrsCmd - Tcl_TranslateFileName fails} -setup { set platform [testgetplatform] +} -constraints {testsetplatform} -body { testsetplatform unix - list [catch {file attributes ~_totally_bogus_user} msg] $msg [testsetplatform $platform] -} {1 {user "_totally_bogus_user" doesn't exist} {}} -test fCmd-27.3 {TclFileAttrsCmd - all attributes} { + file attributes ~_totally_bogus_user +} -returnCodes error -cleanup { + testsetplatform $platform +} -result {user "_totally_bogus_user" doesn't exist} +test fCmd-27.3 {TclFileAttrsCmd - all attributes} -setup { catch {file delete -force -- foo.tmp} +} -body { createfile foo.tmp - list [catch {file attributes foo.tmp} msg] [expr {[llength $msg] > 0}] [file delete -force -- foo.tmp] -} {0 1 {}} -test fCmd-27.4 {TclFileAttrsCmd - getting one option} { + file attributes foo.tmp + # Must be non-empty result +} -cleanup { + file delete -force -- foo.tmp +} -match glob -result {?*} +test fCmd-27.4 {TclFileAttrsCmd - getting one option} -setup { catch {file delete -force -- foo.tmp} +} -body { createfile foo.tmp set attrs [file attributes foo.tmp] - list [catch {eval file attributes foo.tmp [lindex $attrs 0]}] [file delete -force -- foo.tmp] -} {0 {}} - -# Find a group that exists on this Unix system, or else skip tests that -# require Unix groups. -if {$tcl_platform(platform) == "unix"} { - ::tcltest::testConstraint foundGroup 0 - catch { - set groupList [exec groups] - set group [lindex $groupList 0] - ::tcltest::testConstraint foundGroup 1 - } -} else { - ::tcltest::testConstraint foundGroup 1 -} - -test fCmd-27.5 {TclFileAttrsCmd - setting one option} {foundGroup} { + file attributes foo.tmp {*}[lindex $attrs 0] + # Any successful result will do +} -cleanup { + file delete -force -- foo.tmp +} -match glob -result * +test fCmd-27.5 {TclFileAttrsCmd - setting one option} -setup { catch {file delete -force -- foo.tmp} +} -constraints {foundGroup} -body { createfile foo.tmp set attrs [file attributes foo.tmp] - list [catch {eval file attributes foo.tmp [lrange $attrs 0 1]} msg] $msg [file delete -force -- foo.tmp] -} {0 {} {}} -test fCmd-27.6 {TclFileAttrsCmd - setting more than one option} {foundGroup} { + file attributes foo.tmp {*}[lrange $attrs 0 1] +} -cleanup { + file delete -force -- foo.tmp +} -result {} +test fCmd-27.6 {TclFileAttrsCmd - setting more than one option} -setup { catch {file delete -force -- foo.tmp} +} -constraints {foundGroup} -body { createfile foo.tmp set attrs [file attributes foo.tmp] - list [catch {eval file attributes foo.tmp [lrange $attrs 0 3]} msg] $msg [file delete -force -- foo.tmp] -} {0 {} {}} - -if {[string equal $tcl_platform(platform) "windows"]} { - if {[string index $tcl_platform(osVersion) 0] >= 5 \ - && ([lindex [file system [temporaryDirectory]] 1] == "NTFS")} { - tcltest::testConstraint linkDirectory 1 - tcltest::testConstraint linkFile 1 - } else { - tcltest::testConstraint linkDirectory 0 - tcltest::testConstraint linkFile 0 - } -} else { - tcltest::testConstraint linkFile 1 - tcltest::testConstraint linkDirectory 1 + file attributes foo.tmp {*}[lrange $attrs 0 3] +} -cleanup { + file delete -force -- foo.tmp +} -result {} + +if { + [testConstraint win] && + ([string index $tcl_platform(osVersion) 0] < 5 + || [lindex [file system [temporaryDirectory]] 1] ne "NTFS") +} then { + testConstraint linkDirectory 0 + testConstraint linkFile 0 } -test fCmd-28.1 {file link} { - list [catch {file link} msg] $msg -} {1 {wrong # args: should be "file link ?-linktype? linkname ?target?"}} - -test fCmd-28.2 {file link} { - list [catch {file link a b c d} msg] $msg -} {1 {wrong # args: should be "file link ?-linktype? linkname ?target?"}} - -test fCmd-28.3 {file link} { - list [catch {file link abc b c} msg] $msg -} {1 {bad switch "abc": must be -symbolic or -hard}} - -test fCmd-28.4 {file link} { - list [catch {file link -abc b c} msg] $msg -} {1 {bad switch "-abc": must be -symbolic or -hard}} +test fCmd-28.1 {file link} -returnCodes error -body { + file link +} -result {wrong # args: should be "file link ?-linktype? linkname ?target?"} +test fCmd-28.2 {file link} -returnCodes error -body { + file link a b c d +} -result {wrong # args: should be "file link ?-linktype? linkname ?target?"} +test fCmd-28.3 {file link} -returnCodes error -body { + file link abc b c +} -result {bad switch "abc": must be -symbolic or -hard} +test fCmd-28.4 {file link} -returnCodes error -body { + file link -abc b c +} -result {bad switch "-abc": must be -symbolic or -hard} cd [workingDirectory] - makeDirectory abc.dir makeDirectory abc2.dir makeFile contents abc.file makeFile contents abc2.file - cd [temporaryDirectory] -test fCmd-28.5 {file link: source already exists} {linkDirectory} { +test fCmd-28.5 {file link: source already exists} -setup { cd [temporaryDirectory] - set res [list [catch {file link abc.dir abc2.dir} msg] $msg] +} -constraints {linkDirectory} -body { + file link abc.dir abc2.dir +} -returnCodes error -cleanup { cd [workingDirectory] - set res -} {1 {could not create new link "abc.dir": that path already exists}} - -test fCmd-28.6 {file link: unsupported operation} {linkDirectory macOrWin} { +} -result {could not create new link "abc.dir": that path already exists} +test fCmd-28.6 {file link: unsupported operation} -setup { cd [temporaryDirectory] - set res [list [catch {file link -hard abc.link abc.dir} msg] $msg] +} -constraints {linkDirectory win} -body { + file link -hard abc.link abc.dir +} -returnCodes error -cleanup { cd [workingDirectory] - set res -} {1 {could not create new link "abc.link" pointing to "abc.dir": illegal operation on a directory}} - -test fCmd-28.7 {file link: source already exists} {linkFile} { +} -result {could not create new link "abc.link" pointing to "abc.dir": illegal operation on a directory} +test fCmd-28.7 {file link: source already exists} -setup { cd [temporaryDirectory] - set res [list [catch {file link abc.file abc2.file} msg] $msg] +} -constraints {linkFile} -body { + file link abc.file abc2.file +} -returnCodes error -cleanup { cd [workingDirectory] - set res -} {1 {could not create new link "abc.file": that path already exists}} - -test fCmd-28.8 {file link} {linkFile winOnly} { +} -result {could not create new link "abc.file": that path already exists} +test fCmd-28.8 {file link} -constraints {linkFile win} -setup { cd [temporaryDirectory] - set res [list [catch {file link -symbolic abc.link abc.file} msg] $msg] +} -body { + file link -symbolic abc.link abc.file +} -returnCodes error -cleanup { cd [workingDirectory] - set res -} {1 {could not create new link "abc.link" pointing to "abc.file": not a directory}} - -test fCmd-28.9 {file link: success with file} {linkFile} { +} -result {could not create new link "abc.link" pointing to "abc.file": not a directory} +test fCmd-28.9 {file link: success with file} -constraints {linkFile} -setup { cd [temporaryDirectory] file delete -force abc.link - set res [list [catch {file link abc.link abc.file} msg] $msg] +} -body { + file link abc.link abc.file +} -cleanup { cd [workingDirectory] - set res -} {0 abc.file} - +} -result abc.file +test fCmd-28.9.1 {file link: success with file} -setup { + cd [temporaryDirectory] + file delete -force abc.link +} -constraints {linkFile win} -body { + file stat abc.file arr + set res $arr(nlink) + lappend res [catch {file link abc.link abc.file} msg] $msg + file stat abc.file arr + lappend res $arr(nlink) +} -cleanup { + cd [workingDirectory] +} -result {1 0 abc.file 2} cd [temporaryDirectory] catch {file delete -force abc.link} cd [workingDirectory] - -test fCmd-28.10 {file link: linking to nonexistent path} {linkDirectory} { +test fCmd-28.10 {file link: linking to nonexistent path} -setup { cd [temporaryDirectory] file delete -force abc.link - set res [list [catch {file link abc.link abc2.doesnt} msg] $msg] +} -constraints {linkDirectory} -body { + file link abc.link abc2.doesnt +} -returnCodes error -cleanup { cd [workingDirectory] - set res -} {1 {could not create new link "abc.link" since target "abc2.doesnt" doesn't exist}} - -test fCmd-28.11 {file link: success with directory} {linkDirectory} { +} -result {could not create new link "abc.link": target "abc2.doesnt" doesn't exist} +test fCmd-28.10.1 {file link: linking to nonexistent path} -setup { cd [temporaryDirectory] file delete -force abc.link - set res [list [catch {file link abc.link abc.dir} msg] $msg] +} -constraints {linkDirectory} -body { + file link doesnt/abc.link abc.dir +} -returnCodes error -cleanup { cd [workingDirectory] - set res -} {0 abc.dir} - -test fCmd-28.12 {file link: cd into a link} {linkDirectory} { +} -result {could not create new link "doesnt/abc.link": no such file or directory} +test fCmd-28.11 {file link: success with directory} -setup { cd [temporaryDirectory] file delete -force abc.link +} -constraints {linkDirectory} -body { + file link abc.link abc.dir +} -cleanup { + cd [workingDirectory] +} -result abc.dir +test fCmd-28.12 {file link: cd into a link} -setup { + cd [temporaryDirectory] + file delete -force abc.link +} -constraints {linkDirectory} -body { file link abc.link abc.dir set orig [pwd] cd abc.link @@ -2317,94 +2393,140 @@ test fCmd-28.12 {file link: cd into a link} {linkDirectory} { cd .. set up [pwd] cd $orig - # now '$up' should be either $orig or [file dirname abc.dir], - # depending on whether 'cd' actually moves to the destination - # of a link, or simply treats the link as a directory. - # (on windows the former, on unix the latter, I believe) - if {([file normalize $up] != [file normalize $orig]) \ - && ([file normalize $up] != [file normalize [file dirname abc.dir]])} { - set res "wrong directory with 'cd $link ; cd ..'" + # now '$up' should be either $orig or [file dirname abc.dir], depending on + # whether 'cd' actually moves to the destination of a link, or simply + # treats the link as a directory. (On windows the former, on unix the + # latter, I believe) + if { + ([file normalize $up] ne [file normalize $orig]) && + ([file normalize $up] ne [file normalize [file dirname abc.dir]]) + } then { + return "wrong directory with 'cd abc.link ; cd ..': \ + \"[file normalize $up]\" should be \"[file normalize $orig]\"\ + or \"[file normalize [file dirname abc.dir]]\"" } else { - set res "ok" + return "ok" } +} -cleanup { cd [workingDirectory] - set res -} {ok} - -test fCmd-28.13 {file link} {linkDirectory} { - # duplicate link throws error +} -result ok +test fCmd-28.13 {file link} -constraints {linkDirectory} -setup { cd [temporaryDirectory] - set res [list [catch {file link abc.link abc.dir} msg] $msg] +} -body { + # duplicate link throws error + file link abc.link abc.dir +} -returnCodes error -cleanup { cd [workingDirectory] - set res -} {1 {could not create new link "abc.link": that path already exists}} - -test fCmd-28.14 {file link: deletes link not dir} {linkDirectory} { +} -result {could not create new link "abc.link": that path already exists} +test fCmd-28.14 {file link: deletes link not dir} -setup { cd [temporaryDirectory] +} -constraints {linkDirectory} -body { file delete -force abc.link - set res [list [file exists abc.link] [file exists abc.dir]] + list [file exists abc.link] [file exists abc.dir] +} -cleanup { cd [workingDirectory] - set res -} {0 1} - -test fCmd-28.15.1 {file link: copies link not dir} {linkDirectory dontCopyLinks} { +} -result {0 1} +test fCmd-28.15.1 {file link: copies link not dir} -setup { cd [temporaryDirectory] file delete -force abc.link +} -constraints {linkDirectory dontCopyLinks} -body { file link abc.link abc.dir file copy abc.link abc2.link - # abc2.linkdir was a copy of a link to a dir, so it should end up as - # a directory, not a link (links trace to endpoint). - set res [list [file type abc2.link] [file tail [file link abc.link]]] + # abc2.linkdir was a copy of a link to a dir, so it should end up as a + # directory, not a link (links trace to endpoint). + list [file type abc2.link] [file tail [file link abc.link]] +} -cleanup { cd [workingDirectory] - set res -} {directory abc.dir} -test fCmd-28.15.2 {file link: copies link not dir} {linkDirectory} { +} -result {directory abc.dir} +test fCmd-28.15.2 {file link: copies link not dir} -setup { cd [temporaryDirectory] file delete -force abc.link +} -constraints {linkDirectory} -body { file link abc.link abc.dir file copy abc.link abc2.link - set res [list [file type abc2.link] [file tail [file link abc2.link]]] + list [file type abc2.link] [file tail [file link abc2.link]] +} -cleanup { cd [workingDirectory] - set res -} {link abc.dir} - +} -result {link abc.dir} cd [temporaryDirectory] file delete -force abc.link file delete -force abc2.link - +cd abc.dir +file delete -force abc.file +file delete -force abc2.file +cd .. file copy abc.file abc.dir file copy abc2.file abc.dir cd [workingDirectory] - -test fCmd-28.16 {file link: glob inside link} {linkDirectory} { +test fCmd-28.16 {file link: glob inside link} -setup { cd [temporaryDirectory] file delete -force abc.link +} -constraints {linkDirectory} -body { file link abc.link abc.dir - set res [lsort [glob -dir abc.link -tails *]] + lsort [glob -dir abc.link -tails *] +} -cleanup { cd [workingDirectory] - set res -} [lsort [list abc.file abc2.file]] - -test fCmd-28.17 {file link: glob -type l} {linkDirectory} { +} -result {abc.file abc2.file} +test fCmd-28.17 {file link: glob -type l} -setup { cd [temporaryDirectory] - set res [glob -dir [pwd] -type l -tails abc*] +} -constraints {linkDirectory} -body { + glob -dir [pwd] -type l -tails abc* +} -cleanup { cd [workingDirectory] - set res -} {abc.link} - -test fCmd-28.18 {file link: glob -type d} {linkDirectory} { +} -result {abc.link} +test fCmd-28.18 {file link: glob -type d} -constraints linkDirectory -setup { cd [temporaryDirectory] - set res [lsort [glob -dir [pwd] -type d -tails abc*]] +} -body { + lsort [glob -dir [pwd] -type d -tails abc*] +} -cleanup { cd [workingDirectory] - set res -} [lsort [list abc.link abc.dir abc2.dir]] +} -result [lsort [list abc.link abc.dir abc2.dir]] +test fCmd-28.19 {file link: relative paths} -setup { + cd [temporaryDirectory] +} -constraints {win linkDirectory} -body { + file mkdir d1/d2/d3 + file link d1/l2 d1/d2 +} -cleanup { + catch {file delete -force d1} + cd [workingDirectory] +} -result d1/d2 +test fCmd-28.20 {file link: relative paths} -setup { + cd [temporaryDirectory] +} -constraints {unix linkDirectory} -body { + file mkdir d1/d2/d3 + file link d1/l2 d1/d2 +} -returnCodes error -cleanup { + catch {file delete -force d1} + cd [workingDirectory] +} -result {could not create new link "d1/l2": target "d1/d2" doesn't exist} +test fCmd-28.21 {file link: relative paths} -setup { + cd [temporaryDirectory] +} -constraints {unix linkDirectory} -body { + file mkdir d1/d2/d3 + file link d1/l2 d2 +} -cleanup { + catch {file delete -force d1} + cd [workingDirectory] +} -result d2 +test fCmd-28.22 {file link: relative paths} -setup { + cd [temporaryDirectory] +} -constraints {unix linkDirectory} -body { + file mkdir d1/d2/d3 + catch {file delete -force d1/l2} + file link d1/l2 d2/d3 +} -cleanup { + catch {file delete -force d1} + cd [workingDirectory] +} -result d2/d3 -test fCmd-29.1 {weird memory corruption fault} { - catch {set res [open [file join ~a_totally_bogus_user_id/foo bar]]} -} 1 +test fCmd-29.1 {weird memory corruption fault} -body { + open [file join ~a_totally_bogus_user_id/foo bar] +} -returnCodes error -match glob -result * cd [temporaryDirectory] file delete -force abc.link +file delete -force d1/d2 +file delete -force d1 cd [workingDirectory] removeFile abc2.file @@ -2412,7 +2534,31 @@ removeFile abc.file removeDirectory abc2.dir removeDirectory abc.dir +test fCmd-30.1 {file writable on 'My Documents'} -constraints {win 2000orNewer} -body { + set mydocsname "~/My Documents" + # Would be good to localise this name, since this test will only function + # on english-speaking windows otherwise + if {[file exists $mydocsname]} { + return [file writable $mydocsname] + } + return 1 +} -result {1} +test fCmd-30.2 {file readable on 'NTUSER.DAT'} -constraints {win 2000orNewer knownBug} -body { + # Apparently the OS has this file open with exclusive permissions Windows + # doesn't provide any way to determine that fact without actually trying + # to open the file (open NTUSER.dat r), which fails. Hence this isn't + # really a knownBug in Tcl, but an OS limitation. But, perhaps in the + # future that limitation will be lifted. + if {[file exists "~/NTUSER.DAT"]} { + return [file readable "~/NTUSER.DAT"] + } + return 0 +} -result {0} + # cleanup cleanup +if {[testConstraint unix]} { + removeDirectory tcl[pid] /tmp +} ::tcltest::cleanupTests return diff --git a/tests/fileName.test b/tests/fileName.test index 6eabc76..68c5592 100644 --- a/tests/fileName.test +++ b/tests/fileName.test @@ -11,18 +11,35 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest 2 + package require tcltest namespace import -force ::tcltest::* } -tcltest::testConstraint testsetplatform [string equal testsetplatform [info commands testsetplatform]] -tcltest::testConstraint testtranslatefilename [string equal testtranslatefilename [info commands testtranslatefilename]] +testConstraint testsetplatform [llength [info commands testsetplatform]] +testConstraint testtranslatefilename [llength [info commands testtranslatefilename]] +testConstraint linkDirectory 1 +testConstraint symbolicLinkFile 1 +if {[testConstraint win]} { + if {[string index $tcl_platform(osVersion) 0] < 5 \ + || [lindex [file system [temporaryDirectory]] 1] ne "NTFS"} { + testConstraint linkDirectory 0 + } + testConstraint symbolicLinkFile 0 +} global env -if {[tcltest::testConstraint testsetplatform]} { +if {[testConstraint testsetplatform]} { set platform [testgetplatform] } +# Caution: when using 'testsetplatform' to test different file +# name platform descriptions in this file, one must be very +# careful not to combine such platform manipulation with +# commands like 'cd', 'pwd'. That is because the latter commands +# operate on the real filesystem but will potentially have their +# logic routed through the wrong generic code paths if we've +# used 'testsetplatform'. This can lead to serious problems, +# even crashes. test filename-1.1 {Tcl_GetPathType: unix} {testsetplatform} { testsetplatform unix file pathtype / @@ -172,7 +189,7 @@ test filename-4.12 {Tcl_SplitPath: unix} {testsetplatform} { test filename-4.13 {Tcl_SplitPath: unix} {testsetplatform} { testsetplatform unix file split //foo -} {/ foo} +} "/ foo" test filename-4.14 {Tcl_SplitPath: unix} {testsetplatform} { testsetplatform unix file split foo//bar @@ -194,7 +211,7 @@ test filename-4.18 {Tcl_SplitPath: unix} {testsetplatform} { file split foo/bar~/baz } {foo bar~ baz} -if {[tcltest::testConstraint testsetplatform]} { +if {[testConstraint testsetplatform]} { testsetplatform $platform } @@ -412,11 +429,12 @@ test filename-7.16 {Tcl_JoinPath: unix} {testsetplatform} { test filename-7.17 {Tcl_JoinPath: unix} {testsetplatform} { testsetplatform unix file join //a b -} {/a/b} +} "/a/b" test filename-7.18 {Tcl_JoinPath: unix} {testsetplatform} { testsetplatform unix file join /// a b -} {/a/b} +} "/a/b" + test filename-9.1 {Tcl_JoinPath: win} {testsetplatform} { testsetplatform win @@ -506,14 +524,18 @@ test filename-9.19.1 {Tcl_JoinPath: win} {testsetplatform} { [file join C:/blah {foo\bar}] \ [file join C:/blah C:/blah {foo\bar}] } {foo/bar C:/blah/foo/bar C:/blah/foo/bar} -test filename-9.19.2 {Tcl_JoinPath: win} {testsetplatform winOnly} { +test filename-9.19.2 {Tcl_JoinPath: win} {testsetplatform win} { testsetplatform win set res {} lappend res \ [file join {foo\bar}] \ [file join [pwd] {foo\bar}] \ [file join [pwd] [pwd] {foo\bar}] - string map [list [pwd] pwd] $res + set nres {} + foreach elt $res { + lappend nres [string map [list [pwd] pwd] $elt] + } + set nres } {foo/bar pwd/foo/bar pwd/foo/bar} test filename-9.20 {Tcl_JoinPath: unix} {testsetplatform} { testsetplatform unix @@ -554,6 +576,10 @@ test filename-10.3 {Tcl_TranslateFileName} {testsetplatform} { testsetplatform windows list [catch {testtranslatefilename {c:/\\foo/}} msg] $msg } {0 {c:\foo}} +test filename-10.3.1 {Tcl_TranslateFileName} {testsetplatform} { + testsetplatform windows + list [catch {testtranslatefilename {c://///}} msg] $msg +} {0 c:\\} test filename-10.6 {Tcl_TranslateFileName} {testsetplatform} { global env set temp $env(HOME) @@ -643,15 +669,15 @@ test filename-10.22 {Tcl_TranslateFileName} {testsetplatform} { list [catch {testtranslatefilename foo//bar} msg] $msg } {0 {foo\bar}} -if {[tcltest::testConstraint testsetplatform]} { +if {[testConstraint testsetplatform]} { testsetplatform $platform } -test filename-10.23 {Tcl_TranslateFileName} {unixOnly nonPortable} { +test filename-10.23 {Tcl_TranslateFileName} {nonPortable} { # this test fails if ~ouster is not /home/ouster list [catch {testtranslatefilename ~ouster} msg] $msg } {0 /home/ouster} -test filename-10.24 {Tcl_TranslateFileName} {unixOnly nonPortable} { +test filename-10.24 {Tcl_TranslateFileName} {nonPortable} { # this test fails if ~ouster is not /home/ouster list [catch {testtranslatefilename ~ouster/foo} msg] $msg } {0 /home/ouster/foo} @@ -670,8 +696,8 @@ test filename-11.4 {Tcl_GlobCmd} { list [catch {glob -nocomplain} msg] $msg } {1 {wrong # args: should be "glob ?switches? name ?name ...?"}} test filename-11.5 {Tcl_GlobCmd} { - list [catch {glob -nocomplain ~xyqrszzz} msg] $msg -} {0 {}} + list [catch {glob -nocomplain * ~xyqrszzz} msg] $msg +} {1 {user "xyqrszzz" doesn't exist}} test filename-11.6 {Tcl_GlobCmd} { list [catch {glob ~xyqrszzz} msg] $msg } {1 {user "xyqrszzz" doesn't exist}} @@ -688,7 +714,7 @@ test filename-11.9 {Tcl_GlobCmd} {testsetplatform} { test filename-11.10 {Tcl_GlobCmd} {testsetplatform} { testsetplatform unix list [catch {glob -nocomplain ~\\xyqrszzz/bar} msg] $msg -} {0 {}} +} {1 {user "\xyqrszzz" doesn't exist}} test filename-11.11 {Tcl_GlobCmd} {testsetplatform} { testsetplatform unix list [catch {glob ~xyqrszzz\\/\\bar} msg] $msg @@ -702,7 +728,7 @@ test filename-11.12 {Tcl_GlobCmd} {testsetplatform} { set x } {1 {couldn't find HOME environment variable to expand path}} -if {[tcltest::testConstraint testsetplatform]} { +if {[testConstraint testsetplatform]} { testsetplatform $platform } @@ -742,7 +768,7 @@ test filename-11.16 {Tcl_GlobCmd} { set globname "globTest" set horribleglobname "glob\[\{Test" -test filename-11.17 {Tcl_GlobCmd} {unixOnly} { +test filename-11.17 {Tcl_GlobCmd} {unix} { list [catch {lsort [glob -directory $globname *]} msg] $msg } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname a3]\ @@ -750,7 +776,7 @@ test filename-11.17 {Tcl_GlobCmd} {unixOnly} { [file join $globname x,z1.c]\ [file join $globname x1.c]\ [file join $globname y1.c] [file join $globname z1.c]]]] -test filename-11.17.1 {Tcl_GlobCmd} {pcOnly} { +test filename-11.17.1 {Tcl_GlobCmd} {win} { list [catch {lsort [glob -directory $globname *]} msg] $msg } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname .1]\ @@ -759,21 +785,6 @@ test filename-11.17.1 {Tcl_GlobCmd} {pcOnly} { [file join $globname x,z1.c]\ [file join $globname x1.c]\ [file join $globname y1.c] [file join $globname z1.c]]]] -if {[string equal $tcl_platform(platform) "windows"]} { - if {[string index $tcl_platform(osVersion) 0] >= 5 \ - && ([lindex [file system [temporaryDirectory]] 1] == "NTFS")} { - tcltest::testConstraint linkDirectory 1 - } else { - tcltest::testConstraint linkDirectory 0 - } -} else { - tcltest::testConstraint linkDirectory 1 -} -if {[string equal $tcl_platform(platform) "windows"]} { - tcltest::testConstraint symbolicLinkFile 0 -} else { - tcltest::testConstraint symbolicLinkFile 1 -} test filename-11.17.2 {Tcl_GlobCmd} {notRoot linkDirectory} { set dir [pwd] set ret "error in test" @@ -872,7 +883,7 @@ test filename-11.17.8 {Tcl_GlobCmd: broken link and glob -l} {symbolicLinkFile} file delete [file join $globname link] set ret } [list 0 [list [file join $globname link]]] -test filename-11.18 {Tcl_GlobCmd} {unixOnly} { +test filename-11.18 {Tcl_GlobCmd} {unix} { list [catch {lsort [glob -path $globname/ *]} msg] $msg } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname a3]\ @@ -880,7 +891,7 @@ test filename-11.18 {Tcl_GlobCmd} {unixOnly} { [file join $globname x,z1.c]\ [file join $globname x1.c]\ [file join $globname y1.c] [file join $globname z1.c]]]] -test filename-11.18.1 {Tcl_GlobCmd} {pcOnly} { +test filename-11.18.1 {Tcl_GlobCmd} {win} { list [catch {lsort [glob -path $globname/ *]} msg] $msg } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname .1]\ @@ -889,7 +900,7 @@ test filename-11.18.1 {Tcl_GlobCmd} {pcOnly} { [file join $globname x,z1.c]\ [file join $globname x1.c]\ [file join $globname y1.c] [file join $globname z1.c]]]] -test filename-11.19 {Tcl_GlobCmd} {unixOnly} { +test filename-11.19 {Tcl_GlobCmd} {unix} { list [catch {lsort [glob -join -path \ [string range $globname 0 5] * *]} msg] $msg } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ @@ -898,7 +909,7 @@ test filename-11.19 {Tcl_GlobCmd} {unixOnly} { [file join $globname x,z1.c]\ [file join $globname x1.c]\ [file join $globname y1.c] [file join $globname z1.c]]]] -test filename-11.19.1 {Tcl_GlobCmd} {pcOnly} { +test filename-11.19.1 {Tcl_GlobCmd} {win} { list [catch {lsort [glob -join -path \ [string range $globname 0 5] * *]} msg] $msg } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ @@ -932,7 +943,7 @@ if {[file exists $horribleglobname]} { file rename globTest $horribleglobname set globname $horribleglobname -test filename-11.22 {Tcl_GlobCmd} {unixOnly} { +test filename-11.22 {Tcl_GlobCmd} {unix} { list [catch {lsort [glob -dir $globname *]} msg] $msg } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname a3]\ @@ -940,7 +951,7 @@ test filename-11.22 {Tcl_GlobCmd} {unixOnly} { [file join $globname x,z1.c]\ [file join $globname x1.c]\ [file join $globname y1.c] [file join $globname z1.c]]]] -test filename-11.22.1 {Tcl_GlobCmd} {pcOnly} { +test filename-11.22.1 {Tcl_GlobCmd} {win} { list [catch {lsort [glob -dir $globname *]} msg] $msg } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname .1]\ @@ -949,7 +960,7 @@ test filename-11.22.1 {Tcl_GlobCmd} {pcOnly} { [file join $globname x,z1.c]\ [file join $globname x1.c]\ [file join $globname y1.c] [file join $globname z1.c]]]] -test filename-11.23 {Tcl_GlobCmd} {unixOnly} { +test filename-11.23 {Tcl_GlobCmd} {unix} { list [catch {lsort [glob -path $globname/ *]} msg] $msg } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname a3]\ @@ -957,7 +968,7 @@ test filename-11.23 {Tcl_GlobCmd} {unixOnly} { [file join $globname x,z1.c]\ [file join $globname x1.c]\ [file join $globname y1.c] [file join $globname z1.c]]]] -test filename-11.23.1 {Tcl_GlobCmd} {pcOnly} { +test filename-11.23.1 {Tcl_GlobCmd} {win} { list [catch {lsort [glob -path $globname/ *]} msg] $msg } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname .1]\ @@ -966,7 +977,7 @@ test filename-11.23.1 {Tcl_GlobCmd} {pcOnly} { [file join $globname x,z1.c]\ [file join $globname x1.c]\ [file join $globname y1.c] [file join $globname z1.c]]]] -test filename-11.24 {Tcl_GlobCmd} {unixOnly} { +test filename-11.24 {Tcl_GlobCmd} {unix} { list [catch {lsort [glob -join -path \ [string range $globname 0 5] * *]} msg] $msg } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ @@ -975,7 +986,7 @@ test filename-11.24 {Tcl_GlobCmd} {unixOnly} { [file join $globname x,z1.c]\ [file join $globname x1.c]\ [file join $globname y1.c] [file join $globname z1.c]]]] -test filename-11.24.1 {Tcl_GlobCmd} {pcOnly} { +test filename-11.24.1 {Tcl_GlobCmd} {win} { list [catch {lsort [glob -join -path \ [string range $globname 0 5] * *]} msg] $msg } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ @@ -1075,7 +1086,11 @@ test filename-11.45 {Tcl_GlobCmd on root volume} { set res2 [glob *] cd $tmpd } - expr {$res1 == $res2} + set res [expr {$res1 == $res2}] + if {!$res} { + lappend res $res1 $res2 + } + set res } {1} test filename-11.46 {Tcl_GlobCmd} { list [catch {glob -types abcde -dir foo *} msg] $msg @@ -1103,23 +1118,23 @@ test filename-12.1.1 {simple globbing} {unixOrPc} { test filename-12.1.2 {simple globbing} {unixOrPc} { list [catch {glob -types d {}} msg] $msg } {0 .} -test filename-12.1.3 {simple globbing} {unixOnly} { +test filename-12.1.3 {simple globbing} {unix} { list [catch {glob -types hidden {}} msg] $msg } {0 .} -test filename-12.1.4 {simple globbing} {pcOnly} { +test filename-12.1.4 {simple globbing} {win} { list [catch {glob -types hidden {}} msg] $msg } {1 {no files matched glob pattern ""}} -test filename-12.1.5 {simple globbing} {pcOnly} { +test filename-12.1.5 {simple globbing} {win} { list [catch {glob -types hidden c:/} msg] $msg } {1 {no files matched glob pattern "c:/"}} -test filename-12.1.6 {simple globbing} {pcOnly} { +test filename-12.1.6 {simple globbing} {win} { list [catch {glob c:/} msg] $msg } {0 c:/} test filename-12.3 {simple globbing} { list [catch {glob -nocomplain \{a1,a2\}} msg] $msg } {0 {}} - set globPreResult globTest/ +set globPreResult globTest/ set x1 x1.c set y1 y1.c test filename-12.4 {simple globbing} {unixOrPc} { @@ -1131,7 +1146,7 @@ test filename-12.5 {simple globbing} { test filename-12.6 {simple globbing} { list [catch {glob globTest\\/\\x1.c} msg] $msg } "0 $globPreResult$x1" -test filename-12.7 {globbing at filesystem root} {unixOnly} { +test filename-12.7 {globbing at filesystem root} {unix} { set res1 [glob -nocomplain /*] set res2 [glob -path / *] set equal [string equal $res1 $res2] @@ -1140,7 +1155,7 @@ test filename-12.7 {globbing at filesystem root} {unixOnly} { } set equal } {1} -test filename-12.8 {globbing at filesystem root} {unixOnly} { +test filename-12.8 {globbing at filesystem root} {unix} { set dir [lindex [glob -type d /*] 0] set first [string range $dir 0 1] set res1 [glob -nocomplain ${first}*] @@ -1151,7 +1166,7 @@ test filename-12.8 {globbing at filesystem root} {unixOnly} { } set equal } {1} -test filename-12.9 {globbing at filesystem root} {winOnly} { +test filename-12.9 {globbing at filesystem root} {win} { # Can't grab just anything from 'file volumes' because we need a dir # that has subdirs - assume that C:/ exists across Windows machines. set dir [lindex [glob -type d C:/*] 0] @@ -1165,6 +1180,20 @@ test filename-12.9 {globbing at filesystem root} {winOnly} { set equal } {1} +test filename-12.10 {globbing with volume relative paths} {win} { + set dir [lindex [glob -type d C:/*] 0] + set pwd [pwd] + cd C:/ + set res1 [glob -nocomplain [string range $dir 2 end]] + cd $pwd + set res2 [list $dir] + set equal [string equal $res1 $res2] + if {!$equal} { + lappend equal "not equal" $res1 $res2 + } + set equal +} {1} + test filename-13.1 {globbing with brace substitution} { list [catch {glob globTest/\{\}} msg] $msg } "0 $globPreResult" @@ -1239,10 +1268,10 @@ cd $savepwd file rename [file join globTestContext globTest] globTest file delete globTestContext -test filename-14.7 {asterisks, question marks, and brackets} {unixOnly} { +test filename-14.7 {asterisks, question marks, and brackets} {unix} { lsort [glob globTest/*] } {globTest/a1 globTest/a2 globTest/a3 {globTest/weird name.c} globTest/x,z1.c globTest/x1.c globTest/y1.c globTest/z1.c} -test filename-14.7.1 {asterisks, question marks, and brackets} {pcOnly} { +test filename-14.7.1 {asterisks, question marks, and brackets} {win} { lsort [glob globTest/*] } {globTest/.1 globTest/a1 globTest/a2 globTest/a3 {globTest/weird name.c} globTest/x,z1.c globTest/x1.c globTest/y1.c globTest/z1.c} test filename-14.9 {asterisks, question marks, and brackets} {unixOrPc} { @@ -1277,19 +1306,30 @@ test filename-14.21 {asterisks, question marks, and brackets} { test filename-14.22 {asterisks, question marks, and brackets} { list [catch {glob goo/* x*z foo?q} msg] $msg } {1 {no files matched glob patterns "goo/* x*z foo?q"}} -test filename-14.23 {slash globbing} {unixOrPc} { +test filename-14.23 {slash globbing} {unix} { glob / } / -test filename-14.24 {slash globbing} {pcOnly} { +test filename-14.23.2 {slash globbing} {win} { + glob / +} [file norm /] +test filename-14.24 {slash globbing} {win} { glob {\\} -} / -test filename-14.25 {type specific globbing} {unixOnly} { +} [file norm /] +test filename-14.25 {type specific globbing} {unix} { list [catch {lsort [glob -dir globTest -types f *]} msg] $msg } [list 0 [lsort [list \ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ [file join $globname y1.c] [file join $globname z1.c]]]] +test filename-14.25.1 {type specific globbing} {win} { + list [catch {lsort [glob -dir globTest -types f *]} msg] $msg +} [list 0 [lsort [list \ + [file join $globname .1]\ + [file join $globname "weird name.c"]\ + [file join $globname x,z1.c]\ + [file join $globname x1.c]\ + [file join $globname y1.c] [file join $globname z1.c]]]] test filename-14.26 {type specific globbing} { list [catch {glob -nocomplain -dir globTest -types {readonly} *} msg] $msg } [list 0 {}] @@ -1311,8 +1351,8 @@ test filename-14.31 {Bug 2918610} -setup { makeFile {} bar.soom $d } -body { foreach fn [glob $d/bar.soom] { - set root [file rootname $fn] - close [open $root {WRONLY CREAT}] + set root [file rootname $fn] + close [open $root {WRONLY CREAT}] } llength [glob -directory $d *] } -cleanup { @@ -1328,14 +1368,14 @@ unset globname # access by owner, so the following test is not portable. catch {file attributes globTest/a1 -permissions 0000} -test filename-15.1 {unix specific globbing} {unixOnly nonPortable} { +test filename-15.1 {unix specific globbing} {unix nonPortable} { string tolower [list [catch {glob globTest/a1/*} msg] $msg $errorCode] } {1 {couldn't read directory "globtest/a1": permission denied} {posix eacces {permission denied}}} -test filename-15.2 {unix specific no complain: no errors} {unixOnly nonPortable} { +test filename-15.2 {unix specific no complain: no errors} {unix nonPortable} { glob -nocomplain globTest/a1/* } {} test filename-15.3 {unix specific no complain: no errors, good result} \ - {unixOnly nonPortable} { + {unix nonPortable} { # test fails because if an error occur , the interp's result # is reset... glob -nocomplain globTest/a2 globTest/a1/* globTest/a3 @@ -1343,23 +1383,32 @@ test filename-15.3 {unix specific no complain: no errors, good result} \ catch {file attributes globTest/a1 -permissions 0755} test filename-15.4 {unix specific no complain: no errors, good result} \ - {unixOnly nonPortable} { + {unix nonPortable} { # test fails because if an error occurs, the interp's result # is reset... or you don't run at scriptics where the # outser and welch users exists glob -nocomplain ~ouster ~foo ~welch } {/home/ouster /home/welch} -test filename-15.4.1 {no complain: no errors, good result} { +test filename-15.4.1 {no complain: errors, sequencing} { + # test used to fail because if an error occurs, the interp's result + # is reset... But, the sequence means we throw a different error + # first. + concat \ + [list [catch {glob -nocomplain ~wontexist ~blahxyz ~} res1] $res1] \ + [list [catch {glob -nocomplain ~ ~blahxyz ~wontexist} res2] $res2] +} {1 {user "wontexist" doesn't exist} 1 {user "blahxyz" doesn't exist}} +test filename-15.4.2 {no complain: errors, sequencing} { # test used to fail because if an error occurs, the interp's result # is reset... - string equal [glob -nocomplain ~wontexist ~blah ~] \ - [glob -nocomplain ~ ~blah ~wontexist] + string equal \ + [list [catch {glob -nocomplain ~wontexist *} res1] $res1] \ + [list [catch {glob -nocomplain * ~wontexist} res2] $res2] } {1} -test filename-15.5 {unix specific globbing} {unixOnly nonPortable} { +test filename-15.5 {unix specific globbing} {unix nonPortable} { glob ~ouster/.csh* } "/home/ouster/.cshrc" -catch {close [open globTest/odd\\\[\]*?\{\}name w]} -test filename-15.6 {unix specific globbing} {unixOnly} { +catch {close [open globTest/odd\\\[\]*?\{\}name w]} +test filename-15.6 {unix specific globbing} {unix} { global env set temp $env(HOME) set env(HOME) $env(HOME)/globTest/odd\\\[\]*?\{\}name @@ -1368,10 +1417,27 @@ test filename-15.6 {unix specific globbing} {unixOnly} { set result } [list 0 [list [lindex [glob ~] 0]/globTest/odd\\\[\]*?\{\}name]] catch {file delete -force globTest/odd\\\[\]*?\{\}name} +test filename-15.7 {win specific globbing} {win} { + if {[string index [glob ~] end] == "/"} { + set res "glob ~ is [glob ~] but shouldn't end in a separator" + } else { + set res "ok" + } +} {ok} +test filename-15.8 {win and unix specific globbing} {unixOrWin} { + global env + set temp $env(HOME) + catch {close [open $env(HOME)/globTest/anyname w]} err + set env(HOME) $env(HOME)/globTest/anyname + set result [list [catch {glob ~} msg] $msg] + set env(HOME) $temp + catch {file delete -force $env(HOME)/globTest/anyname} + set result +} [list 0 [list [lindex [glob ~] 0]/globTest/anyname]] # The following tests are only valid for Windows systems. set oldDir [pwd] -if {$::tcltest::testConstraints(pcOnly)} { +if {[testConstraint win]} { cd c:/ file delete -force globTest file mkdir globTest @@ -1380,67 +1446,89 @@ if {$::tcltest::testConstraints(pcOnly)} { close [open globTest/z1.bat w] } -test filename-16.1 {windows specific globbing} {pcOnly} { +test filename-16.1 {windows specific globbing} {win} { lsort [glob globTest/*.bat] } {globTest/x1.BAT globTest/y1.Bat globTest/z1.bat} -test filename-16.2 {windows specific globbing} {pcOnly} { - glob c: -} c: -test filename-16.3 {windows specific globbing} {pcOnly} { - glob c:\\\\ +test filename-16.2 {windows specific globbing} {win} { + list [catch {glob c:} res] $res +} {0 c:} +test filename-16.2.1 {windows specific globbing} {win} { + set dir [pwd] + cd C:/ + set res [list [catch {glob c:} err] $err] + cd $dir + set res +} {0 c:} +test filename-16.3 {windows specific globbing} {win} { + glob -nocomplain c:\\\\ } c:/ -test filename-16.4 {windows specific globbing} {pcOnly} { - glob c:/ +test filename-16.4 {windows specific globbing} {win} { + glob -nocomplain c:/ } c:/ -test filename-16.5 {windows specific globbing} {pcOnly} { - glob c:*bTest +test filename-16.5 {windows specific globbing} {win} { + glob -nocomplain c:*bTest } c:globTest -test filename-16.6 {windows specific globbing} {pcOnly} { - glob c:\\\\*bTest +test filename-16.6 {windows specific globbing} {win} { + glob -nocomplain c:\\\\*bTest } c:/globTest -test filename-16.7 {windows specific globbing} {pcOnly} { - glob c:/*bTest +test filename-16.7 {windows specific globbing} {win} { + glob -nocomplain c:/*bTest } c:/globTest -test filename-16.8 {windows specific globbing} {pcOnly} { - lsort [glob c:globTest/*.bat] +test filename-16.8 {windows specific globbing} {win} { + lsort [glob -nocomplain c:globTest/*.bat] } {c:globTest/x1.BAT c:globTest/y1.Bat c:globTest/z1.bat} -test filename-16.9 {windows specific globbing} {pcOnly} { - lsort [glob c:/globTest/*.bat] +test filename-16.9 {windows specific globbing} {win} { + lsort [glob -nocomplain c:/globTest/*.bat] } {c:/globTest/x1.BAT c:/globTest/y1.Bat c:/globTest/z1.bat} -test filename-16.10 {windows specific globbing} {pcOnly} { - lsort [glob c:globTest\\\\*.bat] +test filename-16.10 {windows specific globbing} {win} { + lsort [glob -nocomplain c:globTest\\\\*.bat] } {c:globTest/x1.BAT c:globTest/y1.Bat c:globTest/z1.bat} -test filename-16.11 {windows specific globbing} {pcOnly} { - lsort [glob c:\\\\globTest\\\\*.bat] +test filename-16.11 {windows specific globbing} {win} { + lsort [glob -nocomplain c:\\\\globTest\\\\*.bat] } {c:/globTest/x1.BAT c:/globTest/y1.Bat c:/globTest/z1.bat} # some tests require a shared C drive -if {[catch {cd //[info hostname]/c}]} { - set ::tcltest::testConstraints(sharedCdrive) 0 -} else { - set ::tcltest::testConstraints(sharedCdrive) 1 +if {[testConstraint win]} { + testConstraint sharedCdrive [expr {![catch {cd //[info hostname]/c}]}] } -test filename-16.12 {windows specific globbing} {pcOnly sharedCdrive} { +test filename-16.12 {windows specific globbing} {win sharedCdrive} { cd //[info hostname]/c glob //[info hostname]/c/*Test } //[info hostname]/c/globTest -test filename-16.13 {windows specific globbing} {pcOnly sharedCdrive} { +test filename-16.13 {windows specific globbing} {win sharedCdrive} { cd //[info hostname]/c glob "\\\\\\\\[info hostname]\\\\c\\\\*Test" } //[info hostname]/c/globTest -test filename-16.14 {windows specific globbing} {pcOnly} { +test filename-16.14 {windows specific globbing} {win} { cd [lindex [glob -types d -dir C:/ *] 0] expr {[lsearch -exact [glob {{.,*}*}] ".."] != -1} } {1} -test filename-16.15 {windows specific globbing} {pcOnly} { +test filename-16.15 {windows specific globbing} {win} { cd [lindex [glob -types d -dir C:/ *] 0] glob .. } {..} -test filename-16.16 {windows specific globbing} {pcOnly} { - file tail [lindex [glob "[lindex [glob -types d -dir C:/ *] 0]/.."] 0] +test filename-16.16 {windows specific globbing} {win} { + file tail [lindex [glob -nocomplain "[lindex [glob -types d -dir C:/ *] 0]/.."] 0] } {..} +test filename-16.17 {windows specific globbing} {win} { + cd C:/ + # Ensure correct trimming of tails with absolute and + # volume relative globbing. + set res1 [glob -nocomplain -tails -dir C:/ *] + set res2 [glob -nocomplain -tails -dir C: *] + if {$res1 eq $res2} { + concat ok + } else { + concat $res1 ne $res2 + } +} {ok} + +# Put the working directory back now that we're done with globbing in C:/ +if {[testConstraint win]} { + cd $oldDir +} test filename-17.1 {windows specific special files} {testsetplatform} { testsetplatform win @@ -1448,8 +1536,11 @@ test filename-17.1 {windows specific special files} {testsetplatform} { [file pathtype prn] [file pathtype nul] [file pathtype aux] \ [file pathtype foo] } {absolute absolute absolute absolute absolute absolute relative} +if {[testConstraint testsetplatform]} { + testsetplatform $platform +} -test filename-17.2 {windows specific glob with executable} {winOnly} { +test filename-17.2 {windows specific glob with executable} {win} { makeDirectory execglob makeFile contents execglob/abc.exe makeFile contents execglob/abc.notexecutable @@ -1467,14 +1558,18 @@ test filename-17.3 {Bug 2571597} win { file pathtype $p } volumerelative - -test fileName-18.1 {windows - split ADS name correctly} {winOnly} { +test fileName-18.1 {windows - split ADS name correctly} {win} { # bug 1194458 set x [file split c:/c:d] set y [eval [linsert $x 0 file join]] list $x $y } {{c:/ ./c:d} c:/c:d} +test fileName-19.1 {ensure that [Bug 1325099] stays fixed} { + # Any non-crashing result is OK + list [file exists ~//.nonexistant_file] [file exists ~///.nonexistant_file] +} {0 0} + test fileName-20.1 {Bug 1750300} -setup { set d [makeDirectory foo] makeFile {} TAGS $d @@ -1545,6 +1640,8 @@ test fileName-20.6 {Bug 2837800} -setup { } -result {} test fileName-20.7 {Bug 2806250} -setup { + set savewd [pwd] + cd [temporaryDirectory] set d [makeDirectory isolate] makeFile {} ./~test $d } -body { @@ -1552,9 +1649,12 @@ test fileName-20.7 {Bug 2806250} -setup { } -cleanup { removeFile ./~test $d removeDirectory isolate + cd $savewd } -result 1 test fileName-20.8 {Bug 2806250} -setup { + set savewd [pwd] + cd [temporaryDirectory] set d [makeDirectory isolate] makeFile {} ./~test $d } -body { @@ -1562,6 +1662,7 @@ test fileName-20.8 {Bug 2806250} -setup { } -cleanup { removeFile ./~test $d removeDirectory isolate + cd $savewd } -result ./~test test fileName-20.9 {} -setup { @@ -1575,9 +1676,7 @@ test fileName-20.9 {} -setup { cd $savewd removeDirectory isolate removeFile test ~ -} -result [file normalize ~/test] -# The normalized result here is arguably buggy, but consistent -# with (some?) 8.4.* releases. +} -result ~/test test fileName-20.10 {} -setup { set s [makeDirectory sub ~] @@ -1592,9 +1691,7 @@ test fileName-20.10 {} -setup { removeDirectory isolate removeFile fileName-20.10 $s removeDirectory sub ~ -} -result [file normalize ~/sub/fileName-20.10] -# The normalized result here is arguably buggy, but consistent -# with (some?) 8.4.* releases. +} -result ~/sub/fileName-20.10 # cleanup catch {file delete -force C:/globTest} @@ -1602,7 +1699,7 @@ cd [temporaryDirectory] file delete -force globTest cd $oldpwd set env(HOME) $oldhome -if {[tcltest::testConstraint testsetplatform]} { +if {[testConstraint testsetplatform]} { testsetplatform $platform catch {unset platform} } diff --git a/tests/fileSystem.test b/tests/fileSystem.test index f42e776..b3a9aca 100644 --- a/tests/fileSystem.test +++ b/tests/fileSystem.test @@ -11,106 +11,135 @@ package require tcltest 2 namespace eval ::tcl::test::fileSystem { + namespace import ::tcltest::* catch { - namespace import ::tcltest::cleanupTests - namespace import ::tcltest::makeDirectory - namespace import ::tcltest::makeFile - namespace import ::tcltest::removeDirectory - namespace import ::tcltest::removeFile - namespace import ::tcltest::test - } - - catch { file delete -force link.file file delete -force dir.link - file delete -force [file join dir.file linkinside.file] + file delete -force [file join dir.dir linkinside.file] } +# Test for commands defined in Tcltest executable +testConstraint testfilesystem [llength [info commands ::testfilesystem]] +testConstraint testsetplatform [llength [info commands ::testsetplatform]] +testConstraint testsimplefilesystem [llength [info commands ::testsimplefilesystem]] + cd [tcltest::temporaryDirectory] makeFile "test file" gorp.file -makeDirectory dir.file -makeFile "test file in directory" [file join dir.file inside.file] +makeDirectory dir.dir +makeDirectory [file join dir.dir dirinside.dir] +makeFile "test file in directory" [file join dir.dir inside.file] + +testConstraint unusedDrive 0 +set drive {} +if {[testConstraint win]} { + set vols [string map [list :/ {}] [file volumes]] + for {set i 0} {$i < 26} {incr i} { + set drive [format %c [expr {$i + 65}]] + if {[lsearch -exact $vols $drive] == -1} { + testConstraint unusedDrive 1 + break + } + } + unset i vols + # The variable 'drive' will be used below +} -if {[catch { - file link link.file gorp.file - file link \ - [file join dir.file linkinside.file] \ - [file join dir.file inside.file] - file link dir.link dir.file -}]} { - tcltest::testConstraint hasLinks 0 -} else { - tcltest::testConstraint hasLinks 1 +testConstraint moreThanOneDrive 0 +set drives [list] +if {[testConstraint win]} { + set dir [pwd] + foreach vol [file volumes] { + if {![catch {cd $vol}]} { + lappend drives $vol + } + } + if {[llength $drives] > 1} { + testConstraint moreThanOneDrive 1 + } + # The variable 'drives' will be used below + unset vol + cd $dir + unset dir } -tcltest::testConstraint testsimplefilesystem \ - [string equal testsimplefilesystem [info commands testsimplefilesystem]] +proc testPathEqual {one two} { + if {$one eq $two} { + return 1 + } else { + return "not equal: $one $two" + } +} + +testConstraint hasLinks [expr {![catch { + file link link.file gorp.file + cd dir.dir + file link \ + [file join linkinside.file] \ + [file join inside.file] + cd .. + file link dir.link dir.dir + cd dir.dir + file link [file join dirinside.link] \ + [file join dirinside.dir] + cd .. +}]}] + +if {[testConstraint testsetplatform]} { + set platform [testgetplatform] +} test filesystem-1.0 {link normalisation} {hasLinks} { string equal [file normalize gorp.file] [file normalize link.file] } {0} - test filesystem-1.1 {link normalisation} {hasLinks} { - string equal [file normalize dir.file] [file normalize dir.link] + string equal [file normalize dir.dir] [file normalize dir.link] } {0} - -test filesystem-1.2 {link normalisation} {hasLinks macOrUnix} { - string equal [file normalize [file join gorp.file foo]] \ - [file normalize [file join link.file foo]] +test filesystem-1.2 {link normalisation} {hasLinks unix} { + testPathEqual [file normalize [file join gorp.file foo]] \ + [file normalize [file join link.file foo]] } {1} - test filesystem-1.3 {link normalisation} {hasLinks} { - string equal [file normalize [file join dir.file foo]] \ - [file normalize [file join dir.link foo]] + testPathEqual [file normalize [file join dir.dir foo]] \ + [file normalize [file join dir.link foo]] } {1} - test filesystem-1.4 {link normalisation} {hasLinks} { - string equal [file normalize [file join dir.file inside.file]] \ - [file normalize [file join dir.link inside.file]] + testPathEqual [file normalize [file join dir.dir inside.file]] \ + [file normalize [file join dir.link inside.file]] } {1} - test filesystem-1.5 {link normalisation} {hasLinks} { - string equal [file normalize [file join dir.file linkinside.file]] \ - [file normalize [file join dir.file linkinside.file]] + testPathEqual [file normalize [file join dir.dir linkinside.file]] \ + [file normalize [file join dir.dir linkinside.file]] } {1} - test filesystem-1.6 {link normalisation} {hasLinks} { - string equal [file normalize [file join dir.file linkinside.file]] \ + string equal [file normalize [file join dir.dir linkinside.file]] \ [file normalize [file join dir.link inside.file]] } {0} - -test filesystem-1.7 {link normalisation} {hasLinks macOrUnix} { - string equal [file normalize [file join dir.link linkinside.file foo]] \ - [file normalize [file join dir.file inside.file foo]] +test filesystem-1.7 {link normalisation} {hasLinks unix} { + testPathEqual [file normalize [file join dir.link linkinside.file foo]] \ + [file normalize [file join dir.dir inside.file foo]] } {1} - test filesystem-1.8 {link normalisation} {hasLinks} { - string equal [file normalize [file join dir.file linkinside.filefoo]] \ - [file normalize [file join dir.link inside.filefoo]] + string equal [file normalize [file join dir.dir linkinside.filefoo]] \ + [file normalize [file join dir.link inside.filefoo]] } {0} - -test filesystem-1.9 {link normalisation} {macOrUnix hasLinks} { +test filesystem-1.9 {link normalisation} {unix hasLinks} { file delete -force dir.link - file link dir.link [file nativename dir.file] - string equal [file normalize [file join dir.file linkinside.file foo]] \ - [file normalize [file join dir.link inside.file foo]] + file link dir.link [file nativename dir.dir] + testPathEqual [file normalize [file join dir.dir linkinside.file foo]] \ + [file normalize [file join dir.link inside.file foo]] } {1} - -test filesystem-1.10 {link normalisation: double link} {macOrUnix hasLinks} { +test filesystem-1.10 {link normalisation: double link} {unix hasLinks} { file link dir2.link dir.link - string equal [file normalize [file join dir.file linkinside.file foo]] \ - [file normalize [file join dir2.link inside.file foo]] + testPathEqual [file normalize [file join dir.dir linkinside.file foo]] \ + [file normalize [file join dir2.link inside.file foo]] } {1} - makeDirectory dir2.file - -test filesystem-1.11 {link normalisation: double link, back in tree} {macOrUnix hasLinks} { - file link [file join dir2.file dir2.link] dir2.link - string equal [file normalize [file join dir.file linkinside.file foo]] \ - [file normalize [file join dir2.file dir2.link inside.file foo]] +test filesystem-1.11 {link normalisation: double link, back in tree} {unix hasLinks} { + file link [file join dir2.file dir2.link] [file join .. dir2.link] + testPathEqual [file normalize [file join dir.dir linkinside.file foo]] \ + [file normalize [file join dir2.file dir2.link inside.file foo]] } {1} - test filesystem-1.12 {file new native path} {} { for {set i 0} {$i < 10} {incr i} { foreach f [lsort [glob -nocomplain -type l *]] { @@ -120,24 +149,352 @@ test filesystem-1.12 {file new native path} {} { # If we reach here we've succeeded. We used to crash above. expr 1 } {1} - -test filesystem-1.13 {file normalisation} {winOnly} { +test filesystem-1.13 {file normalisation} {win} { # This used to be broken file normalize C:/thislongnamedoesntexist } {C:/thislongnamedoesntexist} - -test filesystem-1.14 {file normalisation} {winOnly} { +test filesystem-1.14 {file normalisation} {win} { # This used to be broken file normalize c:/ } {C:/} - +test filesystem-1.15 {file normalisation} {win} { + file normalize c:/../ +} {C:/} +test filesystem-1.16 {file normalisation} {win} { + file normalize c:/. +} {C:/} +test filesystem-1.17 {file normalisation} {win} { + file normalize c:/.. +} {C:/} +test filesystem-1.17.1 {file normalisation} {win} { + file normalize c:\\.. +} {C:/} +test filesystem-1.18 {file normalisation} {win} { + file normalize c:/./ +} {C:/} +test filesystem-1.19 {file normalisation} {win unusedDrive} { + file normalize ${drive}:/./../../.. +} "${drive}:/" +test filesystem-1.20 {file normalisation} {win} { + file normalize //name/foo/../ +} {//name/foo} +test filesystem-1.21 {file normalisation} {win} { + file normalize C:///foo/./ +} {C:/foo} +test filesystem-1.22 {file normalisation} {win} { + file normalize //name/foo/. +} {//name/foo} +test filesystem-1.23 {file normalisation} {win} { + file normalize c:/./foo +} {C:/foo} +test filesystem-1.24 {file normalisation} {win unusedDrive} { + file normalize ${drive}:/./../../../a +} "${drive}:/a" +test filesystem-1.25 {file normalisation} {win unusedDrive} { + file normalize ${drive}:/./.././../../a +} "${drive}:/a" +test filesystem-1.25.1 {file normalisation} {win unusedDrive} { + file normalize ${drive}:/./.././..\\..\\a\\bb +} "${drive}:/a/bb" +test filesystem-1.26 {link normalisation: link and ..} {hasLinks} { + file delete -force dir2.link + set dir [file join dir2 foo bar] + file mkdir $dir + file link dir2.link [file join dir2 foo bar] + set res [list [file normalize [file join dir2 foo x]] \ + [file normalize [file join dir2.link .. x]]] + if {![string equal [lindex $res 0] [lindex $res 1]]} { + set res "$res not equal" + } else { + set res "ok" + } +} {ok} +test filesystem-1.27 {file normalisation: up and down with ..} { + set dir [file join dir2 foo bar] + file mkdir $dir + set dir2 [file join dir2 .. dir2 foo .. foo bar] + set res [list [file normalize $dir] [file normalize $dir2]] + set res2 [list [file exists $dir] [file exists $dir2]] + if {![string equal [lindex $res 0] [lindex $res 1]]} { + set res "exists: $res2, $res not equal" + } else { + set res "ok: $res2" + } +} {ok: 1 1} +test filesystem-1.28 {link normalisation: link with .. and ..} {hasLinks} { + file delete -force dir2.link + set dir [file join dir2 foo bar] + file mkdir $dir + set to [file join dir2 .. dir2 foo .. foo bar] + file link dir2.link $to + set res [list [file normalize [file join dir2 foo x]] \ + [file normalize [file join dir2.link .. x]]] + if {![string equal [lindex $res 0] [lindex $res 1]]} { + set res "$res not equal" + } else { + set res "ok" + } +} {ok} +test filesystem-1.29 {link normalisation: link with ..} {hasLinks} { + file delete -force dir2.link + set dir [file join dir2 foo bar] + file mkdir $dir + set to [file join dir2 .. dir2 foo .. foo bar] + file link dir2.link $to + set res [file normalize [file join dir2.link x yyy z]] + if {[string first ".." $res] != -1} { + set res "$res must not contain '..'" + } else { + set res "ok" + } +} {ok} +test filesystem-1.29.1 {link normalisation with two consecutive links} {hasLinks} { + testPathEqual [file normalize [file join dir.link dirinside.link abc]] \ + [file normalize [file join dir.dir dirinside.dir abc]] +} {1} file delete -force dir2.file file delete -force dir2.link file delete -force link.file dir.link -removeFile [file join dir.file inside.file] -removeDirectory dir.file +file delete -force dir2 +file delete -force [file join dir.dir dirinside.link] +removeFile [file join dir.dir inside.file] +removeDirectory [file join dir.dir dirinside.dir] +removeDirectory dir.dir +test filesystem-1.30 {normalisation of nonexistent user} { + list [catch {file normalize ~noonewiththisname} err] $err +} {1 {user "noonewiththisname" doesn't exist}} +test filesystem-1.31 {link normalisation: link near filesystem root} {testsetplatform} { + testsetplatform unix + file normalize /foo/../bar +} {/bar} +test filesystem-1.32 {link normalisation: link near filesystem root} {testsetplatform} { + testsetplatform unix + file normalize /../bar +} {/bar} +test filesystem-1.33 {link normalisation: link near filesystem root} {testsetplatform} { + testsetplatform windows + set res [file normalize C:/../bar] + if {[testConstraint unix]} { + # Some unices go further in normalizing this -- not really + # a problem since this is a Windows test + regexp {C:/bar$} $res res + } + set res +} {C:/bar} +if {[testConstraint testsetplatform]} { + testsetplatform $platform +} +test filesystem-1.34 {file normalisation with '/./'} { + set res [file normalize /foo/bar/anc/./.tml] + if {[string first "/./" $res] != -1} { + set res "normalization of /foo/bar/anc/./.tml is: $res" + } else { + set res "ok" + } + set res +} {ok} +test filesystem-1.35 {file normalisation with '/./'} { + set res [file normalize /ffo/bar/anc/./foo/.tml] + if {[string first "/./" $res] != -1 || ([regsub -all "foo" $res "" reg] == 2)} { + set res "normalization of /ffo/bar/anc/./foo/.tml is: $res" + } else { + set res "ok" + } + set res +} {ok} +test filesystem-1.36 {file normalisation with '/./'} { + set res [file normalize /foo/bar/anc/././asdasd/.tml] + if {[string first "/./" $res] != -1 || ([regsub -all "asdasd" $res "" reg] == 2) } { + set res "normalization of /foo/bar/anc/././asdasd/.tml is: $res" + } else { + set res "ok" + } + set res +} {ok} +test filesystem-1.37 {file normalisation with '/./'} { + set fname "/abc/./def/./ghi/./asda/.././.././asd/x/../../../../....." + set res [file norm $fname] + if {[string first "//" $res] != -1} { + set res "normalization of $fname is: $res" + } else { + set res "ok" + } + set res +} {ok} +test filesystem-1.38 {file normalisation with volume relative} \ + {win moreThanOneDrive} { + set path "[string range [lindex $drives 0] 0 1]foo" + set dir [pwd] + cd [lindex $drives 1] + set res [file norm $path] + cd $dir + set res +} "[lindex $drives 0]foo" +test filesystem-1.39 {file normalisation with volume relative} {win} { + set drv C:/ + set dir [lindex [glob -type d -dir $drv *] 0] + set old [pwd] + cd $dir + set res [file norm [string range $drv 0 1]] + cd $old + if {[string index $res end] eq "/"} { + set res "Bad normalized path: $res" + } else { + set res "ok" + } +} {ok} +test filesystem-1.40 {file normalisation with repeated separators} { + set a [file norm foo////bar] + set b [file norm foo/bar] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.41 {file normalisation with repeated separators} {win} { + set a [file norm foo\\\\\\bar] + set b [file norm foo/bar] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.42 {file normalisation .. beyond root (Bug 1379287)} { + set a [file norm /xxx/..] + set b [file norm /] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.42.1 {file normalisation .. beyond root (Bug 1379287)} { + set a [file norm /xxx/../] + set b [file norm /] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.43 {file normalisation .. beyond root (Bug 1379287)} { + set a [file norm /xxx/foo/../..] + set b [file norm /] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.43.1 {file normalisation .. beyond root (Bug 1379287)} { + set a [file norm /xxx/foo/../../] + set b [file norm /] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.44 {file normalisation .. beyond root (Bug 1379287)} { + set a [file norm /xxx/foo/../../bar] + set b [file norm /bar] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.45 {file normalisation .. beyond root (Bug 1379287)} { + set a [file norm /xxx/../../bar] + set b [file norm /bar] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.46 {file normalisation .. beyond root (Bug 1379287)} { + set a [file norm /xxx/../bar] + set b [file norm /bar] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.47 {file normalisation .. beyond root (Bug 1379287)} { + set a [file norm /..] + set b [file norm /] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.48 {file normalisation .. beyond root (Bug 1379287)} { + set a [file norm /../] + set b [file norm /] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.49 {file normalisation .. beyond root (Bug 1379287)} { + set a [file norm /.] + set b [file norm /] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.50 {file normalisation .. beyond root (Bug 1379287)} { + set a [file norm /./] + set b [file norm /] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.51 {file normalisation .. beyond root (Bug 1379287)} { + set a [file norm /../..] + set b [file norm /] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} +test filesystem-1.51.1 {file normalisation .. beyond root (Bug 1379287)} { + set a [file norm /../../] + set b [file norm /] + + if {![string equal $a $b]} { + set res "Paths should be equal: $a , $b" + } else { + set res "ok" + } +} {ok} -test filesystem-2.0 {new native path} {unixOnly} { +test filesystem-2.0 {new native path} {unix} { foreach f [lsort [glob -nocomplain /usr/bin/c*]] { catch {file readlink $f} } @@ -145,52 +502,37 @@ test filesystem-2.0 {new native path} {unixOnly} { expr 1 } {1} -if {[catch {package require tcltest 2}]} { - puts stderr "Skipping tests filesystem-{3,4}.*: tcltest 2 required." -} else { - namespace import ::tcltest::testConstraint - - # Is the Tcltest package loaded? - # - that is, the special C-coded testing commands in tclTest.c - # - tests use testing commands introduced in Tcltest 8.4 - testConstraint Tcltest [expr { - [llength [package provide Tcltest]] - && [package vsatisfies [package provide Tcltest] 8.4]}] - # Make sure the testfilesystem hasn't been registered. -while {![catch {testfilesystem 0}]} {} +if {[testConstraint testfilesystem]} { + while {![catch {testfilesystem 0}]} {} +} -test filesystem-3.0 {Tcl_FSRegister} Tcltest { +test filesystem-3.0 {Tcl_FSRegister} testfilesystem { testfilesystem 1 } {registered} - -test filesystem-3.1 {Tcl_FSUnregister} Tcltest { +test filesystem-3.1 {Tcl_FSUnregister} testfilesystem { testfilesystem 0 } {unregistered} - -test filesystem-3.2 {Tcl_FSUnregister} Tcltest { +test filesystem-3.2 {Tcl_FSUnregister} testfilesystem { list [catch {testfilesystem 0} err] $err } {1 failed} - -test filesystem-3.3 {Tcl_FSRegister} Tcltest { +test filesystem-3.3 {Tcl_FSRegister} testfilesystem { testfilesystem 1 testfilesystem 1 testfilesystem 0 testfilesystem 0 } {unregistered} - -test filesystem-3.4 {Tcl_FSRegister} Tcltest { +test filesystem-3.4 {Tcl_FSRegister} testfilesystem { testfilesystem 1 file system bar } {reporting} - -test filesystem-3.5 {Tcl_FSUnregister} Tcltest { +test filesystem-3.5 {Tcl_FSUnregister} testfilesystem { testfilesystem 0 lindex [file system bar] 0 } {native} test filesystem-4.0 {testfilesystem} { - -constraints Tcltest + -constraints testfilesystem -match glob -body { testfilesystem 1 @@ -199,11 +541,10 @@ test filesystem-4.0 {testfilesystem} { testfilesystem 0 set filesystemReport } - -result {* {access foo}} + -result {*{access foo}} } - test filesystem-4.1 {testfilesystem} { - -constraints Tcltest + -constraints testfilesystem -match glob -body { testfilesystem 1 @@ -212,11 +553,10 @@ test filesystem-4.1 {testfilesystem} { testfilesystem 0 set filesystemReport } - -result {* {stat foo}} + -result {*{stat foo}} } - test filesystem-4.2 {testfilesystem} { - -constraints Tcltest + -constraints testfilesystem -match glob -body { testfilesystem 1 @@ -225,11 +565,10 @@ test filesystem-4.2 {testfilesystem} { testfilesystem 0 set filesystemReport } - -result {* {lstat foo}} + -result {*{lstat foo}} } - test filesystem-4.3 {testfilesystem} { - -constraints Tcltest + -constraints testfilesystem -match glob -body { testfilesystem 1 @@ -238,14 +577,14 @@ test filesystem-4.3 {testfilesystem} { testfilesystem 0 set filesystemReport } - -result {* {matchindirectory *}*} + -result {*{matchindirectory *}*} } test filesystem-5.1 {cache and ~} { - -constraints Tcltest + -constraints testfilesystem -match regexp -body { - set orig $env(HOME) + set orig $::env(HOME) set ::env(HOME) /foo/bar/blah set testdir ~ set res1 "Parent of ~ (/foo/bar/blah) is [file dirname $testdir]" @@ -254,143 +593,112 @@ test filesystem-5.1 {cache and ~} { set ::env(HOME) $orig list $res1 $res2 } - -result {{Parent of ~ \(/foo/bar/blah\) is (/foo/bar|foo:bar)} {Parent of ~ \(/a/b/c\) is (/a/b|a:b)}} + -result {{Parent of ~ \(/foo/bar/blah\) is ([a-zA-Z]:)?(/foo/bar|foo:bar)} {Parent of ~ \(/a/b/c\) is ([a-zA-Z]:)?(/a/b|a:b)}} } test filesystem-6.1 {empty file name} { list [catch {open ""} msg] $msg } {1 {couldn't open "": no such file or directory}} - test filesystem-6.2 {empty file name} { list [catch {file stat "" arr} msg] $msg } {1 {could not read "": no such file or directory}} - test filesystem-6.3 {empty file name} { list [catch {file atime ""} msg] $msg } {1 {could not read "": no such file or directory}} - test filesystem-6.4 {empty file name} { list [catch {file attributes ""} msg] $msg } {1 {could not read "": no such file or directory}} - test filesystem-6.5 {empty file name} { list [catch {file copy "" ""} msg] $msg } {1 {error copying "": no such file or directory}} - test filesystem-6.6 {empty file name} { list [catch {file delete ""} msg] $msg } {0 {}} - test filesystem-6.7 {empty file name} { list [catch {file dirname ""} msg] $msg } {0 .} - test filesystem-6.8 {empty file name} { list [catch {file executable ""} msg] $msg } {0 0} - test filesystem-6.9 {empty file name} { list [catch {file exists ""} msg] $msg } {0 0} - test filesystem-6.10 {empty file name} { list [catch {file extension ""} msg] $msg } {0 {}} - test filesystem-6.11 {empty file name} { list [catch {file isdirectory ""} msg] $msg } {0 0} - test filesystem-6.12 {empty file name} { list [catch {file isfile ""} msg] $msg } {0 0} - test filesystem-6.13 {empty file name} { list [catch {file join ""} msg] $msg } {0 {}} - test filesystem-6.14 {empty file name} { list [catch {file link ""} msg] $msg } {1 {could not read link "": no such file or directory}} - test filesystem-6.15 {empty file name} { list [catch {file lstat "" arr} msg] $msg } {1 {could not read "": no such file or directory}} - test filesystem-6.16 {empty file name} { list [catch {file mtime ""} msg] $msg } {1 {could not read "": no such file or directory}} - test filesystem-6.17 {empty file name} { list [catch {file mtime "" 0} msg] $msg } {1 {could not read "": no such file or directory}} - test filesystem-6.18 {empty file name} { list [catch {file mkdir ""} msg] $msg } {1 {can't create directory "": no such file or directory}} - test filesystem-6.19 {empty file name} { list [catch {file nativename ""} msg] $msg } {0 {}} - test filesystem-6.20 {empty file name} { list [catch {file normalize ""} msg] $msg } {0 {}} - test filesystem-6.21 {empty file name} { list [catch {file owned ""} msg] $msg } {0 0} - test filesystem-6.22 {empty file name} { list [catch {file pathtype ""} msg] $msg } {0 relative} - test filesystem-6.23 {empty file name} { list [catch {file readable ""} msg] $msg } {0 0} - test filesystem-6.24 {empty file name} { list [catch {file readlink ""} msg] $msg } {1 {could not readlink "": no such file or directory}} - test filesystem-6.25 {empty file name} { list [catch {file rename "" ""} msg] $msg } {1 {error renaming "": no such file or directory}} - test filesystem-6.26 {empty file name} { list [catch {file rootname ""} msg] $msg } {0 {}} - test filesystem-6.27 {empty file name} { list [catch {file separator ""} msg] $msg } {1 {Unrecognised path}} - test filesystem-6.28 {empty file name} { list [catch {file size ""} msg] $msg } {1 {could not read "": no such file or directory}} - test filesystem-6.29 {empty file name} { list [catch {file split ""} msg] $msg } {0 {}} - test filesystem-6.30 {empty file name} { list [catch {file system ""} msg] $msg } {1 {Unrecognised path}} - test filesystem-6.31 {empty file name} { list [catch {file tail ""} msg] $msg } {0 {}} - test filesystem-6.32 {empty file name} { list [catch {file type ""} msg] $msg } {1 {could not read "": no such file or directory}} - test filesystem-6.33 {empty file name} { list [catch {file writable ""} msg] $msg } {0 0} # Make sure the testfilesystem hasn't been registered. -while {![catch {testfilesystem 0}]} {} +if {[testConstraint testfilesystem]} { + while {![catch {testfilesystem 0}]} {} } test filesystem-7.1 {load from vfs} {win testsimplefilesystem} { @@ -406,24 +714,205 @@ test filesystem-7.1 {load from vfs} {win testsimplefilesystem} { set res "ok" # The real result of this test is what happens when Tcl exits. } {ok} - test filesystem-7.2 {cross-filesystem copy from vfs maintains mtime} \ {testsimplefilesystem} { set dir [pwd] cd [tcltest::temporaryDirectory] # We created this file several tests ago. set origtime [file mtime gorp.file] + set res [file exists gorp.file] + if {[catch { + testsimplefilesystem 1 + file delete -force theCopy + file copy simplefs:/gorp.file theCopy + testsimplefilesystem 0 + set newtime [file mtime theCopy] + file delete theCopy + } err]} { + lappend res $err + set newtime "" + } + cd $dir + lappend res [expr {$origtime == $newtime}] +} {1 1} +test filesystem-7.3 {glob in simplefs} testsimplefilesystem { + set dir [pwd] + cd [tcltest::temporaryDirectory] + file mkdir simpledir + close [open [file join simpledir simplefile] w] testsimplefilesystem 1 - file delete -force theCopy - file copy simplefs:/gorp.file theCopy + set res [glob -nocomplain -dir simplefs:/simpledir *] testsimplefilesystem 0 - set newtime [file mtime theCopy] - file delete theCopy + file delete -force simpledir cd $dir - expr {$origtime == $newtime} -} {1} - + set res +} {simplefs:/simpledir/simplefile} +test filesystem-7.3.1 {glob in simplefs: no path/dir} testsimplefilesystem { + set dir [pwd] + cd [tcltest::temporaryDirectory] + file mkdir simpledir + close [open [file join simpledir simplefile] w] + testsimplefilesystem 1 + set res [glob -nocomplain simplefs:/simpledir/*] + eval lappend res [glob -nocomplain simplefs:/simpledir] + testsimplefilesystem 0 + file delete -force simpledir + cd $dir + set res +} {simplefs:/simpledir/simplefile simplefs:/simpledir} +test filesystem-7.3.2 {glob in simplefs: no path/dir, no subdirectory} testsimplefilesystem { + set dir [pwd] + cd [tcltest::temporaryDirectory] + file mkdir simpledir + close [open [file join simpledir simplefile] w] + testsimplefilesystem 1 + set res [glob -nocomplain simplefs:/s*] + testsimplefilesystem 0 + file delete -force simpledir + cd $dir + if {[llength $res] > 0} { + set res "ok" + } else { + set res "no files found with 'glob -nocomplain simplefs:/s*'" + } +} {ok} +test filesystem-7.3.3 {glob in simplefs: pattern is a volume} testsimplefilesystem { + set dir [pwd] + cd [tcltest::temporaryDirectory] + file mkdir simpledir + close [open [file join simpledir simplefile] w] + testsimplefilesystem 1 + set res [glob -nocomplain simplefs:/*] + testsimplefilesystem 0 + file delete -force simpledir + cd $dir + if {[llength $res] > 0} { + set res "ok" + } else { + set res "no files found with 'glob -nocomplain simplefs:/*'" + } +} {ok} +test filesystem-7.4 {cross-filesystem file copy with -force} testsimplefilesystem { + set dir [pwd] + cd [tcltest::temporaryDirectory] + set fout [open [file join simplefile] w] + puts -nonewline $fout "1234567890" + close $fout + testsimplefilesystem 1 + # First copy should succeed + set res [catch {file copy simplefs:/simplefile file2} err] + lappend res $err + # Second copy should fail (no -force) + lappend res [catch {file copy simplefs:/simplefile file2} err] + lappend res $err + # Third copy should succeed (-force) + lappend res [catch {file copy -force simplefs:/simplefile file2} err] + lappend res $err + lappend res [file exists file2] + testsimplefilesystem 0 + file delete -force simplefile + file delete -force file2 + cd $dir + set res +} {0 10 1 {error copying "simplefs:/simplefile" to "file2": file already exists} 0 10 1} +test filesystem-7.5 {cross-filesystem file copy with -force} {testsimplefilesystem unix} { + set dir [pwd] + cd [tcltest::temporaryDirectory] + set fout [open [file join simplefile] w] + puts -nonewline $fout "1234567890" + close $fout + testsimplefilesystem 1 + # First copy should succeed + set res [catch {file copy simplefs:/simplefile file2} err] + lappend res $err + file attributes file2 -permissions 0000 + # Second copy should fail (no -force) + lappend res [catch {file copy simplefs:/simplefile file2} err] + lappend res $err + # Third copy should succeed (-force) + lappend res [catch {file copy -force simplefs:/simplefile file2} err] + lappend res $err + lappend res [file exists file2] + testsimplefilesystem 0 + file delete -force simplefile + file delete -force file2 + cd $dir + set res +} {0 10 1 {error copying "simplefs:/simplefile" to "file2": file already exists} 0 10 1} +test filesystem-7.6 {cross-filesystem dir copy with -force} testsimplefilesystem { + set dir [pwd] + cd [tcltest::temporaryDirectory] + file delete -force simpledir + file mkdir simpledir + file mkdir dir2 + set fout [open [file join simpledir simplefile] w] + puts -nonewline $fout "1234567890" + close $fout + testsimplefilesystem 1 + # First copy should succeed + set res [catch {file copy simplefs:/simpledir dir2} err] + lappend res $err + # Second copy should fail (no -force) + lappend res [catch {file copy simplefs:/simpledir dir2} err] + lappend res $err + # Third copy should succeed (-force) + lappend res [catch {file copy -force simplefs:/simpledir dir2} err] + lappend res $err + lappend res [file exists [file join dir2 simpledir]] \ + [file exists [file join dir2 simpledir simplefile]] + testsimplefilesystem 0 + file delete -force simpledir + file delete -force dir2 + cd $dir + set res +} {0 {} 1 {error copying "simplefs:/simpledir" to "dir2/simpledir": file already exists} 0 {} 1 1} +test filesystem-7.7 {cross-filesystem dir copy with -force} {testsimplefilesystem unix} { + set dir [pwd] + cd [tcltest::temporaryDirectory] + file delete -force simpledir + file mkdir simpledir + file mkdir dir2 + set fout [open [file join simpledir simplefile] w] + puts -nonewline $fout "1234567890" + close $fout + testsimplefilesystem 1 + # First copy should succeed + set res [catch {file copy simplefs:/simpledir dir2} err] + lappend res $err + # Second copy should fail (no -force) + lappend res [catch {file copy simplefs:/simpledir dir2} err] + lappend res $err + # Third copy should succeed (-force) + # I've noticed on some Unices that this only succeeds + # intermittently (some runs work, some fail). This needs + # examining further. + lappend res [catch {file copy -force simplefs:/simpledir dir2} err] + lappend res $err + lappend res [file exists [file join dir2 simpledir]] \ + [file exists [file join dir2 simpledir simplefile]] + testsimplefilesystem 0 + file delete -force simpledir + file delete -force dir2 + cd $dir + set res +} {0 {} 1 {error copying "simplefs:/simpledir" to "dir2/simpledir": file already exists} 0 {} 1 1} removeFile gorp.file +test filesystem-7.8 {vfs cd} testsimplefilesystem { + set dir [pwd] + cd [tcltest::temporaryDirectory] + file delete -force simpledir + file mkdir simpledir + testsimplefilesystem 1 + # This can variously cause an infinite loop or simply have + # no effect at all (before certain bugs were fixed, of course). + cd simplefs:/simpledir + set res [pwd] + cd [tcltest::temporaryDirectory] + testsimplefilesystem 0 + file delete -force simpledir + cd $dir + set res +} {simplefs:/simpledir} test filesystem-8.1 {relative path objects and caching of pwd} { set dir [pwd] @@ -448,7 +937,6 @@ test filesystem-8.1 {relative path objects and caching of pwd} { cd $dir set res } {1 1 0 0} - test filesystem-8.2 {relative path objects and use of pwd} { set origdir [pwd] cd [tcltest::temporaryDirectory] @@ -463,12 +951,10 @@ test filesystem-8.2 {relative path objects and use of pwd} { cd $origdir set res } {1} - test filesystem-8.3 {path objects and empty string} { set anchor "" set dst foo set res $dst - set yyy [file split $anchor] set dst [file join $anchor $dst] lappend res $dst $yyy @@ -500,7 +986,6 @@ test filesystem-9.1 {path objects and join and object rep} { cd $origdir set res } {{a/b/./c found: 1} {is dir a dir? 1} {a/b/./c found: 1}} - test filesystem-9.2 {path objects and join and object rep} { set origdir [pwd] cd [tcltest::temporaryDirectory] @@ -510,7 +995,6 @@ test filesystem-9.2 {path objects and join and object rep} { cd $origdir set res } {{a/b/./c found: 1} {is dir a dir? 1} {a/b/./c found: 1}} - test filesystem-9.2.1 {path objects and join and object rep} { set origdir [pwd] cd [tcltest::temporaryDirectory] @@ -520,7 +1004,6 @@ test filesystem-9.2.1 {path objects and join and object rep} { cd $origdir set res } {{a/b/. found: 1} {is dir a dir? 1} {a/b/. found: 1}} - test filesystem-9.3 {path objects and join and object rep} { set origdir [pwd] cd [tcltest::temporaryDirectory] @@ -530,7 +1013,6 @@ test filesystem-9.3 {path objects and join and object rep} { cd $origdir set res } {{a/b/../b/c found: 1} {is dir a dir? 1} {a/b/../b/c found: 1}} - test filesystem-9.4 {path objects and join and object rep} { set origdir [pwd] cd [tcltest::temporaryDirectory] @@ -540,7 +1022,6 @@ test filesystem-9.4 {path objects and join and object rep} { cd $origdir set res } {{a/b/../b/c found: 1} {is dir a dir? 1} {a/b/../b/c found: 1}} - test filesystem-9.5 {path objects and file tail and object rep} { set origdir [pwd] cd [tcltest::temporaryDirectory] @@ -554,15 +1035,13 @@ test filesystem-9.5 {path objects and file tail and object rep} { cd $origdir set res } {test test} - -test filesystem-9.6 {path objects and file join and object rep} {winOnly} { +test filesystem-9.6 {path objects and file tail and object rep} win { set res {} set p "C:\\toto" lappend res [file join $p toto] file isdirectory $p lappend res [file join $p toto] } {C:/toto/toto C:/toto/toto} - test filesystem-9.7 {path objects and glob and file tail and tilde} { set res {} set origdir [pwd] @@ -615,7 +1094,12 @@ test filesystem-9.9 {path objects and glob and file tail and tilde} { set res } {0 0 0 0 1} +test filesystem-10.1 {Bug 3414754} { + string match */ [file join [pwd] foo/] +} 0 + cleanupTests +unset -nocomplain drive } namespace delete ::tcl::test::fileSystem return diff --git a/tests/for-old.test b/tests/for-old.test index 5750ad0..a11a791 100644 --- a/tests/for-old.test +++ b/tests/for-old.test @@ -69,15 +69,3 @@ test for-old-1.9 {for tests} { # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/for.test b/tests/for.test index c227994..8f19e9f 100644 --- a/tests/for.test +++ b/tests/for.test @@ -10,7 +10,7 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } @@ -19,21 +19,21 @@ if {[lsearch [namespace children] ::tcltest] == -1} { test for-1.1 {TclCompileForCmd: missing initial command} { list [catch {for} msg] $msg } {1 {wrong # args: should be "for start test next command"}} -test for-1.2 {TclCompileForCmd: error in initial command} { - list [catch {for {set}} msg] $msg $errorInfo -} {1 {wrong # args: should be "for start test next command"} {wrong # args: should be "for start test next command" - while compiling +test for-1.2 {TclCompileForCmd: error in initial command} -body { + list [catch {for {set}} msg] $msg $::errorInfo +} -match glob -result {1 {wrong # args: should be "for start test next command"} {wrong # args: should be "for start test next command" + while *ing "for {set}"}} catch {unset i} test for-1.3 {TclCompileForCmd: missing test expression} { catch {for {set i 0}} msg set msg } {wrong # args: should be "for start test next command"} -test for-1.4 {TclCompileForCmd: error in test expression} { +test for-1.4 {TclCompileForCmd: error in test expression} -body { catch {for {set i 0} {$i<}} msg - set errorInfo -} {wrong # args: should be "for start test next command" - while compiling + set ::errorInfo +} -match glob -result {wrong # args: should be "for start test next command" + while *ing "for {set i 0} {$i<}"} test for-1.5 {TclCompileForCmd: test expression is enclosed in quotes} { set i 0 @@ -47,15 +47,12 @@ test for-1.7 {TclCompileForCmd: missing command body} { catch {for {set i 0} {$i < 5} {incr i}} msg set msg } {wrong # args: should be "for start test next command"} -test for-1.8 {TclCompileForCmd: error compiling command body} { +test for-1.8 {TclCompileForCmd: error compiling command body} -body { catch {for {set i 0} {$i < 5} {incr i} {set}} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling -"set" - ("for" body line 1) - while compiling -"for {set i 0} {$i < 5} {incr i} {set}"} + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing +"set"*} catch {unset a} test for-1.9 {TclCompileForCmd: simple command body} { set a {} @@ -81,15 +78,12 @@ test for-1.11 {TclCompileForCmd: computed command body} { for {set i 1} {$i<6} {set i [expr $i+1]} $x1$bb$x2 set a } {x1} -test for-1.12 {TclCompileForCmd: error in "next" command} { - catch {for {set i 0} {$i < 5} {set} {puts $i}} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling -"set" - ("for" loop-end command) - while compiling -"for {set i 0} {$i < 5} {set} {puts $i}"} +test for-1.12 {TclCompileForCmd: error in "next" command} -body { + catch {for {set i 0} {$i < 5} {set} {format $i}} msg + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing +"set"*} test for-1.13 {TclCompileForCmd: long command body} { set a {} for {set i 1} {$i<6} {set i [expr $i+1]} { @@ -654,33 +648,32 @@ test for-6.5 {Tcl_ForObjCmd: number of args} { catch {$z {set i 0} {$i < 5} {incr i} {body} extra} msg set msg } {wrong # args: should be "for start test next command"} -test for-6.6 {Tcl_ForObjCmd: error in initial command} { +test for-6.6 {Tcl_ForObjCmd: error in initial command} -body { set z for - list [catch {$z {set} {$i < 5} {incr i} {body}} msg] $msg $errorInfo -} {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" - while compiling + list [catch {$z {set} {$i < 5} {incr i} {body}} msg] $msg $::errorInfo +} -match glob -result {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" + while *ing "set" ("for" initial command) invoked from within "$z {set} {$i < 5} {incr i} {body}"}} -test for-6.7 {Tcl_ForObjCmd: error in test expression} { +test for-6.7 {Tcl_ForObjCmd: error in test expression} -body { set z for - list [catch {$z {set i 0} {i < 5} {incr i} {body}} msg] $msg $errorInfo -} {1 {syntax error in expression "i < 5": variable references require preceding $} {syntax error in expression "i < 5": variable references require preceding $ - while executing -"$z {set i 0} {i < 5} {incr i} {body}"}} + catch {$z {set i 0} {i < 5} {incr i} {body}} + set ::errorInfo +} -match glob -result {*"$z {set i 0} {i < 5} {incr i} {body}"} test for-6.8 {Tcl_ForObjCmd: test expression is enclosed in quotes} { set z for set i 0 $z {set i 6} "$i > 5" {incr i} {set y $i} set i } 6 -test for-6.9 {Tcl_ForObjCmd: error executing command body} { +test for-6.9 {Tcl_ForObjCmd: error executing command body} -body { set z for catch {$z {set i 0} {$i < 5} {incr i} {set}} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing "set" ("for" body line 1) invoked from within @@ -712,12 +705,12 @@ test for-6.12 {Tcl_ForObjCmd: computed command body} { $z {set i 1} {$i<6} {set i [expr $i+1]} $x1$bb$x2 set a } {x1} -test for-6.13 {Tcl_ForObjCmd: error in "next" command} { +test for-6.13 {Tcl_ForObjCmd: error in "next" command} -body { set z for catch {$z {set i 0} {$i < 5} {set} {set j 4}} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing "set" ("for" loop-end command) invoked from within @@ -767,7 +760,56 @@ test for-6.16 {Tcl_ForObjCmd: for command result} { set a [$z {set i 0} {$i < 5} {incr i} {if $i==3 break}] set a } {} - +test for-6.17 {Tcl_ForObjCmd: for command result} { + list \ + [catch {for {break} {1} {} {}} err] $err \ + [catch {for {continue} {1} {} {}} err] $err \ + [catch {for {} {[break]} {} {}} err] $err \ + [catch {for {} {[continue]} {} {}} err] $err \ + [catch {for {} {1} {break} {}} err] $err \ + [catch {for {} {1} {continue} {}} err] $err \ +} [list \ + 3 {} \ + 4 {} \ + 3 {} \ + 4 {} \ + 0 {} \ + 4 {} \ + ] +test for-6.18 {Tcl_ForObjCmd: for command result} { + proc p6181 {} { + for {break} {1} {} {} + } + proc p6182 {} { + for {continue} {1} {} {} + } + proc p6183 {} { + for {} {[break]} {} {} + } + proc p6184 {} { + for {} {[continue]} {} {} + } + proc p6185 {} { + for {} {1} {break} {} + } + proc p6186 {} { + for {} {1} {continue} {} + } + list \ + [catch {p6181} err] $err \ + [catch {p6182} err] $err \ + [catch {p6183} err] $err \ + [catch {p6184} err] $err \ + [catch {p6185} err] $err \ + [catch {p6186} err] $err +} [list \ + 1 {invoked "break" outside of a loop} \ + 1 {invoked "continue" outside of a loop} \ + 1 {invoked "break" outside of a loop} \ + 1 {invoked "continue" outside of a loop} \ + 0 {} \ + 1 {invoked "continue" outside of a loop} \ + ] # cleanup diff --git a/tests/foreach.test b/tests/foreach.test index f353ffd..7df7481 100644 --- a/tests/foreach.test +++ b/tests/foreach.test @@ -71,8 +71,11 @@ catch {unset a} test foreach-1.14 {foreach errors} { catch {unset a} set a(0) 44 - list [catch {foreach a {1 2 3} {}} msg] $msg -} {1 {couldn't set loop variable: "a"}} + list [catch {foreach a {1 2 3} {}} msg o] $msg $::errorInfo +} {1 {can't set "a": variable is array} {can't set "a": variable is array + (setting foreach loop variable "a") + invoked from within +"foreach a {1 2 3} {}"}} test foreach-1.15 {foreach errors} { list [catch {foreach {} {} {}} msg] $msg } {1 {foreach varlist is empty}} @@ -161,7 +164,7 @@ test foreach-3.1 {compiled foreach backward jump works correctly} { test foreach-4.1 {noncompiled foreach and shared variable or value list objects that are converted to another type} { catch {unset x} foreach {12.0} {a b c} { - set x 12.0 + set x 12.0 set x [expr $x + 1] } set x @@ -208,7 +211,7 @@ test foreach-6.4 {break tests} { catch {break foo} msg set msg } {wrong # args: should be "break"} -# Check for bug #406709 +# Check for bug #406709 test foreach-6.5 {break tests} { proc a {} { set a 1 @@ -219,7 +222,6 @@ test foreach-6.5 {break tests} { } {2} # Test for incorrect "double evaluation" semantics - test foreach-7.1 {delayed substitution of body} { proc foo {} { set a 0 @@ -231,6 +233,17 @@ test foreach-7.1 {delayed substitution of body} { foo } {0} +# Test for [Bug 1189274]; crash on failure +test foreach-8.1 {empty list handling} { + proc crash {} { + rename crash {} + set a "x y z" + set b "" + foreach aa $a bb $b { set x "aa = $aa bb = $bb" } + } + crash +} {} + # [Bug 1671138]; infinite loop with empty var list in bytecompiled version test foreach-9.1 {compiled empty var list} { proc foo {} { @@ -243,9 +256,9 @@ test foreach-9.1 {compiled empty var list} { test foreach-10.1 {foreach: [Bug 1671087]} -setup { proc demo {} { - set vals {1 2 3 4} - trace add variable x write {string length $vals ;# } - foreach {x y} $vals {format $y} + set vals {1 2 3 4} + trace add variable x write {string length $vals ;# } + foreach {x y} $vals {format $y} } } -body { demo diff --git a/tests/format.test b/tests/format.test index c440603..d43b7eb 100644 --- a/tests/format.test +++ b/tests/format.test @@ -15,26 +15,25 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -# The following code is needed because some versions of SCO Unix have -# a round-off error in sprintf which would cause some of the tests to -# fail. Someday I hope this code shouldn't be necessary (code added -# 9/9/91). - -set ::tcltest::testConstraints(roundOffBug) \ - [expr {"[format %7.1e 68.514]" != "6.8e+01"}] +# %u output depends on word length, so this test is not portable. +testConstraint longIs32bit [expr {int(0x80000000) < 0}] +testConstraint longIs64bit [expr {int(0x8000000000000000) < 0}] +testConstraint wideIs64bit \ + [expr {(wide(0x80000000) > 0) && (wide(0x8000000000000000) < 0)}] +testConstraint wideBiggerThanInt [expr {wide(0x80000000) != int(0x80000000)}] test format-1.1 {integer formatting} { format "%*d %d %d %d" 6 34 16923 -12 -1 } { 34 16923 -12 -1} -test format-1.2 {integer formatting} {nonPortable} { +test format-1.2 {integer formatting} { format "%4d %4d %4d %4d %d %#x %#X" 6 34 16923 -12 -1 14 12 } { 6 34 16923 -12 -1 0xe 0XC} - -# %u output depends on word length, so this test is not portable. - -test format-1.3 {integer formatting} {nonPortable} { +test format-1.3 {integer formatting} longIs32bit { format "%4u %4u %4u %4u %d %#o" 6 34 16923 -12 -1 0 } { 6 34 16923 4294967284 -1 0} +test format-1.3.1 {integer formatting} longIs64bit { + format "%4u %4u %4u %4u %d %#o" 6 34 16923 -12 -1 0 +} { 6 34 16923 18446744073709551604 -1 0} test format-1.4 {integer formatting} { format "%-4d %-4i %-4d %-4ld" 6 34 16923 -12 -1 } {6 34 16923 -12 } @@ -44,25 +43,38 @@ test format-1.5 {integer formatting} { test format-1.6 {integer formatting} { format "%00*d" 6 34 } {000034} - # Printing negative numbers in hex or octal format depends on word # length, so these tests are not portable. - -test format-1.7 {integer formatting} {nonPortable} { +test format-1.7 {integer formatting} longIs32bit { format "%4x %4x %4x %4x" 6 34 16923 -12 -1 } { 6 22 421b fffffff4} -test format-1.8 {integer formatting} {nonPortable} { +test format-1.7.1 {integer formatting} longIs64bit { + format "%4x %4x %4x %4x" 6 34 16923 -12 -1 +} { 6 22 421b fffffffffffffff4} +test format-1.8 {integer formatting} longIs32bit { format "%#x %#X %#X %#x" 6 34 16923 -12 -1 } {0x6 0X22 0X421B 0xfffffff4} -test format-1.9 {integer formatting} {nonPortable} { +test format-1.8.1 {integer formatting} longIs64bit { + format "%#x %#X %#X %#x" 6 34 16923 -12 -1 +} {0x6 0X22 0X421B 0xfffffffffffffff4} +test format-1.9 {integer formatting} longIs32bit { format "%#20x %#20x %#20x %#20x" 6 34 16923 -12 -1 } { 0x6 0x22 0x421b 0xfffffff4} -test format-1.10 {integer formatting} {nonPortable} { +test format-1.9.1 {integer formatting} longIs64bit { + format "%#20x %#20x %#20x %#20x" 6 34 16923 -12 -1 +} { 0x6 0x22 0x421b 0xfffffffffffffff4} +test format-1.10 {integer formatting} longIs32bit { format "%-#20x %-#20x %-#20x %-#20x" 6 34 16923 -12 -1 } {0x6 0x22 0x421b 0xfffffff4 } -test format-1.11 {integer formatting} {nonPortable} { +test format-1.10.1 {integer formatting} longIs64bit { + format "%-#20x %-#20x %-#20x %-#20x" 6 34 16923 -12 -1 +} {0x6 0x22 0x421b 0xfffffffffffffff4 } +test format-1.11 {integer formatting} longIs32bit { format "%-#20o %#-20o %#-20o %#-20o" 6 34 16923 -12 -1 } {06 042 041033 037777777764 } +test format-1.11.1 {integer formatting} longIs64bit { + format "%-#20o %#-20o %#-20o %#-20o" 6 34 16923 -12 -1 +} {06 042 041033 01777777777777777777764} test format-2.1 {string formatting} { format "%s %s %c %s" abcd {This is a very long test string.} 120 x @@ -129,19 +141,19 @@ test format-4.1 {e and f formats} {eformat} { test format-4.2 {e and f formats} {eformat} { format "%20e %20e %20e %20e" 34.2e12 68.514 -.125 -16000. .000053 } { 3.420000e+13 6.851400e+01 -1.250000e-01 -1.600000e+04} -test format-4.3 {e and f formats} {eformat roundOffBug} { +test format-4.3 {e and f formats} {eformat} { format "%.1e %.1e %.1e %.1e" 34.2e12 68.514 -.126 -16000. .000053 } {3.4e+13 6.9e+01 -1.3e-01 -1.6e+04} -test format-4.4 {e and f formats} {eformat roundOffBug} { +test format-4.4 {e and f formats} {eformat} { format "%020e %020e %020e %020e" 34.2e12 68.514 -.126 -16000. .000053 } {000000003.420000e+13 000000006.851400e+01 -00000001.260000e-01 -00000001.600000e+04} -test format-4.5 {e and f formats} {eformat roundOffBug} { +test format-4.5 {e and f formats} {eformat} { format "%7.1e %7.1e %7.1e %7.1e" 34.2e12 68.514 -.126 -16000. .000053 } {3.4e+13 6.9e+01 -1.3e-01 -1.6e+04} -test format-4.6 {e and f formats roundOffBug} { +test format-4.6 {e and f formats} { format "%f %f %f %f" 34.2e12 68.514 -.125 -16000. .000053 } {34200000000000.000000 68.514000 -0.125000 -16000.000000} -test format-4.7 {e and f formats} {nonPortable} { +test format-4.7 {e and f formats} { format "%.4f %.4f %.4f %.4f %.4f" 34.2e12 68.514 -.125 -16000. .000053 } {34200000000000.0000 68.5140 -0.1250 -16000.0000 0.0001} test format-4.8 {e and f formats} {eformat} { @@ -354,13 +366,13 @@ test format-9.1 {long result} { format {1111 2222 3333 4444 5555 6666 7777 8888 9999 aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm nnnn oooo pppp qqqq rrrr ssss tttt uuuu vvvv wwww xxxx yyyy zzzz AAAA BBBB CCCC DDDD EEEE FFFF GGGG %s %s} $a $a } {1111 2222 3333 4444 5555 6666 7777 8888 9999 aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm nnnn oooo pppp qqqq rrrr ssss tttt uuuu vvvv wwww xxxx yyyy zzzz AAAA BBBB CCCC DDDD EEEE FFFF GGGG 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} -test format-10.1 {"h" format specifier} {nonPortable} { +test format-10.1 {"h" format specifier} { format %hd 0xffff } -1 -test format-10.2 {"h" format specifier} {nonPortable} { +test format-10.2 {"h" format specifier} { format %hx 0x10fff } fff -test format-10.3 {"h" format specifier} {nonPortable} { +test format-10.3 {"h" format specifier} { format %hd 0x10000 } 0 test format-10.4 {"h" format specifier} { @@ -412,6 +424,7 @@ test format-11.12 {XPG3 %$n specifiers} { test format-12.1 {negative width specifiers} { format "%*d" -47 25 } {25 } + test format-13.1 {tcl_precision fuzzy comparison} { catch {unset a} catch {unset b} @@ -461,6 +474,7 @@ test format-13.5 {tcl_precision fuzzy comparison} { set c [expr $a + $b] format {%0.10f %0.12f %0.15f} $c $c $c } {1.4444444444 1.444444444444 1.444444444443990} + test format-14.1 {testing MAX_FLOAT_SIZE for 0 and 1} { format {%s} "" } {} @@ -480,6 +494,12 @@ test format-15.3 {testing %0..s 0 padding for chars/strings} { test format-15.4 {testing %0..s 0 padding for chars/strings} { format %05c 61 } {0000=} +test format-15.5 {testing %d space padding for integers} { + format "(% 1d) (% 1d)" 10 -10 +} {( 10) (-10)} +test format-15.6 {testing %d plus padding for integers} { + format "(%+1d) (%+1d)" 10 -10 +} {(+10) (-10)} set a "0123456789" set b "" @@ -488,35 +508,23 @@ for {set i 0} {$i < 290} {incr i} { } for {set i 290} {$i < 400} {incr i} { test format-16.[expr $i -289] {testing MAX_FLOAT_SIZE} { - format {%s} $b + format {%s} $b } $b append b "x" } -::tcltest::testConstraint 64bitInts \ - [expr {0x80000000 > 0}] -::tcltest::testConstraint wideIntExpressions \ - [expr {wide(0x80000000) != int(0x80000000)}] - -test format-17.1 {testing %d with wide} {64bitInts wideIntExpressions} { +test format-17.1 {testing %d with wide} {wideIs64bit wideBiggerThanInt} { format %d 7810179016327718216 } 1819043144 -test format-17.2 {testing %ld with wide} {64bitInts} { +test format-17.2 {testing %ld with wide} {wideIs64bit} { format %ld 7810179016327718216 } 7810179016327718216 -test format-17.3 {testing %ld with non-wide} {64bitInts} { +test format-17.3 {testing %ld with non-wide} {wideIs64bit} { format %ld 42 } 42 test format-17.4 {testing %l with non-integer} { format %lf 1 } 1.000000 -test format-17.5 {type conversions with wides} { - set a 0xAAAAAAAA ;# NB: Careful to make separate objects here! - set b 0xAAAAAAA; append b A - set result [expr {$a == $b}] - format %x $a - lappend result [expr {$a == $b}] -} {1 1} test format-18.1 {do not demote existing numeric values} { set a 0xaaaaaaaa @@ -535,7 +543,7 @@ test format-18.1 {do not demote existing numeric values} { format %08x $b lappend result [expr {$a == $b}] } {1 1 1 1} -test format-18.2 {do not demote existing numeric values} {wideIntExpressions} { +test format-18.2 {do not demote existing numeric values} {wideBiggerThanInt} { set a [expr {0xaaaaaaaaaa + 1}] set b 0xaaaaaaaaab list [format %08x $a] [expr {$a == $b}] @@ -549,6 +557,14 @@ test format-19.1 { list [expr { ~ $x }] [format %08x [expr { ~$x }]] } -match regexp -result {-2414724693 f*701239ab} +test format-19.2 {Bug 1867855} { + format %llx 0 +} 0 + +test format-19.3 {Bug 2830354} { + string length [format %340f 0] +} 340 + # cleanup catch {unset a} catch {unset b} @@ -556,3 +572,7 @@ catch {unset c} catch {unset d} ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/get.test b/tests/get.test index d35c19b..40ec98f 100644 --- a/tests/get.test +++ b/tests/get.test @@ -15,69 +15,52 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -test get-1.1 {Tcl_GetInt procedure} { - set x 44 - incr x { 22} +testConstraint testgetint [llength [info commands testgetint]] +testConstraint longIs32bit [expr {int(0x80000000) < 0}] +testConstraint longIs64bit [expr {int(0x8000000000000000) < 0}] + +test get-1.1 {Tcl_GetInt procedure} testgetint { + testgetint 44 { 22} } {66} -test get-1.2 {Tcl_GetInt procedure} { - set x 44 - incr x -3 +test get-1.2 {Tcl_GetInt procedure} testgetint { + testgetint 44 -3 } {41} -test get-1.3 {Tcl_GetInt procedure} { - set x 44 - incr x +8 +test get-1.3 {Tcl_GetInt procedure} testgetint { + testgetint 44 +8 } {52} -test get-1.4 {Tcl_GetInt procedure} { - set x 44 - list [catch {incr x foo} msg] $msg +test get-1.4 {Tcl_GetInt procedure} testgetint { + list [catch {testgetint 44 foo} msg] $msg } {1 {expected integer but got "foo"}} -test get-1.5 {Tcl_GetInt procedure} { - set x 44 - list [catch {incr x {16 }} msg] $msg +test get-1.5 {Tcl_GetInt procedure} testgetint { + list [catch {testgetint 44 {16 }} msg] $msg } {0 60} -test get-1.6 {Tcl_GetInt procedure} { - set x 44 - list [catch {incr x {16 x}} msg] $msg +test get-1.6 {Tcl_GetInt procedure} testgetint { + list [catch {testgetint 44 {16 x}} msg] $msg } {1 {expected integer but got "16 x"}} - -# The following tests are non-portable because they depend on -# word size. - -if {wide(0x80000000) > wide(0)} { - test get-1.7 {Tcl_GetInt procedure} { - set x 44 - list [catch {eval incr x 18446744073709551616} msg] $msg $errorCode - } {1 {integer value too large to represent} {ARITH IOVERFLOW {integer value too large to represent}}} - test get-1.8 {Tcl_GetInt procedure} { - set x 0 - list [catch {incr x 18446744073709551614} msg] $msg - } {0 -2} - test get-1.9 {Tcl_GetInt procedure} { - set x 0 - list [catch {incr x +18446744073709551614} msg] $msg - } {0 -2} - test get-1.10 {Tcl_GetInt procedure} { - set x 0 - list [catch {incr x -18446744073709551614} msg] $msg - } {0 2} -} else { - test get-1.11 {Tcl_GetInt procedure} { - set x 44 - list [catch {incr x 4294967296} msg] $msg $errorCode - } {1 {integer value too large to represent} {ARITH IOVERFLOW {integer value too large to represent}}} - test get-1.12 {Tcl_GetInt procedure} { - set x 0 - list [catch {incr x 4294967294} msg] $msg - } {0 -2} - test get-1.13 {Tcl_GetInt procedure} { - set x 0 - list [catch {incr x +4294967294} msg] $msg - } {0 -2} - test get-1.14 {Tcl_GetInt procedure} { - set x 0 - list [catch {incr x -4294967294} msg] $msg - } {0 2} -} +test get-1.7 {Tcl_GetInt procedure} {testgetint longIs64bit} { + list [catch {testgetint 44 18446744073709551616} msg] $msg $errorCode +} {1 {integer value too large to represent} {ARITH IOVERFLOW {integer value too large to represent}}} +test get-1.8 {Tcl_GetInt procedure} {testgetint longIs64bit} { + list [catch {testgetint 18446744073709551614} msg] $msg +} {0 -2} +test get-1.9 {Tcl_GetInt procedure} {testgetint longIs64bit} { + list [catch {testgetint +18446744073709551614} msg] $msg +} {0 -2} +test get-1.10 {Tcl_GetInt procedure} {testgetint longIs64bit} { + list [catch {testgetint -18446744073709551614} msg] $msg +} {0 2} +test get-1.11 {Tcl_GetInt procedure} {testgetint longIs32bit} { + list [catch {testgetint 44 4294967296} msg] $msg $errorCode +} {1 {integer value too large to represent} {ARITH IOVERFLOW {integer value too large to represent}}} +test get-1.12 {Tcl_GetInt procedure} {testgetint longIs32bit} { + list [catch {testgetint 4294967294} msg] $msg +} {0 -2} +test get-1.13 {Tcl_GetInt procedure} {testgetint longIs32bit} { + list [catch {testgetint +4294967294} msg] $msg +} {0 -2} +test get-1.14 {Tcl_GetInt procedure} {testgetint longIs32bit} { + list [catch {testgetint -4294967294} msg] $msg +} {0 2} test get-2.1 {Tcl_GetInt procedure} { format %g 1.23 @@ -88,9 +71,9 @@ test get-2.2 {Tcl_GetInt procedure} { test get-2.3 {Tcl_GetInt procedure} { list [catch {format %g clip} msg] $msg } {1 {expected floating-point number but got "clip"}} -test get-2.4 {Tcl_GetInt procedure} {nonPortable} { - list [catch {format %g .000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001} msg] $msg $errorCode -} {1 {floating-point value too small to represent} {ARITH UNDERFLOW {floating-point value too small to represent}}} +test get-2.4 {Tcl_GetInt procedure} { + format %g .000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 +} 0 test get-3.1 {Tcl_GetInt(FromObj), bad numbers} { # SF bug #634856 @@ -113,15 +96,3 @@ test get-3.2 {Tcl_GetDouble(FromObj), bad numbers} { # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/history.test b/tests/history.test index 898d009..49116be 100644 --- a/tests/history.test +++ b/tests/history.test @@ -16,127 +16,150 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } +# The history command might be autoloaded... if {[catch {history}]} { - puts stdout "This version of Tcl was built without the history command;\n" - puts stdout "history tests will be skipped.\n" - ::tcltest::cleanupTests - return + testConstraint history 0 +} else { + testConstraint history 1 } -set num [history nextid] -history keep 3 -history add {set a 12345} -history add {set b [format {A test %s} string]} -history add {Another test} +if {[testConstraint history]} { + set num [history nextid] + history keep 3 + history add {set a 12345} + history add {set b [format {A test %s} string]} + history add {Another test} +} else { + # Dummy value, must be numeric + set num 0 +} # "history event" -test history-1.1 {event option} {history event -1} \ +test history-1.1 {event option} history {history event -1} \ {set b [format {A test %s} string]} -test history-1.2 {event option} {history event $num} \ +test history-1.2 {event option} history {history event $num} \ {set a 12345} -test history-1.3 {event option} {history event [expr $num+2]} \ +test history-1.3 {event option} history {history event [expr $num+2]} \ {Another test} -test history-1.4 {event option} {history event set} \ +test history-1.4 {event option} history {history event set} \ {set b [format {A test %s} string]} -test history-1.5 {event option} {history e "* a*"} \ +test history-1.5 {event option} history {history e "* a*"} \ {set a 12345} -test history-1.6 {event option} {catch {history event *gorp} msg} 1 -test history-1.7 {event option} { +test history-1.6 {event option} history {catch {history event *gorp} msg} 1 +test history-1.7 {event option} history { catch {history event *gorp} msg set msg } {no event matches "*gorp"} -test history-1.8 {event option} {history event} \ +test history-1.8 {event option} history {history event} \ {set b [format {A test %s} string]} -test history-1.9 {event option} {catch {history event 123 456} msg} 1 -test history-1.10 {event option} { +test history-1.9 {event option} history {catch {history event 123 456} msg} 1 +test history-1.10 {event option} history { catch {history event 123 456} msg set msg } {wrong # args: should be "history event ?event?"} # "history redo" -set a 0 -history redo -2 -test history-2.1 {redo option} {set a} 12345 -set b 0 -history redo -test history-2.2 {redo option} {set b} {A test string} -test history-2.3 {redo option} {catch {history redo -3 -4}} 1 -test history-2.4 {redo option} { +if {[testConstraint history]} { + set a 0 + history redo -2 +} +test history-2.1 {redo option} history {set a} 12345 +if {[testConstraint history]} { + set b 0 + history redo +} +test history-2.2 {redo option} history {set b} {A test string} +test history-2.3 {redo option} history {catch {history redo -3 -4}} 1 +test history-2.4 {redo option} history { catch {history redo -3 -4} msg set msg } {wrong # args: should be "history redo ?event?"} # "history add" -history add "set a 444" exec -test history-3.1 {add option} {set a} 444 -test history-3.2 {add option} {catch {history add "set a 444" execGorp}} 1 -test history-3.3 {add option} { +if {[testConstraint history]} { + history add "set a 444" exec +} +test history-3.1 {add option} history {set a} 444 +test history-3.2 {add option} history {catch {history add "set a 444" execGorp}} 1 +test history-3.3 {add option} history { catch {history add "set a 444" execGorp} msg set msg } {bad argument "execGorp": should be "exec"} -test history-3.4 {add option} {catch {history add "set a 444" a} msg} 1 -test history-3.5 {add option} { +test history-3.4 {add option} history {catch {history add "set a 444" a} msg} 1 +test history-3.5 {add option} history { catch {history add "set a 444" a} msg set msg } {bad argument "a": should be "exec"} -history add "set a 555" e -test history-3.6 {add option} {set a} 555 -history add "set a 666" -test history-3.7 {add option} {set a} 555 -test history-3.8 {add option} {catch {history add "set a 666" e f} msg} 1 -test history-3.9 {add option} { +if {[testConstraint history]} { + history add "set a 555" e +} +test history-3.6 {add option} history {set a} 555 +if {[testConstraint history]} { + history add "set a 666" +} +test history-3.7 {add option} history {set a} 555 +test history-3.8 {add option} history {catch {history add "set a 666" e f} msg} 1 +test history-3.9 {add option} history { catch {history add "set a 666" e f} msg set msg } {wrong # args: should be "history add event ?exec?"} # "history change" -history change "A test value" -test history-4.1 {change option} {history event [expr {[history n]-1}]} \ +if {[testConstraint history]} { + history change "A test value" +} +test history-4.1 {change option} history {history event [expr {[history n]-1}]} \ "A test value" -history ch "Another test" -1 -test history-4.2 {change option} {history e} "Another test" -test history-4.3 {change option} {history event [expr {[history n]-1}]} \ +if {[testConstraint history]} { + history ch "Another test" -1 +} +test history-4.2 {change option} history {history e} "Another test" +test history-4.3 {change option} history {history event [expr {[history n]-1}]} \ "A test value" -test history-4.4 {change option} {catch {history change Foo 4 10}} 1 -test history-4.5 {change option} { +test history-4.4 {change option} history {catch {history change Foo 4 10}} 1 +test history-4.5 {change option} history { catch {history change Foo 4 10} msg set msg } {wrong # args: should be "history change newValue ?event?"} -test history-4.6 {change option} { +test history-4.6 {change option} history { catch {history change Foo [expr {[history n]-4}]} } 1 -set num [expr {[history n]-4}] -test history-4.7 {change option} { +if {[testConstraint history]} { + set num [expr {[history n]-4}] +} +test history-4.7 {change option} history { catch {history change Foo $num} msg set msg } "event \"$num\" is too far in the past" # "history info" -set num [history n] -history add set\ a\ {b\nc\ d\ e} -history add {set b 1234} -history add set\ c\ {a\nb\nc} -test history-5.1 {info option} {history info} [format {%6d set a {b +if {[testConstraint history]} { + set num [history n] + history add set\ a\ {b\nc\ d\ e} + history add {set b 1234} + history add set\ c\ {a\nb\nc} +} +test history-5.1 {info option} history {history info} [format {%6d set a {b c d e} %6d set b 1234 %6d set c {a b c}} $num [expr $num+1] [expr $num+2]] -test history-5.2 {info option} {history i 2} [format {%6d set b 1234 +test history-5.2 {info option} history {history i 2} [format {%6d set b 1234 %6d set c {a b c}} [expr $num+1] [expr $num+2]] -test history-5.3 {info option} {catch {history i 2 3}} 1 -test history-5.4 {info option} { +test history-5.3 {info option} history {catch {history i 2 3}} 1 +test history-5.4 {info option} history { catch {history i 2 3} msg set msg } {wrong # args: should be "history info ?count?"} -test history-5.5 {info option} {history} [format {%6d set a {b +test history-5.5 {info option} history {history} [format {%6d set a {b c d e} %6d set b 1234 %6d set c {a @@ -145,69 +168,79 @@ test history-5.5 {info option} {history} [format {%6d set a {b # "history keep" -history add "foo1" -history add "foo2" -history add "foo3" -history keep 2 -test history-6.1 {keep option} {history event [expr [history n]-1]} foo3 -test history-6.2 {keep option} {history event -1} foo2 -test history-6.3 {keep option} {catch {history event -3}} 1 -test history-6.4 {keep option} { +if {[testConstraint history]} { + history add "foo1" + history add "foo2" + history add "foo3" + history keep 2 +} +test history-6.1 {keep option} history {history event [expr [history n]-1]} foo3 +test history-6.2 {keep option} history {history event -1} foo2 +test history-6.3 {keep option} history {catch {history event -3}} 1 +test history-6.4 {keep option} history { catch {history event -3} msg set msg } {event "-3" is too far in the past} -history k 5 -test history-6.5 {keep option} {history event -1} foo2 -test history-6.6 {keep option} {history event -2} {} -test history-6.7 {keep option} {history event -3} {} -test history-6.8 {keep option} {history event -4} {} -test history-6.9 {keep option} {catch {history event -5}} 1 -test history-6.10 {keep option} {catch {history keep 4 6}} 1 -test history-6.11 {keep option} { +if {[testConstraint history]} { + history k 5 +} +test history-6.5 {keep option} history {history event -1} foo2 +test history-6.6 {keep option} history {history event -2} {} +test history-6.7 {keep option} history {history event -3} {} +test history-6.8 {keep option} history {history event -4} {} +test history-6.9 {keep option} history {catch {history event -5}} 1 +test history-6.10 {keep option} history {catch {history keep 4 6}} 1 +test history-6.11 {keep option} history { catch {history keep 4 6} msg set msg } {wrong # args: should be "history keep ?count?"} -test history-6.12 {keep option} {catch {history keep}} 0 -test history-6.13 {keep option} { +test history-6.12 {keep option} history {catch {history keep}} 0 +test history-6.13 {keep option} history { history keep } {5} -test history-6.14 {keep option} {catch {history keep -3}} 1 -test history-6.15 {keep option} { +test history-6.14 {keep option} history {catch {history keep -3}} 1 +test history-6.15 {keep option} history { catch {history keep -3} msg set msg } {illegal keep count "-3"} -test history-6.16 {keep option} { +test history-6.16 {keep option} history { catch {history keep butter} msg set msg } {illegal keep count "butter"} # "history nextid" -set num [history n] -history add "Testing" -history add "Testing2" -test history-7.1 {nextid option} {history event} "Testing" -test history-7.2 {nextid option} {history next} [expr $num+2] -test history-7.3 {nextid option} {catch {history nextid garbage}} 1 -test history-7.4 {nextid option} { +if {[testConstraint history]} { + set num [history n] + history add "Testing" + history add "Testing2" +} +test history-7.1 {nextid option} history {history event} "Testing" +test history-7.2 {nextid option} history {history next} [expr $num+2] +test history-7.3 {nextid option} history {catch {history nextid garbage}} 1 +test history-7.4 {nextid option} history { catch {history nextid garbage} msg set msg } {wrong # args: should be "history nextid"} # "history clear" -set num [history n] -history add "Testing" -history add "Testing2" -test history-8.1 {clear option} {catch {history clear junk}} 1 -test history-8.2 {clear option} {history clear} {} -history add "Testing" -test history-8.3 {clear option} {history} { 1 Testing} +if {[testConstraint history]} { + set num [history n] + history add "Testing" + history add "Testing2" +} +test history-8.1 {clear option} history {catch {history clear junk}} 1 +test history-8.2 {clear option} history {history clear} {} +if {[testConstraint history]} { + history add "Testing" +} +test history-8.3 {clear option} history {history} { 1 Testing} # miscellaneous -test history-9.1 {miscellaneous} {catch {history gorp} msg} 1 -test history-9.2 {miscellaneous} { +test history-9.1 {miscellaneous} history {catch {history gorp} msg} 1 +test history-9.2 {miscellaneous} history { catch {history gorp} msg set msg } {bad option "gorp": must be add, change, clear, event, info, keep, nextid, or redo} @@ -215,15 +248,3 @@ test history-9.2 {miscellaneous} { # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/http.test b/tests/http.test index 54fa369..3a9d4ba 100644 --- a/tests/http.test +++ b/tests/http.test @@ -94,7 +94,7 @@ test http-1.4 {http::config} { -proxyfilter myFilter -useragent "Tcl Test Suite" \ -urlencoding iso8859-1 set x [http::config] - eval http::config $savedconf + http::config {*}$savedconf set x } {-accept */* -proxyfilter myFilter -proxyhost nowhere.come -proxyport 8080 -urlencoding iso8859-1 -useragent {Tcl Test Suite}} test http-1.5 {http::config} { @@ -114,7 +114,7 @@ test http-2.1 {http::reset} { test http-3.1 {http::geturl} { list [catch {http::geturl -bogus flag} msg] $msg -} {1 {Unknown option flag, can be: -binary, -blocksize, -channel, -command, -handler, -headers, -progress, -query, -queryblocksize, -querychannel, -queryprogress, -validate, -timeout, -type}} +} {1 {Unknown option flag, can be: -binary, -blocksize, -channel, -command, -handler, -headers, -keepalive, -method, -myaddr, -progress, -protocol, -query, -queryblocksize, -querychannel, -queryprogress, -strict, -timeout, -type, -validate}} test http-3.2 {http::geturl} { catch {http::geturl http:junk} err set err @@ -134,8 +134,6 @@ set fullurl http://user:pass@[info hostname]:$port/a/b/c set binurl //[info hostname]:$port/binary set posturl //[info hostname]:$port/post set badposturl //[info hostname]:$port/droppost -set badcharurl //%user@[info hostname]:$port/a/^b/c - test http-3.4 {http::geturl} { set token [http::geturl $url] http::data $token @@ -204,7 +202,7 @@ test http-3.10 {http::geturl queryprogress} { lappend postProgress $y } set postProgress {} - set t [http::geturl $posturl -query $query \ + set t [http::geturl $posturl -keepalive 0 -query $query \ -queryprogress postProgress -queryblocksize 16384] http::wait $t list [http::status $t] [string length $query] $postProgress [http::data $t] @@ -279,7 +277,7 @@ test http-3.12 {http::geturl querychannel with aborted request} {nonPortable} { http::wait $t upvar #0 $t state } err]} { - puts $errorInfo + puts $::errorInfo error $err } @@ -312,40 +310,53 @@ test http-3.18 {http::geturl parse failures} -body { http::geturl http://somewhere:123456789/ } -returnCodes error -result {Invalid port number: 123456789} test http-3.19 {http::geturl parse failures} -body { - set ::http::strict 1 http::geturl http://{user}@somewhere } -returnCodes error -result {Illegal characters in URL user} test http-3.20 {http::geturl parse failures} -body { - set ::http::strict 1 http::geturl http://%user@somewhere } -returnCodes error -result {Illegal encoding character usage "%us" in URL user} test http-3.21 {http::geturl parse failures} -body { - set ::http::strict 1 http::geturl http://somewhere/{path} } -returnCodes error -result {Illegal characters in URL path} test http-3.22 {http::geturl parse failures} -body { - set ::http::strict 1 http::geturl http://somewhere/%path } -returnCodes error -result {Illegal encoding character usage "%pa" in URL path} test http-3.23 {http::geturl parse failures} -body { - set ::http::strict 1 http::geturl http://somewhere/path?{query} } -returnCodes error -result {Illegal characters in URL path} test http-3.24 {http::geturl parse failures} -body { - set ::http::strict 1 http::geturl http://somewhere/path?%query } -returnCodes error -result {Illegal encoding character usage "%qu" in URL path} -test http-3.25 {http::geturl parse failures} -body { - set ::http::strict 0 - set token [http::geturl $badcharurl] +test http-3.25 {http::geturl: -headers override -type} -body { + set token [http::geturl $url/headers -type "text/plain" -query dummy \ + -headers [list "Content-Type" "text/plain;charset=utf-8"]] + http::data $token +} -cleanup { + http::cleanup $token +} -match regexp -result {(?n)Accept \*/\* +Host .* +User-Agent .* +Connection close +Content-Type {text/plain;charset=utf-8} +Content-Length 5} +test http-3.26 {http::geturl: -headers override -type default} -body { + set token [http::geturl $url/headers -query dummy \ + -headers [list "Content-Type" "text/plain;charset=utf-8"]] + http::data $token +} -cleanup { http::cleanup $token -} -returnCodes ok -result {} +} -match regexp -result {(?n)Accept \*/\* +Host .* +User-Agent .* +Connection close +Content-Type {text/plain;charset=utf-8} +Content-Length 5} test http-4.1 {http::Event} { - set token [http::geturl $url] + set token [http::geturl $url -keepalive 0] upvar #0 $token data array set meta $data(meta) - expr ($data(totalsize) == $meta(Content-Length)) + expr {($data(totalsize) == $meta(Content-Length))} } 1 test http-4.2 {http::Event} { set token [http::geturl $url] @@ -374,11 +385,12 @@ test http-4.4 {http::Event} { test http-4.5 {http::Event} { set testfile [makeFile "" testfile] set out [open $testfile w] + fconfigure $out -translation lf set token [http::geturl $url -channel $out] close $out upvar #0 $token data removeFile $testfile - expr $data(currentsize) == $data(totalsize) + expr {$data(currentsize) == $data(totalsize)} } 1 test http-4.6 {http::Event} { set testfile [makeFile "" testfile] @@ -408,7 +420,7 @@ if 0 { } {111 111} } test http-4.7 {http::Event} { - set token [http::geturl $url -progress myProgress] + set token [http::geturl $url -keepalive 0 -progress myProgress] set progress } {111 111} test http-4.8 {http::Event} { @@ -427,49 +439,43 @@ test http-4.10 {http::Event} { # Short timeout to working server (the test server). This lets us try a # reset during the connection. test http-4.11 {http::Event} { - set token [http::geturl $url -timeout 1 -command {#}] + set token [http::geturl $url -timeout 1 -keepalive 0 -command {#}] http::reset $token http::status $token } {reset} # Longer timeout with reset. test http-4.12 {http::Event} { - set token [http::geturl $url/?timeout=10 -command {#}] + set token [http::geturl $url/?timeout=10 -keepalive 0 -command {#}] http::reset $token http::status $token } {reset} # Medium timeout to working server that waits even longer. The timeout # hits while waiting for a reply. test http-4.13 {http::Event} { - set token [http::geturl $url?timeout=30 -timeout 10 -command {#}] + set token [http::geturl $url?timeout=30 -keepalive 0 -timeout 10 -command {#}] http::wait $token http::status $token } {timeout} # Longer timeout to good host, bad port, gets an error after the # connection "completes" but the socket is bad. -test http-4.14 {http::Event} { - set code [catch { - set token [http::geturl $badurl/?timeout=10 -timeout 10000 -command {#}] - if {[string length $token] == 0} { - error "bogus return from http::geturl" - } - http::wait $token - http::status $token - } err] +test http-4.14 {http::Event} -body { + set token [http::geturl $badurl/?timeout=10 -timeout 10000 -command \#] + if {$token eq ""} { + error "bogus return from http::geturl" + } + http::wait $token + http::status $token # error code varies among platforms. - list $code [regexp {(connect failed|couldn't open socket)} $err] -} {1 1} +} -returnCodes 1 -match regexp -result {(connect failed|couldn't open socket)} # Bogus host -test http-4.15 {http::Event} { - # This test may fail if you use a proxy server. That is to be +test http-4.15 {http::Event} -body { + # This test may fail if you use a proxy server. That is to be # expected and is not a problem with Tcl. - set code [catch { - set token [http::geturl //not_a_host.tcl.tk -timeout 1000 -command {#}] - http::wait $token - http::status $token - } err] - # error code varies among platforms. - list $code [string match "couldn't open socket*" $err] -} {1 1} + set token [http::geturl //not_a_host.tcl.tk -timeout 1000 -command \#] + http::wait $token + http::status $token + # error codes vary among platforms. +} -returnCodes 1 -match glob -result "couldn't open socket*" test http-5.1 {http::formatQuery} { http::formatQuery name1 value1 name2 "value two" diff --git a/tests/httpd b/tests/httpd index 3ea8024..f810797 100644 --- a/tests/httpd +++ b/tests/httpd @@ -1,3 +1,4 @@ +# -*- tcl -*- # # The httpd_ procedures implement a stub http server. # @@ -25,7 +26,7 @@ array set httpdErrors { 404 {Not Found} 503 {Service Unavailable} 504 {Service Temporarily Unavailable} - } +} proc httpdError {sock code args} { global httpdErrors @@ -54,8 +55,8 @@ proc httpdRead { sock } { # Read the protocol line and parse out the URL and query set readCount [gets $sock line] - if [regexp {(POST|GET|HEAD) ([^?]+)\??([^ ]*) HTTP/(1.[01])} \ - $line x data(proto) data(url) data(query) data(httpversion)] { + if {[regexp {(POST|GET|HEAD) ([^?]+)\??([^ ]*) HTTP/(1.[01])} $line \ + -> data(proto) data(url) data(query) data(httpversion)]} { set data(state) mime httpd_log $sock Query $line } else { @@ -69,6 +70,10 @@ proc httpdRead { sock } { # Read the HTTP headers set readCount [gets $sock line] + if {[regexp {^([^:]+):(.*)$} $line -> key val]} { + lappend data(meta) $key [string trim $val] + } + } elseif {$data(state) == "query"} { # Read the query data @@ -94,7 +99,7 @@ proc httpdRead { sock } { } 0,mime,HEAD - 0,mime,GET - - 0,query,POST { + 0,query,POST { # Empty line at end of headers, # or eof after query data httpdRespond $sock @@ -170,6 +175,14 @@ proc httpdRespond { sock } { set html "Got [string length $data(query)] bytes" set type text/plain } + *headers* { + set html "" + set type text/plain + foreach {key value} $data(meta) { + append html [list $key $value] "\n" + } + set html [string trim $html] + } default { set type text/html @@ -190,18 +203,27 @@ proc httpdRespond { sock } { append html </body></html> } } - - # Catch errors from premature client closes + # Catch errors from premature client closes + catch { if {$data(proto) == "HEAD"} { puts $sock "HTTP/1.0 200 OK" } else { - puts $sock "HTTP/1.0 200 Data follows" + # Split the response to test for [Bug 26245326] + puts -nonewline $sock "HT" + flush $sock + puts $sock "TP/1.0 200 Data follows" } - puts $sock "Date: [clock format [clock clicks]]" + puts $sock "Date: [clock format [clock seconds] \ + -format {%a, %d %b %Y %H:%M:%S %Z}]" puts $sock "Content-Type: $type" puts $sock "Content-Length: [string length $html]" + foreach {key val} $data(meta) { + if {[string match "X-*" $key]} { + puts $sock "$key: $val" + } + } puts $sock "" flush $sock if {$data(proto) != "HEAD"} { @@ -212,5 +234,3 @@ proc httpdRespond { sock } { httpd_log $sock Done "" httpdSockDone $sock } - - diff --git a/tests/httpold.test b/tests/httpold.test index b54a929..aeba311 100644 --- a/tests/httpold.test +++ b/tests/httpold.test @@ -291,15 +291,3 @@ catch {unset data} close $listen ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/if.test b/tests/if.test index e9da6d5..f941d54 100644 --- a/tests/if.test +++ b/tests/if.test @@ -11,7 +11,7 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } @@ -24,12 +24,9 @@ test if-1.1 {TclCompileIfCmd: missing if/elseif test} { test if-1.2 {TclCompileIfCmd: error in if/elseif test} { list [catch {if {[error "error in condition"]} foo} msg] $msg } {1 {error in condition}} -test if-1.3 {TclCompileIfCmd: error in if/elseif test} { - list [catch {if {1+}} msg] $msg $errorInfo -} {1 {syntax error in expression "1+": premature end of expression} {syntax error in expression "1+": premature end of expression - ("if" test expression) - while compiling -"if {1+}"}} +test if-1.3 {TclCompileIfCmd: error in if/elseif test} -body { + list [catch {if {1+}} msg] $msg $::errorInfo +} -match glob -result {1 * {*"if {1+}"}} test if-1.4 {TclCompileIfCmd: if/elseif test in braces} { set a {} if {1<2} {set a 1} @@ -61,15 +58,12 @@ test if-1.9 {TclCompileIfCmd: missing "then" body} { catch {if 1<2 then} msg set msg } {wrong # args: no script following "then" argument} -test if-1.10 {TclCompileIfCmd: error in "then" body} { +test if-1.10 {TclCompileIfCmd: error in "then" body} -body { set a {} - list [catch {if {$a!="xxx"} then {set}} msg] $msg $errorInfo -} {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" - while compiling -"set" - ("if" then script line 1) - while compiling -"if {$a!="xxx"} then {set}"}} + list [catch {if {$a!="xxx"} then {set}} msg] $msg $::errorInfo +} -match glob -result {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" + while *ing +"set"*}} test if-1.11 {TclCompileIfCmd: error in "then" body} { list [catch {if 2 then {[error "error in then clause"]}} msg] $msg } {1 {error in then clause}} @@ -175,13 +169,10 @@ test if-2.3 {TclCompileIfCmd: missing expression after "elseif"} { catch {if 1<2 {set a 1} elseif} msg set msg } {wrong # args: no expression after "elseif" argument} -test if-2.4 {TclCompileIfCmd: error in expression after "elseif"} { +test if-2.4 {TclCompileIfCmd: error in expression after "elseif"} -body { set a {} - list [catch {if 3>4 {set a 1} elseif {1>}} msg] $msg $errorInfo -} {1 {syntax error in expression "1>": premature end of expression} {syntax error in expression "1>": premature end of expression - ("if" test expression) - while compiling -"if 3>4 {set a 1} elseif {1>}"}} + list [catch {if 3>4 {set a 1} elseif {1>}} msg] $msg $::errorInfo +} -match glob -result {1 * {*"if 3>4 {set a 1} elseif {1>}"}} test if-2.5 {TclCompileIfCmd: test jumpFalse instruction replacement after long "elseif" body} { catch {unset i} set a {} @@ -302,16 +293,13 @@ test if-3.3 {TclCompileIfCmd: missing body after "else"} { catch {if 2<1 {set a 1} else} msg set msg } {wrong # args: no script following "else" argument} -test if-3.4 {TclCompileIfCmd: error compiling body after "else"} { +test if-3.4 {TclCompileIfCmd: error compiling body after "else"} -body { set a {} catch {if 2<1 {set a 1} else {set}} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling -"set" - ("if" else script line 1) - while compiling -"if 2<1 {set a 1} else {set}"} + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing +"set"*} test if-3.5 {TclCompileIfCmd: extra arguments after "else" argument} { set a {} catch {if 2<1 {set a 1} else {set a 2} or something} msg @@ -507,12 +495,10 @@ test if-5.2 {if cmd with computed command names: error in if/elseif test} { set z if list [catch {$z {[error "error in condition"]} foo} msg] $msg } {1 {error in condition}} -test if-5.3 {if cmd with computed command names: error in if/elseif test} { +test if-5.3 {if cmd with computed command names: error in if/elseif test} -body { set z if - list [catch {$z {1+}} msg] $msg $errorInfo -} {1 {syntax error in expression "1+": premature end of expression} {syntax error in expression "1+": premature end of expression - while executing -"$z {1+}"}} + list [catch {$z {1+}} msg] $msg $::errorInfo +} -match glob -result {1 * {*"$z {1+}"}} test if-5.4 {if cmd with computed command names: if/elseif test in braces} { set z if set a {} @@ -550,12 +536,12 @@ test if-5.9 {if cmd with computed command names: missing "then" body} { catch {$z 1<2 then} msg set msg } {wrong # args: no script following "then" argument} -test if-5.10 {if cmd with computed command names: error in "then" body} { +test if-5.10 {if cmd with computed command names: error in "then" body} -body { set z if set a {} - list [catch {$z {$a!="xxx"} then {set}} msg] $msg $errorInfo -} {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" - while compiling + list [catch {$z {$a!="xxx"} then {set}} msg] $msg $::errorInfo +} -match glob -result {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" + while *ing "set" invoked from within "$z {$a!="xxx"} then {set}"}} @@ -674,13 +660,11 @@ test if-6.3 {if cmd with computed command names: missing expression after "elsei catch {$z 1<2 {set a 1} elseif} msg set msg } {wrong # args: no expression after "elseif" argument} -test if-6.4 {if cmd with computed command names: error in expression after "elseif"} { +test if-6.4 {if cmd with computed command names: error in expression after "elseif"} -body { set z if set a {} - list [catch {$z 3>4 {set a 1} elseif {1>}} msg] $msg $errorInfo -} {1 {syntax error in expression "1>": premature end of expression} {syntax error in expression "1>": premature end of expression - while executing -"$z 3>4 {set a 1} elseif {1>}"}} + list [catch {$z 3>4 {set a 1} elseif {1>}} msg] $msg $::errorInfo +} -match glob -result {1 * {*"$z 3>4 {set a 1} elseif {1>}"}} test if-6.5 {if cmd with computed command names: test jumpFalse instruction replacement after long "elseif" body} { set z if catch {unset i} @@ -805,13 +789,13 @@ test if-7.3 {if cmd with computed command names: missing body after "else"} { catch {$z 2<1 {set a 1} else} msg set msg } {wrong # args: no script following "else" argument} -test if-7.4 {if cmd with computed command names: error compiling body after "else"} { +test if-7.4 {if cmd with computed command names: error compiling body after "else"} -body { set z if set a {} catch {$z 2<1 {set a 1} else {set}} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing "set" invoked from within "$z 2<1 {set a 1} else {set}"} @@ -1088,7 +1072,7 @@ test if-10.5 {substituted control words} { set elseif elseif; proc elseif {} {return badelseif} list [catch {if 1 $then {if 0 {} $elseif 1 {if 0 {} $else {list ok}}}} a] $a } {0 ok} -test if-10.6 {double invocation of variable traces} { +test if-10.6 {double invocation of variable traces} -body { set iftracecounter 0 proc iftraceproc {args} { upvar #0 iftracecounter counter @@ -1106,7 +1090,7 @@ test if-10.6 {double invocation of variable traces} { list [catch {if "$iftracevar + 20" {}} a] $a \ [catch {if "$iftracevar + 20" {}} b] $b \ [unset iftracevar iftracecounter] -} {1 {syntax error in expression "1 oops 10 + 20": extra tokens at end of expression} 0 {} {}} +} -match glob -result {1 {*} 0 {} {}} # cleanup ::tcltest::cleanupTests diff --git a/tests/incr-old.test b/tests/incr-old.test index 7068254..ed457cf 100644 --- a/tests/incr-old.test +++ b/tests/incr-old.test @@ -14,7 +14,7 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } @@ -45,31 +45,29 @@ test incr-old-2.2 {incr errors} { } {1 {wrong # args: should be "incr varName ?increment?"}} test incr-old-2.3 {incr errors} { catch {unset x} - list [catch {incr x} msg] $msg $errorInfo -} {1 {can't read "x": no such variable} {can't read "x": no such variable - (reading value of variable to increment) - invoked from within -"incr x"}} + incr x +} 1 test incr-old-2.4 {incr errors} { set x abc - list [catch {incr x} msg] $msg $errorInfo + list [catch {incr x} msg] $msg $::errorInfo } {1 {expected integer but got "abc"} {expected integer but got "abc" while executing "incr x"}} test incr-old-2.5 {incr errors} { set x 123 - list [catch {incr x 1a} msg] $msg $errorInfo + list [catch {incr x 1a} msg] $msg $::errorInfo } {1 {expected integer but got "1a"} {expected integer but got "1a" (reading increment) invoked from within "incr x 1a"}} -test incr-old-2.6 {incr errors} { +test incr-old-2.6 {incr errors} -body { proc readonly args {error "variable is read-only"} set x 123 trace var x w readonly - list [catch {incr x 1} msg] $msg $errorInfo -} {1 {can't set "x": variable is read-only} {can't set "x": variable is read-only + list [catch {incr x 1} msg] $msg $::errorInfo +} -match glob -result {1 {can't set "x": variable is read-only} {*variable is read-only while executing +* "incr x 1"}} catch {unset x} test incr-old-2.7 {incr errors} { diff --git a/tests/incr.test b/tests/incr.test index 7ed9824..253cb1d 100644 --- a/tests/incr.test +++ b/tests/incr.test @@ -11,7 +11,7 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } @@ -85,9 +85,8 @@ test incr-1.13 {TclCompileIncrCmd: simple but new (unknown) local name} { proc p {} { incr bar } - catch {p} msg - set msg -} {can't read "bar": no such variable} + p +} 1 test incr-1.14 {TclCompileIncrCmd: simple local name, >255 locals} { proc 260locals {} { # create 260 locals @@ -172,15 +171,13 @@ test incr-1.18 {TclCompileIncrCmd: increment given, simple int} { set i 5 incr i -100 } -95 -test incr-1.19 {TclCompileIncrCmd: increment given, but erroneous} { +test incr-1.19 {TclCompileIncrCmd: increment given, but erroneous} -body { set i 5 catch {incr i [set]} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling -"set" - while compiling -"incr i [set]"} + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing +"set"*} test incr-1.20 {TclCompileIncrCmd: increment given, in quotes} { set i 25 incr i "-100" @@ -195,7 +192,7 @@ test incr-1.22 {TclCompileIncrCmd: increment given, large int} { } 200005 test incr-1.23 {TclCompileIncrCmd: increment given, formatted int != int} { set i 25 - incr i 000012345 ;# an octal literal + incr i 0o00012345 ;# an octal literal } 5374 test incr-1.24 {TclCompileIncrCmd: increment given, formatted int != int} { set i 25 @@ -211,25 +208,22 @@ test incr-1.25 {TclCompileIncrCmd: too many arguments} { test incr-1.26 {TclCompileIncrCmd: runtime error, bad variable name} { - list [catch {incr {"foo}} msg] $msg $errorInfo -} {1 {can't read ""foo": no such variable} {can't read ""foo": no such variable - (reading value of variable to increment) - invoked from within -"incr {"foo}"}} -test incr-1.27 {TclCompileIncrCmd: runtime error, bad variable name} { - list [catch {incr [set]} msg] $msg $errorInfo -} {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" - while compiling -"set" - while compiling -"incr [set]"}} -test incr-1.28 {TclCompileIncrCmd: runtime error, readonly variable} { + unset -nocomplain {"foo} + incr {"foo} +} 1 +test incr-1.27 {TclCompileIncrCmd: runtime error, bad variable name} -body { + list [catch {incr [set]} msg] $msg $::errorInfo +} -match glob -result {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" + while *ing +"set"*}} +test incr-1.28 {TclCompileIncrCmd: runtime error, readonly variable} -body { proc readonly args {error "variable is read-only"} set x 123 trace var x w readonly - list [catch {incr x 1} msg] $msg $errorInfo -} {1 {can't set "x": variable is read-only} {can't set "x": variable is read-only + list [catch {incr x 1} msg] $msg $::errorInfo +} -match glob -result {1 {can't set "x": variable is read-only} {*variable is read-only while executing +* "incr x 1"}} catch {unset x} test incr-1.29 {TclCompileIncrCmd: runtime error, bad variable value} { @@ -332,9 +326,8 @@ test incr-2.13 {incr command (not compiled): simple but new (unknown) local name set z incr $z bar } - catch {p} msg - set msg -} {can't read "bar": no such variable} + p +} 1 test incr-2.14 {incr command (not compiled): simple local name, >255 locals} { proc 260locals {} { set z incr @@ -424,16 +417,14 @@ test incr-2.18 {incr command (not compiled): increment given, simple int} { set i 5 $z i -100 } -95 -test incr-2.19 {incr command (not compiled): increment given, but erroneous} { +test incr-2.19 {incr command (not compiled): increment given, but erroneous} -body { set z incr set i 5 catch {$z i [set]} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling -"set" - while compiling -"$z i [set]"} + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing +"set"*} test incr-2.20 {incr command (not compiled): increment given, in quotes} { set z incr set i 25 @@ -452,7 +443,7 @@ test incr-2.22 {incr command (not compiled): increment given, large int} { test incr-2.23 {incr command (not compiled): increment given, formatted int != int} { set z incr set i 25 - $z i 000012345 ;# an octal literal + $z i 0o00012345 ;# an octal literal } 5374 test incr-2.24 {incr command (not compiled): increment given, formatted int != int} { set z incr @@ -470,28 +461,25 @@ test incr-2.25 {incr command (not compiled): too many arguments} { test incr-2.26 {incr command (not compiled): runtime error, bad variable name} { + unset -nocomplain {"foo} set z incr - list [catch {$z {"foo}} msg] $msg $errorInfo -} {1 {can't read ""foo": no such variable} {can't read ""foo": no such variable - (reading value of variable to increment) - invoked from within -"$z {"foo}"}} -test incr-2.27 {incr command (not compiled): runtime error, bad variable name} { + $z {"foo} +} 1 +test incr-2.27 {incr command (not compiled): runtime error, bad variable name} -body { set z incr - list [catch {$z [set]} msg] $msg $errorInfo -} {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" - while compiling -"set" - while compiling -"$z [set]"}} -test incr-2.28 {incr command (not compiled): runtime error, readonly variable} { + list [catch {$z [set]} msg] $msg $::errorInfo +} -match glob -result {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" + while *ing +"set"*}} +test incr-2.28 {incr command (not compiled): runtime error, readonly variable} -body { set z incr proc readonly args {error "variable is read-only"} set x 123 trace var x w readonly - list [catch {$z x 1} msg] $msg $errorInfo -} {1 {can't set "x": variable is read-only} {can't set "x": variable is read-only + list [catch {$z x 1} msg] $msg $::errorInfo +} -match glob -result {1 {can't set "x": variable is read-only} {*variable is read-only while executing +* "$z x 1"}} catch {unset x} test incr-2.29 {incr command (not compiled): runtime error, bad variable value} { @@ -502,30 +490,35 @@ test incr-2.29 {incr command (not compiled): runtime error, bad variable value} test incr-2.30 {incr command (not compiled): bad increment} { set z incr set x 0 - list [catch {$z x 1a} msg] $msg $errorInfo + list [catch {$z x 1a} msg] $msg $::errorInfo } {1 {expected integer but got "1a"} {expected integer but got "1a" (reading increment) invoked from within "$z x 1a"}} test incr-2.31 {incr command (compiled): bad increment} { - list [catch {incr x 1a} msg] $msg $errorInfo + list [catch {incr x 1a} msg] $msg $::errorInfo } {1 {expected integer but got "1a"} {expected integer but got "1a" (reading increment) invoked from within "incr x 1a"}} +test incr-3.1 {increment by wide amount: bytecode route} { + set x 0 + incr x 123123123123 +} 123123123123 +test incr-3.2 {increment by wide amount: command route} { + set z incr + set x 0 + $z x 123123123123 +} 123123123123 + +test incr-4.1 {increment non-existing array element [Bug 1445454]} -body { + proc x {} {incr a(1)} + x +} -cleanup { + rename x {} +} -result 1 + # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/indexObj.test b/tests/indexObj.test index 414901f..bff20a2 100644 --- a/tests/indexObj.test +++ b/tests/indexObj.test @@ -13,66 +13,61 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -if {[info commands testindexobj] == {}} { - puts "This application hasn't been compiled with the \"testindexobj\"" - puts "command, so I can't test Tcl_GetIndexFromObj etc." - ::tcltest::cleanupTests - return -} +testConstraint testindexobj [llength [info commands testindexobj]] -test indexObj-1.1 {exact match} { +test indexObj-1.1 {exact match} testindexobj { testindexobj 1 1 xyz abc def xyz alm } {2} -test indexObj-1.2 {exact match} { +test indexObj-1.2 {exact match} testindexobj { testindexobj 1 1 abc abc def xyz alm } {0} -test indexObj-1.3 {exact match} { +test indexObj-1.3 {exact match} testindexobj { testindexobj 1 1 alm abc def xyz alm } {3} -test indexObj-1.4 {unique abbreviation} { +test indexObj-1.4 {unique abbreviation} testindexobj { testindexobj 1 1 xy abc def xalb xyz alm } {3} -test indexObj-1.5 {multiple abbreviations and exact match} { +test indexObj-1.5 {multiple abbreviations and exact match} testindexobj { testindexobj 1 1 x abc def xalb xyz alm x } {5} -test indexObj-1.6 {forced exact match} { +test indexObj-1.6 {forced exact match} testindexobj { testindexobj 1 0 xy abc def xalb xy alm } {3} -test indexObj-1.7 {forced exact match} { +test indexObj-1.7 {forced exact match} testindexobj { testindexobj 1 0 x abc def xalb xyz alm x } {5} -test indexObj-1.8 {exact match of empty values} { +test indexObj-1.8 {exact match of empty values} testindexobj { testindexobj 1 1 {} a aa aaa {} b bb bbb } 3 -test indexObj-1.9 {exact match of empty values} { +test indexObj-1.9 {exact match of empty values} testindexobj { testindexobj 1 0 {} a aa aaa {} b bb bbb } 3 -test indexObj-2.1 {no match} { +test indexObj-2.1 {no match} testindexobj { list [catch {testindexobj 1 1 dddd abc def xalb xyz alm x} msg] $msg } {1 {bad token "dddd": must be abc, def, xalb, xyz, alm, or x}} -test indexObj-2.2 {no match} { +test indexObj-2.2 {no match} testindexobj { list [catch {testindexobj 1 1 dddd abc} msg] $msg } {1 {bad token "dddd": must be abc}} -test indexObj-2.3 {no match: no abbreviations} { +test indexObj-2.3 {no match: no abbreviations} testindexobj { list [catch {testindexobj 1 0 xy abc def xalb xyz alm} msg] $msg } {1 {bad token "xy": must be abc, def, xalb, xyz, or alm}} -test indexObj-2.4 {ambiguous value} { +test indexObj-2.4 {ambiguous value} testindexobj { list [catch {testindexobj 1 1 d dumb daughter a c} msg] $msg } {1 {ambiguous token "d": must be dumb, daughter, a, or c}} -test indexObj-2.5 {omit error message} { +test indexObj-2.5 {omit error message} testindexobj { list [catch {testindexobj 0 1 d x} msg] $msg } {1 {}} -test indexObj-2.6 {TCL_EXACT => no "ambiguous" error message} { +test indexObj-2.6 {TCL_EXACT => no "ambiguous" error message} testindexobj { list [catch {testindexobj 1 0 d dumb daughter a c} msg] $msg } {1 {bad token "d": must be dumb, daughter, a, or c}} -test indexObj-2.7 {exact match of empty values} { +test indexObj-2.7 {exact match of empty values} testindexobj { list [catch {testindexobj 1 1 {} a b c} msg] $msg } {1 {ambiguous token "": must be a, b, or c}} -test indexObj-2.8 {exact match of empty values: singleton case} { +test indexObj-2.8 {exact match of empty values: singleton case} testindexobj { list [catch {testindexobj 1 0 {} a} msg] $msg } {1 {bad token "": must be a}} -test indexObj-2.9 {non-exact match of empty values: singleton case} { +test indexObj-2.9 {non-exact match of empty values: singleton case} testindexobj { # NOTE this is a special case. Although the empty string is a # unique prefix, we have an established history of rejecting # empty lookup keys, requiring any unique prefix match to have @@ -80,32 +75,32 @@ test indexObj-2.9 {non-exact match of empty values: singleton case} { list [catch {testindexobj 1 1 {} a} msg] $msg } {1 {bad token "": must be a}} -test indexObj-3.1 {cache result to skip next lookup} { +test indexObj-3.1 {cache result to skip next lookup} testindexobj { testindexobj check 42 } {42} -test indexObj-4.1 {free old internal representation} { +test indexObj-4.1 {free old internal representation} testindexobj { set x {a b} lindex $x 1 testindexobj 1 1 $x abc def {a b} zzz } {2} -test indexObj-5.1 {Tcl_WrongNumArgs} { +test indexObj-5.1 {Tcl_WrongNumArgs} testindexobj { testwrongnumargs 1 "?option?" mycmd } "wrong # args: should be \"mycmd ?option?\"" -test indexObj-5.2 {Tcl_WrongNumArgs} { +test indexObj-5.2 {Tcl_WrongNumArgs} testindexobj { testwrongnumargs 2 "bar" mycmd foo } "wrong # args: should be \"mycmd foo bar\"" -test indexObj-5.3 {Tcl_WrongNumArgs} { +test indexObj-5.3 {Tcl_WrongNumArgs} testindexobj { testwrongnumargs 0 "bar" mycmd foo } "wrong # args: should be \"bar\"" -test indexObj-5.4 {Tcl_WrongNumArgs} { +test indexObj-5.4 {Tcl_WrongNumArgs} testindexobj { testwrongnumargs 0 "" mycmd foo } "wrong # args: should be \"\"" -test indexObj-5.5 {Tcl_WrongNumArgs} { +test indexObj-5.5 {Tcl_WrongNumArgs} testindexobj { testwrongnumargs 1 "" mycmd foo } "wrong # args: should be \"mycmd\"" -test indexObj-5.6 {Tcl_WrongNumArgs} { +test indexObj-5.6 {Tcl_WrongNumArgs} testindexobj { testwrongnumargs 2 "" mycmd foo } "wrong # args: should be \"mycmd foo\"" # Contrast this with test proc-3.6; they have to be like this because @@ -114,20 +109,20 @@ test indexObj-5.7 {Tcl_WrongNumArgs} testindexobj { testwrongnumargs 2 "fee fi" "fo fum" foo bar } "wrong # args: should be \"fo fum foo fee fi\"" -test indexObj-6.1 {Tcl_GetIndexFromObjStruct} { +test indexObj-6.1 {Tcl_GetIndexFromObjStruct} testindexobj { set x a testgetindexfromobjstruct $x 0 } "wrong # args: should be \"testgetindexfromobjstruct a 0\"" -test indexObj-6.2 {Tcl_GetIndexFromObjStruct} { +test indexObj-6.2 {Tcl_GetIndexFromObjStruct} testindexobj { set x a testgetindexfromobjstruct $x 0 testgetindexfromobjstruct $x 0 } "wrong # args: should be \"testgetindexfromobjstruct a 0\"" -test indexObj-6.3 {Tcl_GetIndexFromObjStruct} { +test indexObj-6.3 {Tcl_GetIndexFromObjStruct} testindexobj { set x c testgetindexfromobjstruct $x 1 } "wrong # args: should be \"testgetindexfromobjstruct c 1\"" -test indexObj-6.4 {Tcl_GetIndexFromObjStruct} { +test indexObj-6.4 {Tcl_GetIndexFromObjStruct} testindexobj { set x c testgetindexfromobjstruct $x 1 testgetindexfromobjstruct $x 1 @@ -136,3 +131,7 @@ test indexObj-6.4 {Tcl_GetIndexFromObjStruct} { # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/info.test b/tests/info.test index 5816da3..937da8c 100644 --- a/tests/info.test +++ b/tests/info.test @@ -13,7 +13,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# DO NOT DELETE THIS LINE. Keep line numbers correct for testing 'info frame'. +# DO NOT DELETE THIS LINE if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest 2 @@ -31,10 +31,6 @@ namespace eval test_ns_info1 { proc q {{y 27} {z {}}} {return "y=$y"} } -testConstraint tip280 [info exists tcl_platform(tip,280)] -testConstraint !tip280 [expr {![info exists tcl_platform(tip,280)]}] - - test info-1.1 {info args option} { proc t1 {a bbb c} {return foo} info args t1 @@ -47,13 +43,13 @@ test info-1.3 {info args option} { proc t1 "" {return foo} info args t1 } {} -test info-1.4 {info args option} { +test info-1.4 {info args option} -body { catch {rename t1 {}} - list [catch {info args t1} msg] $msg -} {1 {"t1" isn't a procedure}} -test info-1.5 {info args option} { - list [catch {info args set} msg] $msg -} {1 {"set" isn't a procedure}} + info args t1 +} -returnCodes error -result {"t1" isn't a procedure} +test info-1.5 {info args option} -body { + info args set +} -returnCodes error -result {"set" isn't a procedure} test info-1.6 {info args option} { proc t1 {a b} {set c 123; set d $c} t1 1 2 @@ -71,12 +67,12 @@ test info-2.1 {info body option} { proc t1 {} {body of t1} info body t1 } {body of t1} -test info-2.2 {info body option} { - list [catch {info body set} msg] $msg -} {1 {"set" isn't a procedure}} -test info-2.3 {info body option} { - list [catch {info args set 1} msg] $msg -} {1 {wrong # args: should be "info args procname"}} +test info-2.2 {info body option} -body { + info body set +} -returnCodes error -result {"set" isn't a procedure} +test info-2.3 {info body option} -body { + info args set 1 +} -returnCodes error -result {wrong # args: should be "info args procname"} test info-2.4 {info body option} { catch {namespace delete test_ns_info2} namespace eval test_ns_info2 { @@ -108,10 +104,6 @@ test info-2.6 {info body option, returning list bodies} { [foo; string bytelength [info body foo]] } {9 9} -# "info cmdcount" is no longer accurate for compiled commands! -# The expected result for info-3.1 used to be "3" and is now "1" -# since the "set"s have been compiled away. info-3.2 was corrected -# in 8.3 because the eval'ed body won't be compiled. proc testinfocmdcount {} { set x [info cmdcount] set y 12345 @@ -120,17 +112,17 @@ proc testinfocmdcount {} { } test info-3.1 {info cmdcount compiled} { testinfocmdcount -} 1 +} 4 test info-3.2 {info cmdcount evaled} { set x [info cmdcount] set y 12345 set z [info cm] expr $z-$x -} 3 -test info-3.3 {info cmdcount evaled} [info body testinfocmdcount] 3 -test info-3.4 {info cmdcount option} { - list [catch {info cmdcount 1} msg] $msg -} {1 {wrong # args: should be "info cmdcount"}} +} 4 +test info-3.3 {info cmdcount evaled} [info body testinfocmdcount] 4 +test info-3.4 {info cmdcount option} -body { + info cmdcount 1 +} -returnCodes error -result {wrong # args: should be "info cmdcount"} test info-4.1 {info commands option} { proc t1 {} {} @@ -157,13 +149,14 @@ test info-4.4 {info commands option} { } {_t1_ _t2_} catch {rename _t1_ {}} catch {rename _t2_ {}} -test info-4.5 {info commands option} { - list [catch {info commands a b} msg] $msg -} {1 {wrong # args: should be "info commands ?pattern?"}} - -test info-5.1 {info complete option} { - list [catch {info complete} msg] $msg -} {1 {wrong # args: should be "info complete command"}} +test info-4.5 {info commands option} -returnCodes error -body { + info commands a b +} -result {wrong # args: should be "info commands ?pattern?"} +# Also some tests in namespace.test + +test info-5.1 {info complete option} -body { + info complete +} -returnCodes error -result {wrong # args: should be "info complete command"} test info-5.2 {info complete option} { info complete abc } 1 @@ -206,28 +199,30 @@ test info-6.5 {info default option} { set x [info default t1 e value] list $x $value } {1 {long default value}} -test info-6.6 {info default option} { - list [catch {info default a b} msg] $msg -} {1 {wrong # args: should be "info default procname arg varname"}} -test info-6.7 {info default option} { - list [catch {info default _nonexistent_ a b} msg] $msg -} {1 {"_nonexistent_" isn't a procedure}} -test info-6.8 {info default option} { +test info-6.6 {info default option} -returnCodes error -body { + info default a b +} -result {wrong # args: should be "info default procname arg varname"} +test info-6.7 {info default option} -returnCodes error -body { + info default _nonexistent_ a b +} -result {"_nonexistent_" isn't a procedure} +test info-6.8 {info default option} -returnCodes error -body { proc t1 {a b} {} - list [catch {info default t1 x value} msg] $msg -} {1 {procedure "t1" doesn't have an argument "x"}} -test info-6.9 {info default option} { + info default t1 x value +} -result {procedure "t1" doesn't have an argument "x"} +test info-6.9 {info default option} -returnCodes error -setup { catch {unset a} +} -body { set a(0) 88 proc t1 {a b} {} - list [catch {info default t1 a a} msg] $msg -} {1 {couldn't store default value in variable "a"}} -test info-6.10 {info default option} { + info default t1 a a +} -returnCodes error -result {couldn't store default value in variable "a"} +test info-6.10 {info default option} -setup { catch {unset a} +} -body { set a(0) 88 proc t1 {{a 18} b} {} - list [catch {info default t1 a a} msg] $msg -} {1 {couldn't store default value in variable "a"}} + info default t1 a a +} -returnCodes error -result {couldn't store default value in variable "a"} test info-6.11 {info default option} { catch {namespace delete test_ns_info2} namespace eval test_ns_info2 { @@ -267,18 +262,19 @@ test info-7.6 {info exists option} { proc t1 {x} {return [info exists value]} t1 2 } 0 -test info-7.7 {info exists option} { +test info-7.7 {info exists option} -setup { catch {unset x} +} -body { set x(2) 44 list [info exists x] [info exists x(1)] [info exists x(2)] -} {1 0 1} +} -result {1 0 1} catch {unset x} -test info-7.8 {info exists option} { - list [catch {info exists} msg] $msg -} {1 {wrong # args: should be "info exists varName"}} -test info-7.9 {info exists option} { - list [catch {info exists 1 2} msg] $msg -} {1 {wrong # args: should be "info exists varName"}} +test info-7.8 {info exists option} -body { + info exists +} -returnCodes error -result {wrong # args: should be "info exists varName"} +test info-7.9 {info exists option} -body { + info exists 1 2 +} -returnCodes error -result {wrong # args: should be "info exists varName"} test info-8.1 {info globals option} { set x 1 @@ -293,9 +289,9 @@ test info-8.2 {info globals option} { set _xxx2 2 lsort [info g _xxx*] } {_xxx1 _xxx2} -test info-8.3 {info globals option} { - list [catch {info globals 1 2} msg] $msg -} {1 {wrong # args: should be "info globals ?pattern?"}} +test info-8.3 {info globals option} -returnCodes error -body { + info globals 1 2 +} -result {wrong # args: should be "info globals ?pattern?"} test info-8.4 {info globals option: may have leading namespace qualifiers} { set x 0 list [info globals x] [info globals :x] [info globals ::x] [info globals :::x] [info globals ::::x] @@ -343,46 +339,64 @@ test info-9.4 {info level option} { } t1 } {1 t1} -test info-9.5 {info level option} { - list [catch {info level 1 2} msg] $msg -} {1 {wrong # args: should be "info level ?number?"}} -test info-9.6 {info level option} { - list [catch {info level 123a} msg] $msg -} {1 {expected integer but got "123a"}} -test info-9.7 {info level option} { - list [catch {info level 0} msg] $msg -} {1 {bad level "0"}} -test info-9.8 {info level option} { +test info-9.5 {info level option} -body { + info level 1 2 +} -returnCodes error -result {wrong # args: should be "info level ?number?"} +test info-9.6 {info level option} -body { + info level 123a +} -returnCodes error -result {expected integer but got "123a"} +test info-9.7 {info level option} -body { + info level 0 +} -returnCodes error -result {bad level "0"} +test info-9.8 {info level option} -body { proc t1 {} {info level -1} - list [catch {t1} msg] $msg -} {1 {bad level "-1"}} -test info-9.9 {info level option} { + t1 +} -returnCodes error -result {bad level "-1"} +test info-9.9 {info level option} -body { proc t1 {x} {info level $x} - list [catch {t1 -3} msg] $msg -} {1 {bad level "-3"}} + t1 -3 +} -returnCodes error -result {bad level "-3"} test info-9.10 {info level option, namespaces} { set msg [namespace eval t {info level 0}] namespace delete t set msg } {namespace eval t {info level 0}} +test info-9.11 {info level option, aliases} -constraints knownBug -setup { + proc w {x y z} {info level 0} + interp alias {} a {} w a b +} -body { + a c +} -cleanup { + rename a {} + rename w {} +} -result {a c} +test info-9.12 {info level option, ensembles} -constraints knownBug -setup { + proc w {x y z} {info level 0} + namespace ensemble create -command a -map {foo ::w} +} -body { + a foo 1 2 3 +} -cleanup { + rename a {} + rename w {} +} -result {a foo 1 2 3} set savedLibrary $tcl_library -test info-10.1 {info library option} { - list [catch {info library x} msg] $msg -} {1 {wrong # args: should be "info library"}} +test info-10.1 {info library option} -body { + info library x +} -returnCodes error -result {wrong # args: should be "info library"} test info-10.2 {info library option} { set tcl_library 12345 info library } {12345} -test info-10.3 {info library option} { +test info-10.3 {info library option} -body { unset tcl_library - list [catch {info library} msg] $msg -} {1 {no library has been specified for Tcl}} + info library +} -returnCodes error -result {no library has been specified for Tcl} set tcl_library $savedLibrary -test info-11.1 {info loaded option} { - list [catch {info loaded a b} msg] $msg -} {1 {wrong # args: should be "info loaded ?interp?"}} +test info-11.1 {info loaded option} -body { + info loaded a b +} -returnCodes error -result {wrong # args: should be "info loaded ?interp?"} test info-11.2 {info loaded option} { list [catch {info loaded {}}] [catch {info loaded gorp} msg] $msg } {0 1 {could not find interpreter "gorp"}} @@ -408,9 +422,9 @@ test info-12.2 {info locals option} { } lsort [t1 2 3] } {x xx1 xx2} -test info-12.3 {info locals option} { - list [catch {info locals 1 2} msg] $msg -} {1 {wrong # args: should be "info locals ?pattern?"}} +test info-12.3 {info locals option} -body { + info locals 1 2 +} -returnCodes error -result {wrong # args: should be "info locals ?pattern?"} test info-12.4 {info locals option} { info locals } {} @@ -434,24 +448,25 @@ test info-12.7 {info locals with temporary variables} { t1 } {a} -test info-13.1 {info nameofexecutable option} { - list [catch {info nameofexecutable foo} msg] $msg -} {1 {wrong # args: should be "info nameofexecutable"}} +test info-13.1 {info nameofexecutable option} -returnCodes error -body { + info nameofexecutable foo +} -result {wrong # args: should be "info nameofexecutable"} test info-14.1 {info patchlevel option} { set a [info patchlevel] regexp {[0-9]+\.[0-9]+([p[0-9]+)?} $a } 1 -test info-14.2 {info patchlevel option} { - list [catch {info patchlevel a} msg] $msg -} {1 {wrong # args: should be "info patchlevel"}} -test info-14.3 {info patchlevel option} { +test info-14.2 {info patchlevel option} -returnCodes error -body { + info patchlevel a +} -result {wrong # args: should be "info patchlevel"} +test info-14.3 {info patchlevel option} -setup { set t $tcl_patchLevel +} -body { unset tcl_patchLevel - set result [list [catch {info patchlevel} msg] $msg] + info patchlevel +} -cleanup { set tcl_patchLevel $t - set result -} {1 {can't read "tcl_patchLevel": no such variable}} +} -returnCodes error -result {can't read "tcl_patchLevel": no such variable} test info-15.1 {info procs option} { proc t1 {} {} @@ -467,19 +482,21 @@ test info-15.2 {info procs option} { } {_tt1 _tt2} catch {rename _tt1 {}} catch {rename _tt2 {}} -test info-15.3 {info procs option} { - list [catch {info procs 2 3} msg] $msg -} {1 {wrong # args: should be "info procs ?pattern?"}} -test info-15.4 {info procs option} { +test info-15.3 {info procs option} -body { + info procs 2 3 +} -returnCodes error -result {wrong # args: should be "info procs ?pattern?"} +test info-15.4 {info procs option} -setup { catch {namespace delete test_ns_info2} +} -body { namespace eval test_ns_info2 { namespace import ::test_ns_info1::* proc r {} {} list [info procs] [info procs p*] } -} {{p q r} p} -test info-15.5 {info procs option with a proc in a namespace} { +} -result {{p q r} p} +test info-15.5 {info procs option with a proc in a namespace} -setup { catch {namespace delete test_ns_info2} +} -body { namespace eval test_ns_info2 { proc p1 { arg } { puts cmd @@ -489,9 +506,10 @@ test info-15.5 {info procs option with a proc in a namespace} { } } info procs ::test_ns_info2::p1 -} {::test_ns_info2::p1} -test info-15.6 {info procs option with a pattern in a namespace} { +} -result {::test_ns_info2::p1} +test info-15.6 {info procs option with a pattern in a namespace} -setup { catch {namespace delete test_ns_info2} +} -body { namespace eval test_ns_info2 { proc p1 { arg } { puts cmd @@ -501,9 +519,10 @@ test info-15.6 {info procs option with a pattern in a namespace} { } } lsort [info procs ::test_ns_info2::p*] -} [lsort [list ::test_ns_info2::p1 ::test_ns_info2::p2]] -test info-15.7 {info procs option with a global shadowing proc} { +} -result [lsort [list ::test_ns_info2::p1 ::test_ns_info2::p2]] +test info-15.7 {info procs option with a global shadowing proc} -setup { catch {namespace delete test_ns_info2} +} -body { proc string_cmd { arg } { puts cmd } @@ -513,13 +532,13 @@ test info-15.7 {info procs option with a global shadowing proc} { } } info procs test_ns_info2::string* -} {::test_ns_info2::string_cmd} +} -result {::test_ns_info2::string_cmd} # This regression test is currently commented out because it requires # that the implementation of "info procs" looks into the global namespace, # which it does not (in contrast to "info commands") -if {0} { -test info-15.8 {info procs option with a global shadowing proc} { +test info-15.8 {info procs option with a global shadowing proc} -setup { catch {namespace delete test_ns_info2} +} -constraints knownBug -body { proc string_cmd { arg } { puts cmd } @@ -534,12 +553,11 @@ test info-15.8 {info procs option with a global shadowing proc} { namespace eval test_ns_info2 { lsort [info procs string*] } -} [lsort [list string_cmd string_cmd2]] -} +} -result [lsort [list string_cmd string_cmd2]] -test info-16.1 {info script option} { - list [catch {info script x x} msg] $msg -} {1 {wrong # args: should be "info script ?filename?"}} +test info-16.1 {info script option} -returnCodes error -body { + info script x x +} -result {wrong # args: should be "info script ?filename?"} test info-16.2 {info script option} { file tail [info sc] } "info.test" @@ -574,24 +592,24 @@ test info-16.8 {info script option} { } [list [list $gorpfile foo.bar] info.test] removeFile gorp.info -test info-17.1 {info sharedlibextension option} { - list [catch {info sharedlibextension foo} msg] $msg -} {1 {wrong # args: should be "info sharedlibextension"}} +test info-17.1 {info sharedlibextension option} -returnCodes error -body { + info sharedlibextension foo +} -result {wrong # args: should be "info sharedlibextension"} test info-18.1 {info tclversion option} { - set x [info tclversion] - scan $x "%d.%d%c" a b c + scan [info tclversion] "%d.%d%c" a b c } 2 -test info-18.2 {info tclversion option} { - list [catch {info t 2} msg] $msg -} {1 {wrong # args: should be "info tclversion"}} -test info-18.3 {info tclversion option} { - set t $tcl_version +test info-18.2 {info tclversion option} -body { + info t 2 +} -returnCodes error -result {wrong # args: should be "info tclversion"} +test info-18.3 {info tclversion option} -body { unset tcl_version - set result [list [catch {info tclversion} msg] $msg] + info tclversion +} -returnCodes error -setup { + set t $tcl_version +} -cleanup { set tcl_version $t - set result -} {1 {can't read "tcl_version": no such variable}} +} -result {can't read "tcl_version": no such variable} test info-19.1 {info vars option} { set a 1 @@ -616,9 +634,9 @@ test info-19.2 {info vars option} { test info-19.3 {info vars option} { lsort [info vars] } [lsort [info globals]] -test info-19.4 {info vars option} { - list [catch {info vars a b} msg] $msg -} {1 {wrong # args: should be "info vars ?pattern?"}} +test info-19.4 {info vars option} -returnCodes error -body { + info vars a b +} -result {wrong # args: should be "info vars ?pattern?"} test info-19.5 {info vars with temporary variables} { proc t1 {} { foreach a {b c} {} @@ -635,11 +653,10 @@ test info-19.6 {info vars: Bug 1072654} -setup { namespace delete x } -result {} +set functions {abs acos asin atan atan2 bool ceil cos cosh double entier exp floor fmod hypot int isqrt log log10 max min pow rand round sin sinh sqrt srand tan tanh wide} # Check whether the extra testing functions are defined... -if {([catch {expr T1()} msg] == 1) && ($msg == {unknown math function "T1"})} { - set functions {abs acos asin atan atan2 ceil cos cosh double exp floor fmod hypot int log log10 pow rand round sin sinh sqrt srand tan tanh wide} -} else { - set functions {T1 T2 T3 abs acos asin atan atan2 ceil cos cosh double exp floor fmod hypot int log log10 pow rand round sin sinh sqrt srand tan tanh wide} +if {!([catch {expr T1()} msg] && ($msg eq {invalid command name "tcl::mathfunc::T1"}))} { + set functions "T1 T2 T3 $functions" ;# A lazy way of prepending! } test info-20.1 {info functions option} {info functions sin} sin test info-20.2 {info functions option} {lsort [info functions]} $functions @@ -649,42 +666,29 @@ test info-20.3 {info functions option} { test info-20.4 {info functions option} { lsort [info functions *tan*] } {atan atan2 tan tanh} -test info-20.5 {info functions option} { - list [catch {info functions raise an error} msg] $msg -} {1 {wrong # args: should be "info functions ?pattern?"}} - -test info-21.1 {miscellaneous error conditions} { - list [catch {info} msg] $msg -} {1 {wrong # args: should be "info option ?arg arg ...?"}} -test info-21.2 {miscellaneous error conditions} !tip280 { - list [catch {info gorp} msg] $msg -} {1 {bad option "gorp": must be args, body, cmdcount, commands, complete, default, exists, functions, globals, hostname, level, library, loaded, locals, nameofexecutable, patchlevel, procs, script, sharedlibextension, tclversion, or vars}} -test info-21.2-280 {miscellaneous error conditions} tip280 { - list [catch {info gorp} msg] $msg -} {1 {bad option "gorp": must be args, body, cmdcount, commands, complete, default, exists, frame, functions, globals, hostname, level, library, loaded, locals, nameofexecutable, patchlevel, procs, script, sharedlibextension, tclversion, or vars}} -test info-21.3 {miscellaneous error conditions} !tip280 { - list [catch {info c} msg] $msg -} {1 {ambiguous option "c": must be args, body, cmdcount, commands, complete, default, exists, functions, globals, hostname, level, library, loaded, locals, nameofexecutable, patchlevel, procs, script, sharedlibextension, tclversion, or vars}} -test info-21.3-280 {miscellaneous error conditions} tip280 { - list [catch {info c} msg] $msg -} {1 {ambiguous option "c": must be args, body, cmdcount, commands, complete, default, exists, frame, functions, globals, hostname, level, library, loaded, locals, nameofexecutable, patchlevel, procs, script, sharedlibextension, tclversion, or vars}} -test info-21.4 {miscellaneous error conditions} !tip280 { - list [catch {info l} msg] $msg -} {1 {ambiguous option "l": must be args, body, cmdcount, commands, complete, default, exists, functions, globals, hostname, level, library, loaded, locals, nameofexecutable, patchlevel, procs, script, sharedlibextension, tclversion, or vars}} -test info-21.4-280 {miscellaneous error conditions} tip280 { - list [catch {info l} msg] $msg -} {1 {ambiguous option "l": must be args, body, cmdcount, commands, complete, default, exists, frame, functions, globals, hostname, level, library, loaded, locals, nameofexecutable, patchlevel, procs, script, sharedlibextension, tclversion, or vars}} -test info-21.5 {miscellaneous error conditions} !tip280 { - list [catch {info s} msg] $msg -} {1 {ambiguous option "s": must be args, body, cmdcount, commands, complete, default, exists, functions, globals, hostname, level, library, loaded, locals, nameofexecutable, patchlevel, procs, script, sharedlibextension, tclversion, or vars}} -test info-21.5-280 {miscellaneous error conditions} tip280 { - list [catch {info s} msg] $msg -} {1 {ambiguous option "s": must be args, body, cmdcount, commands, complete, default, exists, frame, functions, globals, hostname, level, library, loaded, locals, nameofexecutable, patchlevel, procs, script, sharedlibextension, tclversion, or vars}} +test info-20.5 {info functions option} -returnCodes error -body { + info functions raise an error +} -result {wrong # args: should be "info functions ?pattern?"} + +test info-21.1 {miscellaneous error conditions} -returnCodes error -body { + info +} -result {wrong # args: should be "info subcommand ?argument ...?"} +test info-21.2 {miscellaneous error conditions} -returnCodes error -body { + info gorp +} -result {unknown or ambiguous subcommand "gorp": must be args, body, cmdcount, commands, complete, default, exists, frame, functions, globals, hostname, level, library, loaded, locals, nameofexecutable, patchlevel, procs, script, sharedlibextension, tclversion, or vars} +test info-21.3 {miscellaneous error conditions} -returnCodes error -body { + info c +} -result {unknown or ambiguous subcommand "c": must be args, body, cmdcount, commands, complete, default, exists, frame, functions, globals, hostname, level, library, loaded, locals, nameofexecutable, patchlevel, procs, script, sharedlibextension, tclversion, or vars} +test info-21.4 {miscellaneous error conditions} -returnCodes error -body { + info l +} -result {unknown or ambiguous subcommand "l": must be args, body, cmdcount, commands, complete, default, exists, frame, functions, globals, hostname, level, library, loaded, locals, nameofexecutable, patchlevel, procs, script, sharedlibextension, tclversion, or vars} +test info-21.5 {miscellaneous error conditions} -returnCodes error -body { + info s +} -result {unknown or ambiguous subcommand "s": must be args, body, cmdcount, commands, complete, default, exists, frame, functions, globals, hostname, level, library, loaded, locals, nameofexecutable, patchlevel, procs, script, sharedlibextension, tclversion, or vars} ## # ### ### ### ######### ######### ######### ## info frame - ## Helper # For the more complex results we cut the file name down to remove # path dependencies, and we use only part of the first line of the @@ -692,13 +696,12 @@ test info-21.5-280 {miscellaneous error conditions} tip280 { # test case may appear in some results, but the result is part of the # testcase. An infinite string would be required to describe that. The # cutting-down breaks this. - proc reduce {frame} { - set pos [lsearch -exact $frame cmd] + set pos [lsearch -exact $frame cmd] incr pos - set cmd [lindex $frame $pos] + set cmd [lindex $frame $pos] if {[regexp \n $cmd]} { - set first [lindex [split $cmd \n] 0] ; set first [expr {[string length $first] > 11 ? [string range $first 0 end-11] : [string range $first 0 end-4]}] + set first [string range [lindex [split $cmd \n] 0] 0 end-4] set frame [lreplace $frame $pos $pos $first] } set pos [lsearch -exact $frame file] @@ -709,7 +712,9 @@ proc reduce {frame} { } set frame } - +proc subinterp {} { interp create sub ; interp debug sub -frame 1; + interp eval sub [list proc reduce [info args reduce] [info body reduce]] +} ## Helper # Generate a stacktrace from the current location to top. This code # not only depends on the exact location of things, but also on the @@ -728,114 +733,81 @@ proc etrace {} { ## -test info-22.0.0 {info frame, levels} {tip280 && !singleTestInterp} { +test info-22.0 {info frame, levels} {!singleTestInterp} { info frame } 7 -test info-22.0.1 {info frame, levels} {tip280 && singleTestInterp} { - info frame -} 10 - -test info-22.1.0 {info frame, bad level relative} {tip280 && !singleTestInterp} { +test info-22.1 {info frame, bad level relative} {!singleTestInterp} { # catch is another level!, i.e. we have 8, not 7 catch {info frame -8} msg set msg } {bad level "-8"} -test info-22.1.1 {info frame, bad level relative} {tip280 && singleTestInterp} { - # catch is another level!, i.e. we have 11, not 10 - catch {info frame -11} msg - set msg -} {bad level "-11"} - -test info-22.2.0 {info frame, bad level absolute} {tip280 && !singleTestInterp} { +test info-22.2 {info frame, bad level absolute} {!singleTestInterp} { # catch is another level!, i.e. we have 8, not 7 catch {info frame 9} msg set msg } {bad level "9"} -test info-22.2.1 {info frame, bad level absolute} {tip280 && singleTestInterp} { - # catch is another level!, i.e. we have 12, not 10 - catch {info frame 12} msg - set msg -} {bad level "12"} - -test info-22.3 {info frame, current, relative} -constraints tip280 -match glob -body { +test info-22.3 {info frame, current, relative} -match glob -body { info frame 0 -} -result {type source line 761 file * cmd {info frame 0} proc ::tcltest::RunTest} - -test info-22.4 {info frame, current, relative, nested} -constraints tip280 -match glob -body { +} -result {type source line 750 file * cmd {info frame 0} proc ::tcltest::RunTest} +test info-22.4 {info frame, current, relative, nested} -match glob -body { set res [info frame 0] -} -result {type source line 765 file * cmd {info frame 0} proc ::tcltest::RunTest} - -test info-22.5.0 {info frame, current, absolute} -constraints {tip280 && !singleTestInterp} -match glob -body { +} -result {type source line 753 file * cmd {info frame 0} proc ::tcltest::RunTest} +test info-22.5 {info frame, current, absolute} -constraints {!singleTestInterp} -match glob -body { reduce [info frame 7] -} -result {type source line 769 file * cmd {info frame 7} proc ::tcltest::RunTest} -test info-22.5.1 {info frame, current, absolute} -constraints {tip280 && singleTestInterp} -match glob -body { - reduce [info frame 10] -} -result {type source line 772 file * cmd {info frame 10} proc ::tcltest::RunTest} - -test info-22.6.0 {info frame, global, relative} {tip280 && !singleTestInterp} { - reduce [info frame -6] -} {type source line 775 file info.test cmd test\ info-22.6.0\ \{info\ frame,\ global,\ relative\}\ \{tip280\ &&\ !singleTe} -test info-22.6.1 {info frame, global, relative} {tip280 && singleTestInterp} { +} -result {type source line 756 file * cmd {info frame 7} proc ::tcltest::RunTest} +test info-22.6 {info frame, global, relative} {!singleTestInterp} { reduce [info frame -6] -} {type source line 778 file info.test cmd test\ info-22.6.1\ \{info\ frame,\ global,\ relative\}\ \{tip280\ &&\ singleTe proc ::tcltest::runAllTests} - -test info-22.7.0 {info frame, global, absolute} {tip280 && !singleTestInterp} { +} {type source line 758 file info.test cmd test\ info-22.6\ \{info\ frame,\ global,\ relative\}\ \{!singleTestInter level 0} +test info-22.7 {info frame, global, absolute} {!singleTestInterp} { reduce [info frame 1] -} {type source line 782 file info.test cmd test\ info-22.7.0\ \{info\ frame,\ global,\ absolute\}\ \{tip280\ &&\ !singleTe} -test info-22.7.1 {info frame, global, absolute} {tip280 && singleTestInterp} { - reduce [info frame 4] -} {type source line 785 file info.test cmd test\ info-22.7.1\ \{info\ frame,\ global,\ absolute\}\ \{tip280\ &&\ singleTe proc ::tcltest::runAllTests} +} {type source line 761 file info.test cmd test\ info-22.7\ \{info\ frame,\ global,\ absolute\}\ \{!singleTestInter level 0} +test info-22.8 {info frame, basic trace} -constraints {!singleTestInterp} -match glob -body { + join [lrange [etrace] 0 2] \n +} -result {* {type source line 728 file info.test cmd {info frame $level} proc ::etrace level 0} +* {type source line 765 file info.test cmd etrace proc ::tcltest::RunTest} +* {type source line * file tcltest* cmd {uplevel 1 $script} proc ::tcltest::RunTest}} + + + + -test info-22.8 {info frame, basic trace} -constraints {tip280} -match glob -body { - join [lrange [etrace] 0 1] \n -} -result {* {type source line 723 file info.test cmd {info frame $level} proc ::etrace level 0} -* {type source line 790 file info.test cmd etrace proc ::tcltest::RunTest}} -test info-23.0.0 {eval'd info frame} {tip280 && !singleTestInterp} { +## The line 1967 is off by 5 from the true value of 1972. This is a knownBug, see testcase 30.0 +test info-23.0 {eval'd info frame} {!singleTestInterp} { eval {info frame} } 8 -test info-23.0.1 {eval'd info frame} {tip280 && singleTestInterp} { - eval {info frame} -} 11 - -test info-23.1.0 {eval'd info frame, semi-dynamic} {tip280 && !singleTestInterp} { +test info-23.1 {eval'd info frame, semi-dynamic} {!singleTestInterp} { eval info frame } 8 -test info-23.1.1 {eval'd info frame, semi-dynamic} {tip280 && singleTestInterp} { - eval info frame -} 11 - -test info-23.2.0 {eval'd info frame, dynamic} {tip280 && !singleTestInterp} { +test info-23.2 {eval'd info frame, dynamic} {!singleTestInterp} { set script {info frame} eval $script } 8 -test info-23.2.1 {eval'd info frame, dynamic} {tip280 && singleTestInterp} { - set script {info frame} - eval $script -} 11 - -test info-23.3 {eval'd info frame, literal} -constraints tip280 -match glob -body { +test info-23.3 {eval'd info frame, literal} -match glob -body { eval { info frame 0 } -} -result {type source line 819 file *info.test cmd {info frame 0} proc ::tcltest::RunTest} - -test info-23.4 {eval'd info frame, semi-dynamic} tip280 { +} -result {type source line 788 file * cmd {info frame 0} proc ::tcltest::RunTest} +test info-23.4 {eval'd info frame, semi-dynamic} { eval info frame 0 } {type eval line 1 cmd {info frame 0} proc ::tcltest::RunTest} - -test info-23.5 {eval'd info frame, dynamic} tip280 { +test info-23.5 {eval'd info frame, dynamic} { set script {info frame 0} eval $script } {type eval line 1 cmd {info frame 0} proc ::tcltest::RunTest} - -test info-23.6 {eval'd info frame, trace} -constraints {tip280} -match glob -body { +test info-23.6 {eval'd info frame, trace} -constraints {!singleTestInterp} -match glob -body { set script {etrace} join [lrange [eval $script] 0 2] \n -} -result {* {type source line 723 file info.test cmd {info frame $level} proc ::etrace level 0} +} -result {* {type source line 728 file info.test cmd {info frame $level} proc ::etrace level 0} * {type eval line 1 cmd etrace proc ::tcltest::RunTest} -* {type source line 834 file info.test cmd {eval $script} proc ::tcltest::RunTest}} +* {type source line 800 file info.test cmd {eval $script} proc ::tcltest::RunTest}} + + + + + +## The line 1967 is off by 5 from the true value of 1972. This is a knownBug, see testcase 30.0 # ------------------------------------------------------------------------- # Procedures defined in scripts which are arguments to control @@ -846,17 +818,19 @@ test info-23.6 {eval'd info frame, trace} -constraints {tip280} -match glob -bod # causes the connection to the context to be lost. Currently only # procedure bodies are able to remember their context. +# NOTE THAT THESE DO NOT USE THE -setup OPTION TO [test] + # ------------------------------------------------------------------------- namespace eval foo { proc bar {} {info frame 0} } -test info-24.0 {info frame, interaction, namespace eval} tip280 { +test info-24.0 {info frame, interaction, namespace eval} -body { reduce [foo::bar] -} {type source line 852 file info.test cmd {info frame 0} proc ::foo::bar level 0} - -namespace delete foo +} -cleanup { + namespace delete foo +} -result {type source line 826 file info.test cmd {info frame 0} proc ::foo::bar level 0} # ------------------------------------------------------------------------- @@ -866,11 +840,11 @@ if {$flag} { proc ::foo::bar {} {info frame 0} } -test info-24.1 {info frame, interaction, if} tip280 { +test info-24.1 {info frame, interaction, if} -body { reduce [foo::bar] -} {type source line 866 file info.test cmd {info frame 0} proc ::foo::bar level 0} - -namespace delete foo +} -cleanup { + namespace delete foo +} -result {type source line 840 file info.test cmd {info frame 0} proc ::foo::bar level 0} # ------------------------------------------------------------------------- @@ -881,11 +855,11 @@ while {$flag} { set flag 0 } -test info-24.2 {info frame, interaction, while} tip280 { +test info-24.2 {info frame, interaction, while} -body { reduce [foo::bar] -} {type source line 880 file info.test cmd {info frame 0} proc ::foo::bar level 0} - -namespace delete foo +} -cleanup { + namespace delete foo +} -result {type source line 854 file info.test cmd {info frame 0} proc ::foo::bar level 0} # ------------------------------------------------------------------------- @@ -894,11 +868,11 @@ catch { proc ::foo::bar {} {info frame 0} } -test info-24.3 {info frame, interaction, catch} tip280 { +test info-24.3 {info frame, interaction, catch} -body { reduce [foo::bar] -} {type source line 894 file info.test cmd {info frame 0} proc ::foo::bar level 0} - -namespace delete foo +} -cleanup { + namespace delete foo +} -result {type source line 868 file info.test cmd {info frame 0} proc ::foo::bar level 0} # ------------------------------------------------------------------------- @@ -908,11 +882,11 @@ foreach var val { break } -test info-24.4 {info frame, interaction, foreach} tip280 { +test info-24.4 {info frame, interaction, foreach} -body { reduce [foo::bar] -} {type source line 907 file info.test cmd {info frame 0} proc ::foo::bar level 0} - -namespace delete foo +} -cleanup { + namespace delete foo +} -result {type source line 881 file info.test cmd {info frame 0} proc ::foo::bar level 0} # ------------------------------------------------------------------------- @@ -922,11 +896,101 @@ for {} {1} {} { break } -test info-24.5 {info frame, interaction, for} tip280 { +test info-24.5 {info frame, interaction, for} -body { + reduce [foo::bar] +} -cleanup { + namespace delete foo +} -result {type source line 895 file info.test cmd {info frame 0} proc ::foo::bar level 0} + +# ------------------------------------------------------------------------- + +namespace eval foo {} +set x foo +switch -exact -- $x { + foo { + proc ::foo::bar {} {info frame 0} + } +} + +test info-24.6.0 {info frame, interaction, switch, list body} -body { + reduce [foo::bar] +} -cleanup { + namespace delete foo + unset x +} -result {type source line 911 file info.test cmd {info frame 0} proc ::foo::bar level 0} + +# ------------------------------------------------------------------------- + +namespace eval foo {} +set x foo +switch -exact -- $x foo { + proc ::foo::bar {} {info frame 0} +} + +test info-24.6.1 {info frame, interaction, switch, multi-body} -body { + reduce [foo::bar] +} -cleanup { + namespace delete foo + unset x +} -result {type source line 927 file info.test cmd {info frame 0} proc ::foo::bar level 0} + +# ------------------------------------------------------------------------- + +namespace eval foo {} +set x foo +switch -exact -- $x [list foo { + proc ::foo::bar {} {info frame 0} +}] + +test info-24.6.2 {info frame, interaction, switch, list body, dynamic} -body { reduce [foo::bar] -} {type source line 921 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -cleanup { + namespace delete foo + unset x +} -result {type proc line 1 cmd {info frame 0} proc ::foo::bar level 0} + +# ------------------------------------------------------------------------- + +namespace eval foo {} +dict for {k v} {foo bar} { + proc ::foo::bar {} {info frame 0} +} + +test info-24.7 {info frame, interaction, dict for} { + reduce [foo::bar] +} {type source line 956 file info.test cmd {info frame 0} proc ::foo::bar level 0} + +namespace delete foo + +# ------------------------------------------------------------------------- + +namespace eval foo {} +set thedict {foo bar} +dict with thedict { + proc ::foo::bar {} {info frame 0} +} + +test info-24.8 {info frame, interaction, dict with} { + reduce [foo::bar] +} {type source line 970 file info.test cmd {info frame 0} proc ::foo::bar level 0} namespace delete foo +unset thedict + +# ------------------------------------------------------------------------- + +namespace eval foo {} +dict filter {foo bar} script {k v} { + proc ::foo::bar {} {info frame 0} + set x 1 +} + +test info-24.9 {info frame, interaction, dict filter} { + reduce [foo::bar] +} {type source line 984 file info.test cmd {info frame 0} proc ::foo::bar level 0} + +namespace delete foo +unset x # ------------------------------------------------------------------------- @@ -934,22 +998,25 @@ eval { proc bar {} {info frame 0} } -test info-25.0 {info frame, proc in eval} tip280 { +test info-25.0 {info frame, proc in eval} { reduce [bar] -} {type source line 934 file info.test cmd {info frame 0} proc ::bar level 0} +} {type source line 998 file info.test cmd {info frame 0} proc ::bar level 0} +# Don't need to clean up yet... proc bar {} {info frame 0} -test info-25.1 {info frame, regular proc} tip280 { + +test info-25.1 {info frame, regular proc} { reduce [bar] -} {type source line 941 file info.test cmd {info frame 0} proc ::bar level 0} -rename bar {} +} {type source line 1006 file info.test cmd {info frame 0} proc ::bar level 0} +rename bar {} +# ------------------------------------------------------------------------- # More info-30.x test cases at the end of the file. -test info-30.0 {bs+nl in literal words} {tip280} { +test info-30.0 {bs+nl in literal words} { if {1} { set res \ - [reduce [info frame 0]];# line 952 + [reduce [info frame 0]];# 1019 } set res # This was reporting line 3 instead of the correct 4 because the @@ -958,9 +1025,7 @@ test info-30.0 {bs+nl in literal words} {tip280} { # offsets of all bs+nl sequences in literal words, then using the # information in the bcc and other places to bump line numbers when # parsing over the location. Also affected: testcases 22.8 and 23.6. -} {type source line 952 file info.test cmd {info frame 0} proc ::tcltest::RunTest} - - +} {type source line 1019 file info.test cmd {info frame 0} proc ::tcltest::RunTest} # ------------------------------------------------------------------------- # See 24.0 - 24.5 for similar situations, using literal scripts. @@ -969,26 +1034,23 @@ set body {set flag 0 set a c set res [info frame 0]} ;# line 3! -test info-31.0 {ns eval, script in variable} tip280 {set res {} +test info-31.0 {ns eval, script in variable} {set res {} namespace eval foo $body set res } {type eval line 3 cmd {info frame 0} level 0} catch {namespace delete foo} - -test info-31.1 {if, script in variable} tip280 { +test info-31.1 {if, script in variable} { if 1 $body set res } {type eval line 3 cmd {info frame 0} proc ::tcltest::RunTest} -test info-31.1a {if, script in variable} tip280 { +test info-31.1a {if, script in variable} { if 1 then $body set res } {type eval line 3 cmd {info frame 0} proc ::tcltest::RunTest} - - -test info-31.2 {while, script in variable} tip280 { +test info-31.2 {while, script in variable} { set flag 1 while {$flag} $body set res @@ -996,106 +1058,250 @@ test info-31.2 {while, script in variable} tip280 { # .3 - proc - scoping prevent return of result ... -test info-31.4 {foreach, script in variable} tip280 { +test info-31.4 {foreach, script in variable} { foreach var val $body set res } {type eval line 3 cmd {info frame 0} proc ::tcltest::RunTest} -test info-31.5 {for, script in variable} tip280 { +test info-31.5 {for, script in variable} { set flag 1 for {} {$flag} {} $body set res } {type eval line 3 cmd {info frame 0} proc ::tcltest::RunTest} -test info-31.6 {eval, script in variable} tip280 { +test info-31.6 {eval, script in variable} { eval $body set res } {type eval line 3 cmd {info frame 0} proc ::tcltest::RunTest} # ------------------------------------------------------------------------- -namespace eval foo {} -set x foo -switch -exact -- $x { +set body { foo { proc ::foo::bar {} {info frame 0} } } -test info-24.6.0 {info frame, interaction, switch, list body} tip280 { +namespace eval foo {} +set x foo +switch -exact -- $x $body + +test info-31.7 {info frame, interaction, switch, dynamic} -body { reduce [foo::bar] -} {type source line 1021 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -cleanup { + namespace delete foo + unset x +} -result {type proc line 1 cmd {info frame 0} proc ::foo::bar level 0} -namespace delete foo -unset x +# ------------------------------------------------------------------------- + +set body { + proc ::foo::bar {} {info frame 0} +} + +namespace eval foo {} +eval $body + +test info-32.0 {info frame, dynamic procedure} -body { + reduce [foo::bar] +} -cleanup { + namespace delete foo +} -result {type proc line 1 cmd {info frame 0} proc ::foo::bar level 0} + +# ------------------------------------------------------------------------- + +namespace {*}{ + eval + foo + {proc bar {} {info frame 0}} +} +test info-33.0 {{*}, literal, direct} -body { + reduce [foo::bar] +} -cleanup { + namespace delete foo +} -result {type source line 1116 file info.test cmd {info frame 0} proc ::foo::bar level 0} # ------------------------------------------------------------------------- namespace eval foo {} -set x foo -switch -exact -- $x foo { - proc ::foo::bar {} {info frame 0} +proc foo::bar {} { + set flag 1 + if {*}{ + {$flag} + {info frame 0} + } } +test info-33.1 {{*}, literal, simple, bytecompiled} -body { + reduce [foo::bar] +} -cleanup { + namespace delete foo +} -result {type source line 1131 file info.test cmd {info frame 0} proc ::foo::bar level 0} + +# ------------------------------------------------------------------------- -test info-24.6.1 {info frame, interaction, switch, multi-body} tip280 { +namespace {*}" + eval + foo + {proc bar {} {info frame 0}} +" +test info-33.2 {{*}, literal, direct} { reduce [foo::bar] -} {type source line 1037 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} {type source line 1145 file info.test cmd {info frame 0} proc ::foo::bar level 0} namespace delete foo -unset x # ------------------------------------------------------------------------- -namespace eval foo {} -set x foo -switch -exact -- $x [list foo { - proc ::foo::bar {} {info frame 0} -}] +namespace {*}"eval\nfoo\n{proc bar {} {info frame 0}}\n" -test info-24.6.2 {info frame, interaction, switch, list body, dynamic} tip280 { +test info-33.2a {{*}, literal, not simple, direct} { reduce [foo::bar] } {type proc line 1 cmd {info frame 0} proc ::foo::bar level 0} namespace delete foo -unset x # ------------------------------------------------------------------------- -set body { - foo { - proc ::foo::bar {} {info frame 0} - } +namespace eval foo {} +proc foo::bar {} { + set flag 1 + if {*}" + {1} + {info frame 0} + " } +test info-33.3 {{*}, literal, simple, bytecompiled} { + reduce [foo::bar] +} {type source line 1170 file info.test cmd {info frame 0} proc ::foo::bar level 0} + +namespace delete foo + +# ------------------------------------------------------------------------- namespace eval foo {} -set x foo -switch -exact -- $x $body +proc foo::bar {} { + set flag 1 + if {*}"\n{1}\n{info frame 0}" +} +test info-33.3a {{*}, literal, not simple, bytecompiled} { + reduce [foo::bar] +} {type eval line 1 cmd {info frame 0} proc ::foo::bar level 0} + +namespace delete foo -test info-31.7 {info frame, interaction, switch, dynamic} tip280 { +# ------------------------------------------------------------------------- + +set body { + eval + foo + {proc bar {} { + info frame 0 + }} +} +namespace {*}$body +test info-34.0 {{*}, dynamic, direct} { reduce [foo::bar] -} {type proc line 1 cmd {info frame 0} proc ::foo::bar level 0} +} {type proc line 2 cmd {info frame 0} proc ::foo::bar level 0} +unset body namespace delete foo -unset x # ------------------------------------------------------------------------- +namespace eval foo {} set body { - proc ::foo::bar {} {info frame 0} + {$flag} + {info frame 0} +} +proc foo::bar {} { + global body ; set flag 1 + if {*}$body } +test info-34.1 {{*}, literal, bytecompiled} { + reduce [foo::bar] +} {type eval line 1 cmd {info frame 0} proc ::foo::bar level 0} + +unset body +namespace delete foo + +# ------------------------------------------------------------------------- + +proc foo {} { + apply { + {x y} + {info frame 0} + } 0 0 +} +test info-35.0 {apply, literal} { + reduce [foo] +} {type source line 1232 file info.test cmd {info frame 0} lambda { + {x y} + {info frame 0} + } level 0} +rename foo {} + +set lambda { + {x y} + {info frame 0} +} +test info-35.1 {apply, dynamic} { + reduce [apply $lambda 0 0] +} {type proc line 1 cmd {info frame 0} lambda { + {x y} + {info frame 0} +} level 0} +unset lambda + +# ------------------------------------------------------------------------- namespace eval foo {} -eval $body +proc foo::bar {} { + dict for {k v} {foo bar} { + set x [info frame 0] + } + set x +} +test info-36.0 {info frame, dict for, bcc} { + reduce [foo::bar] +} {type source line 1260 file info.test cmd {info frame 0} proc ::foo::bar level 0} -test info-32.0 {info frame, dynamic procedure} tip280 { +namespace delete foo + +# ------------------------------------------------------------------------- + +namespace eval foo {} +proc foo::bar {} { + set x foo + switch -exact -- $x { + foo {set y [info frame 0]} + } + set y +} + +test info-36.1.0 {switch, list literal, bcc} { reduce [foo::bar] -} {type proc line 1 cmd {info frame 0} proc ::foo::bar level 0} +} {type source line 1276 file info.test cmd {info frame 0} proc ::foo::bar level 0} + +namespace delete foo + +# ------------------------------------------------------------------------- + +namespace eval foo {} +proc foo::bar {} { + set x foo + switch -exact -- $x foo {set y [info frame 0]} + set y +} + +test info-36.1.1 {switch, multi-body literals, bcc} { + reduce [foo::bar] +} {type source line 1292 file info.test cmd {info frame 0} proc ::foo::bar level 0} namespace delete foo # ------------------------------------------------------------------------- -test info-34.0 {eval pure list, single line} -constraints {tip280} -match glob -body { +test info-37.0 {eval pure list, single line} -constraints {!singleTestInterp} -match glob -body { # Basically, counting the newline in the word seen through $foo # doesn't really make sense. It makes a bit of sense if the word # would have been a string literal in the command list. @@ -1113,7 +1319,7 @@ test info-34.0 {eval pure list, single line} -constraints {tip280} -match glob - }] eval $cmd set res -} -result {* {type source line 723 file info.test cmd {info frame $level} proc ::etrace level 0} +} -result {* {type source line 728 file info.test cmd {info frame $level} proc ::etrace level 0} * {type eval line 2 cmd etrace proc ::tcltest::RunTest} * {type eval line 1 cmd foreac proc ::tcltest::RunTest}} @@ -1148,66 +1354,66 @@ proc datav {} { control y $script } -test info-38.1 {location information for uplevel, dv, direct-var} -constraints tip280 -match glob -body { +test info-38.1 {location information for uplevel, dv, direct-var} -match glob -body { set script { set y DV. etrace } join [lrange [uplevel \#0 $script] 0 2] \n -} -result {* {type source line 723 file info.test cmd {info frame $level} proc ::etrace level 0} +} -result {* {type source line 728 file info.test cmd {info frame $level} proc ::etrace level 0} * {type eval line 3 cmd etrace proc ::tcltest::RunTest} -* {type source line 1156 file info.test cmd {uplevel \\#0 $script} proc ::tcltest::RunTest}} +* {type source line 1362 file info.test cmd {uplevel \\#0 $script} proc ::tcltest::RunTest}} + +# 38.2 moved to bottom to not disturb other tests with the necessary changes to this one. -test info-38.2 {location information for uplevel, dl, direct-literal} -constraints tip280 -match glob -body { - join [lrange [uplevel \#0 { - set y DL. - etrace - }] 0 2] \n -} -result {* {type source line 723 file info.test cmd {info frame $level} proc ::etrace level 0} -* {type source line 1164 file info.test cmd etrace proc ::tcltest::RunTest} -* {type source line 1162 file info.test cmd up proc ::tcltest::RunTest}} -test info-38.3 {location information for uplevel, dpv, direct-proc-var} -constraints tip280 -match glob -body { + + + + + + +test info-38.3 {location information for uplevel, dpv, direct-proc-var} -match glob -body { set script { set y DPV etrace } join [lrange [control y $script] 0 3] \n -} -result {* {type source line 723 file info.test cmd {info frame $level} proc ::etrace level 0} +} -result {* {type source line 728 file info.test cmd {info frame $level} proc ::etrace level 0} * {type eval line 3 cmd etrace proc ::control} -* {type source line 1133 file info.test cmd {uplevel 1 $script} proc ::control} -* {type source line 1175 file info.test cmd {control y $script} proc ::tcltest::RunTest}} +* {type source line 1339 file info.test cmd {uplevel 1 $script} proc ::control} +* {type source line 1381 file info.test cmd {control y $script} proc ::tcltest::RunTest}} + +# 38.4 moved to bottom to not disturb other tests with the necessary changes to this one. + + -test info-38.4 {location information for uplevel, dpv, direct-proc-literal} -constraints tip280 -match glob -body { - join [lrange [control y { - set y DPL - etrace - }] 0 3] \n -} -result {* {type source line 723 file info.test cmd {info frame $level} proc ::etrace level 0} -* {type source line 1184 file info.test cmd etrace proc ::control} -* {type source line 1133 file info.test cmd {uplevel 1 $script} proc ::control} -* {type source line 1182 file info.test cmd control proc ::tcltest::RunTest}} -test info-38.5 {location information for uplevel, ppv, proc-proc-var} -constraints tip280 -match glob -body { + + + + + +test info-38.5 {location information for uplevel, ppv, proc-proc-var} -match glob -body { join [lrange [datav] 0 4] \n -} -result {* {type source line 723 file info.test cmd {info frame $level} proc ::etrace level 0} +} -result {* {type source line 728 file info.test cmd {info frame $level} proc ::etrace level 0} * {type eval line 3 cmd etrace proc ::control} -* {type source line 1133 file info.test cmd {uplevel 1 $script} proc ::control} -* {type source line 1148 file info.test cmd {control y $script} proc ::datav level 1} -* {type source line 1192 file info.test cmd datav proc ::tcltest::RunTest}} - -test info-38.6 {location information for uplevel, ppl, proc-proc-literal} -constraints tip280 -match glob -body { - join [lrange [datal] 0 4] \n -} -result {* {type source line 723 file info.test cmd {info frame $level} proc ::etrace level 0} -* {type source line 1139 file info.test cmd etrace proc ::control} -* {type source line 1133 file info.test cmd {uplevel 1 $script} proc ::control} -* {type source line 1137 file info.test cmd control proc ::datal level 1} -* {type source line 1200 file info.test cmd datal proc ::tcltest::RunTest}} +* {type source line 1339 file info.test cmd {uplevel 1 $script} proc ::control} +* {type source line 1354 file info.test cmd {control y $script} proc ::datav level 1} +* {type source line 1398 file info.test cmd datav proc ::tcltest::RunTest}} + +# 38.6 moved to bottom to not disturb other tests with the necessary changes to this one. + + + + + + # ------------------------------------------------------------------------- # literal sharing -test info-39.0 {location information not confused by literal sharing} -constraints tip280 -body { +test info-39.0 {location information not confused by literal sharing} -body { namespace eval ::foo {} proc ::foo::bar {} { lappend res {} @@ -1219,146 +1425,146 @@ test info-39.0 {location information not confused by literal sharing} -constrain namespace delete ::foo join $res \n } -result { -type source line 1214 file info.test cmd {info frame 0} proc ::foo::bar level 0 -type source line 1215 file info.test cmd {info frame 0} proc ::foo::bar level 0} +type source line 1420 file info.test cmd {info frame 0} proc ::foo::bar level 0 +type source line 1421 file info.test cmd {info frame 0} proc ::foo::bar level 0} # ------------------------------------------------------------------------- # Additional tests for info-30.*, handling of continuation lines (bs+nl sequences). -test info-30.1 {bs+nl in literal words, procedure body, compiled} {tip280} { +test info-30.1 {bs+nl in literal words, procedure body, compiled} { proc abra {} { if {1} \ { return \ - [reduce [info frame 0]];# line 1233 + [reduce [info frame 0]];# line 1439 } } set res [abra] rename abra {} set res -} {type source line 1233 file info.test cmd {info frame 0} proc ::abra level 0} +} {type source line 1439 file info.test cmd {info frame 0} proc ::abra level 0} -test info-30.2 {bs+nl in literal words, namespace script} {tip280} { +test info-30.2 {bs+nl in literal words, namespace script} { namespace eval xxx { set res \ - [reduce [info frame 0]];# line 1244 + [reduce [info frame 0]];# line 1450 } set res -} {type source line 1244 file info.test cmd {info frame 0} level 0} +} {type source line 1450 file info.test cmd {info frame 0} level 0} -test info-30.3 {bs+nl in literal words, namespace multi-word script} {tip280} { +test info-30.3 {bs+nl in literal words, namespace multi-word script} { namespace eval xxx set res \ - [list [reduce [info frame 0]]];# line 1251 + [list [reduce [info frame 0]]];# line 1457 set res -} {type source line 1251 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} {type source line 1457 file info.test cmd {info frame 0} proc ::tcltest::RunTest} -test info-30.4 {bs+nl in literal words, eval script} {tip280} { +test info-30.4 {bs+nl in literal words, eval script} { eval { set ::res \ - [reduce [info frame 0]];# line 1258 + [reduce [info frame 0]];# line 1464 } set res -} {type source line 1258 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} {type source line 1464 file info.test cmd {info frame 0} proc ::tcltest::RunTest} -test info-30.5 {bs+nl in literal words, eval script, with nested words} {tip280} { +test info-30.5 {bs+nl in literal words, eval script, with nested words} { eval { if {1} \ { set ::res \ - [reduce [info frame 0]];# line 1268 + [reduce [info frame 0]];# line 1474 } } set res -} {type source line 1268 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} {type source line 1474 file info.test cmd {info frame 0} proc ::tcltest::RunTest} -test info-30.6 {bs+nl in computed word} {tip280} { +test info-30.6 {bs+nl in computed word} { set res "\ -[reduce [info frame 0]]";# line 1276 -} { type source line 1276 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +[reduce [info frame 0]]";# line 1482 +} { type source line 1482 file info.test cmd {info frame 0} proc ::tcltest::RunTest} -test info-30.7 {bs+nl in computed word, in proc} {tip280} { +test info-30.7 {bs+nl in computed word, in proc} { proc abra {} { return "\ -[reduce [info frame 0]]";# line 1282 +[reduce [info frame 0]]";# line 1488 } set res [abra] rename abra {} set res -} { type source line 1282 file info.test cmd {info frame 0} proc ::abra level 0} +} { type source line 1488 file info.test cmd {info frame 0} proc ::abra level 0} -test info-30.8 {bs+nl in computed word, nested eval} {tip280} { +test info-30.8 {bs+nl in computed word, nested eval} { eval { set \ res "\ -[reduce [info frame 0]]";# line 1293 +[reduce [info frame 0]]";# line 1499 } -} { type source line 1293 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} { type source line 1499 file info.test cmd {info frame 0} proc ::tcltest::RunTest} -test info-30.9 {bs+nl in computed word, nested eval} {tip280} { +test info-30.9 {bs+nl in computed word, nested eval} { eval { set \ res "\ [reduce \ - [info frame 0]]";# line 1302 + [info frame 0]]";# line 1508 } -} { type source line 1302 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} { type source line 1508 file info.test cmd {info frame 0} proc ::tcltest::RunTest} -test info-30.10 {bs+nl in computed word, key to array} {tip280} { +test info-30.10 {bs+nl in computed word, key to array} { set tmp([set \ res "\ [reduce \ - [info frame 0]]"]) x ; #1310 + [info frame 0]]"]) x ; #1516 unset tmp set res -} { type source line 1310 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} { type source line 1516 file info.test cmd {info frame 0} proc ::tcltest::RunTest} -test info-30.11 {bs+nl in subst arguments, no true counting} {tip280} { +test info-30.11 {bs+nl in subst arguments, no true counting} { subst {[set \ res "\ [reduce \ [info frame 0]]"]} -} { type eval line 2 cmd {info frame 0} proc ::tcltest::RunTest} +} { type eval line 1 cmd {info frame 0} proc ::tcltest::RunTest} -test info-30.12 {bs+nl in computed word, nested eval} {tip280} { +test info-30.12 {bs+nl in computed word, nested eval} { eval { set \ res "\ [set x {}] \ [reduce \ - [info frame 0]]";# line 1328 + [info frame 0]]";# line 1534 } -} { type source line 1328 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} { type source line 1534 file info.test cmd {info frame 0} proc ::tcltest::RunTest} -test info-30.13 {bs+nl in literal words, uplevel script, with nested words} {tip280} { - uplevel #0 { +test info-30.13 {bs+nl in literal words, uplevel script, with nested words} { + subinterp ; set res [interp eval sub { uplevel #0 { if {1} \ { set ::res \ - [reduce [info frame 0]];# line 1337 + [reduce [info frame 0]];# line 1543 } } - set res -} {type source line 1337 file info.test cmd {info frame 0} proc ::tcltest::RunTest} + set res }] ; interp delete sub ; set res +} {type source line 1543 file info.test cmd {info frame 0} level 0} -test info-30.14 {bs+nl, literal word, uplevel through proc} {tip280} { - proc abra {script} { +test info-30.14 {bs+nl, literal word, uplevel through proc} { + subinterp ; set res [interp eval sub { proc abra {script} { uplevel 1 $script } set res [abra { return "\ -[reduce [info frame 0]]";# line 1349 + [reduce [info frame 0]]";# line 1555 }] rename abra {} - set res -} { type source line 1349 file info.test cmd {info frame 0} proc ::abra} + set res }] ; interp delete sub ; set res +} { type source line 1555 file info.test cmd {info frame 0} proc ::abra} -test info-30.15 {bs+nl in literal words, nested proc body, compiled} {tip280} { +test info-30.15 {bs+nl in literal words, nested proc body, compiled} { proc a {} { proc b {} { if {1} \ { return \ - [reduce [info frame 0]];# line 1361 + [reduce [info frame 0]];# line 1567 } } } @@ -1366,45 +1572,45 @@ test info-30.15 {bs+nl in literal words, nested proc body, compiled} {tip280} { rename a {} rename b {} set res -} {type source line 1361 file info.test cmd {info frame 0} proc ::b level 0} +} {type source line 1567 file info.test cmd {info frame 0} proc ::b level 0} -test info-30.16 {bs+nl in multi-body switch, compiled} {tip280} { +test info-30.16 {bs+nl in multi-body switch, compiled} { proc a {value} { switch -regexp -- $value \ - ^key { info frame 0; # 1374 } \ - \t { info frame 0; # 1375 } \ - {[0-9]*} { info frame 0; # 1376 } + ^key { info frame 0; # 1580 } \ + \t### { info frame 0; # 1581 } \ + {[0-9]*} { info frame 0; # 1582 } } set res {} lappend res [reduce [a {key }]] lappend res [reduce [a {1alpha}]] set res "\n[join $res \n]" } { -type source line 1374 file info.test cmd {info frame 0} proc ::a level 0 -type source line 1376 file info.test cmd {info frame 0} proc ::a level 0} +type source line 1580 file info.test cmd {info frame 0} proc ::a level 0 +type source line 1582 file info.test cmd {info frame 0} proc ::a level 0} -test info-30.17 {bs+nl in multi-body switch, direct} {tip280} { +test info-30.17 {bs+nl in multi-body switch, direct} { switch -regexp -- {key } \ - ^key { reduce [info frame 0] ;# 1388 } \ + ^key { reduce [info frame 0] ;# 1594 } \ \t### { } \ {[0-9]*} { } -} {type source line 1388 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} {type source line 1594 file info.test cmd {info frame 0} proc ::tcltest::RunTest} -test info-30.18 {bs+nl, literal word, uplevel through proc, appended, loss of primary tracking data} {tip280} { +test info-30.18 {bs+nl, literal word, uplevel through proc, appended, loss of primary tracking data} { proc abra {script} { append script "\n# end of script" uplevel 1 $script } set res [abra { return "\ -[reduce [info frame 0]]";# line 1400, still line of 3 appended script +[reduce [info frame 0]]";# line 1606, still line of 3 appended script }] rename abra {} set res } { type eval line 3 cmd {info frame 0} proc ::abra} -# { type source line 1400 file info.test cmd {info frame 0} proc ::abra} +# { type source line 1606 file info.test cmd {info frame 0} proc ::abra} -test info-30.19 {bs+nl in single-body switch, compiled} {tip280} { +test info-30.19 {bs+nl in single-body switch, compiled} { proc a {value} { switch -regexp -- $value { ^key { reduce \ @@ -1420,20 +1626,20 @@ test info-30.19 {bs+nl in single-body switch, compiled} {tip280} { lappend res [a {1alpha}] set res "\n[join $res \n]" } { -type source line 1411 file info.test cmd {info frame 0} proc ::a level 0 -type source line 1415 file info.test cmd {info frame 0} proc ::a level 0} +type source line 1617 file info.test cmd {info frame 0} proc ::a level 0 +type source line 1621 file info.test cmd {info frame 0} proc ::a level 0} -test info-30.20 {bs+nl in single-body switch, direct} {tip280} { +test info-30.20 {bs+nl in single-body switch, direct} { switch -regexp -- {key } { \ ^key { reduce \ [info frame 0] } - \t { } + \t### { } {[0-9]*} { } } -} {type source line 1430 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} {type source line 1636 file info.test cmd {info frame 0} proc ::tcltest::RunTest} -test info-30.21 {bs+nl in if, full compiled} {tip280} { +test info-30.21 {bs+nl in if, full compiled} { proc a {value} { if {$value} \ {info frame 0} \ @@ -1444,24 +1650,173 @@ test info-30.21 {bs+nl in if, full compiled} {tip280} { lappend res [reduce [a 0]] set res "\n[join $res \n]" } { -type source line 1439 file info.test cmd {info frame 0} proc ::a level 0 -type source line 1440 file info.test cmd {info frame 0} proc ::a level 0} +type source line 1645 file info.test cmd {info frame 0} proc ::a level 0 +type source line 1646 file info.test cmd {info frame 0} proc ::a level 0} -test info-30.22 {bs+nl in computed word, key to array, compiled} {tip280} { +test info-30.22 {bs+nl in computed word, key to array, compiled} { proc a {} { set tmp([set \ res "\ [reduce \ - [info frame 0]]"]) x ; #1454 + [info frame 0]]"]) x ; #1661 unset tmp set res } set res [a] rename a {} set res -} { type source line 1455 file info.test cmd {info frame 0} proc ::a level 0} +} { type source line 1661 file info.test cmd {info frame 0} proc ::a level 0} + +test info-30.23 {bs+nl in multi-body switch, full compiled} { + proc a {value} { + switch -exact -- $value \ + key { info frame 0; # 1673 } \ + xxx { info frame 0; # 1674 } \ + 000 { info frame 0; # 1675 } + } + set res {} + lappend res [reduce [a key]] + lappend res [reduce [a 000]] + set res "\n[join $res \n]" +} { +type source line 1673 file info.test cmd {info frame 0} proc ::a level 0 +type source line 1675 file info.test cmd {info frame 0} proc ::a level 0} + +test info-30.24 {bs+nl in single-body switch, full compiled} { + proc a {value} { + switch -exact -- $value { + key { reduce \ + [info frame 0] } + xxx { reduce \ + [info frame 0] } + 000 { reduce \ + [info frame 0] } + } + } + set res {} + lappend res [a key] + lappend res [a 000] + set res "\n[join $res \n]" +} { +type source line 1689 file info.test cmd {info frame 0} proc ::a level 0 +type source line 1693 file info.test cmd {info frame 0} proc ::a level 0} # ------------------------------------------------------------------------- +# literal sharing 2, bug 2933089 + +test info-39.1 {location information not confused by literal sharing, bug 2933089} -setup { + set result {} + + proc print_one {} {} + proc test_info_frame {} { + set x 1 + set y x + + if "$x != 1" { + } else { + print_one + } ;#line 1717^ + + if "$$y != 1" { + } else { + print_one + } ;#line 1722^ + # Do not put the comments listing the line numbers into the + # branches. We need shared literals, and the comments would + # make them different, thus unshared. + } + + proc get_frame_info { cmd_str op } { + lappend ::result [reduce [eval {info frame -3}]] + } + trace add execution print_one enter get_frame_info +} -body { + test_info_frame; + join $result \n +} -cleanup { + trace remove execution print_one enter get_frame_info + rename get_frame_info {} + rename test_info_frame {} + rename print_one {} +} -result {type source line 1717 file info.test cmd print_one proc ::test_info_frame level 1 +type source line 1722 file info.test cmd print_one proc ::test_info_frame level 1} + +# ------------------------------------------------------------------------- +# Tests moved to the end to not disturb other tests and their locations. + +test info-38.6 {location information for uplevel, ppl, proc-proc-literal} -match glob -setup {subinterp} -body { + interp eval sub { + proc etrace {} { + set res {} + set level [info frame] + while {$level} { + lappend res [list $level [reduce [info frame $level]]] + incr level -1 + } + return $res + } + proc control {vv script} { + upvar 1 $vv var + return [uplevel 1 $script] + } + proc datal {} { + control y { + set y PPL + etrace + } + } + join [lrange [datal] 0 4] \n + } +} -result {* {type source line 1753 file info.test cmd {info frame $level} proc ::etrace level 0} +* {type source line 1765 file info.test cmd etrace proc ::control} +* {type source line 1760 file info.test cmd {uplevel 1 $script} proc ::control} +* {type source line 1763 file info.test cmd control proc ::datal level 1} +* {type source line 1768 file info.test cmd datal level 2}} -cleanup {interp delete sub} + +test info-38.4 {location information for uplevel, dpv, direct-proc-literal} -match glob -setup {subinterp} -body { + interp eval sub { + proc etrace {} { + set res {} + set level [info frame] + while {$level} { + lappend res [list $level [reduce [info frame $level]]] + incr level -1 + } + return $res + } + proc control {vv script} { + upvar 1 $vv var + return [uplevel 1 $script] + } + join [lrange [control y { + set y DPL + etrace + }] 0 3] \n + } +} -result {* {type source line 1782 file info.test cmd {info frame $level} proc ::etrace level 0} +* {type source line 1793 file info.test cmd etrace proc ::control} +* {type source line 1789 file info.test cmd {uplevel 1 $script} proc ::control} +* {type source line 1791 file info.test cmd control level 1}} -cleanup {interp delete sub} + +test info-38.2 {location information for uplevel, dl, direct-literal} -match glob -setup {subinterp} -body { + interp eval sub { + proc etrace {} { + set res {} + set level [info frame] + while {$level} { + lappend res [list $level [reduce [info frame $level]]] + incr level -1 + } + return $res + } + join [lrange [uplevel \#0 { + set y DL. + etrace + }] 0 2] \n + } +} -result {* {type source line 1807 file info.test cmd {info frame $level} proc ::etrace level 0} +* {type source line 1814 file info.test cmd etrace level 1} +* {type source line 1812 file info.test cmd uplevel\\ \\\\ level 1}} -cleanup {interp delete sub} # cleanup catch {namespace delete test_ns_info1 test_ns_info2} diff --git a/tests/init.test b/tests/init.test index 79142c4..07270e1 100644 --- a/tests/init.test +++ b/tests/init.test @@ -11,12 +11,12 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2.3.4 namespace import -force ::tcltest::* } # Clear out any namespaces called test_ns_* -catch {eval namespace delete [namespace children :: test_ns_*]} +catch {namespace delete {*}[namespace children :: test_ns_*]} # Six cases - white box testing @@ -53,21 +53,18 @@ test init-1.7 {auto_qualify - multiples colons 1} { test init-1.8 {auto_qualify - multiple colons 2} { auto_qualify :::foo ::bar } foo - + # we use a sub interp and auto_reset and double the tests because there is 2 # places where auto_loading occur (before loading the indexes files and after) set testInterp [interp create] -interp eval $testInterp [list set argv $argv] -interp eval $testInterp [list package require tcltest] -interp eval $testInterp [list namespace import -force ::tcltest::*] - +tcltest::loadIntoSlaveInterpreter $testInterp {*}$argv interp eval $testInterp { - -auto_reset -catch {rename parray {}} - + namespace import -force ::tcltest::* + auto_reset + catch {rename parray {}} + test init-2.0 {load parray - stage 1} { set ret [catch {parray} error] rename parray {} ; # remove it, for the next test - that should not fail. @@ -148,12 +145,12 @@ test init-3.0 {random stuff in the auto_index, should still work} { set count 0 foreach arg [subst -nocommands -novariables { - c - {argument + c + {argument which spans multiple lines} - {argument which is all on one line but which is of such great length that the Tcl C library will truncate it when appending it onto the global error stack} - {argument which spans multiple lines + {argument which is all on one line but which is of such great length that the Tcl C library will truncate it when appending it onto the global error stack} + {argument which spans multiple lines and is long enough to be truncated and " <- includes a false lead in the prune point search and must be longer still to force truncation} @@ -162,13 +159,13 @@ foreach arg [subst -nocommands -novariables { error stack cannot be uniquely determined. foo bar foo "} - {contrived example: rare circumstance + {contrived example: rare circumstance where the point at which to prune the error stack cannot be uniquely determined. foo bar "} - {argument that contains non-ASCII character, \u20ac, and which is of such great length that it will be longer than 150 bytes so it will be truncated by the Tcl C library} - }] { + {argument that contains non-ASCII character, \u20ac, and which is of such great length that it will be longer than 150 bytes so it will be truncated by the Tcl C library} + }] { ;# emacs needs -> " test init-4.$count.0 {::errorInfo produced by [unknown]} { auto_reset @@ -194,6 +191,19 @@ foreach arg [subst -nocommands -novariables { incr count } +test init-5.0 {return options passed through ::unknown} -setup { + catch {rename xxx {}} + set ::auto_index(::xxx) {proc ::xxx {} { + return -code error -level 2 xxx + }} +} -body { + set code [catch {::xxx} foo bar] + set code2 [catch {::xxx} foo2 bar2] + list $code $foo $bar $code2 $foo2 $bar2 +} -cleanup { + unset ::auto_index(::xxx) +} -result {2 xxx {-errorcode NONE -code 1 -level 1} 2 xxx {-code 1 -level 1 -errorcode NONE}} + cleanupTests } ;# End of [interp eval $testInterp] diff --git a/tests/interp.test b/tests/interp.test index 8580446..510ab4a 100644 --- a/tests/interp.test +++ b/tests/interp.test @@ -15,21 +15,21 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -set hidden_cmds {cd encoding exec exit fconfigure file glob load open pwd socket source} +testConstraint testinterpdelete [llength [info commands testinterpdelete]] + +set hidden_cmds {cd encoding exec exit fconfigure file glob load open pwd socket source unload} foreach i [interp slaves] { interp delete $i } -proc equiv {x} {return $x} - # Part 0: Check out options for interp command test interp-1.1 {options for interp command} { list [catch {interp} msg] $msg } {1 {wrong # args: should be "interp cmd ?arg ...?"}} test interp-1.2 {options for interp command} { list [catch {interp frobox} msg] $msg -} {1 {bad option "frobox": must be alias, aliases, create, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, marktrusted, recursionlimit, slaves, share, target, or transfer}} +} {1 {bad option "frobox": must be alias, aliases, bgerror, create, debug, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, limit, marktrusted, recursionlimit, slaves, share, target, or transfer}} test interp-1.3 {options for interp command} { interp delete } "" @@ -47,13 +47,13 @@ test interp-1.6 {options for interp command} { } {1 {wrong # args: should be "interp slaves ?path?"}} test interp-1.7 {options for interp command} { list [catch {interp hello} msg] $msg -} {1 {bad option "hello": must be alias, aliases, create, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, marktrusted, recursionlimit, slaves, share, target, or transfer}} +} {1 {bad option "hello": must be alias, aliases, bgerror, create, debug, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, limit, marktrusted, recursionlimit, slaves, share, target, or transfer}} test interp-1.8 {options for interp command} { list [catch {interp -froboz} msg] $msg -} {1 {bad option "-froboz": must be alias, aliases, create, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, marktrusted, recursionlimit, slaves, share, target, or transfer}} +} {1 {bad option "-froboz": must be alias, aliases, bgerror, create, debug, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, limit, marktrusted, recursionlimit, slaves, share, target, or transfer}} test interp-1.9 {options for interp command} { list [catch {interp -froboz -safe} msg] $msg -} {1 {bad option "-froboz": must be alias, aliases, create, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, marktrusted, recursionlimit, slaves, share, target, or transfer}} +} {1 {bad option "-froboz": must be alias, aliases, bgerror, create, debug, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, limit, marktrusted, recursionlimit, slaves, share, target, or transfer}} test interp-1.10 {options for interp command} { list [catch {interp target} msg] $msg } {1 {wrong # args: should be "interp target path alias"}} @@ -375,7 +375,7 @@ test interp-10.7 {testing aliases between interpreters} { set x [foo 33] a eval {rename zoppo {}} interp alias "" foo a {} - equiv $x + return $x } {33 33 33} # Part 10: Testing "interp target" @@ -431,74 +431,170 @@ test interp-11.7 {testing interp target} { test interp-12.1 {testing interp issafe} { interp issafe } 0 -test interp-12.2 {testing interp issafe} { +test interp-12.2 {testing interp issafe} -setup { catch {interp delete a} +} -body { interp create a interp issafe a -} 0 -test interp-12.3 {testing interp issafe} { +} -result 0 +test interp-12.3 {testing interp issafe} -setup { catch {interp delete a} +} -body { interp create a interp create {a x3} -safe interp issafe {a x3} -} 1 -test interp-12.4 {testing interp issafe} { +} -result 1 +test interp-12.4 {testing interp issafe} -setup { catch {interp delete a} +} -body { interp create a interp create {a x3} -safe interp create {a x3 foo} interp issafe {a x3 foo} -} 1 +} -result 1 # Part 12: testing interpreter object command "issafe" sub-command -test interp-13.1 {testing foo issafe} { +test interp-13.1 {testing foo issafe} -setup { catch {interp delete a} +} -body { interp create a a issafe -} 0 -test interp-13.2 {testing foo issafe} { +} -result 0 +test interp-13.2 {testing foo issafe} -setup { catch {interp delete a} +} -body { interp create a interp create {a x3} -safe a eval x3 issafe -} 1 -test interp-13.3 {testing foo issafe} { +} -result 1 +test interp-13.3 {testing foo issafe} -setup { catch {interp delete a} +} -body { interp create a interp create {a x3} -safe interp create {a x3 foo} a eval x3 eval foo issafe -} 1 -test interp-13.4 {testing issafe arg checking} { +} -result 1 +test interp-13.4 {testing issafe arg checking} -body { catch {interp create a} - list [catch {a issafe too many args} msg] $msg -} {1 {wrong # args: should be "a issafe"}} + a issafe too many args +} -returnCodes error -result {wrong # args: should be "a issafe"} # part 14: testing interp aliases test interp-14.1 {testing interp aliases} { interp aliases } "" -test interp-14.2 {testing interp aliases} { +test interp-14.2 {testing interp aliases} -setup { catch {interp delete a} +} -body { interp create a a alias a1 puts a alias a2 puts a alias a3 puts lsort [interp aliases a] -} {a1 a2 a3} -test interp-14.3 {testing interp aliases} { +} -result {a1 a2 a3} +test interp-14.3 {testing interp aliases} -setup { catch {interp delete a} +} -body { interp create a interp create {a x3} interp alias {a x3} froboz "" puts interp aliases {a x3} -} froboz -test interp-14.4 {testing interp alias - alias over master} { - # SF Bug 641195 +} -result froboz +test interp-14.4 {testing interp alias - alias over master} -setup { catch {interp delete a} +} -body { + # SF Bug 641195 interp create a list [catch {interp alias "" a a eval} msg] $msg [info commands a] -} {1 {cannot define or rename alias "a": interpreter deleted} {}} +} -result {1 {cannot define or rename alias "a": interpreter deleted} {}} +test interp-14.5 {testing interp-alias: wrong # args} -body { + proc setx x {set x} + interp alias {} a {} setx + catch {a 1 2} + set ::errorInfo +} -cleanup { + rename setx {} + rename a {} +} -result {wrong # args: should be "a x" + while executing +"a 1 2"} +test interp-14.6 {testing interp-alias: wrong # args} -setup { + proc setx x {set x} + catch {interp delete a} + interp create a +} -body { + interp alias a a {} setx + catch {a eval a 1 2} + set ::errorInfo +} -cleanup { + rename setx {} + interp delete a +} -result {wrong # args: should be "a x" + invoked from within +"a 1 2" + invoked from within +"a eval a 1 2"} +test interp-14.7 {testing interp-alias: wrong # args} -setup { + proc setx x {set x} + catch {interp delete a} + interp create a +} -body { + interp alias a a {} setx + a eval { + catch {a 1 2} + set ::errorInfo + } +} -cleanup { + rename setx {} + interp delete a +} -result {wrong # args: should be "a x" + invoked from within +"a 1 2"} +test interp-14.8 {testing interp-alias: error messages} -body { + proc setx x {return -code error x} + interp alias {} a {} setx + catch {a 1} + set ::errorInfo +} -cleanup { + rename setx {} + rename a {} +} -result {x + while executing +"a 1"} +test interp-14.9 {testing interp-alias: error messages} -setup { + proc setx x {return -code error x} + catch {interp delete a} + interp create a +} -body { + interp alias a a {} setx + catch {a eval a 1} + set ::errorInfo +} -cleanup { + rename setx {} + interp delete a +} -result {x + invoked from within +"a 1" + invoked from within +"a eval a 1"} +test interp-14.10 {testing interp-alias: error messages} -setup { + proc setx x {return -code error x} + catch {interp delete a} + interp create a +} -body { + interp alias a a {} setx + a eval { + catch {a 1} + set ::errorInfo + } +} -cleanup { + rename setx {} + interp delete a +} -result {x + invoked from within +"a 1"} + # part 15: testing file sharing test interp-15.1 {testing file sharing} { @@ -658,14 +754,21 @@ test interp-17.4 {alias loop prevention} { interp create x interp alias x b x a list [catch {x eval rename b a} msg] $msg -} {1 {cannot define or rename alias "b": would create a loop}} +} {1 {cannot define or rename alias "a": would create a loop}} test interp-17.5 {alias loop prevention} { catch {interp delete x} interp create x x alias z l1 interp alias {} l2 x z list [catch {rename l2 l1} msg] $msg -} {1 {cannot define or rename alias "l2": would create a loop}} +} {1 {cannot define or rename alias "l1": would create a loop}} +test interp-17.6 {alias loop prevention} { + catch {interp delete x} + interp create x + interp alias x a x b + x eval rename a c + list [catch {x eval rename c b} msg] $msg +} {1 {cannot define or rename alias "b": would create a loop}} # # Test robustness of Tcl_DeleteInterp when applied to a slave interpreter. @@ -673,86 +776,81 @@ test interp-17.5 {alias loop prevention} { # the bugs as a core dump. # -if {[info commands testinterpdelete] == ""} { - puts "This application hasn't been compiled with the \"testinterpdelete\"" - puts "command, so I can't test slave delete calls" -} else { - test interp-18.1 {testing Tcl_DeleteInterp vs slaves} { - list [catch {testinterpdelete} msg] $msg - } {1 {wrong # args: should be "testinterpdelete path"}} - test interp-18.2 {testing Tcl_DeleteInterp vs slaves} { - catch {interp delete a} - interp create a - testinterpdelete a - } "" - test interp-18.3 {testing Tcl_DeleteInterp vs slaves} { - catch {interp delete a} - interp create a - interp create {a b} - testinterpdelete {a b} - } "" - test interp-18.4 {testing Tcl_DeleteInterp vs slaves} { - catch {interp delete a} - interp create a - interp create {a b} - testinterpdelete a - } "" - test interp-18.5 {testing Tcl_DeleteInterp vs slaves} { - catch {interp delete a} - interp create a - interp create {a b} - interp alias {a b} dodel {} dodel - proc dodel {x} {testinterpdelete $x} - list [catch {interp eval {a b} {dodel {a b}}} msg] $msg - } {0 {}} - test interp-18.6 {testing Tcl_DeleteInterp vs slaves} { - catch {interp delete a} - interp create a - interp create {a b} - interp alias {a b} dodel {} dodel - proc dodel {x} {testinterpdelete $x} - list [catch {interp eval {a b} {dodel a}} msg] $msg - } {0 {}} - test interp-18.7 {eval in deleted interp} { - catch {interp delete a} - interp create a - a eval { +test interp-18.1 {testing Tcl_DeleteInterp vs slaves} testinterpdelete { + list [catch {testinterpdelete} msg] $msg +} {1 {wrong # args: should be "testinterpdelete path"}} +test interp-18.2 {testing Tcl_DeleteInterp vs slaves} testinterpdelete { + catch {interp delete a} + interp create a + testinterpdelete a +} "" +test interp-18.3 {testing Tcl_DeleteInterp vs slaves} testinterpdelete { + catch {interp delete a} + interp create a + interp create {a b} + testinterpdelete {a b} +} "" +test interp-18.4 {testing Tcl_DeleteInterp vs slaves} testinterpdelete { + catch {interp delete a} + interp create a + interp create {a b} + testinterpdelete a +} "" +test interp-18.5 {testing Tcl_DeleteInterp vs slaves} testinterpdelete { + catch {interp delete a} + interp create a + interp create {a b} + interp alias {a b} dodel {} dodel + proc dodel {x} {testinterpdelete $x} + list [catch {interp eval {a b} {dodel {a b}}} msg] $msg +} {0 {}} +test interp-18.6 {testing Tcl_DeleteInterp vs slaves} testinterpdelete { + catch {interp delete a} + interp create a + interp create {a b} + interp alias {a b} dodel {} dodel + proc dodel {x} {testinterpdelete $x} + list [catch {interp eval {a b} {dodel a}} msg] $msg +} {0 {}} +test interp-18.7 {eval in deleted interp} { + catch {interp delete a} + interp create a + a eval { + proc dodel {} { + delme + dosomething else + } + proc dosomething args { + puts "I should not have been called!!" + } + } + a alias delme dela + proc dela {} {interp delete a} + list [catch {a eval dodel} msg] $msg +} {1 {attempt to call eval in deleted interpreter}} +test interp-18.8 {eval in deleted interp} { + catch {interp delete a} + interp create a + a eval { + interp create b + b eval { proc dodel {} { - delme - dosomething else - } - proc dosomething args { - puts "I should not have been called!!" + dela } } - a alias delme dela - proc dela {} {interp delete a} - list [catch {a eval dodel} msg] $msg - } {1 {attempt to call eval in deleted interpreter}} - test interp-18.8 {eval in deleted interp} { - catch {interp delete a} - interp create a - a eval { - interp create b - b eval { - proc dodel {} { - dela - } - } - proc foo {} { - b eval dela - dosomething else - } - proc dosomething args { - puts "I should not have been called!!" - } + proc foo {} { + b eval dela + dosomething else } - interp alias {a b} dela {} dela - proc dela {} {interp delete a} - list [catch {a eval foo} msg] $msg - } {1 {attempt to call eval in deleted interpreter}} -} -test interp-18.9 {eval in deleted interp, bug 495830} {knownBug} { + proc dosomething args { + puts "I should not have been called!!" + } + } + interp alias {a b} dela {} dela + proc dela {} {interp delete a} + list [catch {a eval foo} msg] $msg +} {1 {attempt to call eval in deleted interpreter}} +test interp-18.9 {eval in deleted interp, bug 495830} { interp create tst interp alias tst suicide {} interp delete tst list [catch {tst eval {suicide; set a 5}} msg] $msg @@ -789,7 +887,7 @@ test interp-19.3 {alias deletion} { catch {interp eval a foo} msg interp delete a set msg -} {invalid command name "zop"} +} {invalid command name "bar"} test interp-19.4 {alias deletion} { catch {interp delete a} interp create a @@ -818,7 +916,7 @@ test interp-19.6 {alias deletion} { set s [interp aliases a] interp delete a set s -} foo +} {::foo foo} test interp-19.7 {alias deletion, renaming} { catch {interp delete a} interp create a @@ -854,196 +952,153 @@ test interp-19.9 {alias deletion, renaming} { } 1156 test interp-20.1 {interp hide, interp expose and interp invokehidden} { - catch {interp delete a} - interp create a - a eval {proc unknown {x args} {error "invalid command name \"$x\""}} - a eval {proc foo {} {}} - a hide foo - catch {a eval foo something} msg - interp delete a + set a [interp create] + $a eval {proc unknown {x args} {error "invalid command name \"$x\""}} + $a eval {proc foo {} {}} + $a hide foo + catch {$a eval foo something} msg + interp delete $a set msg } {invalid command name "foo"} test interp-20.2 {interp hide, interp expose and interp invokehidden} { - catch {interp delete a} - interp create a - a eval {proc unknown {x args} {error "invalid command name \"$x\""}} - a hide list + set a [interp create] + $a eval {proc unknown {x args} {error "invalid command name \"$x\""}} + $a hide list set l "" - lappend l [catch {a eval {list 1 2 3}} msg] - lappend l $msg - a expose list - lappend l [catch {a eval {list 1 2 3}} msg] - lappend l $msg - interp delete a + lappend l [catch {$a eval {list 1 2 3}} msg] $msg + $a expose list + lappend l [catch {$a eval {list 1 2 3}} msg] $msg + interp delete $a set l } {1 {invalid command name "list"} 0 {1 2 3}} test interp-20.3 {interp hide, interp expose and interp invokehidden} { - catch {interp delete a} - interp create a - a eval {proc unknown {x args} {error "invalid command name \"$x\""}} - a hide list + set a [interp create] + $a eval {proc unknown {x args} {error "invalid command name \"$x\""}} + $a hide list set l "" - lappend l [catch {a eval {list 1 2 3}} msg] - lappend l $msg - lappend l [catch {a invokehidden list 1 2 3} msg] - lappend l $msg - a expose list - lappend l [catch {a eval {list 1 2 3}} msg] - lappend l $msg - interp delete a + lappend l [catch { $a eval {list 1 2 3} } msg] $msg + lappend l [catch { $a invokehidden list 1 2 3 } msg] $msg + $a expose list + lappend l [catch { $a eval {list 1 2 3} } msg] $msg + interp delete $a set l } {1 {invalid command name "list"} 0 {1 2 3} 0 {1 2 3}} test interp-20.4 {interp hide, interp expose and interp invokehidden -- passing {}} { - catch {interp delete a} - interp create a - a eval {proc unknown {x args} {error "invalid command name \"$x\""}} - a hide list + set a [interp create] + $a eval {proc unknown {x args} {error "invalid command name \"$x\""}} + $a hide list set l "" - lappend l [catch {a eval {list 1 2 3}} msg] - lappend l $msg - lappend l [catch {a invokehidden list {"" 1 2 3}} msg] - lappend l $msg - a expose list - lappend l [catch {a eval {list 1 2 3}} msg] - lappend l $msg - interp delete a + lappend l [catch { $a eval {list 1 2 3} } msg] $msg + lappend l [catch { $a invokehidden list {"" 1 2 3} } msg] $msg + $a expose list + lappend l [catch { $a eval {list 1 2 3} } msg] $msg + interp delete $a set l } {1 {invalid command name "list"} 0 {{"" 1 2 3}} 0 {1 2 3}} test interp-20.5 {interp hide, interp expose and interp invokehidden -- passing {}} { - catch {interp delete a} - interp create a - a eval {proc unknown {x args} {error "invalid command name \"$x\""}} - a hide list + set a [interp create] + $a eval {proc unknown {x args} {error "invalid command name \"$x\""}} + $a hide list set l "" - lappend l [catch {a eval {list 1 2 3}} msg] - lappend l $msg - lappend l [catch {a invokehidden list {{} 1 2 3}} msg] - lappend l $msg - a expose list - lappend l [catch {a eval {list 1 2 3}} msg] - lappend l $msg - interp delete a + lappend l [catch { $a eval {list 1 2 3} } msg] $msg + lappend l [catch { $a invokehidden list {{} 1 2 3} } msg] $msg + $a expose list + lappend l [catch { $a eval {list 1 2 3} } msg] $msg + interp delete $a set l } {1 {invalid command name "list"} 0 {{{} 1 2 3}} 0 {1 2 3}} test interp-20.6 {interp invokehidden -- eval args} { - catch {interp delete a} - interp create a - a hide list + set a [interp create] + $a hide list set l "" set z 45 - lappend l [catch {a invokehidden list $z 1 2 3} msg] - lappend l $msg - a expose list - lappend l [catch {a eval list $z 1 2 3} msg] - lappend l $msg - interp delete a + lappend l [catch { $a invokehidden list $z 1 2 3 } msg] $msg + $a expose list + lappend l [catch { $a eval list $z 1 2 3 } msg] $msg + interp delete $a set l } {0 {45 1 2 3} 0 {45 1 2 3}} test interp-20.7 {interp invokehidden vs variable eval} { - catch {interp delete a} - interp create a - a hide list + set a [interp create] + $a hide list set z 45 - set l "" - lappend l [catch {a invokehidden list {$z a b c}} msg] - lappend l $msg - interp delete a + set l [list [catch {$a invokehidden list {$z a b c}} msg] $msg] + interp delete $a set l } {0 {{$z a b c}}} test interp-20.8 {interp invokehidden vs variable eval} { - catch {interp delete a} - interp create a - a hide list - a eval set z 89 + set a [interp create] + $a hide list + $a eval set z 89 set z 45 - set l "" - lappend l [catch {a invokehidden list {$z a b c}} msg] - lappend l $msg - interp delete a + set l [list [catch {$a invokehidden list {$z a b c}} msg] $msg] + interp delete $a set l } {0 {{$z a b c}}} test interp-20.9 {interp invokehidden vs variable eval} { - catch {interp delete a} - interp create a - a hide list - a eval set z 89 + set a [interp create] + $a hide list + $a eval set z 89 set z 45 set l "" - lappend l [catch {a invokehidden list $z {$z a b c}} msg] - lappend l $msg - interp delete a + lappend l [catch {$a invokehidden list $z {$z a b c}} msg] $msg + interp delete $a set l } {0 {45 {$z a b c}}} test interp-20.10 {interp hide, interp expose and interp invokehidden} { - catch {interp delete a} - interp create a - a eval {proc unknown {x args} {error "invalid command name \"$x\""}} - a eval {proc foo {} {}} - interp hide a foo - catch {interp eval a foo something} msg - interp delete a + set a [interp create] + $a eval {proc unknown {x args} {error "invalid command name \"$x\""}} + $a eval {proc foo {} {}} + interp hide $a foo + catch {interp eval $a foo something} msg + interp delete $a set msg } {invalid command name "foo"} test interp-20.11 {interp hide, interp expose and interp invokehidden} { - catch {interp delete a} - interp create a - a eval {proc unknown {x args} {error "invalid command name \"$x\""}} - interp hide a list + set a [interp create] + $a eval {proc unknown {x args} {error "invalid command name \"$x\""}} + interp hide $a list set l "" - lappend l [catch {interp eval a {list 1 2 3}} msg] - lappend l $msg - interp expose a list - lappend l [catch {interp eval a {list 1 2 3}} msg] - lappend l $msg - interp delete a + lappend l [catch {interp eval $a {list 1 2 3}} msg] $msg + interp expose $a list + lappend l [catch {interp eval $a {list 1 2 3}} msg] $msg + interp delete $a set l } {1 {invalid command name "list"} 0 {1 2 3}} test interp-20.12 {interp hide, interp expose and interp invokehidden} { - catch {interp delete a} - interp create a - a eval {proc unknown {x args} {error "invalid command name \"$x\""}} - interp hide a list + set a [interp create] + $a eval {proc unknown {x args} {error "invalid command name \"$x\""}} + interp hide $a list set l "" - lappend l [catch {interp eval a {list 1 2 3}} msg] - lappend l $msg - lappend l [catch {interp invokehidden a list 1 2 3} msg] - lappend l $msg - interp expose a list - lappend l [catch {interp eval a {list 1 2 3}} msg] - lappend l $msg - interp delete a + lappend l [catch {interp eval $a {list 1 2 3} } msg] $msg + lappend l [catch {interp invokehidden $a list 1 2 3} msg] $msg + interp expose $a list + lappend l [catch {interp eval $a {list 1 2 3} } msg] $msg + interp delete $a set l } {1 {invalid command name "list"} 0 {1 2 3} 0 {1 2 3}} test interp-20.13 {interp hide, interp expose, interp invokehidden -- passing {}} { - catch {interp delete a} - interp create a - a eval {proc unknown {x args} {error "invalid command name \"$x\""}} - interp hide a list + set a [interp create] + $a eval {proc unknown {x args} {error "invalid command name \"$x\""}} + interp hide $a list set l "" - lappend l [catch {interp eval a {list 1 2 3}} msg] - lappend l $msg - lappend l [catch {interp invokehidden a list {"" 1 2 3}} msg] - lappend l $msg - interp expose a list - lappend l [catch {interp eval a {list 1 2 3}} msg] - lappend l $msg - interp delete a + lappend l [catch {interp eval $a {list 1 2 3} } msg] $msg + lappend l [catch {interp invokehidden $a list {"" 1 2 3}} msg] $msg + interp expose $a list + lappend l [catch {interp eval $a {list 1 2 3} } msg] $msg + interp delete $a set l } {1 {invalid command name "list"} 0 {{"" 1 2 3}} 0 {1 2 3}} test interp-20.14 {interp hide, interp expose, interp invokehidden -- passing {}} { - catch {interp delete a} - interp create a - a eval {proc unknown {x args} {error "invalid command name \"$x\""}} - interp hide a list + set a [interp create] + $a eval {proc unknown {x args} {error "invalid command name \"$x\""}} + interp hide $a list set l "" - lappend l [catch {interp eval a {list 1 2 3}} msg] - lappend l $msg - lappend l [catch {interp invokehidden a list {{} 1 2 3}} msg] - lappend l $msg - interp expose a list - lappend l [catch {a eval {list 1 2 3}} msg] - lappend l $msg - interp delete a + lappend l [catch {interp eval $a {list 1 2 3} } msg] $msg + lappend l [catch {interp invokehidden $a list {{} 1 2 3}} msg] $msg + interp expose $a list + lappend l [catch {$a eval {list 1 2 3} } msg] $msg + interp delete $a set l } {1 {invalid command name "list"} 0 {{{} 1 2 3}} 0 {1 2 3}} test interp-20.15 {interp invokehidden -- eval args} { @@ -1534,6 +1589,19 @@ test interp-20.48 {interp hide vs namespaces} { interp delete a set l } {1 {cannot use namespace qualifiers in hidden command token (rename)}} +test interp-20.49 {interp invokehidden -namespace} -setup { + set script [makeFile { + set x [namespace current] + } script] + interp create -safe slave +} -body { + slave invokehidden -namespace ::foo source $script + slave eval {set ::foo::x} +} -cleanup { + interp delete slave + removeFile script +} -result ::foo + test interp-21.1 {interp hidden} { interp hidden {} @@ -1724,17 +1792,17 @@ test interp-23.2 {testing hiding vs aliases} {unixOrPc} { set l "" lappend l [lsort [interp hidden a]] a alias bar bar - lappend l [interp aliases a] + lappend l [lsort [interp aliases a]] lappend l [lsort [interp hidden a]] a hide bar - lappend l [interp aliases a] + lappend l [lsort [interp aliases a]] lappend l [lsort [interp hidden a]] a alias bar {} - lappend l [interp aliases a] + lappend l [lsort [interp aliases a]] lappend l [lsort [interp hidden a]] interp delete a set l -} {{cd encoding exec exit fconfigure file glob load open pwd socket source} bar {cd encoding exec exit fconfigure file glob load open pwd socket source} bar {bar cd encoding exec exit fconfigure file glob load open pwd socket source} {} {cd encoding exec exit fconfigure file glob load open pwd socket source}} +} {{cd encoding exec exit fconfigure file glob load open pwd socket source unload} {::tcl::mathfunc::max ::tcl::mathfunc::min bar clock} {cd encoding exec exit fconfigure file glob load open pwd socket source unload} {::tcl::mathfunc::max ::tcl::mathfunc::min bar clock} {bar cd encoding exec exit fconfigure file glob load open pwd socket source unload} {::tcl::mathfunc::max ::tcl::mathfunc::min clock} {cd encoding exec exit fconfigure file glob load open pwd socket source unload}} test interp-24.1 {result resetting on error} { catch {interp delete a} @@ -1750,6 +1818,7 @@ test interp-24.1 {result resetting on error} { set l }] interp delete a + rename foo {} set l } {1 {1 2 3} 1 {3 4 5}} test interp-24.2 {result resetting on error} { @@ -1766,6 +1835,7 @@ test interp-24.2 {result resetting on error} { set l }] interp delete a + rename foo {} set l } {1 {1 2 3} 1 {3 4 5}} test interp-24.3 {result resetting on error} { @@ -2059,7 +2129,7 @@ test interp-26.6 {result code transmission: all combined--bug 1637} \ proc MyTestAlias {interp args} { global aliasTrace; lappend aliasTrace $args; - eval interp invokehidden [list $interp] $args + interp invokehidden $interp {*}$args } foreach c {return} { interp hide $interp $c; @@ -2089,7 +2159,7 @@ test interp-26.7 {errorInfo transmission: regular interps} { MyError "some secret" } interp alias $interp test {} MyTestAlias $interp; - set res [interp eval $interp {catch test;set errorInfo}] + set res [interp eval $interp {catch test;set ::errorInfo}] interp delete $interp; set res } {msg @@ -2112,7 +2182,7 @@ test interp-26.8 {errorInfo transmission: safe interps--bug 1637} {knownBug} { MyError "some secret" } interp alias $interp test {} MyTestAlias $interp; - set res [interp eval $interp {catch test;set errorInfo}] + set res [interp eval $interp {catch test;set ::errorInfo}] interp delete $interp; set res } {msg @@ -2297,6 +2367,23 @@ test interp-28.1 {getting fooled by slave's namespace ?} { set r } {} +test interp-28.2 {master's nsName cache should not cross} { + set i [interp create] + set res [$i eval { + set x {namespace children ::} + set y [list namespace children ::] + namespace delete [{*}$y] + set j [interp create] + $j eval {namespace delete {*}[namespace children ::]} + namespace eval foo {} + set res [list [eval $x] [eval $y] [$j eval $x] [$j eval $y]] + interp delete $j + set res + }] + interp delete $i + set res +} {::foo ::foo {} {}} + # Part 29: recursion limit # 29.1.* Argument checking # 29.2.* Reading and setting the recursion limit @@ -2884,8 +2971,7 @@ test interp-31.1 {alias invocation scope} { set result } ok -test interp-32.1 { parent's working directory should - be inherited by a child interp } { +test interp-32.1 {parent's working directory should be inherited by a child interp} { cd [temporaryDirectory] set parent [pwd] set i [interp create] @@ -2911,12 +2997,563 @@ test interp-33.1 {refCounting for target words of alias [Bug 730244]} { # Note: interp names are simple words by default trace add execution testHelper enter "interp alias $i alias {} ;#" interp alias $i alias {} testHelper this - $i eval alias + $i eval alias } this +test interp-34.1 {basic test of limits - calling commands} -body { + set i [interp create] + $i eval { + proc foobar {} { + for {set x 0} {$x<1000000} {incr x} { + # Calls to this are not bytecoded away + pid + } + } + } + $i limit command -value 1000 + $i eval foobar +} -returnCodes error -result {command count limit exceeded} -cleanup { + interp delete $i +} +test interp-34.2 {basic test of limits - bytecoded commands} -body { + set i [interp create] + $i eval { + proc foobar {} { + for {set x 0} {$x<1000000} {incr x} { + # Calls to this *are* bytecoded away + expr {1+2+3} + } + } + } + $i limit command -value 1000 + $i eval foobar +} -returnCodes error -result {command count limit exceeded} -cleanup { + interp delete $i +} +test interp-34.3 {basic test of limits - pure bytecode loop} -body { + set i [interp create] + $i eval { + proc foobar {} { + while {1} { + # No bytecode at all here... + } + } + } + # We use a time limit here; command limits don't trap this case + $i limit time -seconds [expr {[clock seconds]+2}] + $i eval foobar +} -returnCodes error -result {time limit exceeded} -cleanup { + interp delete $i +} +test interp-34.3.1 {basic test of limits - pure inside-command loop} -body { + set i [interp create] + $i eval { + proc foobar {} { + set while while + $while {1} { + # No bytecode at all here... + } + } + } + # We use a time limit here; command limits don't trap this case + $i limit time -seconds [expr {[clock seconds]+2}] + $i eval foobar +} -returnCodes error -result {time limit exceeded} -cleanup { + interp delete $i +} +test interp-34.4 {limits with callbacks: extending limits} -setup { + set i [interp create] + set a 0 + set b 0 + set c a + proc cb1 {} { + global c + incr ::$c + } + proc cb2 {newlimit args} { + global c i + set c b + $i limit command -value $newlimit + } +} -body { + interp alias $i foo {} cb1 + set curlim [$i eval info cmdcount] + $i limit command -command "cb2 [expr $curlim+100]" \ + -value [expr {$curlim+10}] + $i eval {for {set i 0} {$i<10} {incr i} {foo}} + list $a $b $c +} -result {6 4 b} -cleanup { + interp delete $i + rename cb1 {} + rename cb2 {} +} +# The next three tests exercise all the three ways that limit handlers +# can be deleted. Fully verifying this requires additional source +# code instrumentation. +test interp-34.5 {limits with callbacks: removing limits} -setup { + set i [interp create] + set a 0 + set b 0 + set c a + proc cb1 {} { + global c + incr ::$c + } + proc cb2 {newlimit args} { + global c i + set c b + $i limit command -value $newlimit + } +} -body { + interp alias $i foo {} cb1 + set curlim [$i eval info cmdcount] + $i limit command -command "cb2 {}" -value [expr {$curlim+10}] + $i eval {for {set i 0} {$i<10} {incr i} {foo}} + list $a $b $c +} -result {6 4 b} -cleanup { + interp delete $i + rename cb1 {} + rename cb2 {} +} +test interp-34.6 {limits with callbacks: removing limits and handlers} -setup { + set i [interp create] + set a 0 + set b 0 + set c a + proc cb1 {} { + global c + incr ::$c + } + proc cb2 {args} { + global c i + set c b + $i limit command -value {} -command {} + } +} -body { + interp alias $i foo {} cb1 + set curlim [$i eval info cmdcount] + $i limit command -command cb2 -value [expr {$curlim+10}] + $i eval {for {set i 0} {$i<10} {incr i} {foo}} + list $a $b $c +} -result {6 4 b} -cleanup { + interp delete $i + rename cb1 {} + rename cb2 {} +} +test interp-34.7 {limits with callbacks: deleting the handler interp} -setup { + set i [interp create] + $i eval { + set i [interp create] + proc cb1 {} { + global c + incr ::$c + } + proc cb2 {args} { + global c i curlim + set c b + $i limit command -value [expr {$curlim+1000}] + trapToParent + } + } + proc cb3 {} { + global i subi + interp alias [list $i $subi] foo {} cb4 + interp delete $i + } + proc cb4 {} { + global n + incr n + } +} -body { + set subi [$i eval set i] + interp alias $i trapToParent {} cb3 + set n 0 + $i eval { + set a 0 + set b 0 + set c a + interp alias $i foo {} cb1 + set curlim [$i eval info cmdcount] + $i limit command -command cb2 -value [expr {$curlim+10}] + } + $i eval { + $i eval { + for {set i 0} {$i<10} {incr i} {foo} + } + } + list $n [interp exists $i] +} -result {4 0} -cleanup { + rename cb3 {} + rename cb4 {} +} +# Bug 1085023 +test interp-34.8 {time limits trigger in vwaits} -body { + set i [interp create] + interp limit $i time -seconds [expr {[clock seconds]+1}] -granularity 1 + $i eval { + set x {} + vwait x + } +} -cleanup { + interp delete $i +} -returnCodes error -result {limit exceeded} +test interp-34.9 {time limits trigger in blocking after} { + set i [interp create] + set t0 [clock seconds] + interp limit $i time -seconds [expr {$t0 + 1}] -granularity 1 + set code [catch { + $i eval {after 10000} + } msg] + set t1 [clock seconds] + interp delete $i + list $code $msg [expr {($t1-$t0) < 3 ? "OK" : $t1-$t0}] +} {1 {time limit exceeded} OK} +test interp-34.10 {time limits trigger in vwaits: Bug 1221395} -body { + set i [interp create] + # Assume someone hasn't set the clock to early 1970! + $i limit time -seconds 1 -granularity 4 + interp alias $i log {} lappend result + set result {} + catch { + $i eval { + log 1 + after 100 + log 2 + } + } msg + interp delete $i + lappend result $msg +} -result {1 {time limit exceeded}} +test interp-34.11 {time limit extension in callbacks} -setup { + proc cb1 {i t} { + global result + lappend result cb1 + $i limit time -seconds $t -command cb2 + } + proc cb2 {} { + global result + lappend result cb2 + } +} -body { + set i [interp create] + set t0 [clock seconds] + $i limit time -seconds [expr {$t0+1}] -granularity 1 \ + -command "cb1 $i [expr {$t0+2}]" + set ::result {} + lappend ::result [catch { + $i eval { + for {set i 0} {$i<30} {incr i} { + after 100 + } + } + } msg] $msg + set t1 [clock seconds] + lappend ::result [expr {$t1-$t0>=2 ? "ok" : "$t0,$t1"}] + interp delete $i + return $::result +} -result {cb1 cb2 1 {time limit exceeded} ok} -cleanup { + rename cb1 {} + rename cb2 {} +} +test interp-34.12 {time limit extension in callbacks} -setup { + proc cb1 {i} { + global result times + lappend result cb1 + set times [lassign $times t] + $i limit time -seconds $t + } +} -body { + set i [interp create] + set t0 [clock seconds] + set ::times "[expr {$t0+2}] [expr {$t0+100}]" + $i limit time -seconds [expr {$t0+1}] -granularity 1 -command "cb1 $i" + set ::result {} + lappend ::result [catch { + $i eval { + for {set i 0} {$i<30} {incr i} { + after 100 + } + } + } msg] $msg + set t1 [clock seconds] + lappend ::result [expr {$t1-$t0>=2 ? "ok" : "$t0,$t1"}] + interp delete $i + return $::result +} -result {cb1 cb1 0 {} ok} -cleanup { + rename cb1 {} +} +test interp-34.13 {time limit granularity and vwait: Bug 2891362} -setup { + set i [interp create -safe] +} -body { + $i limit time -seconds [clock add [clock seconds] 1 second] + $i eval { + after 2000 set x timeout + vwait x + return $x + } +} -cleanup { + interp delete $i +} -returnCodes error -result {limit exceeded} + +test interp-35.1 {interp limit syntax} -body { + interp limit +} -returnCodes error -result {wrong # args: should be "interp limit path limitType ?options?"} +test interp-35.2 {interp limit syntax} -body { + interp limit {} +} -returnCodes error -result {wrong # args: should be "interp limit path limitType ?options?"} +test interp-35.3 {interp limit syntax} -body { + interp limit {} foo +} -returnCodes error -result {bad limit type "foo": must be commands or time} +test interp-35.4 {interp limit syntax} -body { + set i [interp create] + set dict [interp limit $i commands] + set result {} + foreach key [lsort [dict keys $dict]] { + lappend result $key [dict get $dict $key] + } + set result +} -cleanup { + interp delete $i +} -result {-command {} -granularity 1 -value {}} +test interp-35.5 {interp limit syntax} -body { + set i [interp create] + interp limit $i commands -granularity +} -cleanup { + interp delete $i +} -result 1 +test interp-35.6 {interp limit syntax} -body { + set i [interp create] + interp limit $i commands -granularity 2 +} -cleanup { + interp delete $i +} -result {} +test interp-35.7 {interp limit syntax} -body { + set i [interp create] + interp limit $i commands -foobar +} -cleanup { + interp delete $i +} -returnCodes error -result {bad option "-foobar": must be -command, -granularity, or -value} +test interp-35.8 {interp limit syntax} -body { + set i [interp create] + interp limit $i commands -granularity foobar +} -cleanup { + interp delete $i +} -returnCodes error -result {expected integer but got "foobar"} +test interp-35.9 {interp limit syntax} -body { + set i [interp create] + interp limit $i commands -granularity 0 +} -cleanup { + interp delete $i +} -returnCodes error -result {granularity must be at least 1} +test interp-35.10 {interp limit syntax} -body { + set i [interp create] + interp limit $i commands -value foobar +} -cleanup { + interp delete $i +} -returnCodes error -result {expected integer but got "foobar"} +test interp-35.11 {interp limit syntax} -body { + set i [interp create] + interp limit $i commands -value -1 +} -cleanup { + interp delete $i +} -returnCodes error -result {command limit value must be at least 0} +test interp-35.12 {interp limit syntax} -body { + set i [interp create] + set dict [interp limit $i time] + set result {} + foreach key [lsort [dict keys $dict]] { + lappend result $key [dict get $dict $key] + } + set result +} -cleanup { + interp delete $i +} -result {-command {} -granularity 10 -milliseconds {} -seconds {}} +test interp-35.13 {interp limit syntax} -body { + set i [interp create] + interp limit $i time -granularity +} -cleanup { + interp delete $i +} -result 10 +test interp-35.14 {interp limit syntax} -body { + set i [interp create] + interp limit $i time -granularity 2 +} -cleanup { + interp delete $i +} -result {} +test interp-35.15 {interp limit syntax} -body { + set i [interp create] + interp limit $i time -foobar +} -cleanup { + interp delete $i +} -returnCodes error -result {bad option "-foobar": must be -command, -granularity, -milliseconds, or -seconds} +test interp-35.16 {interp limit syntax} -body { + set i [interp create] + interp limit $i time -granularity foobar +} -cleanup { + interp delete $i +} -returnCodes error -result {expected integer but got "foobar"} +test interp-35.17 {interp limit syntax} -body { + set i [interp create] + interp limit $i time -granularity 0 +} -cleanup { + interp delete $i +} -returnCodes error -result {granularity must be at least 1} +test interp-35.18 {interp limit syntax} -body { + set i [interp create] + interp limit $i time -seconds foobar +} -cleanup { + interp delete $i +} -returnCodes error -result {expected integer but got "foobar"} +test interp-35.19 {interp limit syntax} -body { + set i [interp create] + interp limit $i time -seconds -1 +} -cleanup { + interp delete $i +} -returnCodes error -result {seconds must be at least 0} +test interp-35.20 {interp limit syntax} -body { + set i [interp create] + interp limit $i time -millis foobar +} -cleanup { + interp delete $i +} -returnCodes error -result {expected integer but got "foobar"} +test interp-35.21 {interp limit syntax} -body { + set i [interp create] + interp limit $i time -millis -1 +} -cleanup { + interp delete $i +} -returnCodes error -result {milliseconds must be at least 0} +test interp-35.22 {interp time limits normalize milliseconds} -body { + set i [interp create] + interp limit $i time -seconds 1 -millis 1500 + list [$i limit time -seconds] [$i limit time -millis] +} -cleanup { + interp delete $i +} -result {2 500} +# Bug 3398794 +test interp-35.23 {interp command limits can't touch current interp} -body { + interp limit {} commands -value 10 +} -returnCodes error -result {limits on current interpreter inaccessible} +test interp-35.24 {interp time limits can't touch current interp} -body { + interp limit {} time -seconds 2 +} -returnCodes error -result {limits on current interpreter inaccessible} + +test interp-36.1 {interp bgerror syntax} -body { + interp bgerror +} -returnCodes error -result {wrong # args: should be "interp bgerror path ?cmdPrefix?"} +test interp-36.2 {interp bgerror syntax} -body { + interp bgerror x y z +} -returnCodes error -result {wrong # args: should be "interp bgerror path ?cmdPrefix?"} +test interp-36.3 {interp bgerror syntax} -setup { + interp create slave +} -body { + slave bgerror x y +} -cleanup { + interp delete slave +} -returnCodes error -result {wrong # args: should be "slave bgerror ?cmdPrefix?"} +test interp-36.4 {SlaveBgerror syntax} -setup { + interp create slave +} -body { + slave bgerror \{ +} -cleanup { + interp delete slave +} -returnCodes error -result {cmdPrefix must be list of length >= 1} +test interp-36.5 {SlaveBgerror syntax} -setup { + interp create slave +} -body { + slave bgerror {} +} -cleanup { + interp delete slave +} -returnCodes error -result {cmdPrefix must be list of length >= 1} +test interp-36.6 {SlaveBgerror returns handler} -setup { + interp create slave +} -body { + slave bgerror {foo bar soom} +} -cleanup { + interp delete slave +} -result {foo bar soom} + +test interp-36.7 {SlaveBgerror sets error handler of slave [1999035]} -setup { + interp create slave + slave alias handler handler + slave bgerror handler + variable result {untouched} + proc handler {args} { + variable result + set result [lindex $args 0] + } +} -body { + slave eval { + variable done {} + after 0 error foo + after 10 [list ::set [namespace which -variable done] {}] + vwait [namespace which -variable done] + } + set result +} -cleanup { + variable result {} + unset result + interp delete slave +} -result foo + +test interp-37.1 {safe interps and min() and max(): Bug 2895741} -setup { + catch {interp delete a} + interp create a + set result {} +} -body { + interp create {a b} -safe + lappend result [interp eval a {expr min(5,2,3)*max(7,13,11)}] + lappend result [interp eval {a b} {expr min(5,2,3)*max(7,13,11)}] +} -cleanup { + unset result + interp delete a +} -result {26 26} + +test interp-38.1 {interp debug one-way switch} -setup { + catch {interp delete a} + interp create a + interp debug a -frame 1 +} -body { + # TIP #3xx interp debug frame is a one-way switch + interp debug a -frame 0 +} -cleanup { + interp delete a +} -result {1} +test interp-38.2 {interp debug env var} -setup { + catch {interp delete a} + set ::env(TCL_INTERP_DEBUG_FRAME) 1 + interp create a +} -body { + interp debug a +} -cleanup { + unset ::env(TCL_INTERP_DEBUG_FRAME) + interp delete a +} -result {-frame 1} +test interp-38.3 {interp debug wrong args} -body { + interp debug +} -returnCodes { + error +} -result {wrong # args: should be "interp debug path ?-frame ?bool??"} +test interp-38.4 {interp debug basic setup} -body { + interp debug {} +} -result {-frame 0} +test interp-38.5 {interp debug basic setup} -body { + interp debug {} -f +} -result {0} +test interp-38.6 {interp debug basic setup} -body { + interp debug -frames +} -returnCodes error -result {could not find interpreter "-frames"} +test interp-38.7 {interp debug basic setup} -body { + interp debug {} -frames +} -returnCodes error -result {bad debug option "-frames": must be -frame} +test interp-38.8 {interp debug basic setup} -body { + interp debug {} -frame 0 bogus +} -returnCodes { + error +} -result {wrong # args: should be "interp debug path ?-frame ?bool??"} + # cleanup foreach i [interp slaves] { - interp delete $i + interp delete $i } ::tcltest::cleanupTests return diff --git a/tests/io.test b/tests/io.test index 718ce7e..68051d7 100644 --- a/tests/io.test +++ b/tests/io.test @@ -18,25 +18,38 @@ if {[catch {package require tcltest 2}]} { return } namespace eval ::tcl::test::io { - - namespace import ::tcltest::cleanupTests - namespace import ::tcltest::interpreter - namespace import ::tcltest::makeFile - namespace import ::tcltest::removeFile - namespace import ::tcltest::test - namespace import ::tcltest::testConstraint - namespace import ::tcltest::viewFile - -testConstraint testchannel [llength [info commands testchannel]] -testConstraint exec [llength [info commands exec]] -testConstraint openpipe 1 -testConstraint fileevent [llength [info commands fileevent]] -testConstraint fcopy [llength [info commands fcopy]] + namespace import ::tcltest::* + + variable umaskValue + variable path + variable f + variable i + variable n + variable v + variable msg + variable expected + +testConstraint testchannel [llength [info commands testchannel]] +testConstraint exec [llength [info commands exec]] +testConstraint openpipe 1 +testConstraint fileevent [llength [info commands fileevent]] +testConstraint fcopy [llength [info commands fcopy]] +testConstraint testfevent [llength [info commands testfevent]] +testConstraint testchannelevent [llength [info commands testchannelevent]] +testConstraint testmainthread [llength [info commands testmainthread]] +testConstraint testthread [llength [info commands testthread]] # You need a *very* special environment to do some tests. In # particular, many file systems do not support large-files... testConstraint largefileSupport 0 +# some tests can only be run is umask is 2 +# if "umask" cannot be run, the tests will be skipped. +set umaskValue 0 +testConstraint umask [expr {![catch {set umaskValue [scan [exec /bin/sh -c umask] %o]}]}] + +testConstraint makeFileInHome [expr {![file exists ~/_test_] && [file writable ~]}] + # set up a long data file for some of the following tests set path(longfile) [makeFile {} longfile] @@ -81,9 +94,7 @@ proc contents {file} { test io-1.5 {Tcl_WriteChars: CheckChannelErrors} {emptyTest} { # no test, need to cause an async error. } {} - set path(test1) [makeFile {} test1] - test io-1.6 {Tcl_WriteChars: WriteBytes} { set f [open $path(test1) w] fconfigure $f -encoding binary @@ -98,9 +109,7 @@ test io-1.7 {Tcl_WriteChars: WriteChars} { close $f contents $path(test1) } "a\x93\xe1\x00" - set path(test2) [makeFile {} test2] - test io-1.8 {Tcl_WriteChars: WriteChars} { # This test written for SF bug #506297. # @@ -414,7 +423,7 @@ test io-6.1 {Tcl_GetsObj: working} { close $f set x } {foo} -test io-6.2 {Tcl_GetsObj: CheckChannelErrors() != 0} { +test io-6.2 {Tcl_GetsObj: CheckChannelErrors() != 0} emptyTest { # no test, need to cause an async error. } {} test io-6.3 {Tcl_GetsObj: how many have we used?} { @@ -498,9 +507,7 @@ test io-6.9 {Tcl_GetsObj: remember if EOF is seen} { close $f set x } {11 abcdefghijk 3 wom} - # Comprehensive tests - test io-6.10 {Tcl_GetsObj: lf mode: no chars} { set f [open $path(test1) w] close $f @@ -1228,12 +1235,11 @@ test io-8.7 {PeekAhead: cleanup} {stdio testchannel openpipe fileevent} { close $f set x } {15 abcdefghijklmno 1 -1 {}} - -test io-9.1 {CommonGetsCleanup} { +test io-9.1 {CommonGetsCleanup} emptyTest { } {} -test io-10.1 {Tcl_ReadChars: CheckChannelErrors} { +test io-10.1 {Tcl_ReadChars: CheckChannelErrors} emptyTest { # no test, need to cause an async error. } {} test io-10.2 {Tcl_ReadChars: loop until enough copied} { @@ -1343,7 +1349,7 @@ test io-11.4 {ReadBytes: EOF char found} { close $f set x } [list "abcdefghijkl" 1 "" 1] - + test io-12.1 {ReadChars: want to read a lot} { # ((unsigned) toRead > (unsigned) srcLen) @@ -1603,7 +1609,7 @@ test io-13.12 {TranslateInputEOL: find EOF char in src} { close $f set x } "\n\n\nab\n\nd" - + # Test standard handle management. The functions tested are # Tcl_SetStdChannel and Tcl_GetStdChannel. Incidentally we are # also testing channel table management. @@ -1632,9 +1638,7 @@ test io-14.2 {Tcl_SetStdChannel and Tcl_GetStdChannel} { interp delete x set l } {line line none} - set path(test3) [makeFile {} test3] - test io-14.3 {Tcl_SetStdChannel & Tcl_GetStdChannel} {exec openpipe} { set f [open $path(test1) w] puts -nonewline $f { @@ -1665,7 +1669,7 @@ out } {err }} # This test relies on the fact that the smallest available fd is used first. -test io-14.4 {Tcl_SetStdChannel & Tcl_GetStdChannel} {exec unixOnly} { +test io-14.4 {Tcl_SetStdChannel & Tcl_GetStdChannel} {exec unix} { set f [open $path(test1) w] puts -nonewline $f { close stdin close stdout @@ -1724,9 +1728,7 @@ test io-14.7 {Tcl_GetChannel: stdio name translation} { interp delete z set result } {{} {} {can not find channel named "stderr"}} - set path(script) [makeFile {} script] - test io-14.8 {reuse of stdio special channels} {stdio openpipe} { file delete $path(script) file delete $path(test1) @@ -1749,7 +1751,6 @@ test io-14.8 {reuse of stdio special channels} {stdio openpipe} { close $f set c } hello - test io-14.9 {reuse of stdio special channels} {stdio openpipe fileevent} { file delete $path(script) file delete $path(test1) @@ -1776,10 +1777,10 @@ test io-14.9 {reuse of stdio special channels} {stdio openpipe fileevent} { set c } hello -test io-15.1 {Tcl_CreateCloseHandler} { +test io-15.1 {Tcl_CreateCloseHandler} emptyTest { } {} -test io-16.1 {Tcl_DeleteCloseHandler} { +test io-16.1 {Tcl_DeleteCloseHandler} emptyTest { } {} # Test channel table management. The functions tested are @@ -1827,7 +1828,7 @@ test io-17.3 {GetChannelTable, DeleteChannelTable on std handles} {testchannel} } {0 1 0} test io-18.1 {Tcl_RegisterChannel, Tcl_UnregisterChannel} {testchannel} { - file delete $path(test1) + file delete -force $path(test1) set l "" set f [open $path(test1) w] lappend l [lindex [testchannel info $f] 15] @@ -1841,7 +1842,7 @@ test io-18.1 {Tcl_RegisterChannel, Tcl_UnregisterChannel} {testchannel} { [list 1 [format "can not find channel named \"%s\"" $f]] } 0 test io-18.2 {Tcl_RegisterChannel, Tcl_UnregisterChannel} {testchannel} { - file delete $path(test1) + file delete -force $path(test1) set l "" set f [open $path(test1) w] lappend l [lindex [testchannel info $f] 15] @@ -1920,21 +1921,19 @@ test io-20.1 {Tcl_CreateChannel: initial settings} { close $a set x } {ascii} -test io-20.2 {Tcl_CreateChannel: initial settings} {pcOnly} { +test io-20.2 {Tcl_CreateChannel: initial settings} {win} { set f [open $path(test1) w+] set x [list [fconfigure $f -eofchar] [fconfigure $f -translation]] close $f set x } [list [list \x1a ""] {auto crlf}] -test io-20.3 {Tcl_CreateChannel: initial settings} {unixOnly} { +test io-20.3 {Tcl_CreateChannel: initial settings} {unix} { set f [open $path(test1) w+] set x [list [fconfigure $f -eofchar] [fconfigure $f -translation]] close $f set x } {{{} {}} {auto lf}} - set path(stdout) [makeFile {} stdout] - test io-20.5 {Tcl_CreateChannel: install channel in empty slot} {stdio openpipe} { set f [open $path(script) w] puts -nonewline $f { @@ -1950,17 +1949,17 @@ test io-20.5 {Tcl_CreateChannel: install channel in empty slot} {stdio openpipe} catch {close $f} msg set msg } {777} - -test io-21.1 {CloseChannelsOnExit} { + +test io-21.1 {CloseChannelsOnExit} emptyTest { } {} - + # Test management of attributes associated with a channel, such as # its default translation, its name and type, etc. The functions # tested in this group are Tcl_GetChannelName, # Tcl_GetChannelType and Tcl_GetChannelFile. Tcl_GetChannelInstanceData # not tested because files do not use the instance data. -test io-22.1 {Tcl_GetChannelMode} { +test io-22.1 {Tcl_GetChannelMode} emptyTest { # Not used anywhere in Tcl. } {} @@ -2083,12 +2082,12 @@ test io-27.5 {FlushChannel, implicit flush when buffer fills and on close} \ lappend l [file size $path(test1)] set l } {0 60 72} - set path(pipe) [makeFile {} pipe] set path(output) [makeFile {} output] - test io-27.6 {FlushChannel, async flushing, async close} \ {stdio asyncPipeClose openpipe} { + # This test may fail on old Unix systems (seen on IRIX64 6.5) with + # obsolete gettimeofday() calls. See Tcl Bugs 3530533, 1942197. file delete $path(pipe) file delete $path(output) set f [open $path(pipe) w] @@ -2114,9 +2113,8 @@ test io-27.6 {FlushChannel, async flushing, async close} \ close $f set counter 0 while {([file size $path(output)] < 65536) && ($counter < 1000)} { - incr counter - after 20 - update + after 20 [list incr [namespace which -variable counter]] + vwait [namespace which -variable counter] } if {$counter == 1000} { set result "file size only [file size $path(output)]" @@ -2191,9 +2189,8 @@ test io-28.3 {CloseChannel, not called before output queue is empty} \ close $f set counter 0 while {([file size $path(output)] < 20480) && ($counter < 1000)} { - incr counter - after 20 - update + after 20 [list incr [namespace which -variable counter]] + vwait [namespace which -variable counter] } if {$counter == 1000} { set result probably_broken @@ -2210,11 +2207,11 @@ test io-28.4 {Tcl_Close} {testchannel} { close $f lappend l [lsort [testchannel open]] set x [list $consoleFileNames \ - [lsort [eval list $consoleFileNames $f]] \ + [lsort [list {*}$consoleFileNames $f]] \ $consoleFileNames] string compare $l $x } 0 -test io-28.5 {Tcl_Close vs standard handles} {stdio unixOnly testchannel openpipe} { +test io-28.5 {Tcl_Close vs standard handles} {stdio unix testchannel openpipe} { file delete $path(script) set f [open $path(script) w] puts $f { @@ -2289,7 +2286,6 @@ test io-29.6 {Tcl_WriteChars, buffering in no buffering mode} {testchannel} { close $f set l } {0 5 0 11} - test io-29.7 {Tcl_Flush, full buffering} {testchannel} { file delete $path(test1) set f [open $path(test1) w] @@ -2612,11 +2608,11 @@ test io-29.27 {Tcl_Flush on closed pipeline} {stdio openpipe} { # you disable the debugger's signal interception. # if {[catch {flush $f} msg]} { - set x [list 1 $msg $errorCode] + set x [list 1 $msg $::errorCode] catch {close $f} } else { if {[catch {close $f} msg]} { - set x [list 1 $msg $errorCode] + set x [list 1 $msg $::errorCode] } else { set x {this was supposed to fail and did not} } @@ -2651,6 +2647,8 @@ test io-29.30 {Tcl_WriteChars, crlf mode} { file size $path(test1) } 25 test io-29.31 {Tcl_WriteChars, background flush} {stdio openpipe} { + # This test may fail on old Unix systems (seen on IRIX64 6.5) with + # obsolete gettimeofday() calls. See Tcl Bugs 3530533, 1942197. file delete $path(pipe) file delete $path(output) set f [open $path(pipe) w] @@ -2676,18 +2674,24 @@ test io-29.31 {Tcl_WriteChars, background flush} {stdio openpipe} { close $f set counter 0 while {([file size $path(output)] < 65536) && ($counter < 1000)} { - incr counter - after 5 - update + after 10 [list incr [namespace which -variable counter]] + vwait [namespace which -variable counter] } if {$counter == 1000} { set result "file size only [file size $path(output)]" } else { set result ok } + # allow a little time for the background process to close. + # otherwise, the following test fails on the [file delete $path(output) + # on Windows because a process still has the file open. + after 100 set v 1; vwait v + set result } ok test io-29.32 {Tcl_WriteChars, background flush to slow reader} \ {stdio asyncPipeClose openpipe} { + # This test may fail on old Unix systems (seen on IRIX64 6.5) with + # obsolete gettimeofday() calls. See Tcl Bugs 3530533, 1942197. file delete $path(pipe) file delete $path(output) set f [open $path(pipe) w] @@ -2714,9 +2718,8 @@ test io-29.32 {Tcl_WriteChars, background flush to slow reader} \ close $f set counter 0 while {([file size $path(output)] < 65536) && ($counter < 1000)} { - incr counter - after 20 - update + after 20 [list incr [namespace which -variable counter]] + vwait [namespace which -variable counter] } if {$counter == 1000} { set result "file size only [file size $path(output)]" @@ -2758,7 +2761,7 @@ test io-29.34 {Tcl_Close, async flush on close, using sockets} {socket tempNotMa variable c variable x set l [gets $s] - + if {[eof $s]} { close $s set x done @@ -2766,8 +2769,8 @@ test io-29.34 {Tcl_Close, async flush on close, using sockets} {socket tempNotMa incr c } } - set ss [socket -server [namespace code accept] 0] - set cs [socket [info hostname] [lindex [fconfigure $ss -sockname] 2]] + set ss [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + set cs [socket 127.0.0.1 [lindex [fconfigure $ss -sockname] 2]] vwait [namespace which -variable x] fconfigure $cs -blocking off writelots $cs $l @@ -2777,19 +2780,19 @@ test io-29.34 {Tcl_Close, async flush on close, using sockets} {socket tempNotMa set c } 2000 test io-29.35 {Tcl_Close vs fileevent vs multiple interpreters} {socket tempNotMac fileevent} { - # On Mac, this test screws up sockets such that subsequent tests using port 2828 + # On Mac, this test screws up sockets such that subsequent tests using port 2828 # either cause errors or panic(). - + catch {interp delete x} catch {interp delete y} interp create x interp create y - set s [socket -server [namespace code accept] 0] + set s [socket -server [namespace code accept] -myaddr 127.0.0.1 0] proc accept {s a p} { puts $s hello close $s } - set c [socket [info hostname] [lindex [fconfigure $s -sockname] 2]] + set c [socket 127.0.0.1 [lindex [fconfigure $s -sockname] 2]] interp share {} $c x interp share {} $c y close $c @@ -2976,7 +2979,6 @@ there and here } auto} - test io-30.13 {Tcl_Write crlf on block boundary, Tcl_Read auto} { file delete $path(test1) set f [open $path(test1) w] @@ -2993,7 +2995,6 @@ test io-30.13 {Tcl_Write crlf on block boundary, Tcl_Read auto} { close $f string length $c } [expr 700*15+1] - test io-30.14 {Tcl_Write crlf on block boundary, Tcl_Read crlf} { file delete $path(test1) set f [open $path(test1) w] @@ -3010,7 +3011,6 @@ test io-30.14 {Tcl_Write crlf on block boundary, Tcl_Read crlf} { close $f string length $c } [expr 700*15+1] - test io-30.15 {Tcl_Write mixed, Tcl_Read auto} { file delete $path(test1) set f [open $path(test1) w] @@ -3043,7 +3043,7 @@ there and here } -test io-30.17 {Tcl_Write, implicit ^Z at end, Tcl_Read auto} {pcOnly} { +test io-30.17 {Tcl_Write, implicit ^Z at end, Tcl_Read auto} {win} { file delete $path(test1) set f [open $path(test1) w] fconfigure $f -eofchar \x1a -translation lf @@ -3849,7 +3849,6 @@ test io-31.32 {Tcl_Write crlf on block boundary, Tcl_Gets auto} { string length $c } [expr 700*15+1] - # Test Tcl_Read and buffering. test io-32.1 {Tcl_Read, channel not readable} { @@ -3863,7 +3862,7 @@ test io-32.3 {Tcl_Read, negative byte count} { set l [list [catch {read $f -1} msg] $msg] close $f set l -} {1 {bad argument "-1": should be "nonewline"}} +} {1 {expected non-negative integer but got "-1"}} test io-32.4 {Tcl_Read, positive byte count} { set f [open $path(longfile) r] set x [read $f 1024] @@ -4279,9 +4278,7 @@ test io-34.9 {Tcl_Seek, testing buffered input flushing} { close $f set x } {a d a l Y {} b} - set path(test3) [makeFile {} test3] - test io-34.10 {Tcl_Seek testing flushing of buffered input} { set f [open $path(test3) w] fconfigure $f -translation lf @@ -4359,7 +4356,7 @@ test io-34.15 {Tcl_Tell combined with seeking} { close $f1 list $c1 $c2 } {10 20} -test io-34.16 {Tcl_tell on pipe: always -1} {stdio openpipe} { +test io-34.16 {Tcl_Tell on pipe: always -1} {stdio openpipe} { set f1 [open "|[list [interpreter]]" r+] set c [tell $f1] close $f1 @@ -4866,7 +4863,6 @@ test io-38.2 {Tcl_SetChannelBufferSize, Tcl_GetChannelBufferSize} { close $f set l } {4096 10000 1 1 1 100000 1048576} - test io-38.3 {Tcl_SetChannelBufferSize, changing buffersize between reads} { # This test crashes the interp if Bug #427196 is not fixed @@ -5104,11 +5100,10 @@ test io-39.17 {Tcl_SetChannelOption: -encoding, clearing CHANNEL_NEED_MORE_DATA} close $f set x } "{} timeout {} timeout \xe7 timeout" - test io-39.18 {Tcl_SetChannelOption, setting read mode independently} \ {socket} { proc accept {s a p} {close $s} - set s1 [socket -server [namespace code accept] 0] + set s1 [socket -server [namespace code accept] -myaddr 127.0.0.1 0] set port [lindex [fconfigure $s1 -sockname] 2] set s2 [socket 127.0.0.1 $port] update @@ -5121,7 +5116,7 @@ test io-39.18 {Tcl_SetChannelOption, setting read mode independently} \ test io-39.19 {Tcl_SetChannelOption, setting read mode independently} \ {socket} { proc accept {s a p} {close $s} - set s1 [socket -server [namespace code accept] 0] + set s1 [socket -server [namespace code accept] -myaddr 127.0.0.1 0] set port [lindex [fconfigure $s1 -sockname] 2] set s2 [socket 127.0.0.1 $port] update @@ -5134,7 +5129,7 @@ test io-39.19 {Tcl_SetChannelOption, setting read mode independently} \ test io-39.20 {Tcl_SetChannelOption, setting read mode independently} \ {socket} { proc accept {s a p} {close $s} - set s1 [socket -server [namespace code accept] 0] + set s1 [socket -server [namespace code accept] -myaddr 127.0.0.1 0] set port [lindex [fconfigure $s1 -sockname] 2] set s2 [socket 127.0.0.1 $port] update @@ -5147,7 +5142,7 @@ test io-39.20 {Tcl_SetChannelOption, setting read mode independently} \ test io-39.21 {Tcl_SetChannelOption, setting read mode independently} \ {socket} { proc accept {s a p} {close $s} - set s1 [socket -server [namespace code accept] 0] + set s1 [socket -server [namespace code accept] -myaddr 127.0.0.1 0] set port [lindex [fconfigure $s1 -sockname] 2] set s2 [socket 127.0.0.1 $port] update @@ -5157,8 +5152,7 @@ test io-39.21 {Tcl_SetChannelOption, setting read mode independently} \ close $s2 set modes } {auto crlf} - -test io-39.22 {Tcl_SetChannelOption, invariance} {unixOnly} { +test io-39.22 {Tcl_SetChannelOption, invariance} {unix} { file delete $path(test1) set f1 [open $path(test1) w+] set l "" @@ -5170,7 +5164,6 @@ test io-39.22 {Tcl_SetChannelOption, invariance} {unixOnly} { close $f1 set l } {{{} {}} {O G} {D D}} - test io-39.22a {Tcl_SetChannelOption, invariance} { file delete $path(test1) set f1 [open $path(test1) w+] @@ -5183,12 +5176,10 @@ test io-39.22a {Tcl_SetChannelOption, invariance} { close $f1 set l } {{O G} {D D} {1 {bad value for -eofchar: should be a list of zero, one, or two elements}}} - - test io-39.23 {Tcl_GetChannelOption, server socket is not readable or writeable, it should still have valid -eofchar and -translation options } { set l [list] - set sock [socket -server [namespace code accept] 0] + set sock [socket -server [namespace code accept] -myaddr 127.0.0.1 0] lappend l [fconfigure $sock -eofchar] [fconfigure $sock -translation] close $sock set l @@ -5196,7 +5187,7 @@ test io-39.23 {Tcl_GetChannelOption, server socket is not readable or test io-39.24 {Tcl_SetChannelOption, server socket is not readable or writable so we can't change -eofchar or -translation } { set l [list] - set sock [socket -server [namespace code accept] 0] + set sock [socket -server [namespace code accept] -myaddr 127.0.0.1 0] fconfigure $sock -eofchar D -translation lf lappend l [fconfigure $sock -eofchar] [fconfigure $sock -translation] close $sock @@ -5218,31 +5209,26 @@ test io-40.1 {POSIX open access modes: RDWR} { close $f set x } {zzy abzzy} -test io-40.2 {POSIX open access modes: CREAT} {unixOnly} { +test io-40.2 {POSIX open access modes: CREAT} {unix} { file delete $path(test3) - set f [open $path(test3) {WRONLY CREAT} 0600] + set f [open $path(test3) {WRONLY CREAT} 0o600] file stat $path(test3) stats - set x [format "0%o" [expr $stats(mode)&0777]] + set x [format "0o%o" [expr $stats(mode)&0o777]] puts $f "line 1" close $f set f [open $path(test3) r] lappend x [gets $f] close $f set x -} {0600 {line 1}} - -# some tests can only be run is umask is 2 -# if "umask" cannot be run, the tests will be skipped. -catch {testConstraint umask2 [expr {[exec umask] == 2}]} - -test io-40.3 {POSIX open access modes: CREAT} {unixOnly umask2} { +} {0o600 {line 1}} +test io-40.3 {POSIX open access modes: CREAT} {unix umask} { # This test only works if your umask is 2, like ouster's. file delete $path(test3) set f [open $path(test3) {WRONLY CREAT}] close $f - file stat test3 stats - format "0%o" [expr $stats(mode)&0777] -} 0664 + file stat $path(test3) stats + format "0%o" [expr $stats(mode)&0o777] +} [format %04o [expr {0o666 & ~ $umaskValue}]] test io-40.4 {POSIX open access modes: CREAT} { file delete $path(test3) set f [open $path(test3) w] @@ -5307,7 +5293,7 @@ test io-40.8 {POSIX open access modes: TRUNC} { close $f set x } abc -test io-40.9 {POSIX open access modes: NONBLOCK} {nonPortable macOrUnix} { +test io-40.9 {POSIX open access modes: NONBLOCK} {nonPortable unix} { file delete $path(test3) set f [open $path(test3) {WRONLY NONBLOCK CREAT}] puts $f "NONBLOCK test" @@ -5362,20 +5348,18 @@ test io-40.15 {POSIX open access modes: RDWR} { close $f lappend x [viewFile test3] } {zzy abzzy} -if {![file exists ~/_test_] && [file writable ~]} { - test io-40.16 {tilde substitution in open} -setup { - makeFile {Some text} _test_ ~ - } -body { - file exists [file join $env(HOME) _test_] - } -cleanup { - removeFile _test_ ~ - } -result 1 -} +test io-40.16 {tilde substitution in open} -constraints makeFileInHome -setup { + makeFile {Some text} _test_ ~ +} -body { + file exists [file join $::env(HOME) _test_] +} -cleanup { + removeFile _test_ ~ +} -result 1 test io-40.17 {tilde substitution in open} { - set home $env(HOME) - unset env(HOME) + set home $::env(HOME) + unset ::env(HOME) set x [list [catch {open ~/foo} msg] $msg] - set env(HOME) $home + set ::env(HOME) $home set x } {1 {couldn't find HOME environment variable to expand path}} @@ -5428,6 +5412,7 @@ test io-42.3 {Tcl_FileeventCmd: replacing, with NULL chars in script} {fileevent lappend result [fileevent $f readable] } {13 11 12 {}} + test io-43.1 {Tcl_FileeventCmd: creating, deleting, querying} {stdio unixExecs fileevent} { set result {} fileevent $f readable "script 1" @@ -5475,18 +5460,24 @@ test io-44.1 {FileEventProc procedure: normal read event} -setup { catch {close $f2} catch {close $f3} } -result {text} -test io-44.2 {FileEventProc procedure: error in read event} -setup { +test io-44.2 {FileEventProc procedure: error in read event} -constraints { + stdio unixExecs fileevent openpipe +} -setup { set f2 [open "|[list cat -u]" r+] set f3 [open "|[list cat -u]" r+] -} -constraints {stdio unixExecs fileevent openpipe} -body { - proc ::bgerror args "set [namespace which -variable x] \$args" + proc myHandler {msg options} { + variable x $msg + } + set handler [interp bgerror {}] + interp bgerror {} [namespace which myHandler] +} -body { fileevent $f2 readable {error bogus} puts $f2 text; flush $f2 variable x initial vwait [namespace which -variable x] - rename ::bgerror {} list $x [fileevent $f2 readable] } -cleanup { + interp bgerror {} $handler catch {close $f2} catch {close $f3} } -result {bogus {}} @@ -5511,17 +5502,23 @@ test io-44.3 {FileEventProc procedure: normal write event} -setup { catch {close $f2} catch {close $f3} } -result {initial triggered triggered triggered} -test io-44.4 {FileEventProc procedure: eror in write event} -setup { +test io-44.4 {FileEventProc procedure: eror in write event} -constraints { + stdio unixExecs fileevent openpipe +} -setup { set f2 [open "|[list cat -u]" r+] set f3 [open "|[list cat -u]" r+] -} -constraints {stdio unixExecs fileevent openpipe} -body { - proc ::bgerror args "set [namespace which -variable x] \$args" + proc myHandler {msg options} { + variable x $msg + } + set handler [interp bgerror {}] + interp bgerror {} [namespace which myHandler] +} -body { fileevent $f2 writable {error bad-write} variable x initial vwait [namespace which -variable x] - rename ::bgerror {} list $x [fileevent $f2 writable] } -cleanup { + interp bgerror {} $handler catch {close $f2} catch {close $f3} } -result {bad-write {}} @@ -5542,9 +5539,9 @@ test io-44.5 {FileEventProc procedure: end of file} {stdio unixExecs openpipe fi set x } {initial foo eof} - close $f makeFile "foo bar" foo + test io-45.1 {DeleteFileEvent, cleanup on close} {fileevent} { set f [open $path(foo) r] fileevent $f readable [namespace code { @@ -5598,7 +5595,6 @@ test io-45.3 {DeleteFileEvent, cleanup on close} {fileevent} { } {0 {f script} 1 0 {f3 script} 0 {f script} 1 1 1 1 1} # Execute these tests only if the "testfevent" command is present. -testConstraint testfevent [llength [info commands testfevent]] test io-46.1 {Tcl event loop vs multiple interpreters} {testfevent fileevent} { testfevent create @@ -5798,10 +5794,8 @@ test io-48.2 {testing readability conditions} {nonBlockFiles fileevent} { vwait [namespace which -variable x] list $x $l } {done {called called called called called called called}} - set path(my_script) [makeFile {} my_script] - -test io-48.3 {testing readability conditions} {stdio unixOnly nonBlockFiles openpipe fileevent} { +test io-48.3 {testing readability conditions} {stdio unix nonBlockFiles openpipe fileevent} { set f [open $path(bar) w] puts $f abcdefg puts $f abcdefg @@ -6295,8 +6289,7 @@ test io-49.5 {testing crlf reading, leftover cr disgorgment} { close $f set l } [list 7 a\rb\rc 7 {} 7 1] - -testConstraint testchannelevent [llength [info commands testchannelevent]] + test io-50.1 {testing handler deletion} {testchannelevent} { file delete $path(test1) set f [open $path(test1) w] @@ -6375,8 +6368,8 @@ test io-50.4 {testing handler deletion vs reentrant calls} {testchannelevent} { update } } - set u toplevel - set z "" + variable u toplevel + variable z "" update close $f string compare [string tolower $z] \ @@ -6471,27 +6464,29 @@ test io-51.1 {Test old socket deletion on Macintosh} {socket} { close $s set wait done } - set ss [socket -server [namespace code accept] 0] + set ss [socket -server [namespace code accept] -myaddr 127.0.0.1 0] + set port [lindex [fconfigure $ss -sockname] 2] + variable wait "" - set cs [socket [info hostname] [lindex [fconfigure $ss -sockname] 2]] + set cs [socket 127.0.0.1 $port] vwait [namespace which -variable wait] lappend result [gets $cs] close $cs set wait "" - set cs [socket [info hostname] [lindex [fconfigure $ss -sockname] 2]] + set cs [socket 127.0.0.1 $port] vwait [namespace which -variable wait] lappend result [gets $cs] close $cs set wait "" - set cs [socket [info hostname] [lindex [fconfigure $ss -sockname] 2]] + set cs [socket 127.0.0.1 $port] vwait [namespace which -variable wait] lappend result [gets $cs] close $cs set wait "" - set cs [socket [info hostname] [lindex [fconfigure $ss -sockname] 2]] + set cs [socket 127.0.0.1 $port] vwait [namespace which -variable wait] lappend result [gets $cs] close $cs @@ -6584,7 +6579,7 @@ test io-52.5a {TclCopyChannel, all, other negative value} {fcopy} { } set result } {0 0 ok} -test io-52.5b {TclCopyChannel, all, wrap to negative value} {fcopy} { +test io-52.5b {TclCopyChannel, all, wrapped to negative value} {fcopy} { file delete $path(test1) set f1 [open $thisScript] set f2 [open $path(test1) w] @@ -6661,18 +6656,15 @@ test io-52.8 {TclCopyChannel} {stdio openpipe fcopy} { close $f2 list $s0 [file size $path(test1)] } {40 40} - # Empty files, to register them with the test facility set path(kyrillic.txt) [makeFile {} kyrillic.txt] set path(utf8-fcopy.txt) [makeFile {} utf8-fcopy.txt] set path(utf8-rp.txt) [makeFile {} utf8-rp.txt] - # Create kyrillic file, use lf translation to avoid os eol issues set out [open $path(kyrillic.txt) w] fconfigure $out -encoding koi8-r -translation lf puts $out "\u0410\u0410" close $out - test io-52.9 {TclCopyChannel & encodings} {fcopy} { # Copy kyrillic to UTF-8, using fcopy. @@ -6703,7 +6695,6 @@ test io-52.9 {TclCopyChannel & encodings} {fcopy} { [file size $path(utf8-fcopy.txt)] \ [file size $path(utf8-rp.txt)] } {3 5 5} - test io-52.10 {TclCopyChannel & encodings} {fcopy} { # encoding to binary (=> implies that the # internal utf-8 is written) @@ -6721,7 +6712,6 @@ test io-52.10 {TclCopyChannel & encodings} {fcopy} { file size $path(utf8-fcopy.txt) } 5 - test io-52.11 {TclCopyChannel & encodings} {fcopy} { # binary to encoding => the input has to be # in utf-8 to make sense to the encoder @@ -6771,7 +6761,7 @@ test io-53.2 {CopyData} {fcopy} { } set result } {0 0 ok} -test io-53.3 {CopyData: background read underflow} {stdio unixOnly openpipe fcopy} { +test io-53.3 {CopyData: background read underflow} {stdio unix openpipe fcopy} { file delete $path(test1) file delete $path(pipe) set f1 [open $path(pipe) w] @@ -6803,7 +6793,7 @@ test io-53.3 {CopyData: background read underflow} {stdio unixOnly openpipe fcop close $f set result } "ready line1 line2 {done\n}" -test io-53.4 {CopyData: background write overflow} {stdio unixOnly openpipe fileevent fcopy} { +test io-53.4 {CopyData: background write overflow} {stdio unix openpipe fileevent fcopy} { set big bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n variable x for {set x 0} {$x < 12} {incr x} { @@ -6841,7 +6831,6 @@ test io-53.4 {CopyData: background write overflow} {stdio unixOnly openpipe file set x } done set result {} - proc FcopyTestAccept {sock args} { after 1000 "close $sock" } @@ -6853,10 +6842,9 @@ proc FcopyTestDone {bytes {error {}}} { set fcopyTestDone 0 } } - test io-53.5 {CopyData: error during fcopy} {socket fcopy} { variable fcopyTestDone - set listen [socket -server [namespace code FcopyTestAccept] 0] + set listen [socket -server [namespace code FcopyTestAccept] -myaddr 127.0.0.1 0] set in [open $thisScript] ;# 126 K set out [socket 127.0.0.1 [lindex [fconfigure $listen -sockname] 2]] catch {unset fcopyTestDone} @@ -6889,24 +6877,20 @@ test io-53.6 {CopyData: error during fcopy} {stdio openpipe fcopy} { close $out set fcopyTestDone ;# 0 for plain end of file } {0} - proc doFcopy {in out {bytes 0} {error {}}} { variable fcopyTestDone variable fcopyTestCount incr fcopyTestCount $bytes if {[string length $error]} { - set fcopyTestDone 1 + set fcopyTestDone 1 } elseif {[eof $in]} { - set fcopyTestDone 0 + set fcopyTestDone 0 } else { # Delay next fcopy to wait for size>0 input bytes - after 100 [list - fcopy $in $out -size 1000 \ - -command [namespace code [list doFcopy $in $out]] - ] + after 100 [list fcopy $in $out -size 1000 \ + -command [namespace code [list doFcopy $in $out]]] } } - test io-53.7 {CopyData: Flooding fcopy from pipe} {stdio openpipe fcopy} { variable fcopyTestDone file delete $path(pipe) @@ -7027,6 +7011,44 @@ test io-53.8a {CopyData: async callback and error handling, Bug 1932639, at eof} removeFile foo removeFile bar } -result {1 sync/OK {CMD 0}} +test io-53.8b {CopyData: async callback and -size 0} -setup { + # copy progress callback. errors out intentionally + proc ::cmd args { + lappend ::RES "CMD $args" + set ::forever has-been-reached + return + } + # Files we use for our channels + set foo [makeFile ashgdfashdgfasdhgfasdhgf foo] + set bar [makeFile {} bar] + # Channels to copy between + set f [open $foo r] ; fconfigure $f -translation binary + set g [open $bar w] ; fconfigure $g -translation binary -buffering none +} -constraints {stdio openpipe fcopy} -body { + set ::RES {} + # Run the copy. Should not invoke -command now. + fcopy $f $g -size 0 -command ::cmd + # Check that -command was not called synchronously + lappend ::RES [expr {([llength $::RES] > 1) ? "sync/FAIL" : "sync/OK"}] + # Now let the async part happen. Should capture the eof in cmd + # If not break the event loop via timer. + set token [after 1000 { + lappend ::RES {cmd/FAIL timeout} + set ::forever has-been-reached + }] + vwait ::forever + catch {after cancel $token} + # Report + set ::RES +} -cleanup { + close $f + close $g + catch {unset ::RES} + catch {unset ::forever} + rename ::cmd {} + removeFile foo + removeFile bar +} -result {sync/OK {CMD 0}} test io-53.9 {CopyData: -size and event interaction, Bug 780533} -setup { set out [makeFile {} out] set err [makeFile {} err] @@ -7070,10 +7092,10 @@ test io-53.9 {CopyData: -size and event interaction, Bug 780533} -setup { } -cleanup { close $pipe rename ::done {} - after 1000 ;# Give Windows time to kill the process + after 1000; # Give Windows time to kill the process catch {close $out} - removeFile out - removeFile err + catch {removeFile out} + catch {removeFile err} catch {unset ::forever} } -result OK test io-53.10 {Bug 1350564, multi-directional fcopy} -setup { @@ -7199,14 +7221,14 @@ test io-54.1 {Recursive channel events} {socket fileevent} { } incr x } - set ss [socket -server [namespace code accept] 0] + set ss [socket -server [namespace code accept] -myaddr 127.0.0.1 0] # We need to delay on some systems until the creation of the # server socket completes. set done 0 for {set i 0} {$i < 10} {incr i} { - if {![catch {set cs [socket [info hostname] [lindex [fconfigure $ss -sockname] 2]]}]} { + if {![catch {set cs [socket 127.0.0.1 [lindex [fconfigure $ss -sockname] 2]]}]} { set done 1 break } @@ -7235,7 +7257,7 @@ test io-54.1 {Recursive channel events} {socket fileevent} { test io-54.2 {Testing for busy-wait in recursive channel events} {socket fileevent} { set accept {} set after {} - variable s [socket -server [namespace code accept] 0] + variable s [socket -server [namespace code accept] -myaddr 127.0.0.1 0] proc accept {s a p} { variable counter variable accept @@ -7294,7 +7316,9 @@ test io-54.2 {Testing for busy-wait in recursive channel events} {socket fileeve set path(fooBar) [makeFile {} fooBar] -test io-55.1 {ChannelEventScriptInvoker: deletion} {fileevent} { +test io-55.1 {ChannelEventScriptInvoker: deletion} -constraints { + fileevent +} -setup { variable x proc eventScript {fd} { variable x @@ -7302,13 +7326,20 @@ test io-55.1 {ChannelEventScriptInvoker: deletion} {fileevent} { error "planned error" set x whoops } - proc ::bgerror {args} "set [namespace which -variable x] got_error" + proc myHandler args { + variable x got_error + } + set handler [interp bgerror {}] + interp bgerror {} [namespace which myHandler] +} -body { set f [open $path(fooBar) w] fileevent $f writable [namespace code [list eventScript $f]] variable x not_done vwait [namespace which -variable x] set x -} {got_error} +} -cleanup { + interp bgerror {} $handler +} -result {got_error} test io-56.1 {ChannelTimerProc} {testchannelevent} { set f [open $path(fooBar) w] @@ -7336,7 +7367,7 @@ test io-57.1 {buffered data and file events, gets} {fileevent} { variable s2 set s2 $sock } - set server [socket -server [namespace code accept] 0] + set server [socket -server [namespace code accept] -myaddr 127.0.0.1 0] set s [socket 127.0.0.1 [lindex [fconfigure $server -sockname] 2]] variable s2 vwait [namespace which -variable s2] @@ -7359,7 +7390,7 @@ test io-57.2 {buffered data and file events, read} {fileevent} { variable s2 set s2 $sock } - set server [socket -server [namespace code accept] 0] + set server [socket -server [namespace code accept] -myaddr 127.0.0.1 0] set s [socket 127.0.0.1 [lindex [fconfigure $server -sockname] 2]] variable s2 vwait [namespace which -variable s2] @@ -7377,7 +7408,7 @@ test io-57.2 {buffered data and file events, read} {fileevent} { close $server set result } {1 readable 234567890 timer} - + test io-58.1 {Tcl_NotifyChannel and error when closing} {stdio unixOrPc openpipe fileevent} { set out [open $path(script) w] puts $out { @@ -7405,8 +7436,6 @@ test io-58.1 {Tcl_NotifyChannel and error when closing} {stdio unixOrPc openpipe list $x $result } {1 {gets {normal message from pipe} gets {} catch {error message from pipe}}} - -testConstraint testmainthread [llength [info commands testmainthread]] test io-59.1 {Thread reference of channels} {testmainthread testchannel} { # TIP #10 # More complicated tests (like that the reference changes as a @@ -7420,7 +7449,6 @@ test io-59.1 {Thread reference of channels} {testmainthread testchannel} { string equal $result [testmainthread] } {1} - test io-60.1 {writing illegal utf sequences} {openpipe fileevent} { # This test will hang in older revisions of the core. @@ -7479,6 +7507,279 @@ test io-61.1 {Reset eof state after changing the eof char} -setup { removeFile eofchar } -result {77 = 23431} + +# Test the cutting and splicing of channels, this is incidentially the +# attach/detach facility of package Thread, but __without any +# safeguards__. It can also be used to emulate transfer of channels +# between threads, and is used for that here. + +test io-70.0 {Cutting & Splicing channels} {testchannel} { + set f [makeFile {... dummy ...} cutsplice] + set c [open $f r] + + set res {} + lappend res [catch {seek $c 0 start}] + testchannel cut $c + + lappend res [catch {seek $c 0 start}] + testchannel splice $c + + lappend res [catch {seek $c 0 start}] + close $c + + removeFile cutsplice + + set res +} {0 1 0} + + +# Duplicate of code in "thread.test". Find a better way of doing this +# without duplication. Maybe placement into a proc which transforms to +# nop after the first call, and placement of its defintion in a +# central location. + +if {[testConstraint testthread]} { + testthread errorproc ThreadError + + proc ThreadError {id info} { + global threadError + set threadError $info + } + + proc ThreadNullError {id info} { + # ignore + } +} + +test io-70.1 {Transfer channel} {testchannel testthread} { + set f [makeFile {... dummy ...} cutsplice] + set c [open $f r] + + set res {} + lappend res [catch {seek $c 0 start}] + testchannel cut $c + lappend res [catch {seek $c 0 start}] + + set tid [testthread create] + testthread send $tid [list set c $c] + lappend res [testthread send $tid { + testchannel splice $c + set res [catch {seek $c 0 start}] + close $c + set res + }] + + tcltest::threadReap + removeFile cutsplice + + set res +} {0 1 0} + +# ### ### ### ######### ######### ######### + +foreach {n msg expected} { + 0 {} {} + 1 {{message only}} {{message only}} + 2 {-options x} {-options x} + 3 {-options {x y} {the message}} {-options {x y} {the message}} + + 4 {-code 1 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 5 {-code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 6 {-code 1 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 7 {-code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 8 {-code error -level 0 -f ba snarf} {-code error -level 0 -f ba snarf} + 9 {-code ok -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 10 {-code error -level 5 -f ba snarf} {-code error -level 0 -f ba snarf} + 11 {-code ok -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 12 {-code boss -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 13 {-code boss -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 14 {-code 1 -level 0 -f ba} {-code 1 -level 0 -f ba} + 15 {-code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + 16 {-code 1 -level 5 -f ba} {-code 1 -level 0 -f ba} + 17 {-code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + 18 {-code error -level 0 -f ba} {-code error -level 0 -f ba} + 19 {-code ok -level 0 -f ba} {-code 1 -level 0 -f ba} + 20 {-code error -level 5 -f ba} {-code error -level 0 -f ba} + 21 {-code ok -level 5 -f ba} {-code 1 -level 0 -f ba} + 22 {-code boss -level 0 -f ba} {-code 1 -level 0 -f ba} + 23 {-code boss -level 5 -f ba} {-code 1 -level 0 -f ba} + 24 {-code 1 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 25 {-code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 26 {-code error -level X -f ba snarf} {-code error -level 0 -f ba snarf} + 27 {-code ok -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 28 {-code boss -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 29 {-code 1 -level X -f ba} {-code 1 -level 0 -f ba} + 30 {-code 0 -level X -f ba} {-code 1 -level 0 -f ba} + 31 {-code error -level X -f ba} {-code error -level 0 -f ba} + 32 {-code ok -level X -f ba} {-code 1 -level 0 -f ba} + 33 {-code boss -level X -f ba} {-code 1 -level 0 -f ba} + + 34 {-code 1 -code 1 -level 0 -f ba snarf} {-code 1 -code 1 -level 0 -f ba snarf} + 35 {-code 1 -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 36 {-code 1 -code 1 -level 5 -f ba snarf} {-code 1 -code 1 -level 0 -f ba snarf} + 37 {-code 1 -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 38 {-code 1 -code error -level 0 -f ba snarf} {-code 1 -code error -level 0 -f ba snarf} + 39 {-code 1 -code ok -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 40 {-code 1 -code error -level 5 -f ba snarf} {-code 1 -code error -level 0 -f ba snarf} + 41 {-code 1 -code ok -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 42 {-code 1 -code boss -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 43 {-code 1 -code boss -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 44 {-code 1 -code 1 -level 0 -f ba} {-code 1 -code 1 -level 0 -f ba} + 45 {-code 1 -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + 46 {-code 1 -code 1 -level 5 -f ba} {-code 1 -code 1 -level 0 -f ba} + 47 {-code 1 -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + 48 {-code 1 -code error -level 0 -f ba} {-code 1 -code error -level 0 -f ba} + 49 {-code 1 -code ok -level 0 -f ba} {-code 1 -level 0 -f ba} + 50 {-code 1 -code error -level 5 -f ba} {-code 1 -code error -level 0 -f ba} + 51 {-code 1 -code ok -level 5 -f ba} {-code 1 -level 0 -f ba} + 52 {-code 1 -code boss -level 0 -f ba} {-code 1 -level 0 -f ba} + 53 {-code 1 -code boss -level 5 -f ba} {-code 1 -level 0 -f ba} + 54 {-code 1 -code 1 -level X -f ba snarf} {-code 1 -code 1 -level 0 -f ba snarf} + 55 {-code 1 -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 56 {-code 1 -code error -level X -f ba snarf} {-code 1 -code error -level 0 -f ba snarf} + 57 {-code 1 -code ok -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 58 {-code 1 -code boss -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 59 {-code 1 -code 1 -level X -f ba} {-code 1 -code 1 -level 0 -f ba} + 60 {-code 1 -code 0 -level X -f ba} {-code 1 -level 0 -f ba} + 61 {-code 1 -code error -level X -f ba} {-code 1 -code error -level 0 -f ba} + 62 {-code 1 -code ok -level X -f ba} {-code 1 -level 0 -f ba} + 63 {-code 1 -code boss -level X -f ba} {-code 1 -level 0 -f ba} + + 64 {-code 0 -code 1 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 65 {-code 0 -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 66 {-code 0 -code 1 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 67 {-code 0 -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 68 {-code 0 -code error -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 69 {-code 0 -code ok -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 70 {-code 0 -code error -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 71 {-code 0 -code ok -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 72 {-code 0 -code boss -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 73 {-code 0 -code boss -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 74 {-code 0 -code 1 -level 0 -f ba} {-code 1 -level 0 -f ba} + 75 {-code 0 -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + 76 {-code 0 -code 1 -level 5 -f ba} {-code 1 -level 0 -f ba} + 77 {-code 0 -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + 78 {-code 0 -code error -level 0 -f ba} {-code 1 -level 0 -f ba} + 79 {-code 0 -code ok -level 0 -f ba} {-code 1 -level 0 -f ba} + 80 {-code 0 -code error -level 5 -f ba} {-code 1 -level 0 -f ba} + 81 {-code 0 -code ok -level 5 -f ba} {-code 1 -level 0 -f ba} + 82 {-code 0 -code boss -level 0 -f ba} {-code 1 -level 0 -f ba} + 83 {-code 0 -code boss -level 5 -f ba} {-code 1 -level 0 -f ba} + 84 {-code 0 -code 1 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 85 {-code 0 -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 86 {-code 0 -code error -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 87 {-code 0 -code ok -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 88 {-code 0 -code boss -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + 89 {-code 0 -code 1 -level X -f ba} {-code 1 -level 0 -f ba} + 90 {-code 0 -code 0 -level X -f ba} {-code 1 -level 0 -f ba} + 91 {-code 0 -code error -level X -f ba} {-code 1 -level 0 -f ba} + 92 {-code 0 -code ok -level X -f ba} {-code 1 -level 0 -f ba} + 93 {-code 0 -code boss -level X -f ba} {-code 1 -level 0 -f ba} + + 94 {-code 1 -code 1 -level 0 -f ba snarf} {-code 1 -code 1 -level 0 -f ba snarf} + 95 {-code 0 -code 1 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 96 {-code 1 -code 1 -level 5 -f ba snarf} {-code 1 -code 1 -level 0 -f ba snarf} + 97 {-code 0 -code 1 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + 98 {-code error -code 1 -level 0 -f ba snarf} {-code error -code 1 -level 0 -f ba snarf} + 99 {-code ok -code 1 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + a0 {-code error -code 1 -level 5 -f ba snarf} {-code error -code 1 -level 0 -f ba snarf} + a1 {-code ok -code 1 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + a2 {-code boss -code 1 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + a3 {-code boss -code 1 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + a4 {-code 1 -code 1 -level 0 -f ba} {-code 1 -code 1 -level 0 -f ba} + a5 {-code 0 -code 1 -level 0 -f ba} {-code 1 -level 0 -f ba} + a6 {-code 1 -code 1 -level 5 -f ba} {-code 1 -code 1 -level 0 -f ba} + a7 {-code 0 -code 1 -level 5 -f ba} {-code 1 -level 0 -f ba} + a8 {-code error -code 1 -level 0 -f ba} {-code error -code 1 -level 0 -f ba} + a9 {-code ok -code 1 -level 0 -f ba} {-code 1 -level 0 -f ba} + b0 {-code error -code 1 -level 5 -f ba} {-code error -code 1 -level 0 -f ba} + b1 {-code ok -code 1 -level 5 -f ba} {-code 1 -level 0 -f ba} + b2 {-code boss -code 1 -level 0 -f ba} {-code 1 -level 0 -f ba} + b3 {-code boss -code 1 -level 5 -f ba} {-code 1 -level 0 -f ba} + b4 {-code 1 -code 1 -level X -f ba snarf} {-code 1 -code 1 -level 0 -f ba snarf} + b5 {-code 0 -code 1 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + b6 {-code error -code 1 -level X -f ba snarf} {-code error -code 1 -level 0 -f ba snarf} + b7 {-code ok -code 1 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + b8 {-code boss -code 1 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + b9 {-code 1 -code 1 -level X -f ba} {-code 1 -code 1 -level 0 -f ba} + c0 {-code 0 -code 1 -level X -f ba} {-code 1 -level 0 -f ba} + c1 {-code error -code 1 -level X -f ba} {-code error -code 1 -level 0 -f ba} + c2 {-code ok -code 1 -level X -f ba} {-code 1 -level 0 -f ba} + c3 {-code boss -code 1 -level X -f ba} {-code 1 -level 0 -f ba} + + c4 {-code 1 -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + c5 {-code 0 -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + c6 {-code 1 -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + c7 {-code 0 -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + c8 {-code error -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + c9 {-code ok -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + d0 {-code error -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + d1 {-code ok -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + d2 {-code boss -code 0 -level 0 -f ba snarf} {-code 1 -level 0 -f ba snarf} + d3 {-code boss -code 0 -level 5 -f ba snarf} {-code 1 -level 0 -f ba snarf} + d4 {-code 1 -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + d5 {-code 0 -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + d6 {-code 1 -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + d7 {-code 0 -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + d8 {-code error -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + d9 {-code ok -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + e0 {-code error -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + e1 {-code ok -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + e2 {-code boss -code 0 -level 0 -f ba} {-code 1 -level 0 -f ba} + e3 {-code boss -code 0 -level 5 -f ba} {-code 1 -level 0 -f ba} + e4 {-code 1 -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + e5 {-code 0 -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + e6 {-code error -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + e7 {-code ok -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + e8 {-code boss -code 0 -level X -f ba snarf} {-code 1 -level 0 -f ba snarf} + e9 {-code 1 -code 0 -level X -f ba} {-code 1 -level 0 -f ba} + f0 {-code 0 -code 0 -level X -f ba} {-code 1 -level 0 -f ba} + f1 {-code error -code 0 -level X -f ba} {-code 1 -level 0 -f ba} + f2 {-code ok -code 0 -level X -f ba} {-code 1 -level 0 -f ba} + f3 {-code boss -code 0 -level X -f ba} {-code 1 -level 0 -f ba} +} { + test io-71.$n {Tcl_SetChannelError} {testchannel} { + + set f [makeFile {... dummy ...} cutsplice] + set c [open $f r] + + set res [testchannel setchannelerror $c [lrange $msg 0 end]] + close $c + removeFile cutsplice + + set res + } [lrange $expected 0 end] + + test io-72.$n {Tcl_SetChannelErrorInterp} {testchannel} { + + set f [makeFile {... dummy ...} cutsplice] + set c [open $f r] + + set res [testchannel setchannelerrorinterp $c [lrange $msg 0 end]] + close $c + removeFile cutsplice + + set res + } [lrange $expected 0 end] +} + +test io-73.1 {channel Tcl_Obj SetChannelFromAny} {} { + # Test for Bug 1847044 - don't spoil type unless we have a valid channel + catch {close [lreplace [list a] 0 end]} +} {1} + +test io-73.2 {channel Tcl_Obj SetChannelFromAny, bug 2407783} {} { + # Invalidate intrep of 'channel' Tcl_Obj when transiting between interpreters. + interp create foo + set f [open [info script] r] + seek $f 0 + set code [catch {interp eval foo [list seek $f 0]} msg] + # The string map converts the changing channel handle to a fixed string + list $code [string map [list $f @@] $msg] +} {1 {can not find channel named "@@"}} + +# ### ### ### ######### ######### ######### + # cleanup foreach file [list fooBar longfile script output test1 pipe my_script \ test2 test3 cat stdout kyrillic.txt utf8-fcopy.txt utf8-rp.txt] { diff --git a/tests/ioCmd.test b/tests/ioCmd.test index 2d17d76..768a748 100644 --- a/tests/ioCmd.test +++ b/tests/ioCmd.test @@ -14,11 +14,16 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } -testConstraint fcopy [llength [info commands fcopy]] +# Custom constraints used in this file +testConstraint fcopy [llength [info commands fcopy]] +testConstraint testchannel [llength [info commands testchannel]] +testConstraint testthread [llength [info commands testthread]] + +#---------------------------------------------------------------------- test iocmd-1.1 {puts command} { list [catch {puts} msg] $msg @@ -28,7 +33,7 @@ test iocmd-1.2 {puts command} { } {1 {wrong # args: should be "puts ?-nonewline? ?channelId? string"}} test iocmd-1.3 {puts command} { list [catch {puts froboz -nonewline kablooie} msg] $msg -} {1 {bad argument "kablooie": should be "nonewline"}} +} {1 {wrong # args: should be "puts ?-nonewline? ?channelId? string"}} test iocmd-1.4 {puts command} { list [catch {puts froboz hello} msg] $msg } {1 {can not find channel named "froboz"}} @@ -60,7 +65,6 @@ test iocmd-1.8 {puts command} { file size $path(test1) } 9 - test iocmd-2.1 {flush command} { list [catch {flush} msg] $msg } {1 {wrong # args: should be "flush channelId"}} @@ -111,8 +115,8 @@ test iocmd-4.4 {read command} { list [catch {read -nonewline} msg] $msg } {1 {wrong # args: should be "read channelId ?numChars?" or "read ?-nonewline? channelId"}} test iocmd-4.5 {read command} { - list [catch {read -nonew file4} msg] $msg $errorCode -} {1 {can not find channel named "-nonew"} NONE} + list [catch {read -nonew file4} msg] $msg $::errorCode +} {1 {can not find channel named "-nonew"} {TCL LOOKUP CHANNEL -nonew}} test iocmd-4.6 {read command} { list [catch {read stdout} msg] $msg } {1 {channel "stdout" wasn't opened for reading}} @@ -126,32 +130,30 @@ test iocmd-4.8 {read command with incorrect combination of arguments} { puts $f "and this one" close $f set f [open $path(test1)] - set x [list [catch {read -nonewline $f 20 z} msg] $msg $errorCode] + set x [list [catch {read -nonewline $f 20 z} msg] $msg $::errorCode] close $f set x } {1 {wrong # args: should be "read channelId ?numChars?" or "read ?-nonewline? channelId"} NONE} test iocmd-4.9 {read command} { - list [catch {read stdin foo} msg] $msg $errorCode -} {1 {bad argument "foo": should be "nonewline"} NONE} + list [catch {read stdin foo} msg] $msg $::errorCode +} {1 {expected integer but got "foo"} {TCL VALUE NUMBER}} test iocmd-4.10 {read command} { - list [catch {read file107} msg] $msg $errorCode -} {1 {can not find channel named "file107"} NONE} - + list [catch {read file107} msg] $msg $::errorCode +} {1 {can not find channel named "file107"} {TCL LOOKUP CHANNEL file107}} set path(test3) [makeFile {} test3] - test iocmd-4.11 {read command} { set f [open $path(test3) w] - set x [list [catch {read $f} msg] $msg $errorCode] + set x [list [catch {read $f} msg] $msg $::errorCode] close $f string compare [string tolower $x] \ [list 1 [format "channel \"%s\" wasn't opened for reading" $f] none] } 0 test iocmd-4.12 {read command} { set f [open $path(test1)] - set x [list [catch {read $f 12z} msg] $msg $errorCode] + set x [list [catch {read $f 12z} msg] $msg $::errorCode] close $f set x -} {1 {expected integer but got "12z"} NONE} +} {1 {expected integer but got "12z"} {TCL VALUE NUMBER}} test iocmd-5.1 {seek command} { list [catch {seek} msg] $msg @@ -239,108 +241,109 @@ test iocmd-8.9 {fconfigure command} { test iocmd-8.10 {fconfigure command} { list [catch {fconfigure a b} msg] $msg } {1 {can not find channel named "a"}} - set path(fconfigure.dummy) [makeFile {} fconfigure.dummy] - test iocmd-8.11 {fconfigure command} { set chan [open $path(fconfigure.dummy) r] set res [list [catch {fconfigure $chan -froboz blarfo} msg] $msg] close $chan set res } {1 {bad option "-froboz": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, or -translation}} - test iocmd-8.12 {fconfigure command} { set chan [open $path(fconfigure.dummy) r] set res [list [catch {fconfigure $chan -b blarfo} msg] $msg] close $chan set res } {1 {bad option "-b": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, or -translation}} - test iocmd-8.13 {fconfigure command} { set chan [open $path(fconfigure.dummy) r] set res [list [catch {fconfigure $chan -buffer blarfo} msg] $msg] close $chan set res } {1 {bad option "-buffer": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, or -translation}} - removeFile fconfigure.dummy - test iocmd-8.14 {fconfigure command} { fconfigure stdin -buffers } 4096 - -proc iocmdSSETUP {} { - uplevel { - set srv [socket -server iocmdSRV 0] - set port [lindex [fconfigure $srv -sockname] 2] - proc iocmdSRV {sock ip port} {close $sock} - set cli [socket 127.0.0.1 $port] +test iocmd-8.15.1 {fconfigure command / tcp channel} -constraints {socket unixOrPc} -setup { + set srv [socket -server iocmdSRV -myaddr 127.0.0.1 0] + set port [lindex [fconfigure $srv -sockname] 2] + proc iocmdSRV {sock ip port} {close $sock} + set cli [socket 127.0.0.1 $port] +} -body { + fconfigure $cli -blah +} -cleanup { + close $cli + close $srv + unset cli srv port + rename iocmdSRV {} +} -returnCodes error -result {bad option "-blah": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, -translation, -peername, or -sockname} +test iocmd-8.16 {fconfigure command / tcp channel} -constraints socket -setup { + set srv [socket -server iocmdSRV -myaddr 127.0.0.1 0] + set port [lindex [fconfigure $srv -sockname] 2] + proc iocmdSRV {sock ip port} {close $sock} + set cli [socket 127.0.0.1 $port] +} -body { + expr {[lindex [fconfigure $cli -peername] 2] == $port} +} -cleanup { + close $cli + close $srv + unset cli srv port + rename iocmdSRV {} +} -result 1 +test iocmd-8.17 {fconfigure command / tcp channel} -constraints nonPortable -setup { + set srv [socket -server iocmdSRV -myaddr 127.0.0.1 0] + set port [lindex [fconfigure $srv -sockname] 2] + proc iocmdSRV {sock ip port} {close $sock} + set cli [socket 127.0.0.1 $port] +} -body { + # It is possible that you don't get the connection reset by peer + # error but rather a valid answer. Depends on the tcp implementation + update + puts $cli "blah" + flush $cli; # that flush could/should fail too + update + regsub -all {can([^:])+: } [catch {fconfigure $cli -peername} msg] {} +} -cleanup { + close $cli + close $srv + unset cli srv port + rename iocmdSRV {} +} -result 1 +test iocmd-8.18 {fconfigure command / unix tty channel} -constraints {nonPortable unix} -setup { + set tty "" +} -body { + # might fail if /dev/ttya is unavailable + set tty [open /dev/ttya] + fconfigure $tty -blah blih +} -cleanup { + if {$tty ne ""} { + close $tty } -} -proc iocmdSSHTDWN {} { - uplevel { - close $cli - close $srv - unset cli srv port - rename iocmdSRV {} +} -returnCodes error -result {bad option "-blah": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, -translation, or -mode} +test iocmd-8.19 {fconfigure command / win tty channel} -constraints {nonPortable win} -setup { + set tty "" +} -body { + # might fail early if com1 is unavailable + set tty [open com1] + fconfigure $tty -blah blih +} -cleanup { + if {$tty ne ""} { + close $tty } -} - -test iocmd-8.15.0 {fconfigure command / tcp channel} {socket macOnly} { - iocmdSSETUP - set r [list [catch {fconfigure $cli -blah} msg] $msg] - iocmdSSHTDWN - set r -} {1 {bad option "-blah": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, -translation, -error, -peername, or -sockname}} -test iocmd-8.15.1 {fconfigure command / tcp channel} {socket unixOrPc} { - iocmdSSETUP - set r [list [catch {fconfigure $cli -blah} msg] $msg] - iocmdSSHTDWN - set r -} {1 {bad option "-blah": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, -translation, -peername, or -sockname}} -test iocmd-8.16 {fconfigure command / tcp channel} {socket} { - iocmdSSETUP - set r [expr [lindex [fconfigure $cli -peername] 2]==$port] - iocmdSSHTDWN - set r -} 1 -test iocmd-8.17 {fconfigure command / tcp channel} {nonPortable} { - # It is possible that you don't get the connection reset by peer - # error but rather a valid answer. depends of the tcp implementation - iocmdSSETUP - update; - puts $cli "blah"; flush $cli; # that flush could/should fail too - update; - set r [catch {fconfigure $cli -peername} msg] - iocmdSSHTDWN - regsub -all {can([^:])+: } $r {} r; - set r -} 1 -test iocmd-8.18 {fconfigure command / unix tty channel} {nonPortable unixOnly} { - # might fail if /dev/ttya is unavailable - set tty [open /dev/ttya] - set r [list [catch {fconfigure $tty -blah blih} msg] $msg]; - close $tty; - set r; -} {1 {bad option "-blah": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, -translation, or -mode}} -test iocmd-8.19 {fconfigure command / win tty channel} {nonPortable pcOnly} { - # might fail if com1 is unavailable - set tty [open com1] - set r [list [catch {fconfigure $tty -blah blih} msg] $msg]; - close $tty; - set r; -} {1 {bad option "-blah": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, -translation, -mode, or -pollinterval}} +} -returnCodes error -result {bad option "-blah": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, -translation, -mode, -handshake, -pollinterval, -sysbuffer, -timeout, -ttycontrol, or -xchar} +# TODO: Test parsing of serial channel options (nonportable, since requires an +# open channel to work with). test iocmd-9.1 {eof command} { - list [catch {eof} msg] $msg $errorCode + list [catch {eof} msg] $msg $::errorCode } {1 {wrong # args: should be "eof channelId"} NONE} test iocmd-9.2 {eof command} { - list [catch {eof a b} msg] $msg $errorCode + list [catch {eof a b} msg] $msg $::errorCode } {1 {wrong # args: should be "eof channelId"} NONE} test iocmd-9.3 {eof command} { catch {close file100} - list [catch {eof file100} msg] $msg $errorCode -} {1 {can not find channel named "file100"} NONE} + list [catch {eof file100} msg] $msg $::errorCode +} {1 {can not find channel named "file100"} {TCL LOOKUP CHANNEL file100}} # The tests for Tcl_ExecObjCmd are in exec.test @@ -367,14 +370,17 @@ file delete $path(test5) test iocmd-11.1 {I/O to command pipelines} {unixOrPc unixExecs} { set f [open $path(test4) w] close $f - list [catch {open "| cat < $path(test4) > $path(test5)" w} msg] $msg $errorCode + list [catch {open "| cat < \"$path(test4)\" > \"$path(test5)\"" w} msg] $msg $::errorCode } {1 {can't write input to command: standard input was redirected} NONE} test iocmd-11.2 {I/O to command pipelines} {unixOrPc unixExecs} { - list [catch {open "| echo > $path(test5)" r} msg] $msg $errorCode + list [catch {open "| echo > \"$path(test5)\"" r} msg] $msg $::errorCode } {1 {can't read output from command: standard output was redirected} NONE} test iocmd-11.3 {I/O to command pipelines} {unixOrPc unixExecs} { - list [catch {open "| echo > $path(test5)" r+} msg] $msg $errorCode + list [catch {open "| echo > \"$path(test5)\"" r+} msg] $msg $::errorCode } {1 {can't read output from command: standard output was redirected} NONE} +test iocmd-11.4 {I/O to command pipelines} unixOrPc { + list [catch {open "| no_such_command_exists" rb} msg] $msg $::errorCode +} {1 {couldn't execute "no_such_command_exists": no such file or directory} {POSIX ENOENT {no such file or directory}}} test iocmd-12.1 {POSIX open access modes: RDONLY} { file delete $path(test1) @@ -399,7 +405,7 @@ test iocmd-12.3 {POSIX open access modes: WRONLY} -match regexp -body { # # Test 13.4 relies on assigning the same channel name twice. # -test iocmd-12.4 {POSIX open access modes: WRONLY} {unixOnly} { +test iocmd-12.4 {POSIX open access modes: WRONLY} {unix} { file delete $path(test3) set f [open $path(test3) w] fconfigure $f -eofchar {} @@ -423,7 +429,7 @@ test iocmd-12.5 {POSIX open access modes: RDWR} -match regexp -body { open $path(test3) RDWR } -returnCodes error -result {(?i)couldn't open ".*test3": no such file or directory} test iocmd-12.6 {POSIX open access modes: errors} { - concat [catch {open $path(test3) "FOO \{BAR BAZ"} msg] $msg\n$errorInfo + concat [catch {open $path(test3) "FOO \{BAR BAZ"} msg] $msg\n$::errorInfo } "1 unmatched open brace in list unmatched open brace in list while processing open access modes \"FOO {BAR BAZ\" @@ -431,11 +437,36 @@ unmatched open brace in list \"open \$path(test3) \"FOO \\{BAR BAZ\"\"" test iocmd-12.7 {POSIX open access modes: errors} { list [catch {open $path(test3) {FOO BAR BAZ}} msg] $msg -} {1 {invalid access mode "FOO": must be RDONLY, WRONLY, RDWR, APPEND, CREAT EXCL, NOCTTY, NONBLOCK, or TRUNC}} +} {1 {invalid access mode "FOO": must be RDONLY, WRONLY, RDWR, APPEND, BINARY, CREAT, EXCL, NOCTTY, NONBLOCK, or TRUNC}} test iocmd-12.8 {POSIX open access modes: errors} { list [catch {open $path(test3) {TRUNC CREAT}} msg] $msg } {1 {access mode must include either RDONLY, WRONLY, or RDWR}} close [open $path(test3) w] +test iocmd-12.9 {POSIX open access modes: BINARY} { + list [catch {open $path(test1) BINARY} msg] $msg +} {1 {access mode must include either RDONLY, WRONLY, or RDWR}} +test iocmd-12.10 {POSIX open access modes: BINARY} { + set f [open $path(test1) {WRONLY BINARY TRUNC}] + puts $f a + puts $f b + puts -nonewline $f c ;# contents are now 5 bytes: a\nb\nc + close $f + set f [open $path(test1) r] + fconfigure $f -translation binary + set result [string length [read $f]] + close $f + set result +} 5 +test iocmd-12.11 {POSIX open access modes: BINARY} { + set f [open $path(test1) {WRONLY BINARY TRUNC}] + puts $f \u0248 ;# gets truncated to \u0048 + close $f + set f [open $path(test1) r] + fconfigure $f -translation binary + set result [read -nonewline $f] + close $f + set result +} \u0048 test iocmd-13.1 {errors in open command} { list [catch {open} msg] $msg @@ -453,13 +484,20 @@ test iocmd-13.5 {errors in open command} { list [catch {open $path(test1) r+1} msg] $msg } {1 {illegal access mode "r+1"}} test iocmd-13.6 {errors in open command} { - set msg [list [catch {open _non_existent_} msg] $msg $errorCode] + set msg [list [catch {open _non_existent_} msg] $msg $::errorCode] regsub [file join {} _non_existent_] $msg "_non_existent_" msg - string tolower $msg + string tolower $msg } {1 {couldn't open "_non_existent_": no such file or directory} {posix enoent {no such file or directory}}} - - -test iocmd-13.7.1 {open for append, a mode} -setup { +test iocmd-13.7 {errors in open command} { + list [catch {open $path(test1) b} msg] $msg +} {1 {illegal access mode "b"}} +test iocmd-13.8 {errors in open command} { + list [catch {open $path(test1) rbb} msg] $msg +} {1 {illegal access mode "rbb"}} +test iocmd-13.9 {errors in open command} { + list [catch {open $path(test1) r++} msg] $msg +} {1 {illegal access mode "r++"}} +test iocmd-13.10.1 {open for append, a mode} -setup { set log [makeFile {} out] set chans {} } -body { @@ -474,8 +512,7 @@ test iocmd-13.7.1 {open for append, a mode} -setup { # Ensure that channels are gone, even if body failed to do so foreach ch $chans {catch {close $ch}} } -result {0 1 2 3 4 5 6 7 8 9} - -test iocmd-13.7.2 {open for append, O_APPEND} -setup { +test iocmd-13.10.2 {open for append, O_APPEND} -setup { set log [makeFile {} out] set chans {} } -body { @@ -491,12 +528,9 @@ test iocmd-13.7.2 {open for append, O_APPEND} -setup { foreach ch $chans {catch {close $ch}} } -result {0 1 2 3 4 5 6 7 8 9} - - - test iocmd-14.1 {file id parsing errors} { - list [catch {eof gorp} msg] $msg $errorCode -} {1 {can not find channel named "gorp"} NONE} + list [catch {eof gorp} msg] $msg $::errorCode +} {1 {can not find channel named "gorp"} {TCL LOOKUP CHANNEL gorp}} test iocmd-14.2 {file id parsing errors} { list [catch {eof filex} msg] $msg } {1 {can not find channel named "filex"}} @@ -547,10 +581,8 @@ test iocmd-15.5 {Tcl_FcopyObjCmd} {fcopy} { } {1 {wrong # args: should be "fcopy input output ?-size size? ?-command callback?"}} set path(test2) [makeFile {} test2] - set f [open $path(test1) w] close $f - set rfile [open $path(test1) r] set wfile [open $path(test2) w] @@ -576,10 +608,2938 @@ test iocmd-15.12 {Tcl_FcopyObjCmd} {fcopy} { list [catch {fcopy $rfile $wfile -command bar -size foo} msg] $msg } {1 {expected integer but got "foo"}} - close $rfile close $wfile +# ### ### ### ######### ######### ######### +## Testing the reflected channel. + +test iocmd-20.0 {chan, wrong#args} { + catch {chan} msg + set msg +} {wrong # args: should be "chan subcommand ?argument ...?"} +test iocmd-20.1 {chan, unknown method} { + catch {chan foo} msg + set msg +} {unknown or ambiguous subcommand "foo": must be blocked, close, configure, copy, create, eof, event, flush, gets, names, pending, postevent, puts, read, seek, tell, or truncate} + +# --- --- --- --------- --------- --------- +# chan create, and method "initalize" + +test iocmd-21.0 {chan create, wrong#args, not enough} { + catch {chan create} msg + set msg +} {wrong # args: should be "chan create mode cmdprefix"} +test iocmd-21.1 {chan create, wrong#args, too many} { + catch {chan create a b c} msg + set msg +} {wrong # args: should be "chan create mode cmdprefix"} +test iocmd-21.2 {chan create, invalid r/w mode, empty} { + proc foo {} {} + catch {chan create {} foo} msg + rename foo {} + set msg +} {bad mode list: is empty} +test iocmd-21.3 {chan create, invalid r/w mode, bad string} { + proc foo {} {} + catch {chan create {c} foo} msg + rename foo {} + set msg +} {bad mode "c": must be read or write} +test iocmd-21.4 {chan create, bad handler, not a list} { + catch {chan create {r w} "foo \{"} msg + set msg +} {unmatched open brace in list} +test iocmd-21.5 {chan create, bad handler, not a command} { + catch {chan create {r w} foo} msg + set msg +} {invalid command name "foo"} +test iocmd-21.6 {chan create, initialize failed, bad signature} { + proc foo {} {} + catch {chan create {r w} foo} msg + rename foo {} + set msg +} {wrong # args: should be "foo"} +test iocmd-21.7 {chan create, initialize failed, bad signature} { + proc foo {} {} + catch {chan create {r w} ::foo} msg + rename foo {} + set msg +} {wrong # args: should be "::foo"} +test iocmd-21.8 {chan create, initialize failed, bad result, not a list} -body { + proc foo {args} {return "\{"} + catch {chan create {r w} foo} msg + rename foo {} + set ::errorInfo +} -match glob -result {chan handler "foo initialize" returned non-list: *} +test iocmd-21.9 {chan create, initialize failed, bad result, not a list} -body { + proc foo {args} {return \{\{\}} + catch {chan create {r w} foo} msg + rename foo {} + set msg +} -match glob -result {chan handler "foo initialize" returned non-list: *} +test iocmd-21.10 {chan create, initialize failed, bad result, empty list} -body { + proc foo {args} {} + catch {chan create {r w} foo} msg + rename foo {} + set msg +} -match glob -result {*all required methods*} +test iocmd-21.11 {chan create, initialize failed, bad result, bogus method name} -body { + proc foo {args} {return 1} + catch {chan create {r w} foo} msg + rename foo {} + set msg +} -match glob -result {*bad method "1": must be *} +test iocmd-21.12 {chan create, initialize failed, bad result, bogus method name} -body { + proc foo {args} {return {a b c}} + catch {chan create {r w} foo} msg + rename foo {} + set msg +} -match glob -result {*bad method "c": must be *} +test iocmd-21.13 {chan create, initialize failed, bad result, required methods missing} -body { + proc foo {args} {return {initialize finalize}} + catch {chan create {r w} foo} msg + rename foo {} + set msg +} -match glob -result {*all required methods*} +test iocmd-21.14 {chan create, initialize failed, bad result, mode/handler mismatch} -body { + proc foo {args} {return {initialize finalize watch read}} + catch {chan create {r w} foo} msg + rename foo {} + set msg +} -match glob -result {*lacks a "write" method} +test iocmd-21.15 {chan create, initialize failed, bad result, mode/handler mismatch} -body { + proc foo {args} {return {initialize finalize watch write}} + catch {chan create {r w} foo} msg + rename foo {} + set msg +} -match glob -result {*lacks a "read" method} +test iocmd-21.16 {chan create, initialize failed, bad result, cget(all) mismatch} -body { + proc foo {args} {return {initialize finalize watch cget write read}} + catch {chan create {r w} foo} msg + rename foo {} + set msg +} -match glob -result {*supports "cget" but not "cgetall"} +test iocmd-21.17 {chan create, initialize failed, bad result, cget(all) mismatch} -body { + proc foo {args} {return {initialize finalize watch cgetall read write}} + catch {chan create {r w} foo} msg + rename foo {} + set msg +} -match glob -result {*supports "cgetall" but not "cget"} +test iocmd-21.18 {chan create, initialize ok, creates channel} -match glob -body { + proc foo {args} { + global res + lappend res $args + if {[lindex $args 0] ne "initialize"} {return} + return {initialize finalize watch read write} + } + set res {} + lappend res [file channel rc*] + lappend res [chan create {r w} foo] + lappend res [close [lindex $res end]] + lappend res [file channel rc*] + rename foo {} + set res +} -result {{} {initialize rc* {read write}} rc* {finalize rc*} {} {}} +test iocmd-21.19 {chan create, init failure -> no channel, no finalize} -match glob -body { + proc foo {args} { + global res + lappend res $args + return {} + } + set res {} + lappend res [file channel rc*] + lappend res [catch {chan create {r w} foo} msg] + lappend res $msg + lappend res [file channel rc*] + rename foo {} + set res +} -result {{} {initialize rc* {read write}} 1 {*all required methods*} {}} + +# --- --- --- --------- --------- --------- +# Helper commands to record the arguments to handler methods. + +# Stored in a script so that the threads and interpreters needing this +# code do not need their own copy but can access this variable. + +set helperscript { + +proc note {item} {global res; lappend res $item; return} +proc track {} {upvar args item; note $item; return} +proc notes {items} {foreach i $items {note $i}} +# This forces the return options to be in the order that the test expects! +proc noteOpts opts {global res; lappend res [dict merge { + -code !?! -level !?! -errorcode !?! -errorline !?! -errorinfo !?! +} $opts]; return} + +# Helper command, canned result for 'initialize' method. +# Gets the optional methods as arguments. Use return features +# to post the result higher up. + +proc init {args} { + lappend args initialize finalize watch read write + return -code return $args +} +proc oninit {args} { + upvar args hargs + if {[lindex $hargs 0] ne "initialize"} {return} + lappend args initialize finalize watch read write + return -code return $args +} +proc onfinal {} { + upvar args hargs + if {[lindex $hargs 0] ne "finalize"} {return} + return -code return "" +} +} + +# Set everything up in the main thread. +eval $helperscript + +# --- --- --- --------- --------- --------- +# method finalize + +test iocmd-22.1 {chan finalize, handler destruction has no effect on channel} -match glob -body { + set res {} + proc foo {args} {track; oninit; return} + note [set c [chan create {r w} foo]] + rename foo {} + note [file channels rc*] + note [catch {close $c} msg]; note $msg + note [file channels rc*] + set res +} -result {{initialize rc* {read write}} rc* rc* 1 {invalid command name "foo"} {}} +test iocmd-22.2 {chan finalize, for close} -match glob -body { + set res {} + proc foo {args} {track; oninit; return {}} + note [set c [chan create {r w} foo]] + close $c + # Close deleted the channel. + note [file channels rc*] + # Channel destruction does not kill handler command! + note [info command foo] + rename foo {} + set res +} -result {{initialize rc* {read write}} rc* {finalize rc*} {} foo} +test iocmd-22.3 {chan finalize, for close, error, close error} -match glob -body { + set res {} + proc foo {args} {track; oninit; return -code error 5} + note [set c [chan create {r w} foo]] + note [catch {close $c} msg]; note $msg + # Channel is gone despite error. + note [file channels rc*] + rename foo {} + set res +} -result {{initialize rc* {read write}} rc* {finalize rc*} 1 5 {}} +test iocmd-22.4 {chan finalize, for close, error, close error} -match glob -body { + set res {} + proc foo {args} {track; oninit; error FOO} + note [set c [chan create {r w} foo]] + note [catch {close $c} msg]; note $msg; note $::errorInfo + rename foo {} + set res +} -result {{initialize rc* {read write}} rc* {finalize rc*} 1 FOO {FOO +*"close $c"}} +test iocmd-22.5 {chan finalize, for close, arbitrary result, ignored} -match glob -body { + set res {} + proc foo {args} {track; oninit; return SOMETHING} + note [set c [chan create {r w} foo]] + note [catch {close $c} msg]; note $msg + rename foo {} + set res +} -result {{initialize rc* {read write}} rc* {finalize rc*} 0 {}} +test iocmd-22.6 {chan finalize, for close, break, close error} -match glob -body { + set res {} + proc foo {args} {track; oninit; return -code 3} + note [set c [chan create {r w} foo]] + note [catch {close $c} msg]; note $msg + rename foo {} + set res +} -result {{initialize rc* {read write}} rc* {finalize rc*} 1 *bad code*} +test iocmd-22.7 {chan finalize, for close, continue, close error} -match glob -body { + set res {} + proc foo {args} {track; oninit; return -code 4} + note [set c [chan create {r w} foo]] + note [catch {close $c} msg]; note $msg + rename foo {} + set res +} -result {{initialize rc* {read write}} rc* {finalize rc*} 1 *bad code*} +test iocmd-22.8 {chan finalize, for close, custom code, close error} -match glob -body { + set res {} + proc foo {args} {track; oninit; return -code 777 BANG} + note [set c [chan create {r w} foo]] + note [catch {close $c} msg]; note $msg + rename foo {} + set res +} -result {{initialize rc* {read write}} rc* {finalize rc*} 1 *bad code*} +test iocmd-22.9 {chan finalize, for close, ignore level, close error} -match glob -setup { + set res {} +} -body { + proc foo {args} {track; oninit; return -level 5 -code 777 BANG} + note [set c [chan create {r w} foo]] + note [catch {close $c} msg opt]; note $msg; noteOpts $opt + return $res +} -cleanup { + rename foo {} +} -result {{initialize rc* {read write}} rc* {finalize rc*} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "finalize"*}} + +# --- === *** ########################### +# method read + +test iocmd-23.1 {chan read, regular data return} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return snarf + } + set c [chan create {r w} foo] + note [read $c 10] + close $c + rename foo {} + set res +} -result {{read rc* 4096} {read rc* 4096} snarfsnarf} +test iocmd-23.2 {chan read, bad data return, to much} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return [string repeat snarf 1000] + } + set c [chan create {r w} foo] + note [catch {read $c 2} msg]; note $msg + close $c + rename foo {} + set res +} -result {{read rc* 4096} 1 {read delivered more than requested}} +test iocmd-23.3 {chan read, for non-readable channel} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track; note MUST_NOT_HAPPEN + } + set c [chan create {w} foo] + note [catch {read $c 2} msg]; note $msg + close $c + rename foo {} + set res +} -result {1 {channel "rc*" wasn't opened for reading}} +test iocmd-23.4 {chan read, error return} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return -code error BOOM! + } + set c [chan create {r w} foo] + note [catch {read $c 2} msg]; note $msg + close $c + rename foo {} + set res +} -result {{read rc* 4096} 1 BOOM!} +test iocmd-23.5 {chan read, break return is error} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return -code break BOOM! + } + set c [chan create {r w} foo] + note [catch {read $c 2} msg]; note $msg + close $c + rename foo {} + set res +} -result {{read rc* 4096} 1 *bad code*} +test iocmd-23.6 {chan read, continue return is error} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return -code continue BOOM! + } + set c [chan create {r w} foo] + note [catch {read $c 2} msg]; note $msg + close $c + rename foo {} + set res +} -result {{read rc* 4096} 1 *bad code*} +test iocmd-23.7 {chan read, custom return is error} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return -code 777 BOOM! + } + set c [chan create {r w} foo] + note [catch {read $c 2} msg]; note $msg + close $c + rename foo {} + set res +} -result {{read rc* 4096} 1 *bad code*} +test iocmd-23.8 {chan read, level is squashed} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return -level 55 -code 777 BOOM! + } + set c [chan create {r w} foo] + note [catch {read $c 2} msg opt]; note $msg; noteOpts $opt + close $c + rename foo {} + set res +} -result {{read rc* 4096} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "read"*}} +test iocmd-23.9 {chan read, no data means eof} -match glob -setup { + set res {} + proc foo {args} { + oninit; onfinal; track + return "" + } + set c [chan create {r w} foo] +} -body { + note [read $c 2] + note [eof $c] + set res +} -cleanup { + close $c + rename foo {} + unset res +} -result {{read rc* 4096} {} 1} +test iocmd-23.10 {chan read, EAGAIN means no data, yet no eof either} -match glob -setup { + set res {} + proc foo {args} { + oninit; onfinal; track + error EAGAIN + } + set c [chan create {r w} foo] +} -body { + note [read $c 2] + note [eof $c] + set res +} -cleanup { + close $c + rename foo {} + unset res +} -result {{read rc* 4096} {} 0} + +# --- === *** ########################### +# method write + +test iocmd-24.1 {chan write, regular write} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + set written [string length [lindex $args 2]] + note $written + return $written + } + set c [chan create {r w} foo] + puts -nonewline $c snarf; flush $c + close $c + rename foo {} + set res +} -result {{write rc* snarf} 5} +test iocmd-24.2 {chan write, partial write is ok} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + set written [string length [lindex $args 2]] + if {$written > 10} {set written [expr {$written / 2}]} + note $written + return $written + } + set c [chan create {r w} foo] + puts -nonewline $c snarfsnarfsnarf; flush $c + close $c + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 7 {write rc* arfsnarf} 8} +test iocmd-24.3 {chan write, failed write} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note -1; return -1} + set c [chan create {r w} foo] + puts -nonewline $c snarfsnarfsnarf; flush $c + close $c + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} -1} +test iocmd-24.4 {chan write, non-writable channel} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r} foo] + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {1 {channel "rc*" wasn't opened for writing}} +test iocmd-24.5 {chan write, bad result, more written than data} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return 10000} + set c [chan create {r w} foo] + note [catch {puts -nonewline $c snarf; flush $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{write rc* snarf} 1 {write wrote more than requested}} +test iocmd-24.6 {chan write, bad result, zero-length write} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return 0} + set c [chan create {r w} foo] + note [catch {puts -nonewline $c snarf; flush $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{write rc* snarf} 1 {write wrote nothing}} +test iocmd-24.7 {chan write, failed write, error return} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return -code error BOOM!} + set c [chan create {r w} foo] + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg] + note $msg + close $c + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 BOOM!} +test iocmd-24.8 {chan write, failed write, error return} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; error BOOM!} + set c [chan create {r w} foo] + notes [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg] + note $msg + close $c + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 BOOM!} +test iocmd-24.9 {chan write, failed write, break return is error} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return -code break BOOM!} + set c [chan create {r w} foo] + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg] + note $msg + close $c + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 *bad code*} +test iocmd-24.10 {chan write, failed write, continue return is error} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return -code continue BOOM!} + set c [chan create {r w} foo] + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg] + note $msg + close $c + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 *bad code*} +test iocmd-24.11 {chan write, failed write, custom return is error} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return -code 777 BOOM!} + set c [chan create {r w} foo] + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg] + note $msg + close $c + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 *bad code*} +test iocmd-24.12 {chan write, failed write, non-numeric return is error} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return BANG} + set c [chan create {r w} foo] + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg] + note $msg + close $c + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 {expected integer but got "BANG"}} +test iocmd-24.13 {chan write, failed write, level is ignored} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return -level 55 -code 777 BOOM!} + set c [chan create {r w} foo] + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg opt] + note $msg + noteOpts $opt + close $c + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "write"*}} +test iocmd-24.14 {chan write, no EAGAIN means that writing is allowed at this time, bug 2936225} -match glob -setup { + set res {} + proc foo {args} { + oninit; onfinal; track + return 3 + } + set c [chan create {r w} foo] +} -body { + note [puts -nonewline $c ABC ; flush $c] + set res +} -cleanup { + close $c + rename foo {} + unset res +} -result {{write rc* ABC} {}} +test iocmd-24.15 {chan write, EAGAIN means that writing is not allowed at this time, bug 2936225} -match glob -setup { + set res {} + proc foo {args} { + oninit; onfinal; track + # Note: The EAGAIN signals that the channel cannot accept + # write requests right now, this in turn causes the IO core to + # request the generation of writable events (see expected + # result below, and compare to case 24.14 above). + error EAGAIN + } + set c [chan create {r w} foo] +} -body { + note [puts -nonewline $c ABC ; flush $c] + set res +} -cleanup { + close $c + rename foo {} + unset res +} -result {{write rc* ABC} {watch rc* write} {}} + +# --- === *** ########################### +# method cgetall + +test iocmd-25.1 {chan configure, cgetall, standard options} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r w} foo] + note [fconfigure $c] + close $c + rename foo {} + set res +} -result {{-blocking 1 -buffering full -buffersize 4096 -encoding * -eofchar {{} {}} -translation {auto *}}} +test iocmd-25.2 {chan configure, cgetall, no options} -match glob -body { + set res {} + proc foo {args} {oninit cget cgetall; onfinal; track; return ""} + set c [chan create {r w} foo] + note [fconfigure $c] + close $c + rename foo {} + set res +} -result {{cgetall rc*} {-blocking 1 -buffering full -buffersize 4096 -encoding * -eofchar {{} {}} -translation {auto *}}} +test iocmd-25.3 {chan configure, cgetall, regular result} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return "-bar foo -snarf x" + } + set c [chan create {r w} foo] + note [fconfigure $c] + close $c + rename foo {} + set res +} -result {{cgetall rc*} {-blocking 1 -buffering full -buffersize 4096 -encoding * -eofchar {{} {}} -translation {auto *} -bar foo -snarf x}} +test iocmd-25.4 {chan configure, cgetall, bad result, list of uneven length} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return "-bar" + } + set c [chan create {r w} foo] + note [catch {fconfigure $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{cgetall rc*} 1 {Expected list with even number of elements, got 1 element instead}} +test iocmd-25.5 {chan configure, cgetall, bad result, not a list} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return "\{" + } + set c [chan create {r w} foo] + note [catch {fconfigure $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{cgetall rc*} 1 {unmatched open brace in list}} +test iocmd-25.6 {chan configure, cgetall, error return} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code error BOOM! + } + set c [chan create {r w} foo] + note [catch {fconfigure $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{cgetall rc*} 1 BOOM!} +test iocmd-25.7 {chan configure, cgetall, break return is error} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code break BOOM! + } + set c [chan create {r w} foo] + note [catch {fconfigure $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{cgetall rc*} 1 *bad code*} +test iocmd-25.8 {chan configure, cgetall, continue return is error} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code continue BOOM! + } + set c [chan create {r w} foo] + note [catch {fconfigure $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{cgetall rc*} 1 *bad code*} +test iocmd-25.9 {chan configure, cgetall, custom return is error} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code 777 BOOM! + } + set c [chan create {r w} foo] + note [catch {fconfigure $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{cgetall rc*} 1 *bad code*} +test iocmd-25.10 {chan configure, cgetall, level is ignored} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -level 55 -code 777 BANG + } + set c [chan create {r w} foo] + note [catch {fconfigure $c} msg opt]; note $msg; noteOpts $opt + close $c + rename foo {} + set res +} -result {{cgetall rc*} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "cgetall"*}} + +# --- === *** ########################### +# method configure + +test iocmd-26.1 {chan configure, set standard option} -match glob -body { + set res {} + proc foo {args} { + oninit configure; onfinal; track; note MUST_NOT_HAPPEN; return + } + set c [chan create {r w} foo] + note [fconfigure $c -translation lf] + close $c + rename foo {} + set res +} -result {{}} +test iocmd-26.2 {chan configure, set option, error return} -match glob -body { + set res {} + proc foo {args} { + oninit configure; onfinal; track + return -code error BOOM! + } + set c [chan create {r w} foo] + note [catch {fconfigure $c -rc-foo bar} msg]; note $msg + close $c + rename foo {} + set res +} -result {{configure rc* -rc-foo bar} 1 BOOM!} +test iocmd-26.3 {chan configure, set option, ok return} -match glob -body { + set res {} + proc foo {args} {oninit configure; onfinal; track; return} + set c [chan create {r w} foo] + note [fconfigure $c -rc-foo bar] + close $c + rename foo {} + set res +} -result {{configure rc* -rc-foo bar} {}} +test iocmd-26.4 {chan configure, set option, break return is error} -match glob -body { + set res {} + proc foo {args} { + oninit configure; onfinal; track + return -code break BOOM! + } + set c [chan create {r w} foo] + note [catch {fconfigure $c -rc-foo bar} msg]; note $msg + close $c + rename foo {} + set res +} -result {{configure rc* -rc-foo bar} 1 *bad code*} +test iocmd-26.5 {chan configure, set option, continue return is error} -match glob -body { + set res {} + proc foo {args} { + oninit configure; onfinal; track + return -code continue BOOM! + } + set c [chan create {r w} foo] + note [catch {fconfigure $c -rc-foo bar} msg]; note $msg + close $c + rename foo {} + set res +} -result {{configure rc* -rc-foo bar} 1 *bad code*} +test iocmd-26.6 {chan configure, set option, custom return is error} -match glob -body { + set res {} + proc foo {args} { + oninit configure; onfinal; track + return -code 444 BOOM! + } + set c [chan create {r w} foo] + note [catch {fconfigure $c -rc-foo bar} msg]; note $msg + close $c + rename foo {} + set res +} -result {{configure rc* -rc-foo bar} 1 *bad code*} +test iocmd-26.7 {chan configure, set option, level is ignored} -match glob -body { + set res {} + proc foo {args} { + oninit configure; onfinal; track + return -level 55 -code 444 BANG + } + set c [chan create {r w} foo] + note [catch {fconfigure $c -rc-foo bar} msg opt]; note $msg; noteOpts $opt + close $c + rename foo {} + set res +} -result {{configure rc* -rc-foo bar} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "configure"*}} + +# --- === *** ########################### +# method cget + +test iocmd-27.1 {chan configure, get option, ok return} -match glob -body { + set res {} + proc foo {args} {oninit cget cgetall; onfinal; track; return foo} + set c [chan create {r w} foo] + note [fconfigure $c -rc-foo] + close $c + rename foo {} + set res +} -result {{cget rc* -rc-foo} foo} +test iocmd-27.2 {chan configure, get option, error return} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code error BOOM! + } + set c [chan create {r w} foo] + note [catch {fconfigure $c -rc-foo} msg]; note $msg + close $c + rename foo {} + set res +} -result {{cget rc* -rc-foo} 1 BOOM!} +test iocmd-27.3 {chan configure, get option, break return is error} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code error BOOM! + } + set c [chan create {r w} foo] + note [catch {fconfigure $c -rc-foo} msg]; note $msg + close $c + rename foo {} + set res +} -result {{cget rc* -rc-foo} 1 BOOM!} +test iocmd-27.4 {chan configure, get option, continue return is error} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code continue BOOM! + } + set c [chan create {r w} foo] + note [catch {fconfigure $c -rc-foo} msg]; note $msg + close $c + rename foo {} + set res +} -result {{cget rc* -rc-foo} 1 *bad code*} +test iocmd-27.5 {chan configure, get option, custom return is error} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code 333 BOOM! + } + set c [chan create {r w} foo] + note [catch {fconfigure $c -rc-foo} msg]; note $msg + close $c + rename foo {} + set res +} -result {{cget rc* -rc-foo} 1 *bad code*} +test iocmd-27.6 {chan configure, get option, level is ignored} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -level 77 -code 333 BANG + } + set c [chan create {r w} foo] + note [catch {fconfigure $c -rc-foo} msg opt]; note $msg; noteOpts $opt + close $c + rename foo {} + set res +} -result {{cget rc* -rc-foo} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "cget"*}} + +# --- === *** ########################### +# method seek + +test iocmd-28.1 {chan tell, not supported by handler} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r w} foo] + note [tell $c] + close $c + rename foo {} + set res +} -result {-1} +test iocmd-28.2 {chan tell, error return} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code error BOOM!} + set c [chan create {r w} foo] + note [catch {tell $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{seek rc* 0 current} 1 BOOM!} +test iocmd-28.3 {chan tell, break return is error} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code break BOOM!} + set c [chan create {r w} foo] + note [catch {tell $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{seek rc* 0 current} 1 *bad code*} +test iocmd-28.4 {chan tell, continue return is error} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code continue BOOM!} + set c [chan create {r w} foo] + note [catch {tell $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{seek rc* 0 current} 1 *bad code*} +test iocmd-28.5 {chan tell, custom return is error} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code 222 BOOM!} + set c [chan create {r w} foo] + note [catch {tell $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{seek rc* 0 current} 1 *bad code*} +test iocmd-28.6 {chan tell, level is ignored} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -level 11 -code 222 BANG} + set c [chan create {r w} foo] + note [catch {tell $c} msg opt]; note $msg; noteOpts $opt + close $c + rename foo {} + set res +} -result {{seek rc* 0 current} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "seek"*}} +test iocmd-28.7 {chan tell, regular return} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return 88} + set c [chan create {r w} foo] + note [tell $c] + close $c + rename foo {} + set res +} -result {{seek rc* 0 current} 88} +test iocmd-28.8 {chan tell, negative return} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -1} + set c [chan create {r w} foo] + note [catch {tell $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{seek rc* 0 current} 1 {Tried to seek before origin}} +test iocmd-28.9 {chan tell, string return} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return BOGUS} + set c [chan create {r w} foo] + note [catch {tell $c} msg]; note $msg + close $c + rename foo {} + set res +} -result {{seek rc* 0 current} 1 {expected integer but got "BOGUS"}} +test iocmd-28.10 {chan seek, not supported by handler} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r w} foo] + note [catch {seek $c 0 start} msg]; note $msg + close $c + rename foo {} + set res +} -result {1 {error during seek on "rc*": invalid argument}} +test iocmd-28.11 {chan seek, error return} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code error BOOM!} + set c [chan create {r w} foo] + note [catch {seek $c 0 start} msg]; note $msg + close $c + rename foo {} + set res +} -result {{seek rc* 0 start} 1 BOOM!} +test iocmd-28.12 {chan seek, break return is error} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code break BOOM!} + set c [chan create {r w} foo] + note [catch {seek $c 0 start} msg]; note $msg + close $c + rename foo {} + set res +} -result {{seek rc* 0 start} 1 *bad code*} +test iocmd-28.13 {chan seek, continue return is error} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code continue BOOM!} + set c [chan create {r w} foo] + note [catch {seek $c 0 start} msg]; note $msg + close $c + rename foo {} + set res +} -result {{seek rc* 0 start} 1 *bad code*} +test iocmd-28.14 {chan seek, custom return is error} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code 99 BOOM!} + set c [chan create {r w} foo] + note [catch {seek $c 0 start} msg]; note $msg + close $c + rename foo {} + set res +} -result {{seek rc* 0 start} 1 *bad code*} +test iocmd-28.15 {chan seek, level is ignored} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -level 33 -code 99 BANG} + set c [chan create {r w} foo] + note [catch {seek $c 0 start} msg opt]; note $msg; noteOpts $opt + close $c + rename foo {} + set res +} -result {{seek rc* 0 start} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "seek"*}} +test iocmd-28.16 {chan seek, bogus return, negative location} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -45} + set c [chan create {r w} foo] + note [catch {seek $c 0 start} msg]; note $msg + close $c + rename foo {} + set res +} -result {{seek rc* 0 start} 1 {Tried to seek before origin}} +test iocmd-28.17 {chan seek, bogus return, string return} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return BOGUS} + set c [chan create {r w} foo] + note [catch {seek $c 0 start} msg]; note $msg + close $c + rename foo {} + set res +} -result {{seek rc* 0 start} 1 {expected integer but got "BOGUS"}} +test iocmd-28.18 {chan seek, ok result} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return 23} + set c [chan create {r w} foo] + note [seek $c 0 current] + close $c + rename foo {} + set res +} -result {{seek rc* 0 current} {}} +foreach {testname code} { + iocmd-28.19.0 start + iocmd-28.19.1 current + iocmd-28.19.2 end +} { + test $testname "chan seek, base conversion, $code" -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return 0} + set c [chan create {r w} foo] + note [seek $c 0 $code] + close $c + rename foo {} + set res + } -result [list [list seek rc* 0 $code] {}] +} + +# --- === *** ########################### +# method blocking + +test iocmd-29.1 {chan blocking, no handler support} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r w} foo] + note [fconfigure $c -blocking] + close $c + rename foo {} + set res +} -result {1} +test iocmd-29.2 {chan blocking, no handler support} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r w} foo] + note [fconfigure $c -blocking 0] + note [fconfigure $c -blocking] + close $c + rename foo {} + set res +} -result {{} 0} +test iocmd-29.3 {chan blocking, retrieval, handler support} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r w} foo] + note [fconfigure $c -blocking] + close $c + rename foo {} + set res +} -result {1} +test iocmd-29.4 {chan blocking, resetting, handler support} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; return} + set c [chan create {r w} foo] + note [fconfigure $c -blocking 0] + note [fconfigure $c -blocking] + close $c + rename foo {} + set res +} -result {{blocking rc* 0} {} 0} +test iocmd-29.5 {chan blocking, setting, handler support} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; return} + set c [chan create {r w} foo] + note [fconfigure $c -blocking 1] + note [fconfigure $c -blocking] + close $c + rename foo {} + set res +} -result {{blocking rc* 1} {} 1} +test iocmd-29.6 {chan blocking, error return} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; error BOOM!} + set c [chan create {r w} foo] + note [catch {fconfigure $c -blocking 0} msg]; note $msg + # Catch the close. It changes blocking mode internally, and runs into the error result. + catch {close $c} + rename foo {} + set res +} -result {{blocking rc* 0} 1 BOOM!} +test iocmd-29.7 {chan blocking, break return is error} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; return -code break BOOM!} + set c [chan create {r w} foo] + note [catch {fconfigure $c -blocking 0} msg]; note $msg + catch {close $c} + rename foo {} + set res +} -result {{blocking rc* 0} 1 *bad code*} +test iocmd-29.8 {chan blocking, continue return is error} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; return -code continue BOOM!} + set c [chan create {r w} foo] + note [catch {fconfigure $c -blocking 0} msg]; note $msg + catch {close $c} + rename foo {} + set res +} -result {{blocking rc* 0} 1 *bad code*} +test iocmd-29.9 {chan blocking, custom return is error} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; return -code 44 BOOM!} + set c [chan create {r w} foo] + note [catch {fconfigure $c -blocking 0} msg]; note $msg + catch {close $c} + rename foo {} + set res +} -result {{blocking rc* 0} 1 *bad code*} +test iocmd-29.10 {chan blocking, level is ignored} -match glob -setup { + set res {} +} -body { + proc foo {args} {oninit blocking; onfinal; track; return -level 99 -code 44 BANG} + set c [chan create {r w} foo] + note [catch {fconfigure $c -blocking 0} msg opt]; note $msg; noteOpts $opt + catch {close $c} + return $res +} -cleanup { + rename foo {} +} -result {{blocking rc* 0} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "blocking"*}} +test iocmd-29.11 {chan blocking, regular return ok, value ignored} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; return BOGUS} + set c [chan create {r w} foo] + note [catch {fconfigure $c -blocking 0} msg]; note $msg + catch {close $c} + rename foo {} + set res +} -result {{blocking rc* 0} 0 {}} + +# --- === *** ########################### +# method watch + +test iocmd-30.1 {chan watch, read interest, some return} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return IGNORED} + set c [chan create {r w} foo] + note [fileevent $c readable {set tick $tick}] + close $c ;# 2nd watch, interest zero. + rename foo {} + set res +} -result {{watch rc* read} {} {watch rc* {}}} +test iocmd-30.2 {chan watch, write interest, error return} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return -code error BOOM!_IGNORED} + set c [chan create {r w} foo] + note [fileevent $c writable {set tick $tick}] + note [fileevent $c writable {}] + close $c + rename foo {} + set res +} -result {{watch rc* write} {} {watch rc* {}} {}} +test iocmd-30.3 {chan watch, accumulated interests} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return} + set c [chan create {r w} foo] + note [fileevent $c writable {set tick $tick}] + note [fileevent $c readable {set tick $tick}] + note [fileevent $c writable {}] + note [fileevent $c readable {}] + close $c + rename foo {} + set res +} -result {{watch rc* write} {} {watch rc* {read write}} {} {watch rc* read} {} {watch rc* {}} {}} +test iocmd-30.4 {chan watch, unchanged interest not forwarded} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return} + set c [chan create {r w} foo] + note [fileevent $c writable {set tick $tick}] + note [fileevent $c readable {set tick $tick}] ;# Script is changing, + note [fileevent $c readable {set tock $tock}] ;# interest does not. + close $c ;# 3rd and 4th watch, removing the event handlers. + rename foo {} + set res +} -result {{watch rc* write} {} {watch rc* {read write}} {} {} {watch rc* write} {watch rc* {}}} + +# --- === *** ########################### +# chan postevent + +test iocmd-31.1 {chan postevent, restricted to reflected channels} -match glob -body { + set c [open [makeFile {} goo] r] + catch {chan postevent $c {r w}} msg + close $c + removeFile goo + set msg +} -result {can not find reflected channel named "file*"} +test iocmd-31.2 {chan postevent, unwanted events} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return} + set c [chan create {r w} foo] + catch {chan postevent $c {r w}} msg; note $msg + close $c + rename foo {} + set res +} -result {{tried to post events channel "rc*" is not interested in}} +test iocmd-31.3 {chan postevent, bad input, empty list} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return} + set c [chan create {r w} foo] + catch {chan postevent $c {}} msg; note $msg + close $c + rename foo {} + set res +} -result {{bad event list: is empty}} +test iocmd-31.4 {chan postevent, bad input, illlegal keyword} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return} + set c [chan create {r w} foo] + catch {chan postevent $c goo} msg; note $msg + close $c + rename foo {} + set res +} -result {{bad event "goo": must be read or write}} +test iocmd-31.5 {chan postevent, bad input, not a list} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return} + set c [chan create {r w} foo] + catch {chan postevent $c "\{"} msg; note $msg + close $c + rename foo {} + set res +} -result {{unmatched open brace in list}} +test iocmd-31.6 {chan postevent, posted events do happen} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return} + set c [chan create {r w} foo] + note [fileevent $c readable {note TOCK}] + set stop [after 10000 {note TIMEOUT}] + after 1000 {note [chan postevent $c r]} + vwait ::res + catch {after cancel $stop} + close $c + rename foo {} + set res +} -result {{watch rc* read} {} TOCK {} {watch rc* {}}} +test iocmd-31.7 {chan postevent, posted events do happen} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return} + set c [chan create {r w} foo] + note [fileevent $c writable {note TOCK}] + set stop [after 10000 {note TIMEOUT}] + after 1000 {note [chan postevent $c w]} + vwait ::res + catch {after cancel $stop} + close $c + rename foo {} + set res +} -result {{watch rc* write} {} TOCK {} {watch rc* {}}} +test iocmd-31.8 {chan postevent after close throws error} -match glob -setup { + proc foo {args} {oninit; onfinal; track; return} + proc dummy args { return } + set c [chan create {r w} foo] + fileevent $c readable dummy +} -body { + close $c + chan postevent $c read +} -cleanup { + rename foo {} + rename dummy {} +} -returnCodes error -result {can not find reflected channel named "rc*"} + +# --- === *** ########################### +# 'Pull the rug' tests. Create channel in a interpreter A, move to +# other interpreter B, destroy the origin interpreter (A) before or +# during access from B. Must not crash, must return proper errors. + +test iocmd-32.0 {origin interpreter of moved channel gone} -match glob -body { + + set ida [interp create];#puts <<$ida>> + set idb [interp create];#puts <<$idb>> + + # Magic to get the test* commands in the slaves + load {} Tcltest $ida + load {} Tcltest $idb + + # Set up channel in interpreter + interp eval $ida $helperscript + set chan [interp eval $ida { + proc foo {args} {oninit seek; onfinal; track; return} + set chan [chan create {r w} foo] + fconfigure $chan -buffering none + set chan + }] + + # Move channel to 2nd interpreter. + interp eval $ida [list testchannel cut $chan] + interp eval $idb [list testchannel splice $chan] + + # Kill origin interpreter, then access channel from 2nd interpreter. + interp delete $ida + + set res {} + lappend res [catch {interp eval $idb [list puts $chan shoo]} msg] $msg + lappend res [catch {interp eval $idb [list tell $chan]} msg] $msg + lappend res [catch {interp eval $idb [list seek $chan 1]} msg] $msg + lappend res [catch {interp eval $idb [list gets $chan]} msg] $msg + lappend res [catch {interp eval $idb [list close $chan]} msg] $msg + set res + +} -constraints {testchannel} \ + -result {1 {Owner lost} 1 {Owner lost} 1 {Owner lost} 1 {Owner lost} 1 {Owner lost}} + +test iocmd-32.1 {origin interpreter of moved channel destroyed during access} -match glob -body { + + set ida [interp create];#puts <<$ida>> + set idb [interp create];#puts <<$idb>> + + # Magic to get the test* commands in the slaves + load {} Tcltest $ida + load {} Tcltest $idb + + # Set up channel in thread + set chan [interp eval $ida $helperscript] + set chan [interp eval $ida { + proc foo {args} { + oninit; onfinal; track; + # destroy interpreter during channel access + # Actually not possible for an interp to destroy itself. + interp delete {} + return} + set chan [chan create {r w} foo] + fconfigure $chan -buffering none + set chan + }] + + # Move channel to 2nd thread. + interp eval $ida [list testchannel cut $chan] + interp eval $idb [list testchannel splice $chan] + + # Run access from interpreter B, this will give us a synchronous + # response. + + interp eval $idb [list set chan $chan] + interp eval $idb [list set mid $tcltest::mainThread] + set res [interp eval $idb { + # wait a bit, give the main thread the time to start its event + # loop to wait for the response from B + after 2000 + catch { puts $chan shoo } res + set res + }] + set res +} -constraints {testchannel impossible} \ + -result {Owner lost} + +test iocmd-32.2 {delete interp of reflected chan} { + # Bug 3034840 + # Run this test in an interp with memory debugging to panic + # on the double free + interp create slave + slave eval { + proc no-op args {} + proc driver {sub args} {return {initialize finalize watch read}} + chan event [chan create read driver] readable no-op + } + interp delete slave +} {} + +# ### ### ### ######### ######### ######### +## Same tests as above, but exercising the code forwarding and +## receiving driver operations to the originator thread. + +# -*- tcl -*- +# ### ### ### ######### ######### ######### +## Testing the reflected channel (Thread forwarding). +# +## The id numbers refer to the original test without thread +## forwarding, and gaps due to tests not applicable to forwarding are +## left to keep this asociation. + +# Duplicate of code in "thread.test". Find a better way of doing this +# without duplication. Maybe placement into a proc which transforms to +# nop after the first call, and placement of its defintion in a +# central location. + +if {[testConstraint testthread]} { + testthread errorproc ThreadError + + proc ThreadError {id info} { + global threadError + set threadError $info + } + proc ThreadNullError {id info} { + # ignore + } +} + +# ### ### ### ######### ######### ######### +## Helper command. Runs a script in a separate thread and returns the +## result. A channel is transfered into the thread as well, and list of +## configuation variables + +proc inthread {chan script args} { + # Test thread. + + set tid [testthread create] + + # Init thread configuration. + # - Listed variables + # - Id of main thread + # - A number of helper commands + + foreach v $args { + upvar 1 $v x + testthread send $tid [list set $v $x] + } + testthread send $tid [list set mid $tcltest::mainThread] + testthread send $tid { + proc note {item} {global notes; lappend notes $item} + proc notes {} {global notes; return $notes} + proc noteOpts opts {global notes; lappend notes [dict merge { + -code !?! -level !?! -errorcode !?! -errorline !?! -errorinfo !?! + } $opts]} + } + testthread send $tid [list proc s {} [list uplevel 1 $script]]; # (*) + + # Transfer channel (cut/splice aka detach/attach) + + testchannel cut $chan + testthread send $tid [list testchannel splice $chan] + + # Run test script, also run local event loop! + # The local event loop waits for the result to come back. + # It is also necessary for the execution of forwarded channel + # operations. + + set ::tres "" + testthread send -async $tid { + after 500 + catch {s} res; # This runs the script, 's' was defined at (*) + testthread send -async $mid [list set ::tres $res] + } + vwait ::tres + # Remove test thread, and return the captured result. + + tcltest::threadReap + return $::tres +} + +# ### ### ### ######### ######### ######### + +# ### ### ### ######### ######### ######### + +test iocmd.tf-22.2 {chan finalize, for close} -match glob -body { + set res {} + proc foo {args} {track; oninit; return {}} + note [set c [chan create {r w} foo]] + note [inthread $c { + close $c + # Close the deleted the channel. + file channels rc* + } c] + # Channel destruction does not kill handler command! + note [info command foo] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{initialize rc* {read write}} rc* {finalize rc*} {} foo} +test iocmd.tf-22.3 {chan finalize, for close, error, close error} -match glob -body { + set res {} + proc foo {args} {track; oninit; return -code error 5} + note [set c [chan create {r w} foo]] + notes [inthread $c { + note [catch {close $c} msg]; note $msg + # Channel is gone despite error. + note [file channels rc*] + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{initialize rc* {read write}} rc* {finalize rc*} 1 5 {}} +test iocmd.tf-22.4 {chan finalize, for close, error, close errror} -match glob -body { + set res {} + proc foo {args} {track; oninit; error FOO} + note [set c [chan create {r w} foo]] + notes [inthread $c { + note [catch {close $c} msg]; note $msg + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{initialize rc* {read write}} rc* {finalize rc*} 1 FOO} +test iocmd.tf-22.5 {chan finalize, for close, arbitrary result} -match glob -body { + set res {} + proc foo {args} {track; oninit; return SOMETHING} + note [set c [chan create {r w} foo]] + notes [inthread $c { + note [catch {close $c} msg]; note $msg + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{initialize rc* {read write}} rc* {finalize rc*} 0 {}} +test iocmd.tf-22.6 {chan finalize, for close, break, close error} -match glob -body { + set res {} + proc foo {args} {track; oninit; return -code 3} + note [set c [chan create {r w} foo]] + notes [inthread $c { + note [catch {close $c} msg]; note $msg + notes + } c] + rename foo {} + set res +} -result {{initialize rc* {read write}} rc* {finalize rc*} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-22.7 {chan finalize, for close, continue, close error} -match glob -body { + set res {} + proc foo {args} {track; oninit; return -code 4} + note [set c [chan create {r w} foo]] + notes [inthread $c { + note [catch {close $c} msg]; note $msg + notes + } c] + rename foo {} + set res +} -result {{initialize rc* {read write}} rc* {finalize rc*} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-22.8 {chan finalize, for close, custom code, close error} -match glob -body { + set res {} + proc foo {args} {track; oninit; return -code 777 BANG} + note [set c [chan create {r w} foo]] + notes [inthread $c { + note [catch {close $c} msg]; note $msg + notes + } c] + rename foo {} + set res +} -result {{initialize rc* {read write}} rc* {finalize rc*} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-22.9 {chan finalize, for close, ignore level, close error} -match glob -body { + set res {} + proc foo {args} {track; oninit; return -level 5 -code 777 BANG} + note [set c [chan create {r w} foo]] + notes [inthread $c { + note [catch {close $c} msg opt]; note $msg; noteOpts $opt + notes + } c] + rename foo {} + set res +} -result {{initialize rc* {read write}} rc* {finalize rc*} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "finalize"*}} \ + -constraints {testchannel testthread} + +# --- === *** ########################### +# method read + +test iocmd.tf-23.1 {chan read, regular data return} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return snarf + } + set c [chan create {r w} foo] + notes [inthread $c { + note [read $c 10] + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{read rc* 4096} {read rc* 4096} snarfsnarf} +test iocmd.tf-23.2 {chan read, bad data return, to much} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return [string repeat snarf 1000] + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {[read $c 2]} msg]; note $msg + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{read rc* 4096} 1 {read delivered more than requested}} +test iocmd.tf-23.3 {chan read, for non-readable channel} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track; note MUST_NOT_HAPPEN + } + set c [chan create {w} foo] + notes [inthread $c { + note [catch {[read $c 2]} msg]; note $msg + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {1 {channel "rc*" wasn't opened for reading}} +test iocmd.tf-23.4 {chan read, error return} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return -code error BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {read $c 2} msg]; note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{read rc* 4096} 1 BOOM!} \ + -constraints {testchannel testthread} +test iocmd.tf-23.5 {chan read, break return is error} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return -code break BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {read $c 2} msg]; note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{read rc* 4096} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-23.6 {chan read, continue return is error} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return -code continue BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {read $c 2} msg]; note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{read rc* 4096} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-23.7 {chan read, custom return is error} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return -code 777 BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {read $c 2} msg]; note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{read rc* 4096} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-23.8 {chan read, level is squashed} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + return -level 55 -code 777 BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {read $c 2} msg opt]; note $msg; noteOpts $opt + close $c + notes + } c] + rename foo {} + set res +} -result {{read rc* 4096} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "read"*}} \ + -constraints {testchannel testthread} +test iocmd.tf-23.9 {chan read, no data means eof} -match glob -setup { + set res {} + proc foo {args} { + oninit; onfinal; track + return "" + } + set c [chan create {r w} foo] +} -body { + notes [inthread $c { + note [read $c 2] + note [eof $c] + close $c + notes + } c] + set res +} -cleanup { + rename foo {} + unset res +} -result {{read rc* 4096} {} 1} \ + -constraints {testchannel testthread} +test iocmd.tf-23.10 {chan read, EAGAIN means no data, yet no eof either} -match glob -setup { + set res {} + proc foo {args} { + oninit; onfinal; track + error EAGAIN + } + set c [chan create {r w} foo] +} -body { + notes [inthread $c { + note [read $c 2] + note [eof $c] + close $c + notes + } c] + set res +} -cleanup { + rename foo {} + unset res +} -result {{read rc* 4096} {} 0} \ + -constraints {testchannel testthread} + +# --- === *** ########################### +# method write + +test iocmd.tf-24.1 {chan write, regular write} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + set written [string length [lindex $args 2]] + note $written + return $written + } + set c [chan create {r w} foo] + inthread $c { + puts -nonewline $c snarf; flush $c + close $c + } c + rename foo {} + set res +} -constraints {testchannel testthread} -result {{write rc* snarf} 5} +test iocmd.tf-24.2 {chan write, ack partial writes} -match glob -body { + set res {} + proc foo {args} { + oninit; onfinal; track + set written [string length [lindex $args 2]] + if {$written > 10} {set written [expr {$written / 2}]} + note $written + return $written + } + set c [chan create {r w} foo] + inthread $c { + puts -nonewline $c snarfsnarfsnarf; flush $c + close $c + } c + rename foo {} + set res +} -constraints {testchannel testthread} -result {{write rc* snarfsnarfsnarf} 7 {write rc* arfsnarf} 8} +test iocmd.tf-24.3 {chan write, failed write} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note -1; return -1} + set c [chan create {r w} foo] + inthread $c { + puts -nonewline $c snarfsnarfsnarf; flush $c + close $c + } c + rename foo {} + set res +} -constraints {testchannel testthread} -result {{write rc* snarfsnarfsnarf} -1} +test iocmd.tf-24.4 {chan write, non-writable channel} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r} foo] + notes [inthread $c { + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {1 {channel "rc*" wasn't opened for writing}} +test iocmd.tf-24.5 {chan write, bad result, more written than data} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return 10000} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {puts -nonewline $c snarf; flush $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{write rc* snarf} 1 {write wrote more than requested}} +test iocmd.tf-24.6 {chan write, zero writes} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return 0} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {puts -nonewline $c snarf; flush $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{write rc* snarf} 1 {write wrote more than requested}} +test iocmd.tf-24.7 {chan write, failed write, error return} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return -code error BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 BOOM!} \ + -constraints {testchannel testthread} +test iocmd.tf-24.8 {chan write, failed write, error return} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; error BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 BOOM!} \ + -constraints {testchannel testthread} +test iocmd.tf-24.9 {chan write, failed write, break return is error} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return -code break BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-24.10 {chan write, failed write, continue return is error} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return -code continue BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-24.11 {chan write, failed write, custom return is error} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return -code 777 BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-24.12 {chan write, failed write, non-numeric return is error} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return BANG} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 {expected integer but got "BANG"}} \ + -constraints {testchannel testthread} +test iocmd.tf-24.13 {chan write, failed write, level is ignored} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return -level 55 -code 777 BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {puts -nonewline $c snarfsnarfsnarf; flush $c} msg opt] + note $msg + noteOpts $opt + close $c + notes + } c] + rename foo {} + set res +} -result {{write rc* snarfsnarfsnarf} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "write"*}} \ + -constraints {testchannel testthread} +test iocmd.tf-24.14 {chan write, no EAGAIN means that writing is allowed at this time, bug 2936225} -match glob -setup { + set res {} + proc foo {args} { + oninit; onfinal; track + return 3 + } + set c [chan create {r w} foo] +} -body { + notes [inthread $c { + note [puts -nonewline $c ABC ; flush $c] + close $c + notes + } c] + set res +} -cleanup { + rename foo {} + unset res +} -result {{write rc* ABC} {}} \ + -constraints {testchannel testthread} +test iocmd.tf-24.15 {chan write, EAGAIN means that writing is not allowed at this time, bug 2936225} -match glob -setup { + set res {} + proc foo {args} { + oninit; onfinal; track + # Note: The EAGAIN signals that the channel cannot accept + # write requests right now, this in turn causes the IO core to + # request the generation of writable events (see expected + # result below, and compare to case 24.14 above). + error EAGAIN + } + set c [chan create {r w} foo] +} -body { + notes [inthread $c { + note [puts -nonewline $c ABC ; flush $c] + close $c + notes + } c] + set res +} -cleanup { + rename foo {} + unset res +} -result {{write rc* ABC} {watch rc* write} {}} \ + -constraints {testchannel testthread} + +# --- === *** ########################### +# method cgetall + +test iocmd.tf-25.1 {chan configure, cgetall, standard options} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r w} foo] + notes [inthread $c { + note [fconfigure $c] + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} \ + -result {{-blocking 1 -buffering full -buffersize 4096 -encoding * -eofchar {{} {}} -translation {auto *}}} +test iocmd.tf-25.2 {chan configure, cgetall, no options} -match glob -body { + set res {} + proc foo {args} {oninit cget cgetall; onfinal; track; return ""} + set c [chan create {r w} foo] + notes [inthread $c { + note [fconfigure $c] + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} \ + -result {{cgetall rc*} {-blocking 1 -buffering full -buffersize 4096 -encoding * -eofchar {{} {}} -translation {auto *}}} +test iocmd.tf-25.3 {chan configure, cgetall, regular result} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return "-bar foo -snarf x" + } + set c [chan create {r w} foo] + notes [inthread $c { + note [fconfigure $c] + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} \ + -result {{cgetall rc*} {-blocking 1 -buffering full -buffersize 4096 -encoding * -eofchar {{} {}} -translation {auto *} -bar foo -snarf x}} +test iocmd.tf-25.4 {chan configure, cgetall, bad result, list of uneven length} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return "-bar" + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{cgetall rc*} 1 {Expected list with even number of elements, got 1 element instead}} +test iocmd.tf-25.5 {chan configure, cgetall, bad result, not a list} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return "\{" + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{cgetall rc*} 1 {unmatched open brace in list}} +test iocmd.tf-25.6 {chan configure, cgetall, error return} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code error BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{cgetall rc*} 1 BOOM!} +test iocmd.tf-25.7 {chan configure, cgetall, break return is error} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code break BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{cgetall rc*} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-25.8 {chan configure, cgetall, continue return is error} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code continue BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{cgetall rc*} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-25.9 {chan configure, cgetall, custom return is error} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code 777 BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{cgetall rc*} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-25.10 {chan configure, cgetall, level is ignored} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -level 55 -code 777 BANG + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c} msg opt] + note $msg + noteOpts $opt + close $c + notes + } c] + rename foo {} + set res +} -result {{cgetall rc*} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "cgetall"*}} \ + -constraints {testchannel testthread} + +# --- === *** ########################### +# method configure + +test iocmd.tf-26.1 {chan configure, set standard option} -match glob -body { + set res {} + proc foo {args} { + oninit configure; onfinal; track; note MUST_NOT_HAPPEN; return + } + set c [chan create {r w} foo] + notes [inthread $c { + note [fconfigure $c -translation lf] + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{}} +test iocmd.tf-26.2 {chan configure, set option, error return} -match glob -body { + set res {} + proc foo {args} { + oninit configure; onfinal; track + return -code error BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -rc-foo bar} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{configure rc* -rc-foo bar} 1 BOOM!} +test iocmd.tf-26.3 {chan configure, set option, ok return} -match glob -body { + set res {} + proc foo {args} {oninit configure; onfinal; track; return} + set c [chan create {r w} foo] + notes [inthread $c { + note [fconfigure $c -rc-foo bar] + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{configure rc* -rc-foo bar} {}} +test iocmd.tf-26.4 {chan configure, set option, break return is error} -match glob -body { + set res {} + proc foo {args} { + oninit configure; onfinal; track + return -code break BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -rc-foo bar} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{configure rc* -rc-foo bar} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-26.5 {chan configure, set option, continue return is error} -match glob -body { + set res {} + proc foo {args} { + oninit configure; onfinal; track + return -code continue BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -rc-foo bar} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{configure rc* -rc-foo bar} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-26.6 {chan configure, set option, custom return is error} -match glob -body { + set res {} + proc foo {args} { + oninit configure; onfinal; track + return -code 444 BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -rc-foo bar} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{configure rc* -rc-foo bar} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-26.7 {chan configure, set option, level is ignored} -match glob -body { + set res {} + proc foo {args} { + oninit configure; onfinal; track + return -level 55 -code 444 BANG + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -rc-foo bar} msg opt] + note $msg + noteOpts $opt + close $c + notes + } c] + rename foo {} + set res +} -result {{configure rc* -rc-foo bar} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "configure"*}} \ + -constraints {testchannel testthread} + +# --- === *** ########################### +# method cget + +test iocmd.tf-27.1 {chan configure, get option, ok return} -match glob -body { + set res {} + proc foo {args} {oninit cget cgetall; onfinal; track; return foo} + set c [chan create {r w} foo] + notes [inthread $c { + note [fconfigure $c -rc-foo] + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{cget rc* -rc-foo} foo} +test iocmd.tf-27.2 {chan configure, get option, error return} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code error BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -rc-foo} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{cget rc* -rc-foo} 1 BOOM!} +test iocmd.tf-27.3 {chan configure, get option, break return is error} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code error BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -rc-foo} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{cget rc* -rc-foo} 1 BOOM!} \ + -constraints {testchannel testthread} +test iocmd.tf-27.4 {chan configure, get option, continue return is error} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code continue BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -rc-foo} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{cget rc* -rc-foo} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-27.5 {chan configure, get option, custom return is error} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -code 333 BOOM! + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -rc-foo} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{cget rc* -rc-foo} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-27.6 {chan configure, get option, level is ignored} -match glob -body { + set res {} + proc foo {args} { + oninit cget cgetall; onfinal; track + return -level 77 -code 333 BANG + } + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -rc-foo} msg opt] + note $msg + noteOpts $opt + close $c + notes + } c] + rename foo {} + set res +} -result {{cget rc* -rc-foo} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "cget"*}} \ + -constraints {testchannel testthread} + +# --- === *** ########################### +# method seek + +test iocmd.tf-28.1 {chan tell, not supported by handler} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r w} foo] + notes [inthread $c { + note [tell $c] + close $c + notes + } c] + rename foo {} + set res +} -result {-1} \ + -constraints {testchannel testthread} +test iocmd.tf-28.2 {chan tell, error return} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code error BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {tell $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 current} 1 BOOM!} \ + -constraints {testchannel testthread} +test iocmd.tf-28.3 {chan tell, break return is error} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code break BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {tell $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 current} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-28.4 {chan tell, continue return is error} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code continue BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {tell $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 current} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-28.5 {chan tell, custom return is error} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code 222 BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {tell $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 current} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-28.6 {chan tell, level is ignored} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -level 11 -code 222 BANG} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {tell $c} msg opt] + note $msg + noteOpts $opt + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 current} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "seek"*}} \ + -constraints {testchannel testthread} +test iocmd.tf-28.7 {chan tell, regular return} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return 88} + set c [chan create {r w} foo] + notes [inthread $c { + note [tell $c] + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 current} 88} \ + -constraints {testchannel testthread} +test iocmd.tf-28.8 {chan tell, negative return} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -1} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {tell $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 current} 1 {Tried to seek before origin}} \ + -constraints {testchannel testthread} +test iocmd.tf-28.9 {chan tell, string return} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return BOGUS} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {tell $c} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 current} 1 {expected integer but got "BOGUS"}} \ + -constraints {testchannel testthread} +test iocmd.tf-28.10 {chan seek, not supported by handler} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {seek $c 0 start} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {1 {error during seek on "rc*": invalid argument}} \ + -constraints {testchannel testthread} +test iocmd.tf-28.11 {chan seek, error return} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code error BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {seek $c 0 start} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 start} 1 BOOM!} \ + -constraints {testchannel testthread} +test iocmd.tf-28.12 {chan seek, break return is error} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code break BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {seek $c 0 start} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 start} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-28.13 {chan seek, continue return is error} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code continue BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {seek $c 0 start} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 start} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-28.14 {chan seek, custom return is error} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -code 99 BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {seek $c 0 start} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 start} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-28.15 {chan seek, level is ignored} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -level 33 -code 99 BANG} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {seek $c 0 start} msg opt] + note $msg + noteOpts $opt + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 start} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "seek"*}} \ + -constraints {testchannel testthread} +test iocmd.tf-28.16 {chan seek, bogus return, negative location} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return -45} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {seek $c 0 start} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 start} 1 {Tried to seek before origin}} \ + -constraints {testchannel testthread} +test iocmd.tf-28.17 {chan seek, bogus return, string return} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return BOGUS} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {seek $c 0 start} msg] + note $msg + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 start} 1 {expected integer but got "BOGUS"}} \ + -constraints {testchannel testthread} +test iocmd.tf-28.18 {chan seek, ok result} -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return 23} + set c [chan create {r w} foo] + notes [inthread $c { + note [seek $c 0 current] + close $c + notes + } c] + rename foo {} + set res +} -result {{seek rc* 0 current} {}} \ + -constraints {testchannel testthread} +foreach {testname code} { + iocmd.tf-28.19.0 start + iocmd.tf-28.19.1 current + iocmd.tf-28.19.2 end +} { + test $testname "chan seek, base conversion, $code" -match glob -body { + set res {} + proc foo {args} {oninit seek; onfinal; track; return 0} + set c [chan create {r w} foo] + notes [inthread $c { + note [seek $c 0 $code] + close $c + notes + } c code] + rename foo {} + set res + } -result [list [list seek rc* 0 $code] {}] \ + -constraints {testchannel testthread} +} + +# --- === *** ########################### +# method blocking + +test iocmd.tf-29.1 {chan blocking, no handler support} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r w} foo] + notes [inthread $c { + note [fconfigure $c -blocking] + close $c + notes + } c] + rename foo {} + set res +} -result {1} \ + -constraints {testchannel testthread} +test iocmd.tf-29.2 {chan blocking, no handler support} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r w} foo] + notes [inthread $c { + note [fconfigure $c -blocking 0] + note [fconfigure $c -blocking] + close $c + notes + } c] + rename foo {} + set res +} -result {{} 0} \ + -constraints {testchannel testthread} +test iocmd.tf-29.3 {chan blocking, retrieval, handler support} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; note MUST_NOT_HAPPEN; return} + set c [chan create {r w} foo] + notes [inthread $c { + note [fconfigure $c -blocking] + close $c + notes + } c] + rename foo {} + set res +} -result {1} \ + -constraints {testchannel testthread} +test iocmd.tf-29.4 {chan blocking, resetting, handler support} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; return} + set c [chan create {r w} foo] + notes [inthread $c { + note [fconfigure $c -blocking 0] + note [fconfigure $c -blocking] + close $c + notes + } c] + rename foo {} + set res +} -result {{blocking rc* 0} {} 0} \ + -constraints {testchannel testthread} +test iocmd.tf-29.5 {chan blocking, setting, handler support} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; return} + set c [chan create {r w} foo] + notes [inthread $c { + note [fconfigure $c -blocking 1] + note [fconfigure $c -blocking] + close $c + notes + } c] + rename foo {} + set res +} -result {{blocking rc* 1} {} 1} \ + -constraints {testchannel testthread} +test iocmd.tf-29.6 {chan blocking, error return} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; error BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -blocking 0} msg] + note $msg + # Catch the close. It changes blocking mode internally, and runs into the error result. + catch {close $c} + notes + } c] + rename foo {} + set res +} -result {{blocking rc* 0} 1 BOOM!} \ + -constraints {testchannel testthread} +test iocmd.tf-29.7 {chan blocking, break return is error} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; return -code break BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -blocking 0} msg] + note $msg + catch {close $c} + notes + } c] + rename foo {} + set res +} -result {{blocking rc* 0} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-29.8 {chan blocking, continue return is error} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; return -code continue BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -blocking 0} msg] + note $msg + catch {close $c} + notes + } c] + rename foo {} + set res +} -result {{blocking rc* 0} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-29.9 {chan blocking, custom return is error} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; return -code 44 BOOM!} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -blocking 0} msg] + note $msg + catch {close $c} + notes + } c] + rename foo {} + set res +} -result {{blocking rc* 0} 1 *bad code*} \ + -constraints {testchannel testthread} +test iocmd.tf-29.10 {chan blocking, level is ignored} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; return -level 99 -code 44 BANG} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -blocking 0} msg opt] + note $msg + noteOpts $opt + catch {close $c} + notes + } c] + rename foo {} + set res +} -result {{blocking rc* 0} 1 *bad code* {-code 1 -level 0 -errorcode NONE -errorline 1 -errorinfo *bad code*subcommand "blocking"*}} \ + -constraints {testchannel testthread} +test iocmd.tf-29.11 {chan blocking, regular return ok, value ignored} -match glob -body { + set res {} + proc foo {args} {oninit blocking; onfinal; track; return BOGUS} + set c [chan create {r w} foo] + notes [inthread $c { + note [catch {fconfigure $c -blocking 0} msg] + note $msg + catch {close $c} + notes + } c] + rename foo {} + set res +} -result {{blocking rc* 0} 0 {}} \ + -constraints {testchannel testthread} + +# --- === *** ########################### +# method watch + +test iocmd.tf-30.1 {chan watch, read interest, some return} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return IGNORED} + set c [chan create {r w} foo] + notes [inthread $c { + note [fileevent $c readable {set tick $tick}] + close $c ;# 2nd watch, interest zero. + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{watch rc* read} {watch rc* {}} {}} +test iocmd.tf-30.2 {chan watch, write interest, error return} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return -code error BOOM!_IGNORED} + set c [chan create {r w} foo] + notes [inthread $c { + note [fileevent $c writable {set tick $tick}] + note [fileevent $c writable {}] + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} -result {{watch rc* write} {watch rc* {}} {} {}} +test iocmd.tf-30.3 {chan watch, accumulated interests} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return} + set c [chan create {r w} foo] + notes [inthread $c { + note [fileevent $c writable {set tick $tick}] + note [fileevent $c readable {set tick $tick}] + note [fileevent $c writable {}] + note [fileevent $c readable {}] + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} \ + -result {{watch rc* write} {watch rc* {read write}} {watch rc* read} {watch rc* {}} {} {} {} {}} +test iocmd.tf-30.4 {chan watch, unchanged interest not forwarded} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return} + set c [chan create {r w} foo] + notes [inthread $c { + note [fileevent $c writable {set tick $tick}] + note [fileevent $c readable {set tick $tick}] ;# Script is changing, + note [fileevent $c readable {set tock $tock}] ;# interest does not. + close $c ;# 3rd and 4th watch, removing the event handlers. + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} \ + -result {{watch rc* write} {watch rc* {read write}} {watch rc* write} {watch rc* {}} {} {} {}} + +# --- === *** ########################### +# postevent +# Not possible from a thread not containing the command handler. +# Check that this is rejected. + +test iocmd.tf-31.8 {chan postevent, bad input} -match glob -body { + set res {} + proc foo {args} {oninit; onfinal; track; return} + set c [chan create {r w} foo] + notes [inthread $c { + catch {chan postevent $c r} msg + note $msg + close $c + notes + } c] + rename foo {} + set res +} -constraints {testchannel testthread} \ + -result {{can not find reflected channel named "rc*"}} + +# --- === *** ########################### +# 'Pull the rug' tests. Create channel in a thread A, move to other +# thread B, destroy the origin thread (A) before or during access from +# B. Must not crash, must return proper errors. + +test iocmd.tf-32.0 {origin thread of moved channel gone} -match glob -body { + + #puts <<$tcltest::mainThread>>main + set tida [testthread create];#puts <<$tida>> + set tidb [testthread create];#puts <<$tidb>> + + # Set up channel in thread + testthread send $tida $helperscript + set chan [testthread send $tida { + proc foo {args} {oninit seek; onfinal; track; return} + set chan [chan create {r w} foo] + fconfigure $chan -buffering none + set chan + }] + + # Move channel to 2nd thread. + testthread send $tida [list testchannel cut $chan] + testthread send $tidb [list testchannel splice $chan] + + # Kill origin thread, then access channel from 2nd thread. + testthread send -async $tida {testthread exit} + after 100 + + set res {} + lappend res [catch {testthread send $tidb [list puts $chan shoo]} msg] $msg + + lappend res [catch {testthread send $tidb [list tell $chan]} msg] $msg + lappend res [catch {testthread send $tidb [list seek $chan 1]} msg] $msg + lappend res [catch {testthread send $tidb [list gets $chan]} msg] $msg + lappend res [catch {testthread send $tidb [list close $chan]} msg] $msg + tcltest::threadReap + set res + +} -constraints {testchannel testthread} \ + -result {1 {Owner lost} 1 {Owner lost} 1 {Owner lost} 1 {Owner lost} 1 {Owner lost}} + +test iocmd.tf-32.1 {origin thread of moved channel destroyed during access} -match glob -body { + + #puts <<$tcltest::mainThread>>main + set tida [testthread create];#puts <<$tida>> + set tidb [testthread create];#puts <<$tidb>> + + # Set up channel in thread + set chan [testthread send $tida $helperscript] + set chan [testthread send $tida { + proc foo {args} { + oninit; onfinal; track; + # destroy thread during channel access + testthread exit + return} + set chan [chan create {r w} foo] + fconfigure $chan -buffering none + set chan + }] + + # Move channel to 2nd thread. + testthread send $tida [list testchannel cut $chan] + testthread send $tidb [list testchannel splice $chan] + + # Run access from thread B, wait for response from A (A is not + # using event loop at this point, so the event pile up in the + # queue. + + testthread send $tidb [list set chan $chan] + testthread send $tidb [list set mid $tcltest::mainThread] + testthread send -async $tidb { + # wait a bit, give the main thread the time to start its event + # loop to wait for the response from B + after 2000 + catch { puts $chan shoo } res + testthread send -async $mid [list set ::res $res] + } + vwait ::res + + tcltest::threadReap + set res +} -constraints {testchannel testthread} \ + -result {Owner lost} + +# ### ### ### ######### ######### ######### + +# ### ### ### ######### ######### ######### + +rename track {} # cleanup foreach file [list test1 test2 test3 test4] { removeFile $file diff --git a/tests/ioUtil.test b/tests/ioUtil.test index efdaef0..7e8687e 100644 --- a/tests/ioUtil.test +++ b/tests/ioUtil.test @@ -1,24 +1,22 @@ # This file (ioUtil.test) tests the hookable TclStat(), TclAccess(), # and Tcl_OpenFileChannel, routines in the file generic/tclIOUtils.c. # Sourcing this file into Tcl runs the tests and generates output for -# errors. No output means no errors were found. -# -# Copyright (c) 1998-1999 by Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. - +# errors. No output means no errors were found. +# +# Copyright (c) 1998-1999 by Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest 2 namespace import -force ::tcltest::* } -::tcltest::testConstraint testopenfilechannelproc \ +testConstraint testopenfilechannelproc \ [llength [info commands testopenfilechannelproc]] -::tcltest::testConstraint testaccessproc \ - [llength [info commands testaccessproc]] -::tcltest::testConstraint teststatproc \ - [llength [info commands teststatproc]] +testConstraint testaccessproc [llength [info commands testaccessproc]] +testConstraint teststatproc [llength [info commands teststatproc]] set unsetScript { catch {unset testStat1(size)} @@ -189,7 +187,7 @@ set oldpwd [pwd] cd [temporaryDirectory] test ioUtil-3.1 {TclOpenFileChannel: Check that none of the test procs are there.} {testopenfilechannelproc} { - catch {eval [list file delete -force] [glob *testOpenFileChannel*]} + catch {file delete -force {*}[glob *testOpenFileChannel*]} catch {file exists testOpenFileChannel1%.fil} err1 catch {file exists testOpenFileChannel2%.fil} err2 catch {file exists testOpenFileChannel3%.fil} err3 @@ -303,18 +301,18 @@ test ioUtil-3.8 {TclOpenFileChannelDeleteProc: Verify that all procs have been d test ioUtil-4.1 {open ... a+ must not use O_APPEND: Bug 1773127} -setup { set f [tcltest::makeFile {} ioutil41.tmp] - set fid [open $f w] + set fid [open $f wb] puts -nonewline $fid 123 close $fid } -body { - set fid [open $f a+] + set fid [open $f ab+] puts -nonewline $fid 456 seek $fid 2 set d [read $fid 2] seek $fid 4 puts -nonewline $fid x close $fid - set fid [open $f r] + set fid [open $f rb] append d [read $fid] close $fid return $d @@ -327,3 +325,7 @@ cd $oldpwd # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/iogt.test b/tests/iogt.test index 04da3eb..3882ecc 100644 --- a/tests/iogt.test +++ b/tests/iogt.test @@ -15,14 +15,9 @@ if {[catch {package require tcltest 2.1}]} { return } namespace eval ::tcl::test::iogt { + namespace import ::tcltest::* - namespace import ::tcltest::cleanupTests - namespace import ::tcltest::makeFile - namespace import ::tcltest::removeFile - namespace import ::tcltest::test - namespace import ::tcltest::testConstraint - - testConstraint testchannel [llength [info commands testchannel]] +testConstraint testchannel [llength [info commands testchannel]] set path(dummy) [makeFile {abcdefghijklmnopqrstuvwxyz0123456789,./?><;'\|":[]\}\{`~!@#$%^&*()_+-= } dummy] @@ -129,7 +124,7 @@ proc echoPut {c sock} { #fileevent stdin readable {exit ;#cut} # main -socket -server newconn $port +socket -server newconn -myaddr 127.0.0.1 $port vwait forever } __echo_srv__.tcl] @@ -145,8 +140,8 @@ proc fevent {fdelay idelay blocks script data} { # fixed port, not so good. lets hope for the best, for now. set port 4000 - eval exec tclsh __echo_srv__.tcl \ - $port $fdelay $idelay $blocks >@stdout & + exec tclsh __echo_srv__.tcl \ + $port $fdelay $idelay {*}$blocks >@stdout & after 500 @@ -487,7 +482,7 @@ test iogt-2.0 {basic I/O going through transform} testchannel { } {1 71 71} -test iogt-2.1 {basic I/O, operation trail} {testchannel unixOnly} { +test iogt-2.1 {basic I/O, operation trail} {testchannel unix} { set fin [open $path(dummy) r] set fout [open $path(dummyout) w] @@ -537,7 +532,7 @@ write flush/write delete/write} -test iogt-2.2 {basic I/O, data trail} {testchannel unixOnly} { +test iogt-2.2 {basic I/O, data trail} {testchannel unix} { set fin [open $path(dummy) r] set fout [open $path(dummyout) w] @@ -592,7 +587,7 @@ flush/write {} {} delete/write {} *ignored*} -test iogt-2.3 {basic I/O, mixed trail} {testchannel unixOnly} { +test iogt-2.3 {basic I/O, mixed trail} {testchannel unix} { set fin [open $path(dummy) r] set fout [open $path(dummyout) w] @@ -880,10 +875,6 @@ delete/read {} *ignored* flush/write {} {} delete/write {} *ignored*} - - - - proc constX {op data} { # replace anything coming in with a same-length string of x'es. switch -- $op { diff --git a/tests/join.test b/tests/join.test index 99b6eb5..133b7f1 100644 --- a/tests/join.test +++ b/tests/join.test @@ -50,15 +50,3 @@ test join-3.2 {join is binary ok} { # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/lindex.test b/tests/lindex.test index 1c04330..fee9f48 100644 --- a/tests/lindex.test +++ b/tests/lindex.test @@ -13,74 +13,65 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2.2 namespace import -force ::tcltest::* } -set lindex lindex set minus - +testConstraint testevalex [llength [info commands testevalex]] # Tests of Tcl_LindexObjCmd, NOT COMPILED -test lindex-1.1 {wrong # args} { - list [catch {eval $lindex} result] $result +test lindex-1.1 {wrong # args} testevalex { + list [catch {testevalex lindex} result] $result } "1 {wrong # args: should be \"lindex list ?index...?\"}" # Indices that are lists or convertible to lists -test lindex-2.1 {empty index list} { +test lindex-2.1 {empty index list} testevalex { set x {} - list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]] + list [testevalex {lindex {a b c} $x}] [testevalex {lindex {a b c} $x}] } {{a b c} {a b c}} - -test lindex-2.2 {singleton index list} { +test lindex-2.2 {singleton index list} testevalex { set x { 1 } - list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]] + list [testevalex {lindex {a b c} $x}] [testevalex {lindex {a b c} $x}] } {b b} - -test lindex-2.3 {multiple indices in list} { +test lindex-2.3 {multiple indices in list} testevalex { set x {1 2} - list [eval [list $lindex {{a b c} {d e f}} $x]] \ - [eval [list $lindex {{a b c} {d e f}} $x]] + list [testevalex {lindex {{a b c} {d e f}} $x}] \ + [testevalex {lindex {{a b c} {d e f}} $x}] } {f f} - -test lindex-2.4 {malformed index list} { +test lindex-2.4 {malformed index list} testevalex { set x \{ - list [catch { eval [list $lindex {a b c} $x] } result] $result -} {1 bad\ index\ \"\{\":\ must\ be\ integer\ or\ end?-integer?} + list [catch { testevalex {lindex {a b c} $x} } result] $result +} {1 bad\ index\ \"\{\":\ must\ be\ integer?\[+-\]integer?\ or\ end?\[+-\]integer?} # Indices that are integers or convertible to integers -test lindex-3.1 {integer -1} { +test lindex-3.1 {integer -1} testevalex { set x ${minus}1 - list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]] + list [testevalex {lindex {a b c} $x}] [testevalex {lindex {a b c} $x}] } {{} {}} - -test lindex-3.2 {integer 0} { +test lindex-3.2 {integer 0} testevalex { set x [string range 00 0 0] - list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]] + list [testevalex {lindex {a b c} $x}] [testevalex {lindex {a b c} $x}] } {a a} - -test lindex-3.3 {integer 2} { +test lindex-3.3 {integer 2} testevalex { set x [string range 22 0 0] - list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]] + list [testevalex {lindex {a b c} $x}] [testevalex {lindex {a b c} $x}] } {c c} - -test lindex-3.4 {integer 3} { +test lindex-3.4 {integer 3} testevalex { set x [string range 33 0 0] - list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]] + list [testevalex {lindex {a b c} $x}] [testevalex {lindex {a b c} $x}] } {{} {}} - -test lindex-3.5 {bad octal} { - set x 08 - list [catch { eval [list $lindex {a b c} $x] } result] $result -} "1 {bad index \"08\": must be integer or end?-integer? (looks like invalid octal number)}" - -test lindex-3.6 {bad octal} { - set x -09 - list [catch { eval [list $lindex {a b c} $x] } result] $result -} "1 {bad index \"-09\": must be integer or end?-integer? (looks like invalid octal number)}" - +test lindex-3.5 {bad octal} -constraints testevalex -body { + set x 0o8 + list [catch { testevalex {lindex {a b c} $x} } result] $result +} -match glob -result {1 {*invalid octal number*}} +test lindex-3.6 {bad octal} -constraints testevalex -body { + set x -0o9 + list [catch { testevalex {lindex {a b c} $x} } result] $result +} -match glob -result {1 {*invalid octal number*}} test lindex-3.7 {indexes don't shimmer wide ints} { set x [expr {(wide(1)<<31) - 2}] list $x [lindex {1 2 3} $x] [incr x] [incr x] @@ -88,122 +79,107 @@ test lindex-3.7 {indexes don't shimmer wide ints} { # Indices relative to end -test lindex-4.1 {index = end} { +test lindex-4.1 {index = end} testevalex { set x end - list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]] + list [testevalex {lindex {a b c} $x}] [testevalex {lindex {a b c} $x}] } {c c} - -test lindex-4.2 {index = end--1} { +test lindex-4.2 {index = end--1} testevalex { set x end--1 - list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]] + list [testevalex {lindex {a b c} $x}] [testevalex {lindex {a b c} $x}] } {{} {}} - -test lindex-4.3 {index = end-0} { +test lindex-4.3 {index = end-0} testevalex { set x end-0 - list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]] + list [testevalex {lindex {a b c} $x}] [testevalex {lindex {a b c} $x}] } {c c} - -test lindex-4.4 {index = end-2} { +test lindex-4.4 {index = end-2} testevalex { set x end-2 - list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]] + list [testevalex {lindex {a b c} $x}] [testevalex {lindex {a b c} $x}] } {a a} - -test lindex-4.5 {index = end-3} { +test lindex-4.5 {index = end-3} testevalex { set x end-3 - list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]] + list [testevalex {lindex {a b c} $x}] [testevalex {lindex {a b c} $x}] } {{} {}} - -test lindex-4.6 {bad octal} { - set x end-08 - list [catch { eval [list $lindex {a b c} $x] } result] $result -} "1 {bad index \"end-08\": must be integer or end?-integer? (looks like invalid octal number)}" - -test lindex-4.7 {bad octal} { - set x end--09 - list [catch { eval [list $lindex {a b c} $x] } result] $result -} "1 {bad index \"end--09\": must be integer or end?-integer?}" - -test lindex-4.8 {bad integer, not octal} { +test lindex-4.6 {bad octal} -constraints testevalex -body { + set x end-0o8 + list [catch { testevalex {lindex {a b c} $x} } result] $result +} -match glob -result {1 {*invalid octal number*}} +test lindex-4.7 {bad octal} -constraints testevalex -body { + set x end--0o9 + list [catch { testevalex {lindex {a b c} $x} } result] $result +} -match glob -result {1 {*invalid octal number*}} +test lindex-4.8 {bad integer, not octal} testevalex { set x end-0a2 - list [catch { eval [list $lindex {a b c} $x] } result] $result -} "1 {bad index \"end-0a2\": must be integer or end?-integer?}" - -test lindex-4.9 {incomplete end} { - set x en - list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]] + list [catch { testevalex {lindex {a b c} $x} } result] $result +} {1 {bad index "end-0a2": must be integer?[+-]integer? or end?[+-]integer?}} +test lindex-4.9 {obsolete test} testevalex { + set x end + list [testevalex {lindex {a b c} $x}] [testevalex {lindex {a b c} $x}] } {c c} - -test lindex-4.10 {incomplete end-} { +test lindex-4.10 {incomplete end-} testevalex { set x end- - list [catch { eval [list $lindex {a b c} $x] } result] $result -} "1 {bad index \"end-\": must be integer or end?-integer?}" - -test lindex-5.1 {bad second index} { - list [catch { eval [list $lindex {a b c} 0 0a2] } result] $result -} "1 {bad index \"0a2\": must be integer or end?-integer?}" - -test lindex-5.2 {good second index} { - eval [list $lindex {{a b c} {d e f} {g h i}} 1 2] + list [catch { testevalex {lindex {a b c} $x} } result] $result +} {1 {bad index "end-": must be integer?[+-]integer? or end?[+-]integer?}} + +test lindex-5.1 {bad second index} testevalex { + list [catch { testevalex {lindex {a b c} 0 0a2} } result] $result +} {1 {bad index "0a2": must be integer?[+-]integer? or end?[+-]integer?}} +test lindex-5.2 {good second index} testevalex { + testevalex {lindex {{a b c} {d e f} {g h i}} 1 2} } f - -test lindex-5.3 {three indices} { - eval [list $lindex {{{a b} {c d}} {{e f} {g h}}} 1 0 1] +test lindex-5.3 {three indices} testevalex { + testevalex {lindex {{{a b} {c d}} {{e f} {g h}}} 1 0 1} } f -test lindex-6.1 {error conditions in parsing list} { - list [catch {eval [list $lindex "a \{" 2]} msg] $msg + +test lindex-6.1 {error conditions in parsing list} testevalex { + list [catch {testevalex {lindex "a \{" 2}} msg] $msg } {1 {unmatched open brace in list}} -test lindex-6.2 {error conditions in parsing list} { - list [catch {eval [list $lindex {a {b c}d e} 2]} msg] $msg +test lindex-6.2 {error conditions in parsing list} testevalex { + list [catch {testevalex {lindex {a {b c}d e} 2}} msg] $msg } {1 {list element in braces followed by "d" instead of space}} -test lindex-6.3 {error conditions in parsing list} { - list [catch {eval [list $lindex {a "b c"def ghi} 2]} msg] $msg +test lindex-6.3 {error conditions in parsing list} testevalex { + list [catch {testevalex {lindex {a "b c"def ghi} 2}} msg] $msg } {1 {list element in quotes followed by "def" instead of space}} -test lindex-7.1 {quoted elements} { - eval [list $lindex {a "b c" d} 1] +test lindex-7.1 {quoted elements} testevalex { + testevalex {lindex {a "b c" d} 1} } {b c} -test lindex-7.2 {quoted elements} { - eval [list $lindex {"{}" b c} 0] +test lindex-7.2 {quoted elements} testevalex { + testevalex {lindex {"{}" b c} 0} } {{}} -test lindex-7.3 {quoted elements} { - eval [list $lindex {ab "c d \" x" y} 1] +test lindex-7.3 {quoted elements} testevalex { + testevalex {lindex {ab "c d \" x" y} 1} } {c d " x} test lindex-7.4 {quoted elements} { lindex {a b {c d "e} {f g"}} 2 } {c d "e} -test lindex-8.1 {data reuse} { +test lindex-8.1 {data reuse} testevalex { set x 0 - eval [list $lindex $x $x] + testevalex {lindex $x $x} } {0} - -test lindex-8.2 {data reuse} { +test lindex-8.2 {data reuse} testevalex { set a 0 - eval [list $lindex $a $a $a] + testevalex {lindex $a $a $a} } 0 -test lindex-8.3 {data reuse} { +test lindex-8.3 {data reuse} testevalex { set a 1 - eval [list $lindex $a $a $a] + testevalex {lindex $a $a $a} } {} - -test lindex-8.4 {data reuse} { +test lindex-8.4 {data reuse} testevalex { set x [list 0 0] - eval [list $lindex $x $x] + testevalex {lindex $x $x} } {0} - -test lindex-8.5 {data reuse} { +test lindex-8.5 {data reuse} testevalex { set x 0 - eval [list $lindex $x [list $x $x]] + testevalex {lindex $x [list $x $x]} } {0} - -test lindex-8.6 {data reuse} { +test lindex-8.6 {data reuse} testevalex { set x [list 1 1] - eval [list $lindex $x $x] + testevalex {lindex $x $x} } {} - -test lindex-8.7 {data reuse} { +test lindex-8.7 {data reuse} testevalex { set x 1 - eval [list lindex $x [list $x $x]] + testevalex {lindex $x [list $x $x]} } {} #---------------------------------------------------------------------- @@ -213,6 +189,13 @@ test lindex-8.7 {data reuse} { test lindex-9.1 {wrong # args} { list [catch {lindex} result] $result } "1 {wrong # args: should be \"lindex list ?index...?\"}" +test lindex-9.2 {ensure that compilation works in the right order} { + proc foo {} { + rename foo {} + lindex 1 0 + } + foo +} 1 # Indices that are lists or convertible to lists @@ -223,7 +206,6 @@ test lindex-10.1 {empty index list} { } result set result } {{a b c} {a b c}} - test lindex-10.2 {singleton index list} { set x { 1 } catch { @@ -231,7 +213,6 @@ test lindex-10.2 {singleton index list} { } result set result } {b b} - test lindex-10.3 {multiple indices in list} { set x {1 2} catch { @@ -239,11 +220,10 @@ test lindex-10.3 {multiple indices in list} { } result set result } {f f} - test lindex-10.4 {malformed index list} { set x \{ list [catch { lindex {a b c} $x } result] $result -} {1 bad\ index\ \"\{\":\ must\ be\ integer\ or\ end?-integer?} +} {1 bad\ index\ \"\{\":\ must\ be\ integer?\[+-\]integer?\ or\ end?\[+-\]integer?} # Indices that are integers or convertible to integers @@ -254,7 +234,6 @@ test lindex-11.1 {integer -1} { } result set result } {{} {}} - test lindex-11.2 {integer 0} { set x [string range 00 0 0] catch { @@ -262,7 +241,6 @@ test lindex-11.2 {integer 0} { } result set result } {a a} - test lindex-11.3 {integer 2} { set x [string range 22 0 0] catch { @@ -270,7 +248,6 @@ test lindex-11.3 {integer 2} { } result set result } {c c} - test lindex-11.4 {integer 3} { set x [string range 33 0 0] catch { @@ -278,16 +255,14 @@ test lindex-11.4 {integer 3} { } result set result } {{} {}} - -test lindex-11.5 {bad octal} { - set x 08 +test lindex-11.5 {bad octal} -body { + set x 0o8 list [catch { lindex {a b c} $x } result] $result -} "1 {bad index \"08\": must be integer or end?-integer? (looks like invalid octal number)}" - -test lindex-11.6 {bad octal} { - set x -09 +} -match glob -result {1 {*invalid octal number*}} +test lindex-11.6 {bad octal} -body { + set x -0o9 list [catch { lindex {a b c} $x } result] $result -} "1 {bad index \"-09\": must be integer or end?-integer? (looks like invalid octal number)}" +} -match glob -result {1 {*invalid octal number*}} # Indices relative to end @@ -298,7 +273,6 @@ test lindex-12.1 {index = end} { } result set result } {c c} - test lindex-12.2 {index = end--1} { set x end--1 catch { @@ -306,7 +280,6 @@ test lindex-12.2 {index = end--1} { } result set result } {{} {}} - test lindex-12.3 {index = end-0} { set x end-0 catch { @@ -314,7 +287,6 @@ test lindex-12.3 {index = end-0} { } result set result } {c c} - test lindex-12.4 {index = end-2} { set x end-2 catch { @@ -322,7 +294,6 @@ test lindex-12.4 {index = end-2} { } result set result } {a a} - test lindex-12.5 {index = end-3} { set x end-3 catch { @@ -330,46 +301,39 @@ test lindex-12.5 {index = end-3} { } result set result } {{} {}} - -test lindex-12.6 {bad octal} { - set x end-08 +test lindex-12.6 {bad octal} -body { + set x end-0o8 list [catch { lindex {a b c} $x } result] $result -} "1 {bad index \"end-08\": must be integer or end?-integer? (looks like invalid octal number)}" - -test lindex-12.7 {bad octal} { - set x end--09 +} -match glob -result {1 {*invalid octal number*}} +test lindex-12.7 {bad octal} -body { + set x end--0o9 list [catch { lindex {a b c} $x } result] $result -} "1 {bad index \"end--09\": must be integer or end?-integer?}" - +} -match glob -result {1 {*invalid octal number*}} test lindex-12.8 {bad integer, not octal} { set x end-0a2 list [catch { lindex {a b c} $x } result] $result -} "1 {bad index \"end-0a2\": must be integer or end?-integer?}" - -test lindex-12.9 {incomplete end} { - set x en +} {1 {bad index "end-0a2": must be integer?[+-]integer? or end?[+-]integer?}} +test lindex-12.9 {obsolete test} { + set x end catch { list [lindex {a b c} $x] [lindex {a b c} $x] } result set result } {c c} - test lindex-12.10 {incomplete end-} { set x end- list [catch { lindex {a b c} $x } result] $result -} "1 {bad index \"end-\": must be integer or end?-integer?}" +} {1 {bad index "end-": must be integer?[+-]integer? or end?[+-]integer?}} test lindex-13.1 {bad second index} { list [catch { lindex {a b c} 0 0a2 } result] $result -} "1 {bad index \"0a2\": must be integer or end?-integer?}" - +} {1 {bad index "0a2": must be integer?[+-]integer? or end?[+-]integer?}} test lindex-13.2 {good second index} { catch { lindex {{a b c} {d e f} {g h i}} 1 2 } result set result } f - test lindex-13.3 {three indices} { catch { lindex {{{a b} {c d}} {{e f} {g h}}} 1 0 1 @@ -419,7 +383,6 @@ test lindex-16.1 {data reuse} { } result set result } {0} - test lindex-16.2 {data reuse} { set a 0 catch { @@ -434,7 +397,6 @@ test lindex-16.3 {data reuse} { } result set result } {} - test lindex-16.4 {data reuse} { set x [list 0 0] catch { @@ -442,7 +404,6 @@ test lindex-16.4 {data reuse} { } result set result } {0} - test lindex-16.5 {data reuse} { set x 0 catch { @@ -450,7 +411,6 @@ test lindex-16.5 {data reuse} { } result set result } {0} - test lindex-16.6 {data reuse} { set x [list 1 1] catch { @@ -458,7 +418,6 @@ test lindex-16.6 {data reuse} { } result set result } {} - test lindex-16.7 {data reuse} { set x 1 catch { @@ -467,9 +426,30 @@ test lindex-16.7 {data reuse} { set result } {} -catch { unset lindex} +test lindex-17.0 {Bug 1718580} {*}{ + -body { + lindex {} end foo + } + -match glob + -result {bad index "foo"*} + -returnCodes 1 +} + +test lindex-17.1 {Bug 1718580} {*}{ + -body { + lindex a end foo + } + -match glob + -result {bad index "foo"*} + -returnCodes 1 +} + catch { unset minus } # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/link.test b/tests/link.test index 672185c..3b423ec 100644 --- a/tests/link.test +++ b/tests/link.test @@ -16,65 +16,73 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -::tcltest::testConstraint testlink \ - [expr {[info commands testlink] != {}}] +testConstraint testlink [llength [info commands testlink]] foreach i {int real bool string} { catch {unset $i} } test link-1.1 {reading C variables from Tcl} {testlink} { testlink delete - testlink set 43 1.23 4 - 12341234 - testlink create 1 1 1 1 1 + testlink set 43 1.23 4 - 12341234 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 list $int $real $bool $string $wide } {43 1.23 1 NULL 12341234} test link-1.2 {reading C variables from Tcl} {testlink} { testlink delete - testlink create 1 1 1 1 1 - testlink set -3 2 0 "A long string with spaces" 43214321 + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + testlink set -3 2 0 "A long string with spaces" 43214321 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 list $int $real $bool $string $wide $int $real $bool $string $wide } {-3 2.0 0 {A long string with spaces} 43214321 -3 2.0 0 {A long string with spaces} 43214321} test link-2.1 {writing C variables from Tcl} {testlink} { testlink delete - testlink set 43 1.21 4 - 56785678 - testlink create 1 1 1 1 1 - set int "00721" + testlink set 43 1.21 4 - 56785678 64 250 30000 60000 0xbaadbeef 12321 32123 3.25 1231231234 + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + set int "0o0721" set real -10.5 set bool true set string abcdef set wide 135135 - concat [testlink get] $int $real $bool $string $wide -} {465 -10.5 1 abcdef 135135 00721 -10.5 true abcdef 135135} + set char 79 + set uchar 161 + set short 8000 + set ushort 40000 + set uint 0xc001babe + set long 34543 + set ulong 567890 + set float 1.0987654321 + set uwide 357357357357 + concat [testlink get] | $int $real $bool $string $wide $char $uchar $short $ushort $uint $long $ulong $float $uwide +} {465 -10.5 1 abcdef 135135 79 161 8000 40000 -1073628482 34543 567890 1.0987653732299805 357357357357 | 0o0721 -10.5 true abcdef 135135 79 161 8000 40000 0xc001babe 34543 567890 1.0987654321 357357357357} test link-2.2 {writing bad values into variables} {testlink} { testlink delete - testlink set 43 1.23 4 - 56785678 - testlink create 1 1 1 1 1 + testlink set 43 1.23 4 - 56785678 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 list [catch {set int 09a} msg] $msg $int } {1 {can't set "int": variable must have integer value} 43} test link-2.3 {writing bad values into variables} {testlink} { testlink delete - testlink set 43 1.23 4 - 56785678 - testlink create 1 1 1 1 1 + testlink set 43 1.23 4 - 56785678 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 list [catch {set real 1.x3} msg] $msg $real } {1 {can't set "real": variable must have real value} 1.23} test link-2.4 {writing bad values into variables} {testlink} { testlink delete - testlink set 43 1.23 4 - 56785678 - testlink create 1 1 1 1 1 + testlink set 43 1.23 4 - 56785678 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 list [catch {set bool gorp} msg] $msg $bool } {1 {can't set "bool": variable must have boolean value} 1} test link-2.5 {writing bad values into variables} {testlink} { testlink delete - testlink set 43 1.23 4 - 56785678 - testlink create 1 1 1 1 1 + testlink set 43 1.23 4 - 56785678 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 list [catch {set wide gorp} msg] $msg $bool } {1 {can't set "wide": variable must have integer value} 1} test link-3.1 {read-only variables} {testlink} { testlink delete - testlink set 43 1.23 4 - 56785678 - testlink create 0 1 1 0 0 + testlink set 43 1.23 4 - 56785678 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 + testlink create 0 1 1 0 0 0 0 0 0 0 0 0 0 0 list [catch {set int 4} msg] $msg $int \ [catch {set real 10.6} msg] $msg $real \ [catch {set bool no} msg] $msg $bool \ @@ -83,8 +91,8 @@ test link-3.1 {read-only variables} {testlink} { } {1 {can't set "int": linked variable is read-only} 43 0 10.6 10.6 0 no no 1 {can't set "string": linked variable is read-only} NULL 1 {can't set "wide": linked variable is read-only} 56785678} test link-3.2 {read-only variables} {testlink} { testlink delete - testlink set 43 1.23 4 - 56785678 - testlink create 1 0 0 1 1 + testlink set 43 1.23 4 - 56785678 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 + testlink create 1 0 0 1 1 0 0 0 0 0 0 0 0 0 list [catch {set int 4} msg] $msg $int \ [catch {set real 10.6} msg] $msg $real \ [catch {set bool no} msg] $msg $bool \ @@ -94,8 +102,8 @@ test link-3.2 {read-only variables} {testlink} { test link-4.1 {unsetting linked variables} {testlink} { testlink delete - testlink set -6 -2.5 0 stringValue 13579 - testlink create 1 1 1 1 1 + testlink set -6 -2.5 0 stringValue 13579 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 unset int real bool string wide list [catch {set int} msg] $msg [catch {set real} msg] $msg \ [catch {set bool} msg] $msg [catch {set string} msg] $msg \ @@ -103,42 +111,51 @@ test link-4.1 {unsetting linked variables} {testlink} { } {0 -6 0 -2.5 0 0 0 stringValue 0 13579} test link-4.2 {unsetting linked variables} {testlink} { testlink delete - testlink set -6 -2.1 0 stringValue 97531 - testlink create 1 1 1 1 1 + testlink set -6 -2.1 0 stringValue 97531 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 unset int real bool string wide set int 102 set real 16 set bool true set string newValue set wide 333555 - testlink get + lrange [testlink get] 0 4 } {102 16.0 1 newValue 333555} test link-5.1 {unlinking variables} {testlink} { testlink delete - testlink set -6 -2.25 0 stringValue 13579 + testlink set -6 -2.25 0 stringValue 13579 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 testlink delete set int xx1 set real qrst set bool bogus set string 12345 set wide 875421 + set char skjdf + set uchar dslfjk + set short slkf + set ushort skrh + set uint sfdkfkh + set long srkjh + set ulong sjkg + set float dskjfbjfd + set uwide isdfsngs testlink get -} {-6 -2.25 0 stringValue 13579} +} {-6 -2.25 0 stringValue 13579 64 250 30000 60000 -1091585346 12321 32123 3.25 1231231234} test link-5.2 {unlinking variables} {testlink} { testlink delete - testlink set -6 -2.25 0 stringValue 97531 - testlink create 1 1 1 1 1 + testlink set -6 -2.25 0 stringValue 97531 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 testlink delete - testlink set 25 14.7 7 - 999999 - list $int $real $bool $string $wide -} {-6 -2.25 0 stringValue 97531} + testlink set 25 14.7 7 - 999999 65 251 30001 60001 0xbabebeef 12322 32124 3.125 12312312340 + list $int $real $bool $string $wide $char $uchar $short $ushort $uint $long $ulong $float $uwide +} {-6 -2.25 0 stringValue 97531 64 250 30000 60000 3203381950 12321 32123 3.25 1231231234} test link-6.1 {errors in setting up link} {testlink} { testlink delete catch {unset int} set int(44) 1 - list [catch {testlink create 1 1 1 1 1} msg] $msg + list [catch {testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1} msg] $msg } {1 {can't set "int": variable is array}} catch {unset int} @@ -148,8 +165,8 @@ test link-7.1 {access to linked variables via upvar} {testlink} { unset y } testlink delete - testlink create 1 0 0 0 0 - testlink set 14 {} {} {} {} + testlink create 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + testlink set 14 {} {} {} {} {} {} {} {} {} {} {} {} {} x list [catch {set int} msg] $msg } {0 14} @@ -159,10 +176,10 @@ test link-7.2 {access to linked variables via upvar} {testlink} { return [set y] } testlink delete - testlink create 1 0 0 0 0 - testlink set 0 {} {} {} {} + testlink create 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + testlink set 0 {} {} {} {} {} {} {} {} {} {} {} {} {} set int - testlink set 23 {} {} {} {} + testlink set 23 {} {} {} {} {} {} {} {} {} {} {} {} {} x list [x] $int } {23 23} @@ -172,8 +189,8 @@ test link-7.3 {access to linked variables via upvar} {testlink} { set y 44 } testlink delete - testlink create 0 0 0 0 0 - testlink set 11 {} {} {} {} + testlink create 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + testlink set 11 {} {} {} {} {} {} {} {} {} {} {} {} {} list [catch x msg] $msg $int } {1 {can't set "y": linked variable is read-only} 11} test link-7.4 {access to linked variables via upvar} {testlink} { @@ -182,8 +199,8 @@ test link-7.4 {access to linked variables via upvar} {testlink} { set y abc } testlink delete - testlink create 1 1 1 1 1 - testlink set -4 {} {} {} {} + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + testlink set -4 {} {} {} {} {} {} {} {} {} {} {} {} {} list [catch x msg] $msg $int } {1 {can't set "y": variable must have integer value} -4} test link-7.5 {access to linked variables via upvar} {testlink} { @@ -192,8 +209,8 @@ test link-7.5 {access to linked variables via upvar} {testlink} { set y abc } testlink delete - testlink create 1 1 1 1 1 - testlink set -4 16.75 {} {} {} + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + testlink set -4 16.75 {} {} {} {} {} {} {} {} {} {} {} {} list [catch x msg] $msg $real } {1 {can't set "y": variable must have real value} 16.75} test link-7.6 {access to linked variables via upvar} {testlink} { @@ -202,8 +219,8 @@ test link-7.6 {access to linked variables via upvar} {testlink} { set y abc } testlink delete - testlink create 1 1 1 1 1 - testlink set -4 16.3 1 {} {} + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + testlink set -4 16.3 1 {} {} {} {} {} {} {} {} {} {} {} list [catch x msg] $msg $bool } {1 {can't set "y": variable must have boolean value} 1} test link-7.7 {access to linked variables via upvar} {testlink} { @@ -212,8 +229,8 @@ test link-7.7 {access to linked variables via upvar} {testlink} { set y abc } testlink delete - testlink create 1 1 1 1 1 - testlink set -4 16.3 1 {} 778899 + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + testlink set -4 16.3 1 {} 778899 {} {} {} {} {} {} {} {} {} list [catch x msg] $msg $wide } {1 {can't set "y": variable must have integer value} 778899} @@ -223,10 +240,10 @@ test link-8.1 {Tcl_UpdateLinkedVar procedure} {testlink} { lappend x $args $int $real $bool $string $wide } set x {} - testlink create 1 1 1 1 1 - testlink set 14 -2.0 0 xyzzy 995511 + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + testlink set 14 -2.0 0 xyzzy 995511 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 trace var int w x - testlink update 32 4.0 3 abcd 113355 + testlink update 32 4.0 3 abcd 113355 65 251 30001 60001 0xbabebeef 12322 32124 3.125 12312312340 trace vdelete int w x set x } {{int {} w} 32 -2.0 0 xyzzy 995511} @@ -236,20 +253,22 @@ test link-8.2 {Tcl_UpdateLinkedVar procedure} {testlink} { lappend x $args $int $real $bool $string $wide } set x {} - testlink create 1 1 1 1 1 - testlink set 14 -2.0 0 xyzzy 995511 + testlink create 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + testlink set 14 -2.0 0 xyzzy 995511 64 250 30000 60000 0xbeefbabe 12321 32123 3.25 1231231234 testlink delete trace var int w x - testlink update 32 4.0 6 abcd 113355 + testlink update 32 4.0 6 abcd 113355 65 251 30001 60001 0xbabebeef 12322 32124 3.125 12312312340 trace vdelete int w x set x } {} test link-8.3 {Tcl_UpdateLinkedVar procedure, read-only variable} {testlink} { - testlink create 0 0 0 0 0 - list [catch {testlink update 47 {} {} {} {}} msg] $msg $int + testlink create 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + list [catch { + testlink update 47 {} {} {} {} {} {} {} {} {} {} {} {} {} + } msg] $msg $int } {0 {} 47} -catch {testlink set 0 0 0 - 0} +catch {testlink set 0 0 0 - 0 0 0 0 0 0 0 0 0 0} catch {testlink delete} foreach i {int real bool string wide} { catch {unset $i} diff --git a/tests/linsert.test b/tests/linsert.test index 7a1af4f..9262812 100644 --- a/tests/linsert.test +++ b/tests/linsert.test @@ -88,7 +88,7 @@ test linsert-2.2 {linsert errors} { } {1 {wrong # args: should be "linsert list index element ?element ...?"}} test linsert-2.3 {linsert errors} { list [catch {linsert a 12x 2} msg] $msg -} {1 {bad index "12x": must be integer or end?-integer?}} +} {1 {bad index "12x": must be integer?[+-]integer? or end?[+-]integer?}} test linsert-2.4 {linsert errors} { list [catch {linsert \{ 12 2} msg] $msg } {1 {unmatched open brace in list}} diff --git a/tests/list.test b/tests/list.test index 6ab9e8a..5a002a9 100644 --- a/tests/list.test +++ b/tests/list.test @@ -42,6 +42,8 @@ test list-1.21 {basic tests} {list a b c\\\nd} "a b c\\\\\\nd" test list-1.22 {basic tests} {list "{ab}\\"} \\{ab\\}\\\\ test list-1.23 {basic tests} {list \{} "\\{" test list-1.24 {basic tests} {list} {} +test list-1.25 {basic tests} {list # #} {{#} #} +test list-1.26 {basic tests} {list #\{ #\{} {\#\{ #\{} # For the next round of tests create a list and then pick it apart # with "index" to make sure that we get back exactly what went in. @@ -103,6 +105,10 @@ test list-3.1 {SetListFromAny and lrange/concat results} { slowsort {fred julie alex carol bill annie} } {alex annie bill carol fred julie} +test list-4.1 {Bug 3173086} { + string is list "{[list \\\\\}]}" +} 1 + # cleanup ::tcltest::cleanupTests return diff --git a/tests/listObj.test b/tests/listObj.test index 390ee64..9f9b41c 100644 --- a/tests/listObj.test +++ b/tests/listObj.test @@ -16,19 +16,13 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -if {[info commands testobj] == {}} { - puts "This application hasn't been compiled with the \"testobj\"" - puts "command, so I can't test the Tcl type and object support." - ::tcltest::cleanupTests - return -} +testConstraint testobj [llength [info commands testobj]] catch {unset x} -test listobj-1.1 {Tcl_GetListObjType} { - set t [testobj types] - set first [string first "list" $t] - set result [expr {$first != -1}] -} {1} +test listobj-1.1 {Tcl_GetListObjType} emptyTest { + # Test removed; tested an internal detail + # that's no longer correct, and duplicated test obj-1.1 +} {} test listobj-2.1 {Tcl_SetListObj, use in lappend} { catch {unset x} @@ -181,6 +175,24 @@ test listobj-9.1 {UpdateStringOfList} { string length [list foo\x00help] } 8 +test listobj-10.1 {Bug [2971669]} {*}{ + -constraints testobj + -setup { + testobj freeallvars + } + -body { + set result {} + lappend result \ + [testlistobj set 1 a b c d e] \ + [testlistobj replace 1 0x7fffffff 0x7fffffff f] \ + [testlistobj get 1] + } + -cleanup { + testobj freeallvars + } + -result {{a b c d e} {} {a b c d e f}} +} + test listobj-11.1 {bug 3598580} { testobj bug3598580 } 123 @@ -189,14 +201,6 @@ test listobj-11.1 {bug 3598580} { ::tcltest::cleanupTests return - - - - - - - - - - - +# Local Variables: +# mode: tcl +# End: diff --git a/tests/llength.test b/tests/llength.test index aee532d..169c7ca 100644 --- a/tests/llength.test +++ b/tests/llength.test @@ -39,15 +39,3 @@ test llength-2.3 {error conditions} { # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/load.test b/tests/load.test index 963516e..f5c08e9 100644 --- a/tests/load.test +++ b/tests/load.test @@ -17,32 +17,30 @@ if {[lsearch [namespace children] ::tcltest] == -1} { # Figure out what extension is used for shared libraries on this # platform. - +if {![info exists ext]} { + set ext [info sharedlibextension] +} # Tests require the existence of one of the DLLs in the dltest directory. -set ext [info sharedlibextension] set testDir [file join [file dirname [info nameofexecutable]] dltest] set x [file join $testDir pkga$ext] set dll "[file tail $x]Required" -::tcltest::testConstraint $dll [file readable $x] +testConstraint $dll [file readable $x] # Tests also require that this DLL has not already been loaded. set loaded "[file tail $x]Loaded" set alreadyLoaded [info loaded] -::tcltest::testConstraint $loaded \ - [expr {![string match *pkga* $alreadyLoaded]}] +testConstraint $loaded [expr {![string match *pkga* $alreadyLoaded]}] set alreadyTotalLoaded [info loaded] # Certain tests require the 'teststaticpkg' command from tcltest -::tcltest::testConstraint teststaticpkg \ - [string compare {} [info commands teststaticpkg]] +testConstraint teststaticpkg [llength [info commands teststaticpkg]] # Test load-10.1 requires the 'testsimplefilesystem' command from tcltest -::tcltest::testConstraint testsimplefilesystem \ - [string compare {} [info commands testsimplefilesystem]] - +testConstraint testsimplefilesystem \ + [llength [info commands testsimplefilesystem]] test load-1.1 {basic errors} {} { list [catch {load} msg] $msg @@ -86,7 +84,7 @@ test load-2.4 {loading with no _SafeInit procedure} [list $dll $loaded] { test load-3.1 {error in _Init procedure, same interpreter} \ [list $dll $loaded] { list [catch {load [file join $testDir pkge$ext] pkge} msg] \ - $msg $errorInfo $errorCode + $msg $::errorInfo $::errorCode } {1 {couldn't open "non_existent": no such file or directory} {couldn't open "non_existent": no such file or directory while executing "open non_existent" @@ -98,10 +96,10 @@ test load-3.2 {error in _Init procedure, slave interpreter} \ [list $dll $loaded] { catch {interp delete x} interp create x - set errorCode foo - set errorInfo bar + set ::errorCode foo + set ::errorInfo bar set result [list [catch {load [file join $testDir pkge$ext] pkge x} msg] \ - $msg $errorInfo $errorCode] + $msg $::errorInfo $::errorCode] interp delete x set result } {1 {couldn't open "non_existent": no such file or directory} {couldn't open "non_existent": no such file or directory @@ -132,8 +130,10 @@ test load-5.1 {file name not specified and no static package: pick default} \ # On some platforms, like SunOS 4.1.3, these tests can't be run because # they cause the process to exit. +# +# As of 2005, such ancient broken systems no longer matter. -test load-6.1 {errors loading file} [list $dll $loaded nonPortable] { +test load-6.1 {errors loading file} [list $dll $loaded] { catch {load foo foo} } {1} @@ -206,5 +206,6 @@ test load-10.1 {load from vfs} \ -cleanup {testsimplefilesystem 0; cd $dir; unset dir} # cleanup +unset ext ::tcltest::cleanupTests return diff --git a/tests/lrange.test b/tests/lrange.test index 80523fb..ec5936d 100644 --- a/tests/lrange.test +++ b/tests/lrange.test @@ -41,7 +41,7 @@ test lrange-1.8 {range of list elements} { lrange {a b c d e} -2 -1 } {} test lrange-1.9 {range of list elements} { - lrange {a b c d e} -2 e + lrange {a b c d e} -2 end } {a b c d e} test lrange-1.10 {range of list elements} { lrange "a b\{c d" 1 2 @@ -53,7 +53,7 @@ test lrange-1.12 {range of list elements} { lrange "a b c d" end 100000 } d test lrange-1.13 {range of list elements} { - lrange "a b c d" e 3 + lrange "a b c d" end 3 } d test lrange-1.14 {range of list elements} { lrange "a b c d" end 2 @@ -73,10 +73,10 @@ test lrange-2.2 {error conditions} { } {1 {wrong # args: should be "lrange list first last"}} test lrange-2.3 {error conditions} { list [catch {lrange a b 6} msg] $msg -} {1 {bad index "b": must be integer or end?-integer?}} +} {1 {bad index "b": must be integer?[+-]integer? or end?[+-]integer?}} test lrange-2.4 {error conditions} { list [catch {lrange a 0 enigma} msg] $msg -} {1 {bad index "enigma": must be integer or end?-integer?}} +} {1 {bad index "enigma": must be integer?[+-]integer? or end?[+-]integer?}} test lrange-2.5 {error conditions} { list [catch {lrange "a \{b c" 3 4} msg] $msg } {1 {unmatched open brace in list}} diff --git a/tests/lrepeat.test b/tests/lrepeat.test new file mode 100644 index 0000000..5e9d70f --- /dev/null +++ b/tests/lrepeat.test @@ -0,0 +1,77 @@ +# Commands covered: lrepeat +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. +# +# Copyright (c) 2003 by Simon Geard. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest 2 + namespace import -force ::tcltest::* +} + +## Arg errors +test lrepeat-1.1 {error cases} { + -body { + lrepeat + } + -returnCodes 1 + -result {wrong # args: should be "lrepeat positiveCount value ?value ...?"} +} +test lrepeat-1.2 {error cases} { + -body { + lrepeat 1 + } + -returnCodes 1 + -result {wrong # args: should be "lrepeat positiveCount value ?value ...?"} +} +test lrepeat-1.3 {error cases} { + -body { + lrepeat a 1 + } + -returnCodes 1 + -result {expected integer but got "a"} +} +test lrepeat-1.4 {error cases} { + -body { + lrepeat -3 1 + } + -returnCodes 1 + -result {must have a count of at least 1} +} +test lrepeat-1.5 {error cases} { + -body { + lrepeat 0 + } + -returnCodes 1 + -result {wrong # args: should be "lrepeat positiveCount value ?value ...?"} +} +test lrepeat-1.6 {error cases} { + -body { + lrepeat 3.5 1 + } + -returnCodes 1 + -result {expected integer but got "3.5"} +} + +## Okay +test lrepeat-2.1 {normal cases} { + lrepeat 10 a +} {a a a a a a a a a a} +test lrepeat-2.2 {normal cases} { + lrepeat 3 [lrepeat 3 0] +} {{0 0 0} {0 0 0} {0 0 0}} +test lrepeat-2.3 {normal cases} { + lrepeat 3 a b c +} {a b c a b c a b c} +test lrepeat-2.4 {normal cases} { + lrepeat 3 [lrepeat 2 a] b c +} {{a a} b c {a a} b c {a a} b c} + +# cleanup +::tcltest::cleanupTests +return diff --git a/tests/lreplace.test b/tests/lreplace.test index 5fc11a2..55bad37 100644 --- a/tests/lreplace.test +++ b/tests/lreplace.test @@ -108,13 +108,13 @@ test lreplace-2.2 {lreplace errors} { } {1 {wrong # args: should be "lreplace list first last ?element element ...?"}} test lreplace-2.3 {lreplace errors} { list [catch {lreplace x a 10} msg] $msg -} {1 {bad index "a": must be integer or end?-integer?}} +} {1 {bad index "a": must be integer?[+-]integer? or end?[+-]integer?}} test lreplace-2.4 {lreplace errors} { list [catch {lreplace x 10 x} msg] $msg -} {1 {bad index "x": must be integer or end?-integer?}} +} {1 {bad index "x": must be integer?[+-]integer? or end?[+-]integer?}} test lreplace-2.5 {lreplace errors} { list [catch {lreplace x 10 1x} msg] $msg -} {1 {bad index "1x": must be integer or end?-integer?}} +} {1 {bad index "1x": must be integer?[+-]integer? or end?[+-]integer?}} test lreplace-2.6 {lreplace errors} { list [catch {lreplace x 3 2} msg] $msg } {1 {list doesn't contain element 3}} diff --git a/tests/lsearch.test b/tests/lsearch.test index a0899c4..36bf389 100644 --- a/tests/lsearch.test +++ b/tests/lsearch.test @@ -59,7 +59,25 @@ test lsearch-2.9 {search modes} { } 1 test lsearch-2.10 {search modes} { list [catch {lsearch -glib {b.x bx xy bcx} b.x} msg] $msg -} {1 {bad option "-glib": must be -all, -ascii, -decreasing, -dictionary, -exact, -glob, -increasing, -inline, -integer, -not, -real, -regexp, -sorted, or -start}} +} {1 {bad option "-glib": must be -all, -ascii, -decreasing, -dictionary, -exact, -glob, -increasing, -index, -inline, -integer, -nocase, -not, -real, -regexp, -sorted, -start, or -subindices}} +test lsearch-2.11 {search modes with -nocase} { + lsearch -exact -nocase {a b c A B C} A +} 0 +test lsearch-2.12 {search modes with -nocase} { + lsearch -glob -nocase {a b c A B C} A* +} 0 +test lsearch-2.13 {search modes with -nocase} { + lsearch -regexp -nocase {a b c A B C} ^A\$ +} 0 +test lsearch-2.14 {search modes without -nocase} { + lsearch -exact {a b c A B C} A +} 3 +test lsearch-2.15 {search modes without -nocase} { + lsearch -glob {a b c A B C} A* +} 3 +test lsearch-2.16 {search modes without -nocase} { + lsearch -regexp {a b c A B C} ^A\$ +} 3 test lsearch-3.1 {lsearch errors} { list [catch lsearch msg] $msg @@ -69,13 +87,19 @@ test lsearch-3.2 {lsearch errors} { } {1 {wrong # args: should be "lsearch ?options? list pattern"}} test lsearch-3.3 {lsearch errors} { list [catch {lsearch a b c} msg] $msg -} {1 {bad option "a": must be -all, -ascii, -decreasing, -dictionary, -exact, -glob, -increasing, -inline, -integer, -not, -real, -regexp, -sorted, or -start}} +} {1 {bad option "a": must be -all, -ascii, -decreasing, -dictionary, -exact, -glob, -increasing, -index, -inline, -integer, -nocase, -not, -real, -regexp, -sorted, -start, or -subindices}} test lsearch-3.4 {lsearch errors} { list [catch {lsearch a b c d} msg] $msg -} {1 {bad option "a": must be -all, -ascii, -decreasing, -dictionary, -exact, -glob, -increasing, -inline, -integer, -not, -real, -regexp, -sorted, or -start}} +} {1 {bad option "a": must be -all, -ascii, -decreasing, -dictionary, -exact, -glob, -increasing, -index, -inline, -integer, -nocase, -not, -real, -regexp, -sorted, -start, or -subindices}} test lsearch-3.5 {lsearch errors} { list [catch {lsearch "\{" b} msg] $msg } {1 {unmatched open brace in list}} +test lsearch-3.6 {lsearch errors} { + list [catch {lsearch -index a b} msg] $msg +} {1 {"-index" option must be followed by list index}} +test lsearch-3.7 {lsearch errors} { + list [catch {lsearch -subindices -exact a b} msg] $msg +} {1 {-subindices cannot be used without -index option}} test lsearch-4.1 {binary data} { lsearch -exact [list foo one\000two bar] bar @@ -276,7 +300,7 @@ test lsearch-10.3 {offset searching} { } 3 test lsearch-10.4 {offset searching} { list [catch {lsearch -start foobar {a b c a b c} a} msg] $msg -} {1 {bad index "foobar": must be integer or end?-integer?}} +} {1 {bad index "foobar": must be integer?[+-]integer? or end?[+-]integer?}} test lsearch-10.5 {offset searching} { list [catch {lsearch -start 1 2} msg] $msg } {1 {missing starting index}} @@ -324,6 +348,15 @@ test lsearch-13.1 {search for all matches} { test lsearch-13.2 {search for all matches} { lsearch -all {a b a c a d} a } {0 2 4} +test lsearch-13.3 {search for all matches with -nocase} { + lsearch -all -exact -nocase {a b c A B C} A +} {0 3} +test lsearch-13.4 {search for all matches with -nocase} { + lsearch -all -glob -nocase {a b c A B C} A* +} {0 3} +test lsearch-13.5 {search for all matches with -nocase} { + lsearch -all -regexp -nocase {a b c A B C} ^A\$ +} {0 3} test lsearch-14.1 {combinations: -all and -inline} { lsearch -all -inline -glob {a1 b2 a3 c4 a5 d6} a* @@ -364,6 +397,70 @@ test lsearch-16.2 {lsearch -regexp allows internal backrefs} { lsearch -regexp {a aa b} {(.)\1} } 1 +test lsearch-17.1 {lsearch -index option, basic functionality} { + lsearch -index 1 {{a c} {a b} {a a}} a +} 2 +test lsearch-17.2 {lsearch -index option, basic functionality} { + lsearch -index 1 -exact {{a c} {a b} {a a}} a +} 2 +test lsearch-17.3 {lsearch -index option, basic functionality} { + lsearch -index 1 -glob {{ab cb} {ab bb} {ab ab}} b* +} 1 +test lsearch-17.4 {lsearch -index option, basic functionality} { + lsearch -index 1 -regexp {{ab cb} {ab bb} {ab ab}} {[cb]b} +} 0 +test lsearch-17.5 {lsearch -index option, basic functionality} { + lsearch -all -index 0 -exact {{a c} {a b} {d a}} a +} {0 1} +test lsearch-17.6 {lsearch -index option, basic functionality} { + lsearch -all -index 1 -glob {{ab cb} {ab bb} {db bx}} b* +} {1 2} +test lsearch-17.7 {lsearch -index option, basic functionality} { + lsearch -all -index 1 -regexp {{ab cb} {ab bb} {ab ab}} {[cb]b} +} {0 1} + +test lsearch-18.1 {lsearch -index option, list as index basic functionality} { + lsearch -index {0 0} {{{x x} {x b} {a d}} {{a c} {a b} {a a}}} a +} 1 +test lsearch-18.2 {lsearch -index option, list as index basic functionality} { + lsearch -index {2 0} -exact {{{x x} {x b} {a d}} {{a c} {a b} {a a}}} a +} 0 +test lsearch-18.3 {lsearch -index option, list as index basic functionality} { + lsearch -index {1 1} -glob {{{ab cb} {ab bb} {ab ab}} {{ab cb} {ab bb} {ab ab}}} b* +} 0 +test lsearch-18.4 {lsearch -index option, list as index basic functionality} { + lsearch -index {0 1} -regexp {{{ab cb} {ab bb} {ab ab}} {{ab cb} {ab bb} {ab ab}}} {[cb]b} +} 0 +test lsearch-18.5 {lsearch -index option, list as index basic functionality} { + lsearch -all -index {0 0} -exact {{{a c} {a b} {d a}} {{a c} {a b} {d a}}} a +} {0 1} + +test lsearch-19.1 {lsearch -sunindices option} { + lsearch -subindices -index {0 0} {{{x x} {x b} {a d}} {{a c} {a b} {a a}}} a +} {1 0 0} +test lsearch-19.2 {lsearch -sunindices option} { + lsearch -subindices -index {2 0} -exact {{{x x} {x b} {a d}} {{a c} {a b} {a a}}} a +} {0 2 0} +test lsearch-19.3 {lsearch -sunindices option} { + lsearch -subindices -index {1 1} -glob {{{ab cb} {ab bb} {ab ab}} {{ab cb} {ab bb} {ab ab}}} b* +} {0 1 1} +test lsearch-19.4 {lsearch -sunindices option} { + lsearch -subindices -index {0 1} -regexp {{{ab cb} {ab bb} {ab ab}} {{ab cb} {ab bb} {ab ab}}} {[cb]b} +} {0 0 1} +test lsearch-19.5 {lsearch -sunindices option} { + lsearch -subindices -all -index {0 0} -exact {{{a c} {a b} {d a}} {{a c} {a b} {d a}}} a +} {{0 0 0} {1 0 0}} + +test lsearch-20.1 {lsearch -index option, index larger than sublists} { + list [catch {lsearch -index 2 {{a c} {a b} {a a}} a} msg] $msg +} {1 {element 2 missing from sublist "a c"}} +test lsearch-20.2 {lsearch -index option, malformed index} { + list [catch {lsearch -index foo {{a c} {a b} {a a}} a} msg] $msg +} {1 {bad index "foo": must be integer?[+-]integer? or end?[+-]integer?}} +test lsearch-20.3 {lsearch -index option, malformed index} { + list [catch {lsearch -index \{ {{a c} {a b} {a a}} a} msg] $msg +} {1 {unmatched open brace in list}} + test lsearch-21.1 {lsearch shimmering crash} { set x 0 lsearch -exact -integer $x $x diff --git a/tests/lset.test b/tests/lset.test index e38f12f..cc1c00b 100644 --- a/tests/lset.test +++ b/tests/lset.test @@ -20,430 +20,391 @@ proc failTrace {name1 name2 op} { error "trace failed" } -set lset lset +testConstraint testevalex [llength [info commands testevalex]] set noRead {} trace add variable noRead read failTrace set noWrite {a b c} trace add variable noWrite write failTrace -test lset-1.1 {lset, not compiled, arg count} { - list [catch {eval $lset} msg] $msg -} "1 {wrong \# args: should be \"lset listVar index ?index...? value\"}" - -test lset-1.2 {lset, not compiled, no such var} { - list [catch {eval [list $lset noSuchVar 0 {}]} msg] $msg +test lset-1.1 {lset, not compiled, arg count} testevalex { + list [catch {testevalex lset} msg] $msg +} "1 {wrong \# args: should be \"lset listVar ?index? ?index...? value\"}" +test lset-1.2 {lset, not compiled, no such var} testevalex { + list [catch {testevalex {lset noSuchVar 0 {}}} msg] $msg } "1 {can't read \"noSuchVar\": no such variable}" - -test lset-1.3 {lset, not compiled, var not readable} { - list [catch {eval [list $lset noRead 0 {}]} msg] $msg +test lset-1.3 {lset, not compiled, var not readable} testevalex { + list [catch {testevalex {lset noRead 0 {}}} msg] $msg } "1 {can't read \"noRead\": trace failed}" -test lset-2.1 {lset, not compiled, 3 args, second arg a plain index} { +test lset-2.1 {lset, not compiled, 3 args, second arg a plain index} testevalex { set x {0 1 2} - list [eval [list $lset x 0 3]] $x + list [testevalex {lset x 0 3}] $x } {{3 1 2} {3 1 2}} - -test lset-2.2 {lset, not compiled, 3 args, second arg neither index nor list} { +test lset-2.2 {lset, not compiled, 3 args, second arg neither index nor list} testevalex { set x {0 1 2} list [catch { - eval [list $lset x {{bad}1} 3] + testevalex {lset x {{bad}1} 3} } msg] $msg -} "1 {bad index \"{bad}1\": must be integer or end?-integer?}" +} {1 {bad index "{bad}1": must be integer?[+-]integer? or end?[+-]integer?}} -test lset-3.1 {lset, not compiled, 3 args, data duplicated} { +test lset-3.1 {lset, not compiled, 3 args, data duplicated} testevalex { set x {0 1 2} - list [eval [list $lset x 0 $x]] $x + list [testevalex {lset x 0 $x}] $x } {{{0 1 2} 1 2} {{0 1 2} 1 2}} - -test lset-3.2 {lset, not compiled, 3 args, data duplicated} { +test lset-3.2 {lset, not compiled, 3 args, data duplicated} testevalex { set x {0 1} set y $x - list [eval [list $lset x 0 2]] $x $y + list [testevalex {lset x 0 2}] $x $y } {{2 1} {2 1} {0 1}} - -test lset-3.3 {lset, not compiled, 3 args, data duplicated} { +test lset-3.3 {lset, not compiled, 3 args, data duplicated} testevalex { set x {0 1} set y $x - list [eval [list $lset x 0 $x]] $x $y + list [testevalex {lset x 0 $x}] $x $y } {{{0 1} 1} {{0 1} 1} {0 1}} - -test lset-3.4 {lset, not compiled, 3 args, data duplicated} { +test lset-3.4 {lset, not compiled, 3 args, data duplicated} testevalex { set x {0 1 2} - list [eval [list $lset x [list 0] $x]] $x + list [testevalex {lset x [list 0] $x}] $x } {{{0 1 2} 1 2} {{0 1 2} 1 2}} - -test lset-3.5 {lset, not compiled, 3 args, data duplicated} { +test lset-3.5 {lset, not compiled, 3 args, data duplicated} testevalex { set x {0 1} set y $x - list [eval [list $lset x [list 0] 2]] $x $y + list [testevalex {lset x [list 0] 2}] $x $y } {{2 1} {2 1} {0 1}} - -test lset-3.6 {lset, not compiled, 3 args, data duplicated} { +test lset-3.6 {lset, not compiled, 3 args, data duplicated} testevalex { set x {0 1} set y $x - list [eval [list $lset x [list 0] $x]] $x $y + list [testevalex {lset x [list 0] $x}] $x $y } {{{0 1} 1} {{0 1} 1} {0 1}} -test lset-4.1 {lset, not compiled, 3 args, not a list} { +test lset-4.1 {lset, not compiled, 3 args, not a list} testevalex { set a "x \{" list [catch { - eval [list $lset a [list 0] y] + testevalex {lset a [list 0] y} } msg] $msg } {1 {unmatched open brace in list}} - -test lset-4.2 {lset, not compiled, 3 args, bad index} { +test lset-4.2 {lset, not compiled, 3 args, bad index} testevalex { set a {x y z} list [catch { - eval [list $lset a [list 2a2] w] + testevalex {lset a [list 2a2] w} } msg] $msg -} {1 {bad index "2a2": must be integer or end?-integer?}} - -test lset-4.3 {lset, not compiled, 3 args, index out of range} { +} {1 {bad index "2a2": must be integer?[+-]integer? or end?[+-]integer?}} +test lset-4.3 {lset, not compiled, 3 args, index out of range} testevalex { set a {x y z} list [catch { - eval [list $lset a [list -1] w] + testevalex {lset a [list -1] w} } msg] $msg } {1 {list index out of range}} - -test lset-4.4 {lset, not compiled, 3 args, index out of range} { +test lset-4.4 {lset, not compiled, 3 args, index out of range} testevalex { set a {x y z} list [catch { - eval [list $lset a [list 3] w] + testevalex {lset a [list 3] w} } msg] $msg } {1 {list index out of range}} - -test lset-4.5 {lset, not compiled, 3 args, index out of range} { +test lset-4.5 {lset, not compiled, 3 args, index out of range} testevalex { set a {x y z} list [catch { - eval [list $lset a [list end--1] w] + testevalex {lset a [list end--1] w} } msg] $msg } {1 {list index out of range}} - -test lset-4.6 {lset, not compiled, 3 args, index out of range} { +test lset-4.6 {lset, not compiled, 3 args, index out of range} testevalex { set a {x y z} list [catch { - eval [list $lset a [list end-3] w] + testevalex {lset a [list end-3] w} } msg] $msg } {1 {list index out of range}} - -test lset-4.7 {lset, not compiled, 3 args, not a list} { +test lset-4.7 {lset, not compiled, 3 args, not a list} testevalex { set a "x \{" list [catch { - eval [list $lset a 0 y] + testevalex {lset a 0 y} } msg] $msg } {1 {unmatched open brace in list}} - -test lset-4.8 {lset, not compiled, 3 args, bad index} { +test lset-4.8 {lset, not compiled, 3 args, bad index} testevalex { set a {x y z} list [catch { - eval [list $lset a 2a2 w] + testevalex {lset a 2a2 w} } msg] $msg -} {1 {bad index "2a2": must be integer or end?-integer?}} - -test lset-4.9 {lset, not compiled, 3 args, index out of range} { +} {1 {bad index "2a2": must be integer?[+-]integer? or end?[+-]integer?}} +test lset-4.9 {lset, not compiled, 3 args, index out of range} testevalex { set a {x y z} list [catch { - eval [list $lset a -1 w] + testevalex {lset a -1 w} } msg] $msg } {1 {list index out of range}} - -test lset-4.10 {lset, not compiled, 3 args, index out of range} { +test lset-4.10 {lset, not compiled, 3 args, index out of range} testevalex { set a {x y z} list [catch { - eval [list $lset a 3 w] + testevalex {lset a 3 w} } msg] $msg } {1 {list index out of range}} - -test lset-4.11 {lset, not compiled, 3 args, index out of range} { +test lset-4.11 {lset, not compiled, 3 args, index out of range} testevalex { set a {x y z} list [catch { - eval [list $lset a end--1 w] + testevalex {lset a end--1 w} } msg] $msg } {1 {list index out of range}} - -test lset-4.12 {lset, not compiled, 3 args, index out of range} { +test lset-4.12 {lset, not compiled, 3 args, index out of range} testevalex { set a {x y z} list [catch { - eval [list $lset a end-3 w] + testevalex {lset a end-3 w} } msg] $msg } {1 {list index out of range}} -test lset-5.1 {lset, not compiled, 3 args, can't set variable} { +test lset-5.1 {lset, not compiled, 3 args, can't set variable} testevalex { list [catch { - eval [list $lset noWrite 0 d] + testevalex {lset noWrite 0 d} } msg] $msg $noWrite } {1 {can't set "noWrite": trace failed} {d b c}} - -test lset-5.2 {lset, not compiled, 3 args, can't set variable} { +test lset-5.2 {lset, not compiled, 3 args, can't set variable} testevalex { list [catch { - eval [list $lset noWrite [list 0] d] + testevalex {lset noWrite [list 0] d} } msg] $msg $noWrite } {1 {can't set "noWrite": trace failed} {d b c}} -test lset-6.1 {lset, not compiled, 3 args, 1-d list basics} { +test lset-6.1 {lset, not compiled, 3 args, 1-d list basics} testevalex { set a {x y z} - list [eval [list $lset a 0 a]] $a + list [testevalex {lset a 0 a}] $a } {{a y z} {a y z}} - -test lset-6.2 {lset, not compiled, 3 args, 1-d list basics} { +test lset-6.2 {lset, not compiled, 3 args, 1-d list basics} testevalex { set a {x y z} - list [eval [list $lset a [list 0] a]] $a + list [testevalex {lset a [list 0] a}] $a } {{a y z} {a y z}} - -test lset-6.3 {lset, not compiled, 1-d list basics} { +test lset-6.3 {lset, not compiled, 1-d list basics} testevalex { set a {x y z} - list [eval [list $lset a 2 a]] $a + list [testevalex {lset a 2 a}] $a } {{x y a} {x y a}} - -test lset-6.4 {lset, not compiled, 1-d list basics} { +test lset-6.4 {lset, not compiled, 1-d list basics} testevalex { set a {x y z} - list [eval [list $lset a [list 2] a]] $a + list [testevalex {lset a [list 2] a}] $a } {{x y a} {x y a}} - -test lset-6.5 {lset, not compiled, 1-d list basics} { +test lset-6.5 {lset, not compiled, 1-d list basics} testevalex { set a {x y z} - list [eval [list $lset a end a]] $a + list [testevalex {lset a end a}] $a } {{x y a} {x y a}} - -test lset-6.6 {lset, not compiled, 1-d list basics} { +test lset-6.6 {lset, not compiled, 1-d list basics} testevalex { set a {x y z} - list [eval [list $lset a [list end] a]] $a + list [testevalex {lset a [list end] a}] $a } {{x y a} {x y a}} - -test lset-6.7 {lset, not compiled, 1-d list basics} { +test lset-6.7 {lset, not compiled, 1-d list basics} testevalex { set a {x y z} - list [eval [list $lset a end-0 a]] $a + list [testevalex {lset a end-0 a}] $a } {{x y a} {x y a}} - -test lset-6.8 {lset, not compiled, 1-d list basics} { +test lset-6.8 {lset, not compiled, 1-d list basics} testevalex { set a {x y z} - list [eval [list $lset a [list end-0] a]] $a + list [testevalex {lset a [list end-0] a}] $a } {{x y a} {x y a}} - -test lset-6.9 {lset, not compiled, 1-d list basics} { +test lset-6.9 {lset, not compiled, 1-d list basics} testevalex { set a {x y z} - list [eval [list $lset a end-2 a]] $a + list [testevalex {lset a end-2 a}] $a } {{a y z} {a y z}} - -test lset-6.10 {lset, not compiled, 1-d list basics} { +test lset-6.10 {lset, not compiled, 1-d list basics} testevalex { set a {x y z} - list [eval [list $lset a [list end-2] a]] $a + list [testevalex {lset a [list end-2] a}] $a } {{a y z} {a y z}} -test lset-7.1 {lset, not compiled, data sharing} { +test lset-7.1 {lset, not compiled, data sharing} testevalex { set a 0 - list [eval [list $lset a $a {gag me}]] $a + list [testevalex {lset a $a {gag me}}] $a } {{{gag me}} {{gag me}}} - -test lset-7.2 {lset, not compiled, data sharing} { +test lset-7.2 {lset, not compiled, data sharing} testevalex { set a [list 0] - list [eval [list $lset a $a {gag me}]] $a + list [testevalex {lset a $a {gag me}}] $a } {{{gag me}} {{gag me}}} - -test lset-7.3 {lset, not compiled, data sharing} { +test lset-7.3 {lset, not compiled, data sharing} testevalex { set a {x y} - list [eval [list $lset a 0 $a]] $a + list [testevalex {lset a 0 $a}] $a } {{{x y} y} {{x y} y}} - -test lset-7.4 {lset, not compiled, data sharing} { +test lset-7.4 {lset, not compiled, data sharing} testevalex { set a {x y} - list [eval [list $lset a [list 0] $a]] $a + list [testevalex {lset a [list 0] $a}] $a } {{{x y} y} {{x y} y}} - -test lset-7.5 {lset, not compiled, data sharing} { +test lset-7.5 {lset, not compiled, data sharing} testevalex { set n 0 set a {x y} - list [eval [list $lset a $n $n]] $a $n + list [testevalex {lset a $n $n}] $a $n } {{0 y} {0 y} 0} - -test lset-7.6 {lset, not compiled, data sharing} { +test lset-7.6 {lset, not compiled, data sharing} testevalex { set n [list 0] set a {x y} - list [eval [list $lset a $n $n]] $a $n + list [testevalex {lset a $n $n}] $a $n } {{0 y} {0 y} 0} - -test lset-7.7 {lset, not compiled, data sharing} { +test lset-7.7 {lset, not compiled, data sharing} testevalex { set n 0 set a [list $n $n] - list [eval [list $lset a $n 1]] $a $n + list [testevalex {lset a $n 1}] $a $n } {{1 0} {1 0} 0} - -test lset-7.8 {lset, not compiled, data sharing} { +test lset-7.8 {lset, not compiled, data sharing} testevalex { set n [list 0] set a [list $n $n] - list [eval [list $lset a $n 1]] $a $n + list [testevalex {lset a $n 1}] $a $n } {{1 0} {1 0} 0} - -test lset-7.9 {lset, not compiled, data sharing} { +test lset-7.9 {lset, not compiled, data sharing} testevalex { set a 0 - list [eval [list $lset a $a $a]] $a + list [testevalex {lset a $a $a}] $a } {0 0} - -test lset-7.10 {lset, not compiled, data sharing} { +test lset-7.10 {lset, not compiled, data sharing} testevalex { set a [list 0] - list [eval [list $lset a $a $a]] $a + list [testevalex {lset a $a $a}] $a } {0 0} -test lset-8.1 {lset, not compiled, malformed sublist} { +test lset-8.1 {lset, not compiled, malformed sublist} testevalex { set a [list "a \{" b] - list [catch {eval [list $lset a 0 1 c]} msg] $msg + list [catch {testevalex {lset a 0 1 c}} msg] $msg } {1 {unmatched open brace in list}} - -test lset-8.2 {lset, not compiled, malformed sublist} { +test lset-8.2 {lset, not compiled, malformed sublist} testevalex { set a [list "a \{" b] - list [catch {eval [list $lset a {0 1} c]} msg] $msg + list [catch {testevalex {lset a {0 1} c}} msg] $msg } {1 {unmatched open brace in list}} - -test lset-8.3 {lset, not compiled, bad second index} { +test lset-8.3 {lset, not compiled, bad second index} testevalex { set a {{b c} {d e}} - list [catch {eval [list $lset a 0 2a2 f]} msg] $msg -} {1 {bad index "2a2": must be integer or end?-integer?}} - -test lset-8.4 {lset, not compiled, bad second index} { + list [catch {testevalex {lset a 0 2a2 f}} msg] $msg +} {1 {bad index "2a2": must be integer?[+-]integer? or end?[+-]integer?}} +test lset-8.4 {lset, not compiled, bad second index} testevalex { set a {{b c} {d e}} - list [catch {eval [list $lset a {0 2a2} f]} msg] $msg -} {1 {bad index "2a2": must be integer or end?-integer?}} - -test lset-8.5 {lset, not compiled, second index out of range} { + list [catch {testevalex {lset a {0 2a2} f}} msg] $msg +} {1 {bad index "2a2": must be integer?[+-]integer? or end?[+-]integer?}} +test lset-8.5 {lset, not compiled, second index out of range} testevalex { set a {{b c} {d e} {f g}} - list [catch {eval [list $lset a 2 -1 h]} msg] $msg + list [catch {testevalex {lset a 2 -1 h}} msg] $msg } {1 {list index out of range}} - -test lset-8.6 {lset, not compiled, second index out of range} { +test lset-8.6 {lset, not compiled, second index out of range} testevalex { set a {{b c} {d e} {f g}} - list [catch {eval [list $lset a {2 -1} h]} msg] $msg + list [catch {testevalex {lset a {2 -1} h}} msg] $msg } {1 {list index out of range}} - -test lset-8.7 {lset, not compiled, second index out of range} { +test lset-8.7 {lset, not compiled, second index out of range} testevalex { set a {{b c} {d e} {f g}} - list [catch {eval [list $lset a 2 2 h]} msg] $msg + list [catch {testevalex {lset a 2 2 h}} msg] $msg } {1 {list index out of range}} - -test lset-8.8 {lset, not compiled, second index out of range} { +test lset-8.8 {lset, not compiled, second index out of range} testevalex { set a {{b c} {d e} {f g}} - list [catch {eval [list $lset a {2 2} h]} msg] $msg + list [catch {testevalex {lset a {2 2} h}} msg] $msg } {1 {list index out of range}} - -test lset-8.9 {lset, not compiled, second index out of range} { +test lset-8.9 {lset, not compiled, second index out of range} testevalex { set a {{b c} {d e} {f g}} - list [catch {eval [list $lset a 2 end--1 h]} msg] $msg + list [catch {testevalex {lset a 2 end--1 h}} msg] $msg } {1 {list index out of range}} - -test lset-8.10 {lset, not compiled, second index out of range} { +test lset-8.10 {lset, not compiled, second index out of range} testevalex { set a {{b c} {d e} {f g}} - list [catch {eval [list $lset a {2 end--1} h]} msg] $msg + list [catch {testevalex {lset a {2 end--1} h}} msg] $msg } {1 {list index out of range}} - -test lset-8.11 {lset, not compiled, second index out of range} { +test lset-8.11 {lset, not compiled, second index out of range} testevalex { set a {{b c} {d e} {f g}} - list [catch {eval [list $lset a 2 end-2 h]} msg] $msg + list [catch {testevalex {lset a 2 end-2 h}} msg] $msg } {1 {list index out of range}} - -test lset-8.12 {lset, not compiled, second index out of range} { +test lset-8.12 {lset, not compiled, second index out of range} testevalex { set a {{b c} {d e} {f g}} - list [catch {eval [list $lset a {2 end-2} h]} msg] $msg + list [catch {testevalex {lset a {2 end-2} h}} msg] $msg } {1 {list index out of range}} -test lset-9.1 {lset, not compiled, entire variable} { +test lset-9.1 {lset, not compiled, entire variable} testevalex { set a x - list [eval [list $lset a y]] $a + list [testevalex {lset a y}] $a } {y y} - -test lset-9.2 {lset, not compiled, entire variable} { +test lset-9.2 {lset, not compiled, entire variable} testevalex { set a x - list [eval [list $lset a {} y]] $a + list [testevalex {lset a {} y}] $a } {y y} -test lset-10.1 {lset, not compiled, shared data} { +test lset-10.1 {lset, not compiled, shared data} testevalex { set row {p q} set a [list $row $row] - list [eval [list $lset a 0 0 x]] $a + list [testevalex {lset a 0 0 x}] $a } {{{x q} {p q}} {{x q} {p q}}} - -test lset-10.2 {lset, not compiled, shared data} { +test lset-10.2 {lset, not compiled, shared data} testevalex { set row {p q} set a [list $row $row] - list [eval [list $lset a {0 0} x]] $a + list [testevalex {lset a {0 0} x}] $a } {{{x q} {p q}} {{x q} {p q}}} +test lset-10.3 {lset, not compiled, shared data, [Bug 1333036]} testevalex { + set a [list [list p q] [list r s]] + set b $a + list [testevalex {lset b {0 0} x}] $a +} {{{x q} {r s}} {{p q} {r s}}} -test lset-11.1 {lset, not compiled, 2-d basics} { +test lset-11.1 {lset, not compiled, 2-d basics} testevalex { set a {{b c} {d e}} - list [eval [list $lset a 0 0 f]] $a + list [testevalex {lset a 0 0 f}] $a } {{{f c} {d e}} {{f c} {d e}}} - -test lset-11.2 {lset, not compiled, 2-d basics} { +test lset-11.2 {lset, not compiled, 2-d basics} testevalex { set a {{b c} {d e}} - list [eval [list $lset a {0 0} f]] $a + list [testevalex {lset a {0 0} f}] $a } {{{f c} {d e}} {{f c} {d e}}} - -test lset-11.3 {lset, not compiled, 2-d basics} { +test lset-11.3 {lset, not compiled, 2-d basics} testevalex { set a {{b c} {d e}} - list [eval [list $lset a 0 1 f]] $a + list [testevalex {lset a 0 1 f}] $a } {{{b f} {d e}} {{b f} {d e}}} - -test lset-11.4 {lset, not compiled, 2-d basics} { +test lset-11.4 {lset, not compiled, 2-d basics} testevalex { set a {{b c} {d e}} - list [eval [list $lset a {0 1} f]] $a + list [testevalex {lset a {0 1} f}] $a } {{{b f} {d e}} {{b f} {d e}}} - -test lset-11.5 {lset, not compiled, 2-d basics} { +test lset-11.5 {lset, not compiled, 2-d basics} testevalex { set a {{b c} {d e}} - list [eval [list $lset a 1 0 f]] $a + list [testevalex {lset a 1 0 f}] $a } {{{b c} {f e}} {{b c} {f e}}} - -test lset-11.6 {lset, not compiled, 2-d basics} { +test lset-11.6 {lset, not compiled, 2-d basics} testevalex { set a {{b c} {d e}} - list [eval [list $lset a {1 0} f]] $a + list [testevalex {lset a {1 0} f}] $a } {{{b c} {f e}} {{b c} {f e}}} - -test lset-11.7 {lset, not compiled, 2-d basics} { +test lset-11.7 {lset, not compiled, 2-d basics} testevalex { set a {{b c} {d e}} - list [eval [list $lset a 1 1 f]] $a + list [testevalex {lset a 1 1 f}] $a } {{{b c} {d f}} {{b c} {d f}}} - -test lset-11.8 {lset, not compiled, 2-d basics} { +test lset-11.8 {lset, not compiled, 2-d basics} testevalex { set a {{b c} {d e}} - list [eval [list $lset a {1 1} f]] $a + list [testevalex {lset a {1 1} f}] $a } {{{b c} {d f}} {{b c} {d f}}} -test lset-12.0 {lset, not compiled, typical sharing pattern} { +test lset-12.0 {lset, not compiled, typical sharing pattern} testevalex { set zero 0 set row [list $zero $zero $zero $zero] set ident [list $row $row $row $row] for { set i 0 } { $i < 4 } { incr i } { - eval [list $lset ident $i $i 1] + testevalex {lset ident $i $i 1} } set ident } {{1 0 0 0} {0 1 0 0} {0 0 1 0} {0 0 0 1}} -test lset-13.0 {lset, not compiled, shimmering hell} { +test lset-13.0 {lset, not compiled, shimmering hell} testevalex { set a 0 - list [eval [list $lset a $a $a $a $a {gag me}]] $a + list [testevalex {lset a $a $a $a $a {gag me}}] $a } {{{{{{gag me}}}}} {{{{{gag me}}}}}} - -test lset-13.1 {lset, not compiled, shimmering hell} { +test lset-13.1 {lset, not compiled, shimmering hell} testevalex { set a [list 0] - list [eval [list $lset a $a $a $a $a {gag me}]] $a + list [testevalex {lset a $a $a $a $a {gag me}}] $a } {{{{{{gag me}}}}} {{{{{gag me}}}}}} - -test lset-13.2 {lset, not compiled, shimmering hell} { +test lset-13.2 {lset, not compiled, shimmering hell} testevalex { set a [list 0 0 0 0] - list [eval [list $lset a $a {gag me}]] $a + list [testevalex {lset a $a {gag me}}] $a } {{{{{{gag me}}}} 0 0 0} {{{{{gag me}}}} 0 0 0}} -test lset-14.1 {lset, not compiled, list args, is string rep preserved?} { +test lset-14.1 {lset, not compiled, list args, is string rep preserved?} testevalex { set a { { 1 2 } { 3 4 } } - catch { eval [list $lset a {1 5} 5] } + catch { testevalex {lset a {1 5} 5} } list $a [lindex $a 1] } "{ { 1 2 } { 3 4 } } { 3 4 }" - -test lset-14.2 {lset, not compiled, flat args, is string rep preserved?} { +test lset-14.2 {lset, not compiled, flat args, is string rep preserved?} testevalex { set a { { 1 2 } { 3 4 } } - catch { eval [list $lset a 1 5 5] } + catch { testevalex {lset a 1 5 5} } list $a [lindex $a 1] } "{ { 1 2 } { 3 4 } } { 3 4 }" +testConstraint testobj [llength [info commands testobj]] +test lset-15.1 {lset: shared intrep [Bug 1677512]} -setup { + teststringobj set 1 {{1 2} 3} + testobj convert 1 list + testobj duplicate 1 2 + variable x [teststringobj get 1] + variable y [teststringobj get 2] + testobj freeallvars + set l [list $y z] + unset y +} -constraints testobj -body { + lset l 0 0 0 5 + lindex $x 0 0 +} -cleanup { + unset -nocomplain x l +} -result 1 + catch {unset noRead} catch {unset noWrite} catch {rename failTrace {}} diff --git a/tests/lsetComp.test b/tests/lsetComp.test index f7b6cf7..2b89a47 100755..100644 --- a/tests/lsetComp.test +++ b/tests/lsetComp.test @@ -34,7 +34,7 @@ test lsetComp-1.1 {lset, compiled, wrong \# args} { evalInProc { lset } -} "1 {wrong \# args: should be \"lset listVar index ?index...? value\"}" +} "1 {wrong \# args: should be \"lset listVar ?index? ?index...? value\"}" test lsetComp-2.1 {lset, compiled, list of args, not a simple var name} { evalInProc { diff --git a/tests/macOSXFCmd.test b/tests/macOSXFCmd.test new file mode 100644 index 0000000..071f11b --- /dev/null +++ b/tests/macOSXFCmd.test @@ -0,0 +1,181 @@ +# This file tests the tclMacOSXFCmd.c file. +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. +# +# Copyright (c) 2003 Tcl Core Team. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest + namespace import -force ::tcltest::* +} + +# These tests really need to be run from a writable directory, which +# it is assumed [temporaryDirectory] is. +set oldcwd [pwd] +cd [temporaryDirectory] + +# check whether macosx file attributes are supported +testConstraint macosxFileAttr 0 +if {[testConstraint unix] && $tcl_platform(os) eq "Darwin"} { + catch {file delete -force -- foo.test} + close [open foo.test w] + catch { + file attributes foo.test -creator + testConstraint macosxFileAttr 1 + } + file delete -force -- foo.test +} + +test macOSXFCmd-1.1 {MacOSXGetFileAttribute - file not found} {macosxFileAttr notRoot} { + catch {file delete -force -- foo.test} + list [catch {file attributes foo.test -creator} msg] $msg +} {1 {could not read "foo.test": no such file or directory}} +test macOSXFCmd-1.2 {MacOSXGetFileAttribute - creator} {macosxFileAttr notRoot} { + catch {file delete -force -- foo.test} + close [open foo.test w] + list [catch {file attributes foo.test -creator} msg] $msg \ + [file delete -force -- foo.test] +} {0 {} {}} +test macOSXFCmd-1.3 {MacOSXGetFileAttribute - type} {macosxFileAttr notRoot} { + catch {file delete -force -- foo.test} + close [open foo.test w] + list [catch {file attributes foo.test -type} msg] $msg \ + [file delete -force -- foo.test] +} {0 {} {}} +test macOSXFCmd-1.4 {MacOSXGetFileAttribute - hidden} {macosxFileAttr notRoot} { + catch {file delete -force -- foo.test} + close [open foo.test w] + list [catch {file attributes foo.test -hidden} msg] $msg \ + [file delete -force -- foo.test] +} {0 0 {}} +test macOSXFCmd-1.5 {MacOSXGetFileAttribute - rsrclength} {macosxFileAttr notRoot} { + catch {file delete -force -- foo.test} + close [open foo.test w] + list [catch {file attributes foo.test -rsrclength} msg] $msg \ + [file delete -force -- foo.test] +} {0 0 {}} + +test macOSXFCmd-2.1 {MacOSXSetFileAttribute - file not found} {macosxFileAttr notRoot} { + catch {file delete -force -- foo.test} + list [catch {file attributes foo.test -creator FOOC} msg] $msg +} {1 {could not read "foo.test": no such file or directory}} +test macOSXFCmd-2.2 {MacOSXSetFileAttribute - creator} {macosxFileAttr notRoot} { + catch {file delete -force -- foo.test} + close [open foo.test w] + list [catch {file attributes foo.test -creator FOOC} msg] $msg \ + [catch {file attributes foo.test -creator} msg] $msg \ + [file delete -force -- foo.test] +} {0 {} 0 FOOC {}} +test macOSXFCmd-2.3 {MacOSXSetFileAttribute - empty creator} {macosxFileAttr notRoot} { + catch {file delete -force -- foo.test} + close [open foo.test w] + list [catch {file attributes foo.test -creator {}} msg] $msg \ + [catch {file attributes foo.test -creator} msg] $msg \ + [file delete -force -- foo.test] +} {0 {} 0 {} {}} +test macOSXFCmd-2.4 {MacOSXSetFileAttribute - type} {macosxFileAttr notRoot} { + catch {file delete -force -- foo.test} + close [open foo.test w] + list [catch {file attributes foo.test -type FOOT} msg] $msg \ + [catch {file attributes foo.test -type} msg] $msg \ + [file delete -force -- foo.test] +} {0 {} 0 FOOT {}} +test macOSXFCmd-2.5 {MacOSXSetFileAttribute - empty type} {macosxFileAttr notRoot} { + catch {file delete -force -- foo.test} + close [open foo.test w] + list [catch {file attributes foo.test -type {}} msg] $msg \ + [catch {file attributes foo.test -type} msg] $msg \ + [file delete -force -- foo.test] +} {0 {} 0 {} {}} +test macOSXFCmd-2.6 {MacOSXSetFileAttribute - hidden} {macosxFileAttr notRoot} { + catch {file delete -force -- foo.test} + close [open foo.test w] + list [catch {file attributes foo.test -hidden 1} msg] $msg \ + [catch {file attributes foo.test -hidden} msg] $msg \ + [file delete -force -- foo.test] +} {0 {} 0 1 {}} +test macOSXFCmd-2.7 {MacOSXSetFileAttribute - rsrclength} {macosxFileAttr notRoot} { + catch {file delete -force -- foo.test} + close [open foo.test w] + catch { + set f [open foo.test/..namedfork/rsrc w] + fconfigure $f -translation lf -eofchar {} + puts -nonewline $f "foo" + close $f + } + list [catch {file attributes foo.test -rsrclength} msg] $msg \ + [catch {file attributes foo.test -rsrclength 0} msg] $msg \ + [catch {file attributes foo.test -rsrclength} msg] $msg \ + [file delete -force -- foo.test] +} {0 3 0 {} 0 0 {}} + +test macOSXFCmd-3.1 {MacOSXCopyFileAttributes} {macosxFileAttr notRoot} { + catch {file delete -force -- foo.test} + catch {file delete -force -- bar.test} + close [open foo.test w] + catch { + file attributes foo.test -creator FOOC -type FOOT -hidden 1 + set f [open foo.test/..namedfork/rsrc w] + fconfigure $f -translation lf -eofchar {} + puts -nonewline $f "foo" + close $f + file copy foo.test bar.test + } + list [catch {file attributes bar.test -creator} msg] $msg \ + [catch {file attributes bar.test -type} msg] $msg \ + [catch {file attributes bar.test -hidden} msg] $msg \ + [catch {file attributes bar.test -rsrclength} msg] $msg \ + [file delete -force -- foo.test bar.test] +} {0 FOOC 0 FOOT 0 1 0 3 {}} + +test macOSXFCmd-4.1 {TclMacOSXMatchType} {macosxFileAttr notRoot} { + file mkdir globtest + cd globtest + foreach f {bar baz foo inv inw .nv reg} { + catch {file delete -force -- $f.test} + close [open $f.test w] + } + catch {file delete -force -- dir.test} + file mkdir dir.test + catch { + file attributes bar.test -type FOOT + file attributes baz.test -creator FOOC -type FOOT + file attributes foo.test -creator FOOC + file attributes inv.test -hidden 1 + file attributes inw.test -hidden 1 -type FOOT + file attributes dir.test -hidden 1 + } + set res [list \ + [catch {glob *.test} msg] $msg \ + [catch {glob -types FOOT *.test} msg] $msg \ + [catch {glob -types {{macintosh type FOOT}} *.test} msg] $msg \ + [catch {glob -types FOOTT *.test} msg] $msg \ + [catch {glob -types {{macintosh type FOOTT}} *.test} msg] $msg \ + [catch {glob -types {{macintosh type {}}} *.test} msg] $msg \ + [catch {glob -types {{macintosh creator FOOC}} *.test} msg] $msg \ + [catch {glob -types {{macintosh creator FOOC} {macintosh type FOOT}} *.test} msg] $msg \ + [catch {glob -types hidden *.test} msg] $msg \ + [catch {glob -types {hidden FOOT} *.test} msg] $msg \ + ] + cd .. + file delete -force globtest + set res +} [list \ + 0 {bar.test baz.test dir.test foo.test inv.test inw.test reg.test} \ + 0 {bar.test baz.test inw.test} 0 {bar.test baz.test inw.test} \ + 1 {bad argument to "-types": FOOTT} \ + 1 {expected Macintosh OS type but got "FOOTT": } \ + 0 {foo.test inv.test reg.test} 0 {baz.test foo.test} \ + 0 baz.test 0 {.nv.test dir.test inv.test inw.test} \ + 0 inw.test +] + +# cleanup +cd $oldcwd +::tcltest::cleanupTests +return diff --git a/tests/macOSXLoad.test b/tests/macOSXLoad.test new file mode 100644 index 0000000..12c77e0 --- /dev/null +++ b/tests/macOSXLoad.test @@ -0,0 +1,33 @@ +# Commands covered: load unload +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. +# +# Copyright (c) 1995 Sun Microsystems, Inc. +# Copyright (c) 1998-1999 by Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest 2 + namespace import -force ::tcltest::* +} +set oldTSF $::tcltest::testSingleFile +set ::tcltest::testSingleFile false + +if {[testConstraint unix] && $tcl_platform(os) eq "Darwin" && + ![string match *pkga* [info loaded]]} { + # On Darwin, test .bundle (un)loading in addition to .dylib + set ext .bundle + source [file join [file dirname [info script]] load.test] + set ext .bundle + source [file join [file dirname [info script]] unload.test] + unset -nocomplain ext +} + +set ::tcltest::testSingleFile $oldTSF +unset oldTSF +::tcltest::cleanupTests +return diff --git a/tests/main.test b/tests/main.test index 40c0453..cdd3b17 100644 --- a/tests/main.test +++ b/tests/main.test @@ -6,15 +6,7 @@ if {[catch {package require tcltest 2.0.2}]} { } namespace eval ::tcl::test::main { - - namespace import ::tcltest::test - namespace import ::tcltest::testConstraint - namespace import ::tcltest::interpreter - namespace import ::tcltest::cleanupTests - namespace import ::tcltest::makeFile - namespace import ::tcltest::removeFile - namespace import ::tcltest::temporaryDirectory - namespace import ::tcltest::workingDirectory + namespace import ::tcltest::* # Is [exec] defined? testConstraint exec [llength [info commands exec]] @@ -137,6 +129,72 @@ namespace eval ::tcl::test::main { } -result [list [list [encoding convertfrom [encoding system] \ [encoding convertto [encoding system] \u20ac]]] {} 0]\n + test Tcl_Main-1.7 { + Tcl_Main: startup script - -encoding option + } -constraints { + stdio + } -setup { + set script [makeFile {} script] + file delete $script + set f [open $script w] + fconfigure $f -encoding utf-8 + puts $f {puts [list $argv0 $argv $tcl_interactive]} + puts -nonewline $f {puts [string equal \u20ac } + puts $f "\u20ac]" + close $f + catch {set f [open "|[list [interpreter] -encoding utf-8 script]" r]} + } -body { + read $f + } -cleanup { + close $f + removeFile script + } -result [list script {} 0]\n1\n + + test Tcl_Main-1.8 { + Tcl_Main: startup script - -encoding option - mismatched encodings + } -constraints { + stdio + } -setup { + set script [makeFile {} script] + file delete $script + set f [open $script w] + fconfigure $f -encoding utf-8 + puts $f {puts [list $argv0 $argv $tcl_interactive]} + puts -nonewline $f {puts [string equal \u20ac } + puts $f "\u20ac]" + close $f + catch {set f [open "|[list [interpreter] -encoding ascii script]" r]} + } -body { + read $f + } -cleanup { + close $f + removeFile script + } -result [list script {} 0]\n0\n + + test Tcl_Main-1.9 { + Tcl_Main: startup script - -encoding option - no abbrevation + } -constraints { + stdio + } -setup { + set script [makeFile {} script] + file delete $script + set f [open $script w] + fconfigure $f -encoding utf-8 + puts $f {puts [list $argv0 $argv $tcl_interactive]} + puts -nonewline $f {puts [string equal \u20ac } + puts $f "\u20ac]" + close $f + catch {set f [open "|[list [interpreter] -enc utf-8 script]" r+]} + } -body { + type $f { + puts $argv + } + list [catch {gets $f} line] $line + } -cleanup { + close $f + removeFile script + } -result {0 {-enc utf-8 script}} + # Tests Tcl_Main-2.*: application-initialization procedure test Tcl_Main-2.1 { @@ -498,24 +556,24 @@ namespace eval ::tcl::test::main { \nExit MainLoop\nIn exit\neven 0\n" test Tcl_Main-4.5 { - Tcl_Main: Bug 1481986 + Tcl_Main: Bug 1481986 } -constraints { - exec Tcltest + exec Tcltest } -setup { - set rc [makeFile { - testsetmainloop - after 0 {puts "Event callback"} - } rc] + set rc [makeFile { + testsetmainloop + after 0 {puts "Event callback"} + } rc] } -body { - set f [open "|[list [interpreter] -appinitprocsetrcfile $rc]" w+] - after 1000 - type $f {puts {Interactive output} - exit - } - read $f + set f [open "|[list [interpreter] -appinitprocsetrcfile $rc]" w+] + after 1000 + type $f {puts {Interactive output} + exit + } + read $f } -cleanup { - catch {close $f} - removeFile rc + catch {close $f} + removeFile rc } -result "Event callback\nInteractive output\n" # Tests Tcl_Main-5.*: interactive operations @@ -568,8 +626,7 @@ namespace eval ::tcl::test::main { after cancel $id set wait } -cleanup { - if {[string equal timeout $wait] - && [string equal unix $::tcl_platform(platform)]} { + if {[string equal timeout $wait] && [testConstraint unix]} { exec kill [pid $f] } close $f @@ -592,8 +649,7 @@ namespace eval ::tcl::test::main { after cancel $id set wait } -cleanup { - if {[string equal timeout $wait] - && [string equal unix $::tcl_platform(platform)]} { + if {[string equal timeout $wait] && [testConstraint unix]} { exec kill [pid $f] } close $f @@ -761,6 +817,20 @@ namespace eval ::tcl::test::main { file delete result } -result "Exit MainLoop\nIn exit\neven 0\n" + test Tcl_Main-5.13 { + Bug 1775878 + } -constraints { + exec + } -setup { + catch {set f [open "|[list [interpreter]]" w+]} + } -body { + type $f "puts \\" + type $f return + list [catch {gets $f} line] $line + } -cleanup { + close $f + } -result [list 0 return] + # Tests Tcl_Main-6.*: interactive operations with prompts test Tcl_Main-6.1 { @@ -1144,6 +1214,21 @@ namespace eval ::tcl::test::main { file delete result } -result "1\nExit MainLoop\n" + test Tcl_Main-8.13 { + Bug 1775878 + } -constraints { + exec Tcltest + } -setup { + catch {set f [open "|[list [interpreter]]" w+]} + } -body { + exec [interpreter] << "testsetmainloop\nputs \\\npwd\ntestexitmainloop" >& result + set f [open result] + read $f + } -cleanup { + close $f + file delete result + } -result "pwd\nExit MainLoop\n" + # Tests Tcl_Main-9.*: Prompt operations test Tcl_Main-9.1 { diff --git a/tests/mathop.test b/tests/mathop.test new file mode 100644 index 0000000..61a106e --- /dev/null +++ b/tests/mathop.test @@ -0,0 +1,1338 @@ +# Commands covered: ::tcl::mathop::... +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. +# +# Copyright (c) 2006 Donal K. Fellows +# Copyright (c) 2006 Peter Spjuth +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest 2.1 + namespace import -force ::tcltest::* +} + +# A namespace to test that operators are exported and that they +# work when imported +namespace eval ::testmathop2 { + namespace import ::tcl::mathop::* +} + +# Helper to test math ops. +# Test different invokation variants and see that they do the same thing. +# Byte compiled / non byte compiled version +# Shared / unshared arguments +# Original / imported +proc TestOp {op args} { + set results {} + + # Non byte compiled version, shared args + if {[catch {::tcl::mathop::$op {*}$args} res]} { + append res " $::errorCode" + } + lappend results $res + + # Non byte compiled version, unshared args + set cmd ::tcl::mathop::\$op + foreach arg $args { + append cmd " \[format %s [list $arg]\]" + } + if {[catch $cmd res]} { + append res " $::errorCode" + } + lappend results $res + + # Non byte compiled imported + if {[catch {::testmathop2::$op {*}$args} res]} { + append res " $::errorCode" + } + lappend results [string map {testmathop2 tcl::mathop} $res] + + # BC version + set argList1 {} + set argList2 {} + set argList3 {} + for {set t 0} {$t < [llength $args]} {incr t} { + lappend argList1 a$t + lappend argList2 \$a$t + lappend argList3 "\[format %s \$a$t\]" + } + # Shared args + proc _TestOp $argList1 "::tcl::mathop::$op [join $argList2]" + # Unshared args + proc _TestOp2 $argList1 "::tcl::mathop::$op [join $argList3]" + # Imported + proc _TestOp3 $argList1 "::testmathop2::$op [join $argList2]" + + set ::tcl_traceCompile 0 ;# Set to 2 to help with debug + if {[catch {_TestOp {*}$args} res]} { + append res " $::errorCode" + } + set ::tcl_traceCompile 0 + lappend results $res + + if {[catch {_TestOp2 {*}$args} res]} { + append res " $::errorCode" + } + lappend results $res + + if {[catch {_TestOp3 {*}$args} res]} { + append res " $::errorCode" + } + lappend results [string map {testmathop2 tcl::mathop} $res] + + # Check that they do the same + set len [llength $results] + for {set i 0} {$i < ($len - 1)} {incr i} { + set res1 [lindex $results $i] + set res2 [lindex $results $i+1] + if {$res1 ne $res2} { + return "$i:($res1 != $res2)" + } + } + return [lindex $results 0] +} + +# start of tests + +namespace eval ::testmathop { + namespace path ::tcl::mathop + variable op ;# stop surprises! + + test mathop-1.1 {compiled +} { + } 0 + test mathop-1.2 {compiled +} { + 1 } 1 + test mathop-1.3 {compiled +} { + 1 2 } 3 + test mathop-1.4 {compiled +} { + 1 2 3 } 6 + test mathop-1.5 {compiled +} { + 1.0 2 3 } 6.0 + test mathop-1.6 {compiled +} { + 1 2 3.0 } 6.0 + test mathop-1.7 {compiled +} { + 100000000000 2 3 } 100000000005 + test mathop-1.8 {compiled +} { + 1 2 300000000000 } 300000000003 + test mathop-1.9 {compiled +} { + 1000000000000000000000 2 3 } 1000000000000000000005 + test mathop-1.10 {compiled +} { + 1 2 3000000000000000000000 } 3000000000000000000003 + test mathop-1.11 {compiled +: errors} -returnCodes error -body { + + x 0 + } -result {can't use non-numeric string as operand of "+"} + test mathop-1.12 {compiled +: errors} -returnCodes error -body { + + nan 0 + } -result {can't use non-numeric floating-point value as operand of "+"} + test mathop-1.13 {compiled +: errors} -returnCodes error -body { + + 0 x + } -result {can't use non-numeric string as operand of "+"} + test mathop-1.14 {compiled +: errors} -returnCodes error -body { + + 0 nan + } -result {can't use non-numeric floating-point value as operand of "+"} + test mathop-1.15 {compiled +: errors} -returnCodes error -body { + + 0o8 0 + } -result {can't use invalid octal number as operand of "+"} + test mathop-1.16 {compiled +: errors} -returnCodes error -body { + + 0 0o8 + } -result {can't use invalid octal number as operand of "+"} + test mathop-1.17 {compiled +: errors} -returnCodes error -body { + + 0 [error expectedError] + } -result expectedError + test mathop-1.18 {compiled +: argument processing order} -body { + # Bytecode compilation known hard for 3+ arguments + list [catch { + + [set x 0] [incr x] NaN [incr x] [error expected] [incr x] + } msg] $msg $x + } -result {1 expected 2} + set op + + test mathop-1.19 {interpreted +} { $op } 0 + test mathop-1.20 {interpreted +} { $op 1 } 1 + test mathop-1.21 {interpreted +} { $op 1 2 } 3 + test mathop-1.22 {interpreted +} { $op 1 2 3 } 6 + test mathop-1.23 {interpreted +} { $op 1.0 2 3 } 6.0 + test mathop-1.24 {interpreted +} { $op 1 2 3.0 } 6.0 + test mathop-1.25 {interpreted +} { $op 100000000000 2 3 } 100000000005 + test mathop-1.26 {interpreted +} { $op 1 2 300000000000 } 300000000003 + test mathop-1.27 {interpreted +} { $op 1000000000000000000000 2 3 } 1000000000000000000005 + test mathop-1.28 {interpreted +} { $op 1 2 3000000000000000000000 } 3000000000000000000003 + test mathop-1.29 {interpreted +: errors} -returnCodes error -body { + $op x 0 + } -result {can't use non-numeric string as operand of "+"} + test mathop-1.30 {interpreted +: errors} -returnCodes error -body { + $op nan 0 + } -result {can't use non-numeric floating-point value as operand of "+"} + test mathop-1.31 {interpreted +: errors} -returnCodes error -body { + $op 0 x + } -result {can't use non-numeric string as operand of "+"} + test mathop-1.32 {interpreted +: errors} -returnCodes error -body { + $op 0 nan + } -result {can't use non-numeric floating-point value as operand of "+"} + test mathop-1.33 {interpreted +: errors} -returnCodes error -body { + $op 0o8 0 + } -result {can't use invalid octal number as operand of "+"} + test mathop-1.34 {interpreted +: errors} -returnCodes error -body { + $op 0 0o8 + } -result {can't use invalid octal number as operand of "+"} + test mathop-1.35 {interpreted +: errors} -returnCodes error -body { + $op 0 [error expectedError] + } -result expectedError + test mathop-1.36 {interpreted +: argument processing order} -body { + list [catch { + $op [set x 0] [incr x] NaN [incr x] [error expected] [incr x] + } msg] $msg $x + } -result {1 expected 2} + + test mathop-2.1 {compiled *} { * } 1 + test mathop-2.2 {compiled *} { * 2 } 2 + test mathop-2.3 {compiled *} { * 2 3 } 6 + test mathop-2.4 {compiled *} { * 2 3 4 } 24 + test mathop-2.5 {compiled *} { * 1.0 2 3 } 6.0 + test mathop-2.6 {compiled *} { * 1 2 3.0 } 6.0 + test mathop-2.7 {compiled *} { * 100000000000 2 3 } 600000000000 + test mathop-2.8 {compiled *} { * 1 2 300000000000 } 600000000000 + test mathop-2.9 {compiled *} { * 1000000000000000000000 2 3 } 6000000000000000000000 + test mathop-2.10 {compiled *} { * 1 2 3000000000000000000000 } 6000000000000000000000 + test mathop-2.11 {compiled *: errors} -returnCodes error -body { + * x 0 + } -result {can't use non-numeric string as operand of "*"} + test mathop-2.12 {compiled *: errors} -returnCodes error -body { + * nan 0 + } -result {can't use non-numeric floating-point value as operand of "*"} + test mathop-2.13 {compiled *: errors} -returnCodes error -body { + * 0 x + } -result {can't use non-numeric string as operand of "*"} + test mathop-2.14 {compiled *: errors} -returnCodes error -body { + * 0 nan + } -result {can't use non-numeric floating-point value as operand of "*"} + test mathop-2.15 {compiled *: errors} -returnCodes error -body { + * 0o8 0 + } -result {can't use invalid octal number as operand of "*"} + test mathop-2.16 {compiled *: errors} -returnCodes error -body { + * 0 0o8 + } -result {can't use invalid octal number as operand of "*"} + test mathop-2.17 {compiled *: errors} -returnCodes error -body { + * 0 [error expectedError] + } -result expectedError + test mathop-2.18 {compiled *: argument processing order} -body { + # Bytecode compilation known hard for 3+ arguments + list [catch { + * [set x 0] [incr x] NaN [incr x] [error expected] [incr x] + } msg] $msg $x + } -result {1 expected 2} + set op * + test mathop-2.19 {interpreted *} { $op } 1 + test mathop-2.20 {interpreted *} { $op 2 } 2 + test mathop-2.21 {interpreted *} { $op 2 3 } 6 + test mathop-2.22 {interpreted *} { $op 2 3 4 } 24 + test mathop-2.23 {interpreted *} { $op 1.0 2 3 } 6.0 + test mathop-2.24 {interpreted *} { $op 1 2 3.0 } 6.0 + test mathop-2.25 {interpreted *} { $op 100000000000 2 3 } 600000000000 + test mathop-2.26 {interpreted *} { $op 1 2 300000000000 } 600000000000 + test mathop-2.27 {interpreted *} { $op 1000000000000000000000 2 3 } 6000000000000000000000 + test mathop-2.28 {interpreted *} { $op 1 2 3000000000000000000000 } 6000000000000000000000 + test mathop-2.29 {interpreted *: errors} -returnCodes error -body { + $op x 0 + } -result {can't use non-numeric string as operand of "*"} + test mathop-2.30 {interpreted *: errors} -returnCodes error -body { + $op nan 0 + } -result {can't use non-numeric floating-point value as operand of "*"} + test mathop-2.31 {interpreted *: errors} -returnCodes error -body { + $op 0 x + } -result {can't use non-numeric string as operand of "*"} + test mathop-2.32 {interpreted *: errors} -returnCodes error -body { + $op 0 nan + } -result {can't use non-numeric floating-point value as operand of "*"} + test mathop-2.33 {interpreted *: errors} -returnCodes error -body { + $op 0o8 0 + } -result {can't use invalid octal number as operand of "*"} + test mathop-2.34 {interpreted *: errors} -returnCodes error -body { + $op 0 0o8 + } -result {can't use invalid octal number as operand of "*"} + test mathop-2.35 {interpreted *: errors} -returnCodes error -body { + $op 0 [error expectedError] + } -result expectedError + test mathop-2.36 {interpreted *: argument processing order} -body { + list [catch { + $op [set x 0] [incr x] NaN [incr x] [error expected] [incr x] + } msg] $msg $x + } -result {1 expected 2} + + test mathop-3.1 {compiled !} {! 0} 1 + test mathop-3.2 {compiled !} {! 1} 0 + test mathop-3.3 {compiled !} {! false} 1 + test mathop-3.4 {compiled !} {! true} 0 + test mathop-3.5 {compiled !} {! 0.0} 1 + test mathop-3.6 {compiled !} {! 10000000000} 0 + test mathop-3.7 {compiled !} {! 10000000000000000000000000} 0 + test mathop-3.8 {compiled !: errors} -body { + ! foobar + } -returnCodes error -result {can't use non-numeric string as operand of "!"} + test mathop-3.9 {compiled !: errors} -body { + ! 0 0 + } -returnCodes error -result "wrong # args: should be \"! boolean\"" + test mathop-3.10 {compiled !: errors} -body { + ! + } -returnCodes error -result "wrong # args: should be \"! boolean\"" + set op ! + test mathop-3.11 {interpreted !} {$op 0} 1 + test mathop-3.12 {interpreted !} {$op 1} 0 + test mathop-3.13 {interpreted !} {$op false} 1 + test mathop-3.14 {interpreted !} {$op true} 0 + test mathop-3.15 {interpreted !} {$op 0.0} 1 + test mathop-3.16 {interpreted !} {$op 10000000000} 0 + test mathop-3.17 {interpreted !} {$op 10000000000000000000000000} 0 + test mathop-3.18 {interpreted !: errors} -body { + $op foobar + } -returnCodes error -result {can't use non-numeric string as operand of "!"} + test mathop-3.19 {interpreted !: errors} -body { + $op 0 0 + } -returnCodes error -result "wrong # args: should be \"! boolean\"" + test mathop-3.20 {interpreted !: errors} -body { + $op + } -returnCodes error -result "wrong # args: should be \"! boolean\"" + test mathop-3.21 {compiled !: error} -returnCodes error -body { + ! NaN + } -result {can't use non-numeric floating-point value as operand of "!"} + test mathop-3.22 {interpreted !: error} -returnCodes error -body { + $op NaN + } -result {can't use non-numeric floating-point value as operand of "!"} + + test mathop-4.1 {compiled ~} {~ 0} -1 + test mathop-4.2 {compiled ~} {~ 1} -2 + test mathop-4.3 {compiled ~} {~ 31} -32 + test mathop-4.4 {compiled ~} {~ -127} 126 + test mathop-4.5 {compiled ~} {~ -0} -1 + test mathop-4.6 {compiled ~} {~ 10000000000} -10000000001 + test mathop-4.7 {compiled ~} {~ 10000000000000000000000000} -10000000000000000000000001 + test mathop-4.8 {compiled ~: errors} -body { + ~ foobar + } -returnCodes error -result {can't use non-numeric string as operand of "~"} + test mathop-4.9 {compiled ~: errors} -body { + ~ 0 0 + } -returnCodes error -result "wrong # args: should be \"~ integer\"" + test mathop-4.10 {compiled ~: errors} -body { + ~ + } -returnCodes error -result "wrong # args: should be \"~ integer\"" + test mathop-4.11 {compiled ~: errors} -returnCodes error -body { + ~ 0.0 + } -result {can't use floating-point value as operand of "~"} + test mathop-4.12 {compiled ~: errors} -returnCodes error -body { + ~ NaN + } -result {can't use non-numeric floating-point value as operand of "~"} + set op ~ + test mathop-4.13 {interpreted ~} {$op 0} -1 + test mathop-4.14 {interpreted ~} {$op 1} -2 + test mathop-4.15 {interpreted ~} {$op 31} -32 + test mathop-4.16 {interpreted ~} {$op -127} 126 + test mathop-4.17 {interpreted ~} {$op -0} -1 + test mathop-4.18 {interpreted ~} {$op 10000000000} -10000000001 + test mathop-4.19 {interpreted ~} {$op 10000000000000000000000000} -10000000000000000000000001 + test mathop-4.20 {interpreted ~: errors} -body { + $op foobar + } -returnCodes error -result {can't use non-numeric string as operand of "~"} + test mathop-4.21 {interpreted ~: errors} -body { + $op 0 0 + } -returnCodes error -result "wrong # args: should be \"~ integer\"" + test mathop-4.22 {interpreted ~: errors} -body { + $op + } -returnCodes error -result "wrong # args: should be \"~ integer\"" + test mathop-4.23 {interpreted ~: errors} -returnCodes error -body { + $op 0.0 + } -result {can't use floating-point value as operand of "~"} + test mathop-4.24 {interpreted ~: errors} -returnCodes error -body { + $op NaN + } -result {can't use non-numeric floating-point value as operand of "~"} + + test mathop-5.1 {compiled eq} {eq {} a} 0 + test mathop-5.2 {compiled eq} {eq a a} 1 + test mathop-5.3 {compiled eq} {eq a {}} 0 + test mathop-5.4 {compiled eq} {eq a b} 0 + test mathop-5.5 {compiled eq} { eq } 1 + test mathop-5.6 {compiled eq} {eq a} 1 + test mathop-5.7 {compiled eq} {eq a a a} 1 + test mathop-5.8 {compiled eq} {eq a a b} 0 + test mathop-5.9 {compiled eq} -body { + eq a b [error foobar] + } -returnCodes error -result foobar + test mathop-5.10 {compiled eq} {eq NaN Na NaN} 0 + set op eq + test mathop-5.11 {interpreted eq} {$op {} a} 0 + test mathop-5.12 {interpreted eq} {$op a a} 1 + test mathop-5.13 {interpreted eq} {$op a {}} 0 + test mathop-5.14 {interpreted eq} {$op a b} 0 + test mathop-5.15 {interpreted eq} { $op } 1 + test mathop-5.16 {interpreted eq} {$op a} 1 + test mathop-5.17 {interpreted eq} {$op a a a} 1 + test mathop-5.18 {interpreted eq} {$op a a b} 0 + test mathop-5.19 {interpreted eq} -body { + $op a b [error foobar] + } -returnCodes error -result foobar + test mathop-5.20 {interpreted eq} {$op NaN Na NaN} 0 + + variable big1 12135435435354435435342423948763867876 + variable big2 2746237174783836746262564892918327847 + variable wide1 12345678912345 + variable wide2 87321847232215 + variable small1 87345 + variable small2 16753 + + test mathop-6.1 {compiled &} { & } -1 + test mathop-6.2 {compiled &} { & 1 } 1 + test mathop-6.3 {compiled &} { & 1 2 } 0 + test mathop-6.4 {compiled &} { & 3 7 6 } 2 + test mathop-6.5 {compiled &} -returnCodes error -body { + & 1.0 2 3 + } -result {can't use floating-point value as operand of "&"} + test mathop-6.6 {compiled &} -returnCodes error -body { + & 1 2 3.0 + } -result {can't use floating-point value as operand of "&"} + test mathop-6.7 {compiled &} { & 100000000002 18 -126 } 2 + test mathop-6.8 {compiled &} { & 0xff 0o377 333333333333 } 85 + test mathop-6.9 {compiled &} { & 1000000000000000000002 18 -126 } 2 + test mathop-6.10 {compiled &} { & 0xff 0o377 3333333333333333333333 } 85 + test mathop-6.11 {compiled &: errors} -returnCodes error -body { + & x 0 + } -result {can't use non-numeric string as operand of "&"} + test mathop-6.12 {compiled &: errors} -returnCodes error -body { + & nan 0 + } -result {can't use non-numeric floating-point value as operand of "&"} + test mathop-6.13 {compiled &: errors} -returnCodes error -body { + & 0 x + } -result {can't use non-numeric string as operand of "&"} + test mathop-6.14 {compiled &: errors} -returnCodes error -body { + & 0 nan + } -result {can't use non-numeric floating-point value as operand of "&"} + test mathop-6.15 {compiled &: errors} -returnCodes error -body { + & 0o8 0 + } -result {can't use invalid octal number as operand of "&"} + test mathop-6.16 {compiled &: errors} -returnCodes error -body { + & 0 0o8 + } -result {can't use invalid octal number as operand of "&"} + test mathop-6.17 {compiled &: errors} -returnCodes error -body { + & 0 [error expectedError] + } -result expectedError + test mathop-6.18 {compiled &: argument processing order} -body { + # Bytecode compilation known hard for 3+ arguments + list [catch { + & [set x 0] [incr x] NaN [incr x] [error expected] [incr x] + } msg] $msg $x + } -result {1 expected 2} + set op & + test mathop-6.19 {interpreted &} { $op } -1 + test mathop-6.20 {interpreted &} { $op 1 } 1 + test mathop-6.21 {interpreted &} { $op 1 2 } 0 + test mathop-6.22 {interpreted &} { $op 3 7 6 } 2 + test mathop-6.23 {interpreted &} -returnCodes error -body { + $op 1.0 2 3 + } -result {can't use floating-point value as operand of "&"} + test mathop-6.24 {interpreted &} -returnCodes error -body { + $op 1 2 3.0 + } -result {can't use floating-point value as operand of "&"} + test mathop-6.25 {interpreted &} { $op 100000000002 18 -126 } 2 + test mathop-6.26 {interpreted &} { $op 0xff 0o377 333333333333 } 85 + test mathop-6.27 {interpreted &} { $op 1000000000000000000002 18 -126 } 2 + test mathop-6.28 {interpreted &} { $op 0xff 0o377 3333333333333333333333 } 85 + test mathop-6.29 {interpreted &: errors} -returnCodes error -body { + $op x 0 + } -result {can't use non-numeric string as operand of "&"} + test mathop-6.30 {interpreted &: errors} -returnCodes error -body { + $op nan 0 + } -result {can't use non-numeric floating-point value as operand of "&"} + test mathop-6.31 {interpreted &: errors} -returnCodes error -body { + $op 0 x + } -result {can't use non-numeric string as operand of "&"} + test mathop-6.32 {interpreted &: errors} -returnCodes error -body { + $op 0 nan + } -result {can't use non-numeric floating-point value as operand of "&"} + test mathop-6.33 {interpreted &: errors} -returnCodes error -body { + $op 0o8 0 + } -result {can't use invalid octal number as operand of "&"} + test mathop-6.34 {interpreted &: errors} -returnCodes error -body { + $op 0 0o8 + } -result {can't use invalid octal number as operand of "&"} + test mathop-6.35 {interpreted &: errors} -returnCodes error -body { + $op 0 [error expectedError] + } -result expectedError + test mathop-6.36 {interpreted &: argument processing order} -body { + list [catch { + $op [set x 0] [incr x] NaN [incr x] [error expected] [incr x] + } msg] $msg $x + } -result {1 expected 2} + test mathop-6.37 {& and bignums} { + list [& $big1 $big2] [$op $big1 $big2] + } {712439449294653815890598856501796 712439449294653815890598856501796} + test mathop-6.38 {& and bignums} { + list [& $big1 $wide2] [$op $big1 $wide2] + } {78521450111684 78521450111684} + test mathop-6.39 {& and bignums} { + list [& $big1 $small2] [$op $big1 $small2] + } {96 96} + test mathop-6.40 {& and bignums} { + list [& $wide1 $big2] [$op $wide1 $big2] + } {2371422390785 2371422390785} + test mathop-6.41 {& and bignums} { + list [& $wide1 $wide2] [$op $wide1 $wide2] + } {12275881497169 12275881497169} + test mathop-6.42 {& and bignums} { + list [& $wide1 $small2] [$op $wide1 $small2] + } {16721 16721} + test mathop-6.43 {& and bignums} { + list [& $small1 $big2] [$op $small1 $big2] + } {33 33} + test mathop-6.44 {& and bignums} { + list [& $small1 $wide2] [$op $small1 $wide2] + } {87057 87057} + test mathop-6.45 {& and bignums} { + list [& $small1 $small2] [$op $small1 $small2] + } {16689 16689} + + test mathop-7.1 {compiled |} { | } 0 + test mathop-7.2 {compiled |} { | 1 } 1 + test mathop-7.3 {compiled |} { | 1 2 } 3 + test mathop-7.4 {compiled |} { | 3 7 6 } 7 + test mathop-7.5 {compiled |} -returnCodes error -body { + | 1.0 2 3 + } -result {can't use floating-point value as operand of "|"} + test mathop-7.6 {compiled |} -returnCodes error -body { + | 1 2 3.0 + } -result {can't use floating-point value as operand of "|"} + test mathop-7.7 {compiled |} { | 100000000002 18 -126 } -110 + test mathop-7.8 {compiled |} { | 0xff 0o377 333333333333 } 333333333503 + test mathop-7.9 {compiled |} { | 1000000000000000000002 18 -126 } -110 + test mathop-7.10 {compiled |} { | 0xff 0o377 3333333333333333333333 } 3333333333333333333503 + test mathop-7.11 {compiled |: errors} -returnCodes error -body { + | x 0 + } -result {can't use non-numeric string as operand of "|"} + test mathop-7.12 {compiled |: errors} -returnCodes error -body { + | nan 0 + } -result {can't use non-numeric floating-point value as operand of "|"} + test mathop-7.13 {compiled |: errors} -returnCodes error -body { + | 0 x + } -result {can't use non-numeric string as operand of "|"} + test mathop-7.14 {compiled |: errors} -returnCodes error -body { + | 0 nan + } -result {can't use non-numeric floating-point value as operand of "|"} + test mathop-7.15 {compiled |: errors} -returnCodes error -body { + | 0o8 0 + } -result {can't use invalid octal number as operand of "|"} + test mathop-7.16 {compiled |: errors} -returnCodes error -body { + | 0 0o8 + } -result {can't use invalid octal number as operand of "|"} + test mathop-7.17 {compiled |: errors} -returnCodes error -body { + | 0 [error expectedError] + } -result expectedError + test mathop-7.18 {compiled |: argument processing order} -body { + # Bytecode compilation known hard for 3+ arguments + list [catch { + | [set x 0] [incr x] NaN [incr x] [error expected] [incr x] + } msg] $msg $x + } -result {1 expected 2} + set op | + test mathop-7.19 {interpreted |} { $op } 0 + test mathop-7.20 {interpreted |} { $op 1 } 1 + test mathop-7.21 {interpreted |} { $op 1 2 } 3 + test mathop-7.22 {interpreted |} { $op 3 7 6 } 7 + test mathop-7.23 {interpreted |} -returnCodes error -body { + $op 1.0 2 3 + } -result {can't use floating-point value as operand of "|"} + test mathop-7.24 {interpreted |} -returnCodes error -body { + $op 1 2 3.0 + } -result {can't use floating-point value as operand of "|"} + test mathop-7.25 {interpreted |} { $op 100000000002 18 -126 } -110 + test mathop-7.26 {interpreted |} { $op 0xff 0o377 333333333333 } 333333333503 + test mathop-7.27 {interpreted |} { $op 1000000000000000000002 18 -126 } -110 + test mathop-7.28 {interpreted |} { $op 0xff 0o377 3333333333333333333333 } 3333333333333333333503 + test mathop-7.29 {interpreted |: errors} -returnCodes error -body { + $op x 0 + } -result {can't use non-numeric string as operand of "|"} + test mathop-7.30 {interpreted |: errors} -returnCodes error -body { + $op nan 0 + } -result {can't use non-numeric floating-point value as operand of "|"} + test mathop-7.31 {interpreted |: errors} -returnCodes error -body { + $op 0 x + } -result {can't use non-numeric string as operand of "|"} + test mathop-7.32 {interpreted |: errors} -returnCodes error -body { + $op 0 nan + } -result {can't use non-numeric floating-point value as operand of "|"} + test mathop-7.33 {interpreted |: errors} -returnCodes error -body { + $op 0o8 0 + } -result {can't use invalid octal number as operand of "|"} + test mathop-7.34 {interpreted |: errors} -returnCodes error -body { + $op 0 0o8 + } -result {can't use invalid octal number as operand of "|"} + test mathop-7.35 {interpreted |: errors} -returnCodes error -body { + $op 0 [error expectedError] + } -result expectedError + test mathop-7.36 {interpreted |: argument processing order} -body { + list [catch { + $op [set x 0] [incr x] NaN [incr x] [error expected] [incr x] + } msg] $msg $x + } -result {1 expected 2} + test mathop-7.37 {| and bignums} { + list [| $big1 $big2] [$op $big1 $big2] + } {14880960170688977527789098242825693927 14880960170688977527789098242825693927} + test mathop-7.38 {| and bignums} { + list [| $big1 $wide2] [$op $big1 $wide2] + } {12135435435354435435342432749160988407 12135435435354435435342432749160988407} + test mathop-7.39 {| and bignums} { + list [| $big1 $small2] [$op $big1 $small2] + } {12135435435354435435342423948763884533 12135435435354435435342423948763884533} + test mathop-7.40 {| and bignums} { + list [| $wide1 $big2] [$op $wide1 $big2] + } {2746237174783836746262574867174849407 2746237174783836746262574867174849407} + test mathop-7.41 {| and bignums} { + list [| $wide1 $wide2] [$op $wide1 $wide2] + } {87391644647391 87391644647391} + test mathop-7.42 {| and bignums} { + list [| $wide1 $small2] [$op $wide1 $small2] + } {12345678912377 12345678912377} + test mathop-7.43 {| and bignums} { + list [| $small1 $big2] [$op $small1 $big2] + } {2746237174783836746262564892918415159 2746237174783836746262564892918415159} + test mathop-7.44 {| and bignums} { + list [| $small1 $wide2] [$op $small1 $wide2] + } {87321847232503 87321847232503} + test mathop-7.45 {| and bignums} { + list [| $small1 $small2] [$op $small1 $small2] + } {87409 87409} + + test mathop-8.1 {compiled ^} { ^ } 0 + test mathop-8.2 {compiled ^} { ^ 1 } 1 + test mathop-8.3 {compiled ^} { ^ 1 2 } 3 + test mathop-8.4 {compiled ^} { ^ 3 7 6 } 2 + test mathop-8.5 {compiled ^} -returnCodes error -body { + ^ 1.0 2 3 + } -result {can't use floating-point value as operand of "^"} + test mathop-8.6 {compiled ^} -returnCodes error -body { + ^ 1 2 3.0 + } -result {can't use floating-point value as operand of "^"} + test mathop-8.7 {compiled ^} { ^ 100000000002 18 -126 } -100000000110 + test mathop-8.8 {compiled ^} { ^ 0xff 0o377 333333333333 } 333333333333 + test mathop-8.9 {compiled ^} { ^ 1000000000000000000002 18 -126 } -1000000000000000000110 + test mathop-8.10 {compiled ^} { ^ 0xff 0o377 3333333333333333333333 } 3333333333333333333333 + test mathop-8.11 {compiled ^: errors} -returnCodes error -body { + ^ x 0 + } -result {can't use non-numeric string as operand of "^"} + test mathop-8.12 {compiled ^: errors} -returnCodes error -body { + ^ nan 0 + } -result {can't use non-numeric floating-point value as operand of "^"} + test mathop-8.13 {compiled ^: errors} -returnCodes error -body { + ^ 0 x + } -result {can't use non-numeric string as operand of "^"} + test mathop-8.14 {compiled ^: errors} -returnCodes error -body { + ^ 0 nan + } -result {can't use non-numeric floating-point value as operand of "^"} + test mathop-8.15 {compiled ^: errors} -returnCodes error -body { + ^ 0o8 0 + } -result {can't use invalid octal number as operand of "^"} + test mathop-8.16 {compiled ^: errors} -returnCodes error -body { + ^ 0 0o8 + } -result {can't use invalid octal number as operand of "^"} + test mathop-8.17 {compiled ^: errors} -returnCodes error -body { + ^ 0 [error expectedError] + } -result expectedError + test mathop-8.18 {compiled ^: argument processing order} -body { + # Bytecode compilation known hard for 3+ arguments + list [catch { + ^ [set x 0] [incr x] NaN [incr x] [error expected] [incr x] + } msg] $msg $x + } -result {1 expected 2} + set op ^ + test mathop-8.19 {interpreted ^} { $op } 0 + test mathop-8.20 {interpreted ^} { $op 1 } 1 + test mathop-8.21 {interpreted ^} { $op 1 2 } 3 + test mathop-8.22 {interpreted ^} { $op 3 7 6 } 2 + test mathop-8.23 {interpreted ^} -returnCodes error -body { + $op 1.0 2 3 + } -result {can't use floating-point value as operand of "^"} + test mathop-8.24 {interpreted ^} -returnCodes error -body { + $op 1 2 3.0 + } -result {can't use floating-point value as operand of "^"} + test mathop-8.25 {interpreted ^} { $op 100000000002 18 -126 } -100000000110 + test mathop-8.26 {interpreted ^} { $op 0xff 0o377 333333333333 } 333333333333 + test mathop-8.27 {interpreted ^} { $op 1000000000000000000002 18 -126 } -1000000000000000000110 + test mathop-8.28 {interpreted ^} { $op 0xff 0o377 3333333333333333333333 } 3333333333333333333333 + test mathop-8.29 {interpreted ^: errors} -returnCodes error -body { + $op x 0 + } -result {can't use non-numeric string as operand of "^"} + test mathop-8.30 {interpreted ^: errors} -returnCodes error -body { + $op nan 0 + } -result {can't use non-numeric floating-point value as operand of "^"} + test mathop-8.31 {interpreted ^: errors} -returnCodes error -body { + $op 0 x + } -result {can't use non-numeric string as operand of "^"} + test mathop-8.32 {interpreted ^: errors} -returnCodes error -body { + $op 0 nan + } -result {can't use non-numeric floating-point value as operand of "^"} + test mathop-8.33 {interpreted ^: errors} -returnCodes error -body { + $op 0o8 0 + } -result {can't use invalid octal number as operand of "^"} + test mathop-8.34 {interpreted ^: errors} -returnCodes error -body { + $op 0 0o8 + } -result {can't use invalid octal number as operand of "^"} + test mathop-8.35 {interpreted ^: errors} -returnCodes error -body { + $op 0 [error expectedError] + } -result expectedError + test mathop-8.36 {interpreted ^: argument processing order} -body { + list [catch { + $op [set x 0] [incr x] NaN [incr x] [error expected] [incr x] + } msg] $msg $x + } -result {1 expected 2} + test mathop-8.37 {^ and bignums} { + list [^ $big1 $big2] [$op $big1 $big2] + } {14880247731239682873973207643969192131 14880247731239682873973207643969192131} + test mathop-8.38 {^ and bignums} { + list [^ $big1 $wide2] [$op $big1 $wide2] + } {12135435435354435435342354227710876723 12135435435354435435342354227710876723} + test mathop-8.39 {^ and bignums} { + list [^ $big1 $small2] [$op $big1 $small2] + } {12135435435354435435342423948763884437 12135435435354435435342423948763884437} + test mathop-8.40 {^ and bignums} { + list [^ $wide1 $big2] [$op $wide1 $big2] + } {2746237174783836746262572495752458622 2746237174783836746262572495752458622} + test mathop-8.41 {^ and bignums} { + list [^ $wide1 $wide2] [$op $wide1 $wide2] + } {75115763150222 75115763150222} + test mathop-8.42 {^ and bignums} { + list [^ $wide1 $small2] [$op $wide1 $small2] + } {12345678895656 12345678895656} + test mathop-8.43 {^ and bignums} { + list [^ $small1 $big2] [$op $small1 $big2] + } {2746237174783836746262564892918415126 2746237174783836746262564892918415126} + test mathop-8.44 {^ and bignums} { + list [^ $small1 $wide2] [$op $small1 $wide2] + } {87321847145446 87321847145446} + test mathop-8.45 {^ and bignums} { + list [^ $small1 $small2] [$op $small1 $small2] + } {70720 70720} + + # TODO: % ** << >> - / == != < <= > >= ne in ni + + test mathop-13.100 {compiled -: argument processing order} -body { + # Bytecode compilation known hard for 3+ arguments + list [catch { + - [set x 0] [incr x] NaN [incr x] [error expected] [incr x] + } msg] $msg $x + } -result {1 expected 2} + + test mathop-14.100 {compiled /: argument processing order} -body { + # Bytecode compilation known hard for 3+ arguments + list [catch { + / [set x 0] [incr x] NaN [incr x] [error expected] [incr x] + } msg] $msg $x + } -result {1 expected 2} +} + +test mathop-20.1 { zero args, return unit } { + set res {} + foreach op {+ * & ^ | ** < <= > >= == eq} { + lappend res [TestOp $op] + } + set res +} {0 1 -1 0 0 1 1 1 1 1 1 1} +test mathop-20.2 { zero args, not allowed } { + set exp {} + foreach op {~ ! << >> % != ne in ni - /} { + set res [TestOp $op] + if {[string match "wrong # args* NONE" $res]} { + lappend exp 0 + } else { + lappend exp $res + } + } + set exp +} {0 0 0 0 0 0 0 0 0 0 0} +test mathop-20.3 { one arg } { + set res {} + foreach val {7 8.3} { + foreach op {+ ** - * / < <= > >= == eq !} { + lappend res [TestOp $op $val] + } + } + set res +} [list 7 7 -7 7 [expr {1.0/7.0}] 1 1 1 1 1 1 0 \ + 8.3 8.3 -8.3 8.3 [expr {1.0/8.3}] 1 1 1 1 1 1 0] +test mathop-20.4 { one arg, integer only ops } { + set res {} + foreach val {23} { + foreach op {& | ^ ~} { + lappend res [TestOp $op $val] + } + } + set res +} [list 23 23 23 -24] +test mathop-20.5 { one arg, not allowed } { + set exp {} + foreach op {% != ne in ni << >>} { + set res [TestOp $op 1] + if {[string match "wrong # args* NONE" $res]} { + lappend exp 0 + } else { + lappend exp $res + } + } + set exp +} {0 0 0 0 0 0 0} +test mathop-20.6 { one arg, error } { + set res {} + set exp {} + foreach vals {x {1 x} {1 1 x} {1 x 1}} { + # skipping - for now, knownbug... + foreach op {+ * / & | ^ **} { + lappend res [TestOp $op {*}$vals] + lappend exp "can't use non-numeric string as operand of \"$op\" ARITH DOMAIN {non-numeric string}" + } + } + foreach op {+ * / & | ^ **} { + lappend res [TestOp $op NaN 1] + lappend exp "can't use non-numeric floating-point value as operand of \"$op\" ARITH DOMAIN {non-numeric floating-point value}" + } + expr {$res eq $exp ? 0 : $res} +} 0 +test mathop-20.7 { multi arg } { + set res {} + foreach vals {{1 2} {3 4 5} {4 3 2 1}} { + foreach op {+ - * /} { + lappend res [TestOp $op {*}$vals] + } + } + set res +} [list 3 -1 2 0 12 -6 60 0 10 -2 24 0] +test mathop-20.8 { multi arg, double } { + set res {} + foreach vals {{1.0 2} {3.0 4 5} {4 3.0 2 1} + {1.0 -1.0 1e-18} {1.0 1.0 1e-18}} { + foreach op {+ - * /} { + lappend res [TestOp $op {*}$vals] + } + } + set res +} [list 3.0 -1.0 2.0 0.5 12.0 -6.0 60.0 0.15 10.0 -2.0 24.0 [expr {2.0/3}] 1e-18 2.0 -1e-18 [expr {-1.0/1e-18}] 2.0 -1e-18 1e-18 [expr {1.0/1e-18}]] + +test mathop-21.1 { unary ops, bitnot } { + set res {} + lappend res [TestOp ~ 7] + lappend res [TestOp ~ -5] + lappend res [TestOp ~ 354657483923456] + lappend res [TestOp ~ 123456789123456789123456789] + set res +} [list -8 4 -354657483923457 -123456789123456789123456790] +test mathop-21.2 { unary ops, logical not } { + set res {} + lappend res [TestOp ! 0] + lappend res [TestOp ! 1] + lappend res [TestOp ! true] + lappend res [TestOp ! false] + lappend res [TestOp ! 37] + lappend res [TestOp ! 8.5] + set res +} [list 1 0 0 1 0 0] +test mathop-21.3 { unary ops, negation } { + set res {} + lappend res [TestOp - 7.2] + lappend res [TestOp - -5] + lappend res [TestOp - -2147483648] ;# -2**31 + lappend res [TestOp - -9223372036854775808] ;# -2**63 + lappend res [TestOp - 354657483923456] ;# wide + lappend res [TestOp - 123456789123456789123456789] ;# big + set res +} [list -7.2 5 2147483648 9223372036854775808 -354657483923456 \ + -123456789123456789123456789] +test mathop-21.4 { unary ops, inversion } { + set res {} + lappend res [TestOp / 1] + lappend res [TestOp / 5] + lappend res [TestOp / 5.6] + lappend res [TestOp / -8] + lappend res [TestOp / 354657483923456] ;# wide + lappend res [TestOp / 123456789123456789123456789] ;# big + set res +} [list 1.0 0.2 0.17857142857142858 -0.125 \ + 2.8196218755553604e-15 8.10000006561e-27] +test mathop-21.5 { unary ops, bad values } { + set res {} + set exp {} + lappend res [TestOp / x] + lappend exp "can't use non-numeric string as operand of \"/\" ARITH DOMAIN {non-numeric string}" + lappend res [TestOp - x] + lappend exp "can't use non-numeric string as operand of \"-\" ARITH DOMAIN {non-numeric string}" + lappend res [TestOp ~ x] + lappend exp "can't use non-numeric string as operand of \"~\" ARITH DOMAIN {non-numeric string}" + lappend res [TestOp ! x] + lappend exp "can't use non-numeric string as operand of \"!\" ARITH DOMAIN {non-numeric string}" + lappend res [TestOp ~ 5.0] + lappend exp "can't use floating-point value as operand of \"~\" ARITH DOMAIN {floating-point value}" + expr {$res eq $exp ? 0 : $res} +} 0 +test mathop-21.6 { unary ops, too many } { + set exp {} + foreach op {~ !} { + set res [TestOp $op 7 8] + if {[string match "wrong # args* NONE" $res]} { + lappend exp 0 + } else { + lappend exp $res + } + } + set exp +} {0 0} + +test mathop-22.1 { bitwise ops } { + set res {} + foreach vals {5 {1 6} {1 2 3} {1 2 3 4}} { + foreach op {& | ^} { + lappend res [TestOp $op {*}$vals] + } + } + set res +} [list 5 5 5 0 7 7 0 3 0 0 7 4] +test mathop-22.2 { bitwise ops on bignums } { + set dig 50 + set a 0x[string repeat 5 $dig] + set b 0x[string repeat 7 $dig] + set c 0x[string repeat 9 $dig] + set bn [expr {~$b}] + set cn [expr {~$c}] + + set res {} + foreach vals [list [list $a $b] [list $a $c] [list $b $c] \ + [list $a $bn] [list $bn $c] [list $bn $cn]] { + foreach op {& | ^} { + lappend res [TestOp $op {*}$vals] + } + } + set exp {} + foreach d {5 7 2 1 D C 1 F E 0 -D -D 8 -9 -1 -0 -E E} { + if {[string match "-*" $d]} { + set d [format %X [expr 15-0x[string range $d 1 end]]] + set val [expr -0x[string repeat $d $dig]-1] + } else { + set val [expr 0x[string repeat $d $dig]] + } + lappend exp $val + } + expr {$exp eq $res ? 1 : "($res != $exp"} +} 1 +test mathop-22.3 { bitwise ops } { + set big1 12135435435354435435342423948763867876 + set big2 2746237174783836746262564892918327847 + set wide1 12345678912345 + set wide2 87321847232215 + set small1 87345 + set small2 16753 + + set res {} + foreach op {& | ^} { + lappend res [TestOp $op $big1 $big2] + lappend res [TestOp $op $big1 $wide2] + lappend res [TestOp $op $big1 $small2] + lappend res [TestOp $op $wide1 $big2] + lappend res [TestOp $op $wide1 $wide2] + lappend res [TestOp $op $wide1 $small2] + lappend res [TestOp $op $small1 $big2] + lappend res [TestOp $op $small1 $wide2] + lappend res [TestOp $op $small1 $small2] + } + set res +} [list \ + 712439449294653815890598856501796 \ + 78521450111684 \ + 96 \ + 2371422390785 \ + 12275881497169 \ + 16721 \ + 33 \ + 87057 \ + 16689 \ + 14880960170688977527789098242825693927 \ + 12135435435354435435342432749160988407 \ + 12135435435354435435342423948763884533 \ + 2746237174783836746262574867174849407 \ + 87391644647391 \ + 12345678912377 \ + 2746237174783836746262564892918415159 \ + 87321847232503 \ + 87409 \ + 14880247731239682873973207643969192131 \ + 12135435435354435435342354227710876723 \ + 12135435435354435435342423948763884437 \ + 2746237174783836746262572495752458622 \ + 75115763150222 \ + 12345678895656 \ + 2746237174783836746262564892918415126 \ + 87321847145446 \ + 70720 \ + ] +test mathop-22.4 { unary ops, bad values } { + set res {} + set exp {} + foreach op {& | ^} { + lappend res [TestOp $op x 5] + lappend exp "can't use non-numeric string as operand of \"$op\" ARITH DOMAIN {non-numeric string}" + lappend res [TestOp $op 5 x] + lappend exp "can't use non-numeric string as operand of \"$op\" ARITH DOMAIN {non-numeric string}" + } + expr {$res eq $exp ? 0 : $res} +} 0 + +test mathop-23.1 { comparison ops, numerical } { + set res {} + set todo {5 {1 6} {1 2 2 3} {4 3 2 1} {5.0 5.0} {6 3 3 1} {5.0 5}} + lappend todo [list 2342476234762482734623842342 234827463876473 3434] + lappend todo [list 2653 453735910264536 453735910264537 2384762472634982746239847637] + lappend todo [list 2653 2384762472634982746239847637] + lappend todo [list 2653 -2384762472634982746239847637] + lappend todo [list 3789253678212653 -2384762472634982746239847637] + lappend todo [list 5.0 6 7.0 8 1e13 1945628567352654 1.1e20 \ + 6734253647589123456784564378 2.3e50] + set a 7 + lappend todo [list $a $a] ;# Same object + foreach vals $todo { + foreach op {< <= > >= == eq} { + lappend res [TestOp $op {*}$vals] + } + } + set res +} [list 1 1 1 1 1 1 \ + 1 1 0 0 0 0 \ + 0 1 0 0 0 0 \ + 0 0 1 1 0 0 \ + 0 1 0 1 1 1 \ + 0 0 0 1 0 0 \ + 0 1 0 1 1 0 \ + 0 0 1 1 0 0 \ + 1 1 0 0 0 0 \ + 1 1 0 0 0 0 \ + 0 0 1 1 0 0 \ + 0 0 1 1 0 0 \ + 1 1 0 0 0 0 \ + 0 1 0 1 1 1 \ + ] +test mathop-23.2 { comparison ops, string } { + set res {} + set todo {a {a b} {5 b b c} {d c b a} {xy xy} {gy ef ef ab}} + set a x + lappend todo [list $a $a] + foreach vals $todo { + foreach op {< <= > >= == eq} { + lappend res [TestOp $op {*}$vals] + } + } + set res +} [list 1 1 1 1 1 1 \ + 1 1 0 0 0 0 \ + 0 1 0 0 0 0 \ + 0 0 1 1 0 0 \ + 0 1 0 1 1 1 \ + 0 0 0 1 0 0 \ + 0 1 0 1 1 1 \ + ] +test mathop-23.3 { comparison ops, nonequal} { + set res {} + foreach vals {{a b} {17.0 0x11} {foo foo} {10 10}} { + foreach op {!= ne} { + lappend res [TestOp $op {*}$vals] + } + } + set res +} [list 1 1 0 1 0 0 0 0 ] + +test mathop-24.1 { binary ops } { + set res {} + foreach vals {{3 5} {17 7} {199 5} {293234675763434238476239486 17} \ + {5 1} {0 7}} { + foreach op {% << >> in ni} { + lappend res [TestOp $op {*}$vals] + } + } + set res +} [list 3 96 0 0 1 3 2176 0 0 1 4 6368 6 0 1 \ + 14 38434855421664852505557661908992 2237203031642412097749 0 1 \ + 0 10 2 0 1 0 0 0 0 1] +test mathop-24.2 { binary ops, modulo } { + # Test different combinations to get all code paths + set res {} + + set bigbig 14372423674564535234543545248972634923869 + set big 12135435435354435435342423948763867876 + set wide 12345678912345 + set negwide -12345678912345 + set small 5 + set neg -5 + + lappend res [TestOp % $bigbig $big] + lappend res [TestOp % $wide $big] + lappend res [TestOp % $negwide $big] + lappend res [TestOp % $small $big] + lappend res [TestOp % $neg $big] + lappend res [TestOp % $small $wide] + lappend res [TestOp % $neg $wide] + lappend res [TestOp % $wide $small] + set res +} [list 4068119104883679098115293636215358685 \ + 12345678912345 \ + 12135435435354435435342411603084955531 \ + 5 \ + 12135435435354435435342423948763867871 \ + 5 \ + 12345678912340 \ + 0 \ + ] +test mathop-24.3 { binary ops, bad values } { + set res {} + set exp {} + foreach op {% << >>} { + lappend res [TestOp $op x 1] + lappend exp "can't use non-numeric string as operand of \"$op\" ARITH DOMAIN {non-numeric string}" + lappend res [TestOp $op 1 x] + lappend exp "can't use non-numeric string as operand of \"$op\" ARITH DOMAIN {non-numeric string}" + } + foreach op {% << >>} { + lappend res [TestOp $op 5.0 1] + lappend exp "can't use floating-point value as operand of \"$op\" ARITH DOMAIN {floating-point value}" + lappend res [TestOp $op 1 5.0] + lappend exp "can't use floating-point value as operand of \"$op\" ARITH DOMAIN {floating-point value}" + } + foreach op {in ni} { + lappend res [TestOp $op 5 "a b \{ c"] + lappend exp "unmatched open brace in list NONE" + } + lappend res [TestOp % 5 0] + lappend exp "divide by zero ARITH DIVZERO {divide by zero}" + lappend res [TestOp % 9838923468297346238478737647637375 0] + lappend exp "divide by zero ARITH DIVZERO {divide by zero}" + lappend res [TestOp / 5 0] + lappend exp "divide by zero ARITH DIVZERO {divide by zero}" + lappend res [TestOp / 9838923468297346238478737647637375 0] + lappend exp "divide by zero ARITH DIVZERO {divide by zero}" + expr {$res eq $exp ? 0 : $res} +} 0 +test mathop-24.4 { binary ops, negative shift } { + set res {} + + set big -12135435435354435435342423948763867876 + set wide -12345678912345 + set small -1 + + lappend res [TestOp << 10 $big] + lappend res [TestOp << 10 $wide] + lappend res [TestOp << 10 $small] + lappend res [TestOp >> 10 $big] + lappend res [TestOp >> 10 $wide] + lappend res [TestOp >> 10 $small] + + set exp [lrepeat 6 "negative shift argument NONE"] + expr {$res eq $exp ? 0 : $res} +} 0 +test mathop-24.5 { binary ops, large shift } { + set res {} + set exp {} + + set big 12135435435354435435342423948763867876 + set wide 12345678912345 + set small 1 + + lappend res [TestOp << 1 2147483648] + lappend exp "integer value too large to represent NONE" + lappend res [TestOp << 1 4294967296] + lappend exp "integer value too large to represent NONE" + lappend res [TestOp << $small $wide] + lappend exp "integer value too large to represent NONE" + lappend res [TestOp << $small $big] + lappend exp "integer value too large to represent NONE" + lappend res [TestOp >> $big $wide] + lappend exp 0 + lappend res [TestOp >> $big $big] + lappend exp 0 + lappend res [TestOp >> $small 70] + lappend exp 0 + lappend res [TestOp >> $wide 70] + lappend exp 0 + lappend res [TestOp >> -$big $wide] + lappend exp -1 + lappend res [TestOp >> -$wide $wide] + lappend exp -1 + lappend res [TestOp >> -$small $wide] + lappend exp -1 + lappend res [TestOp >> -$small 70] + lappend exp -1 + lappend res [TestOp >> -$wide 70] + lappend exp -1 + + expr {$res eq $exp ? 0 : $res} +} 0 +test mathop-24.6 { binary ops, shift } { + # Test different combinations to get all code paths + set res {} + + set bigbig 14372423674564535234543545248972634923869 + set big 12135435435354435435342423948763867876 + set wide 12345678912345 + set negwide -12345678912345 + set small 5 + set neg -5 + + lappend res [TestOp << $wide $small] + lappend res [TestOp >> $wide $small] + set res +} [list 395061725195040 \ + 385802466010 \ + ] +test mathop-24.7 { binary ops, list search } { + set res {} + + foreach op {in ni} { + lappend res [TestOp $op 5 {7 5 8}] + lappend res [TestOp $op hej {foo bar hej}] + lappend res [TestOp $op 5 {7 0x5 8}] + } + set res +} [list 1 1 0 0 0 1] +test mathop-24.8 { binary ops, too many } { + set exp {} + foreach op {<< >> % != ne in ni ~ !} { + set res [TestOp $op 7 8 9] + if {[string match "wrong # args* NONE" $res]} { + lappend exp 0 + } else { + lappend exp $res + } + } + set exp +} {0 0 0 0 0 0 0 0 0} + +test mathop-25.1 { exp operator } {TestOp ** } 1 +test mathop-25.2 { exp operator } {TestOp ** 0 } 0 +test mathop-25.3 { exp operator } {TestOp ** 0 5} 0 +test mathop-25.4 { exp operator } {TestOp ** 7.5 } 7.5 +test mathop-25.5 { exp operator } {TestOp ** 1 5} 1 +test mathop-25.6 { exp operator } {TestOp ** 5 1} 5 +test mathop-25.7 { exp operator } {TestOp ** 4 3 2 1} 262144 +test mathop-25.8 { exp operator } {TestOp ** 5.5 4} 915.0625 +test mathop-25.9 { exp operator } {TestOp ** 16 3.5} 16384.0 +test mathop-25.10 { exp operator } {TestOp ** 3.5 0} 1.0 +test mathop-25.11 { exp operator } {TestOp ** 378 0} 1 +test mathop-25.12 { exp operator } {TestOp ** 7.8 1} 7.8 +test mathop-25.13 { exp operator } {TestOp ** 748 1} 748 +test mathop-25.14 { exp operator } {TestOp ** 1.6 -1} 0.625 +test mathop-25.15 { exp operator } {TestOp ** 683 -1} 0 +test mathop-25.16 { exp operator } {TestOp ** 1 -1} 1 +test mathop-25.17 { exp operator } {TestOp ** -1 -1} -1 +test mathop-25.18 { exp operator } {TestOp ** -1 -2} 1 +test mathop-25.19 { exp operator } {TestOp ** -1 3} -1 +test mathop-25.20 { exp operator } {TestOp ** -1 4} 1 +test mathop-25.21 { exp operator } {TestOp ** 2 63} 9223372036854775808 +test mathop-25.22 { exp operator } {TestOp ** 83756485763458746358734658473567847567473 2} 7015148907444467657897585474493757781161998914521537835809623408157343003287605729 +test mathop-25.23 { exp operator errors } { + set res {} + set exp {} + + set huge [string repeat 145782 1000] + set big 12135435435354435435342423948763867876 + set wide 12345678912345 + set small 2 + + lappend res [TestOp ** 0 -5] + lappend exp "exponentiation of zero by negative power ARITH DOMAIN {exponentiation of zero by negative power}" + lappend res [TestOp ** 0.0 -5.0] + lappend exp "exponentiation of zero by negative power ARITH DOMAIN {exponentiation of zero by negative power}" + lappend res [TestOp ** $small $wide] + lappend exp "exponent too large NONE" + lappend res [TestOp ** 2 $big] + lappend exp "exponent too large NONE" + lappend res [TestOp ** $huge 2.1] + lappend exp "Inf" + lappend res [TestOp ** 2 foo] + lappend exp "can't use non-numeric string as operand of \"**\" ARITH DOMAIN {non-numeric string}" + lappend res [TestOp ** foo 2] + lappend exp "can't use non-numeric string as operand of \"**\" ARITH DOMAIN {non-numeric string}" + + expr {$res eq $exp ? 0 : $res} +} 0 + +test mathop-26.1 { misc ops, size combinations } { + set big1 12135435435354435435342423948763867876 + set big2 2746237174783836746262564892918327847 + set wide1 87321847232215 + set wide2 12345678912345 + set small1 87345 + set small2 16753 + + set res {} + foreach op {+ * - /} { + lappend res [TestOp $op $big1 $big2] + lappend res [TestOp $op $big1 $wide2] + lappend res [TestOp $op $big1 $small2] + lappend res [TestOp $op $wide1 $big2] + lappend res [TestOp $op $wide1 $wide2] + lappend res [TestOp $op $wide1 $small2] + lappend res [TestOp $op $small1 $big2] + lappend res [TestOp $op $small1 $wide2] + lappend res [TestOp $op $small1 $small2] + } + set res +} [list \ + 14881672610138272181604988841682195723 \ + 12135435435354435435342436294442780221 \ + 12135435435354435435342423948763884629 \ + 2746237174783836746262652214765560062 \ + 99667526144560 \ + 87321847248968 \ + 2746237174783836746262564892918415192 \ + 12345678999690 \ + 104098 \ + 33326783924759424684447891401270222910405366244661685890993770489959542972 \ + 149820189346379518024969783068410988366610965329220 \ + 203304949848492856848291628413641078526628 \ + 239806503039903915972546163440347114360602909991105 \ + 1078047487961768329845194175 \ + 1462902906681297895 \ + 239870086031494220602303730571951345796215 \ + 1078333324598774025 \ + 1463290785 \ + 9389198260570598689079859055845540029 \ + 12135435435354435435342411603084955531 \ + 12135435435354435435342423948763851123 \ + -2746237174783836746262477571071095632 \ + 74976168319870 \ + 87321847215462 \ + -2746237174783836746262564892918240502 \ + -12345678825000 \ + 70592 \ + 4 \ + 982970278225822587257201 \ + 724373869477373332259441529801460 \ + 0 \ + 7 \ + 5212311062 \ + 0 \ + 0 \ + 5 \ + ] +test mathop-26.2 { misc ops, corner cases } { + set res {} + lappend res [TestOp - 0 -2147483648] ;# -2**31 + lappend res [TestOp - 0 -9223372036854775808] ;# -2**63 + lappend res [TestOp / -9223372036854775808 -1] + lappend res [TestOp * 2147483648 2] + lappend res [TestOp * 9223372036854775808 2] + set res +} [list 2147483648 9223372036854775808 9223372036854775808 4294967296 18446744073709551616] + +if 0 { + # Compare ops to expr bytecodes + namespace import ::tcl::mathop::* + proc _X {a b c} { + set x [+ $a [- $b $c]] + set y [expr {$a + ($b - $c)}] + set z [< $a $b $c] + } + set ::tcl_traceCompile 2 + _X 3 4 5 + set ::tcl_traceCompile 0 +} + +# cleanup +namespace delete ::testmathop +namespace delete ::testmathop2 +::tcltest::cleanupTests +return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/misc.test b/tests/misc.test index 9894e27..fe19ebe 100644 --- a/tests/misc.test +++ b/tests/misc.test @@ -17,6 +17,8 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } +testConstraint testhashsystemhash [llength [info commands testhashsystemhash]] + test misc-1.1 {error in variable ref. in command in array reference} { proc tstProc {} { global a @@ -49,33 +51,26 @@ test misc-1.2 {error in variable ref. in command in array reference} { # this is a bogus comment " set msg {} - join [list [catch tstProc msg] $msg $errorInfo] \n + join [list [catch tstProc msg] $msg $::errorInfo] \n } [subst -novariables -nocommands {1 missing close-brace for variable name missing close-brace for variable name - while compiling + while executing "set tst $a([winfo name $\{zz) # this is a bogus comment # this is a bogus comment # this is a bogus comment # this is a bogus comment # this is a ..." - (compiling body of proc "tstProc", line 4) + (procedure "tstProc" line 4) invoked from within "tstProc"}] +for {set i 1} {$i<300} {incr i} { + test misc-2.$i {hash table with sys-alloc} testhashsystemhash \ + "testhashsystemhash $i" OK +} + # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/msgcat.test b/tests/msgcat.test index 3440106..0edb1d2 100644 --- a/tests/msgcat.test +++ b/tests/msgcat.test @@ -17,8 +17,8 @@ if {[catch {package require tcltest 2}]} { puts stderr "Skipping tests in [info script]. tcltest 2 required." return } -if {[catch {package require msgcat 1.3.5}]} { - puts stderr "Skipping tests in [info script]. No msgcat 1.3.5 found to test." +if {[catch {package require msgcat 1.5.0}]} { + puts stderr "Skipping tests in [info script]. No msgcat 1.5.0 found to test." return } @@ -49,11 +49,12 @@ namespace eval ::msgcat::test { variable body variable result variable setVars - foreach setVars [PowerSet $envVars] { + foreach setVars [PowerSet $envVars] { set result [string tolower [lindex $setVars 0]] if {[string length $result] == 0} { if {[info exists ::tcl::mac::locale]} { - set result [string tolower $::tcl::mac::locale] + set result [string tolower \ + [msgcat::ConvertLocale $::tcl::mac::locale]] } else { if {([info sharedlibextension] == ".dll") && ![catch {package require registry}]} { @@ -90,7 +91,7 @@ namespace eval ::msgcat::test { incr count } catch {unset result} - + # Could add tests of initialization from Windows registry here. # Use a fake registry package. @@ -120,7 +121,7 @@ namespace eval ::msgcat::test { mclocale $locale } -body { mcpreferences - } -result en + } -result {en {}} test msgcat-1.6 {mclocale set, two elements} -setup { variable locale [mclocale] @@ -146,7 +147,7 @@ namespace eval ::msgcat::test { mclocale $locale } -body { mcpreferences - } -result {en_us en} + } -result {en_us en {}} test msgcat-1.9 {mclocale set, three elements} -setup { variable locale [mclocale] @@ -172,7 +173,7 @@ namespace eval ::msgcat::test { mclocale $locale } -body { mcpreferences - } -result {en_us_funky en_us en} + } -result {en_us_funky en_us en {}} test msgcat-1.12 {mclocale set, reject evil input} -setup { variable locale [mclocale] @@ -271,12 +272,13 @@ namespace eval ::msgcat::test { # (e.g. en_UK) will search less specific locales # (e.g. en) for translation strings. # - # Do this for the 12 permutations of + # Do this for the 15 permutations of # locales: {foo foo_BAR foo_BAR_baz} - # strings: {ov1 ov2 ov3 ov4} - # locale foo defines ov1, ov2, ov3 - # locale foo_BAR defines ov2, ov3 - # locale foo_BAR_BAZ defines ov3 + # strings: {ov0 ov1 ov2 ov3 ov4} + # locale ROOT defines ov0, ov1, ov2, ov3 + # locale foo defines ov1, ov2, ov3 + # locale foo_BAR defines ov2, ov3 + # locale foo_BAR_BAZ defines ov3 # (ov4 is defined in none) # So, # ov3 should be resolved in foo, foo_BAR, foo_BAR_baz @@ -289,16 +291,23 @@ namespace eval ::msgcat::test { variable count 2 variable result array set result { - foo,ov1 ov1_foo foo,ov2 ov2_foo foo,ov3 ov3_foo foo,ov4 ov4 - foo_BAR,ov1 ov1_foo foo_BAR,ov2 ov2_foo_BAR foo_BAR,ov3 ov3_foo_BAR - foo_BAR,ov4 ov4 foo_BAR_baz,ov1 ov1_foo foo_BAR_baz,ov2 ov2_foo_BAR + foo,ov0 ov0_ROOT foo,ov1 ov1_foo foo,ov2 ov2_foo + foo,ov3 ov3_foo foo,ov4 ov4 + foo_BAR,ov0 ov0_ROOT foo_BAR,ov1 ov1_foo foo_BAR,ov2 ov2_foo_BAR + foo_BAR,ov3 ov3_foo_BAR foo_BAR,ov4 ov4 + foo_BAR_baz,ov0 ov0_ROOT foo_BAR_baz,ov1 ov1_foo + foo_BAR_baz,ov2 ov2_foo_BAR foo_BAR_baz,ov3 ov3_foo_BAR_baz foo_BAR_baz,ov4 ov4 } variable loc variable string foreach loc {foo foo_BAR foo_BAR_baz} { - foreach string {ov1 ov2 ov3 ov4} { + foreach string {ov0 ov1 ov2 ov3 ov4} { test msgcat-3.$count {mcset, overlap} -setup { + mcset {} ov0 ov0_ROOT + mcset {} ov1 ov1_ROOT + mcset {} ov2 ov2_ROOT + mcset {} ov3 ov3_ROOT mcset foo ov1 ov1_foo mcset foo ov2 ov2_foo mcset foo ov3 ov3_foo @@ -389,11 +398,15 @@ namespace eval ::msgcat::test { # Tests msgcat-5.*: [mcload] - variable locales {foo foo_BAR foo_BAR_baz} - makeDirectory msgdir + variable locales {{} foo foo_BAR foo_BAR_baz} + set msgdir [makeDirectory msgdir] foreach loc $locales { - makeFile "::msgcat::mcset $loc abc abc-$loc" \ - [string tolower [file join msgdir $loc.msg]] + if { $loc eq {} } { + set msg ROOT + } else { + set msg [string tolower $loc] + } + makeFile [list ::msgcat::mcset $loc abc abc-$loc] $msg.msg $msgdir } variable count 1 foreach loc {foo foo_BAR foo_BAR_baz} { @@ -403,21 +416,21 @@ namespace eval ::msgcat::test { } -cleanup { mclocale $locale } -body { - mcload [file join [temporaryDirectory] msgdir] - } -result $count + mcload $msgdir + } -result [expr { $count+1 }] incr count } # Even though foo_BAR_notexist does not exist, - # foo_BAR and foo should be loaded. + # foo_BAR, foo and the root should be loaded. test msgcat-5.4 {mcload} -setup { variable locale [mclocale] mclocale foo_BAR_notexist } -cleanup { mclocale $locale } -body { - mcload [file join [temporaryDirectory] msgdir] - } -result 2 + mcload $msgdir + } -result 3 test msgcat-5.5 {mcload} -setup { variable locale [mclocale] @@ -425,12 +438,13 @@ namespace eval ::msgcat::test { } -cleanup { mclocale $locale } -body { - mcload [file join [temporaryDirectory] msgdir] - } -result 0 + mcload $msgdir + } -result 1 test msgcat-5.6 {mcload} -setup { variable locale [mclocale] mclocale foo + mcload $msgdir } -cleanup { mclocale $locale } -body { @@ -440,6 +454,7 @@ namespace eval ::msgcat::test { test msgcat-5.7 {mcload} -setup { variable locale [mclocale] mclocale foo_BAR + mcload $msgdir } -cleanup { mclocale $locale } -body { @@ -449,6 +464,7 @@ namespace eval ::msgcat::test { test msgcat-5.8 {mcload} -setup { variable locale [mclocale] mclocale foo_BAR_baz + mcload $msgdir } -cleanup { mclocale $locale } -body { @@ -456,30 +472,45 @@ namespace eval ::msgcat::test { } -result abc-foo_BAR_baz test msgcat-5.9 {mcload} -setup { + variable locale [mclocale] + mclocale no_FI_notexist + mcload $msgdir + } -cleanup { + mclocale $locale + } -body { + mc abc + } -result abc- + + test msgcat-5.10 {mcload} -setup { rename ::msgcat::mcunknown SavedMcunknown proc ::msgcat::mcunknown {dom s} { return unknown:$dom:$s } variable locale [mclocale] mclocale no_FI_notexist + mcload $msgdir } -cleanup { mclocale $locale rename ::msgcat::mcunknown {} rename SavedMcunknown ::msgcat::mcunknown } -body { - mc abc - } -result unknown:no_fi_notexist:abc - + mc def + } -result unknown:no_fi_notexist:def foreach loc $locales { - removeFile [string tolower [file join msgdir $loc.msg]] + if { $loc eq {} } { + set msg ROOT + } else { + set msg [string tolower $loc] + } + removeFile $msg.msg $msgdir } removeDirectory msgdir # Tests msgcat-6.*: [mcset], [mc] namespace inheritance # # Test mcset and mc, ensuring that resolution for messages -# proceeds from the current ns to its parent and so on to the +# proceeds from the current ns to its parent and so on to the # global ns. # # Do this for the 12 permutations of @@ -523,7 +554,7 @@ namespace eval ::msgcat::test { ::msgcat::mcset foo ov3 "ov3_foo_bar_baz" } } - + } variable locale [mclocale] mclocale foo @@ -587,6 +618,46 @@ namespace eval ::msgcat::test { mc "this is a %s" "good test" } -result "this is a good test" + # Tests msgcat-8.*: [mcflset] + + set msgdir1 [makeDirectory msgdir1] + makeFile {::msgcat::mcflset k1 v1} l1.msg $msgdir1 + + test msgcat-8.1 {mcflset} -setup { + variable locale [mclocale] + mclocale l1 + mcload $msgdir1 + } -cleanup { + mclocale $locale + } -body { + mc k1 + } -result v1 + + removeFile l1.msg $msgdir1 + removeDirectory msgdir1 + + set msgdir2 [makeDirectory msgdir2] + set msgdir3 [makeDirectory msgdir3] + makeFile "::msgcat::mcflset k2 v2 ; ::msgcat::mcload [list $msgdir3]"\ + l2.msg $msgdir2 + makeFile {::msgcat::mcflset k3 v3} l2.msg $msgdir3 + + # chained mcload + test msgcat-8.2 {mcflset} -setup { + variable locale [mclocale] + mclocale l2 + mcload $msgdir2 + } -cleanup { + mclocale $locale + } -body { + return [mc k2][mc k3] + } -result v2v3 + + removeFile l2.msg $msgdir2 + removeDirectory msgdir2 + removeFile l3.msg $msgdir3 + removeDirectory msgdir3 + cleanupTests } namespace delete ::msgcat::test diff --git a/tests/namespace-old.test b/tests/namespace-old.test index 5f394b5..5ffb25b 100644 --- a/tests/namespace-old.test +++ b/tests/namespace-old.test @@ -15,12 +15,12 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2.2 namespace import -force ::tcltest::* } # Clear out any namespaces called test_ns_* -catch {eval namespace delete [namespace children :: test_ns_*]} +catch {namespace delete {*}[namespace children :: test_ns_*]} test namespace-old-1.1 {usage for "namespace" command} { list [catch {namespace} msg] $msg @@ -249,8 +249,8 @@ test namespace-old-4.3 {command "namespace delete" doesn't support patterns} { test namespace-old-4.4 {command "namespace delete" handles multiple args} { set cmd { namespace eval test_ns_delete { - eval namespace delete \ - [namespace children [namespace current] ns?] + namespace delete \ + {*}[namespace children [namespace current] ns?] } } list [catch $cmd msg] $msg [namespace children test_ns_delete] @@ -334,9 +334,9 @@ test namespace-old-5.9 {usage for "namespace children"} { list [catch {namespace children test_ns_hier1 y z} msg] $msg } {1 {wrong # args: should be "namespace children ?name? ?pattern?"}} -test namespace-old-5.10 {command "namespace children" must get valid namespace} { - list [catch {namespace children xyzzy} msg] $msg -} {1 {unknown namespace "xyzzy" in namespace children command}} +test namespace-old-5.10 {command "namespace children" must get valid namespace} -body { + namespace children xyzzy +} -returnCodes error -result {namespace "xyzzy" not found in "::"} test namespace-old-5.11 {querying namespace children} { lsort [namespace children :: test_ns_hier*] @@ -370,9 +370,9 @@ test namespace-old-5.18 {usage for "namespace parent"} { list [catch {namespace parent x y} msg] $msg } {1 {wrong # args: should be "namespace parent ?name?"}} -test namespace-old-5.19 {command "namespace parent" must get valid namespace} { - list [catch {namespace parent xyzzy} msg] $msg -} {1 {unknown namespace "xyzzy" in namespace parent command}} +test namespace-old-5.19 {command "namespace parent" must get valid namespace} -body { + namespace parent xyzzy +} -returnCodes error -result {namespace "xyzzy" not found in "::"} test namespace-old-5.20 {querying namespace parent} { list [namespace eval :: {namespace parent}] \ @@ -525,11 +525,12 @@ test namespace-old-6.16 {public variables affect all parent namespaces} { } {{cache2 version} {cache2 version}} test namespace-old-6.17 {usage for "namespace which"} { - list [catch "namespace which -baz" msg] $msg + list [catch "namespace which -baz x" msg] $msg } {1 {wrong # args: should be "namespace which ?-command? ?-variable? name"}} test namespace-old-6.18 {usage for "namespace which"} { - list [catch "namespace which -command" msg] $msg -} {1 {wrong # args: should be "namespace which ?-command? ?-variable? name"}} + # Presume no imported command called -command ;^) + namespace which -command +} {} test namespace-old-6.19 {querying: namespace which -command} { proc test_ns_cache1::test_ns_cache_cmd {} { @@ -681,12 +682,8 @@ test namespace-old-9.4 {check export status} { } {::test_ns_import::cmd1 ::test_ns_import::cmd2 ::test_ns_import::cmd3} test namespace-old-9.5 {empty import list in "namespace import" command} { - namespace import -} {} - -test namespace-old-9.6 {empty import list for "namespace import" command} { - namespace import -} {} + lsort [namespace import] +} {bytestring cleanupTests configure customMatch debug errorChannel errorFile getMatchingFiles interpreter limitConstraints loadFile loadScript loadTestedCommands mainThread makeDirectory makeFile match matchDirectories matchFiles normalizeMsg normalizePath outputChannel outputFile preserveCore removeDirectory removeFile restoreState runAllTests saveState singleProcess skip skipDirectories skipFiles temporaryDirectory test testConstraint testsDirectory threadReap verbose viewFile workingDirectory} test namespace-old-9.7 {empty forget list for "namespace forget" command} { namespace forget @@ -848,15 +845,3 @@ eval namespace delete [namespace children :: test_ns_*] # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/namespace.test b/tests/namespace.test index 166ff00..2be4cfc 100644 --- a/tests/namespace.test +++ b/tests/namespace.test @@ -16,8 +16,19 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } +# +# REMARK: the tests for 'namespace upvar' are not done here. They are to be +# found in the file 'upvar.test'. +# + # Clear out any namespaces called test_ns_* -catch {eval namespace delete [namespace children :: test_ns_*]} +catch {namespace delete {*}[namespace children :: test_ns_*]} + +proc fq {ns} { + if {[string match ::* $ns]} {return $ns} + set current [uplevel 1 {namespace current}] + return [string trimright $current :]::[string trimleft $ns :] +} test namespace-1.1 {TclInitNamespaces, GetNamespaceFromObj, NamespaceChildrenCmd} { namespace children :: test_ns_* @@ -77,7 +88,7 @@ test namespace-5.2 {Tcl_PopCallFrame, local vars must be deleted} { } {123} test namespace-6.1 {Tcl_CreateNamespace} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [lsort [namespace children :: test_ns_*]] \ [namespace eval test_ns_1 {namespace current}] \ [namespace eval test_ns_2 {namespace current}] \ @@ -96,7 +107,7 @@ test namespace-6.3 {Tcl_CreateNamespace, trailing ::s in ns name are ignored} { list [catch {namespace eval test_ns_7::: {namespace current}} msg] $msg } {0 ::test_ns_7} test namespace-6.4 {Tcl_CreateNamespace, trailing ::s in ns name are ignored} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1:: { namespace eval test_ns_2:: {} namespace eval test_ns_3:: {} @@ -114,7 +125,7 @@ test namespace-6.5 {Tcl_CreateNamespace, relative ns names now only looked up in } {::test_ns_1::test_ns_2 ::test_ns_1::test_ns_2} test namespace-7.1 {Tcl_DeleteNamespace, active call frames in ns} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1 { proc p {} { namespace delete [namespace current] @@ -163,6 +174,24 @@ test namespace-7.6 {recursive Tcl_DeleteNamespace, no active call frames in ns} } namespace delete test_ns_2 } {} +test namespace-7.7 {Bug 1655305} -setup { + interp create slave + # Can't invoke through the ensemble, since deleting the global namespace + # (indirectly, via deleting ::tcl) deletes the ensemble. + slave eval {rename ::tcl::info::commands ::infocommands} + slave hide infocommands + slave eval { + proc foo {} { + namespace delete :: + } + } +} -body { + slave eval foo + slave invokehidden infocommands +} -cleanup { + interp delete slave +} -result {} + test namespace-8.1 {TclTeardownNamespace, delete global namespace} { catch {interp delete test_interp} @@ -191,7 +220,7 @@ test namespace-8.1 {TclTeardownNamespace, delete global namespace} { [interp delete test_interp] } {{::test_ns_1 27} {} 1 {invalid command name "set"} {}} test namespace-8.2 {TclTeardownNamespace, remove deleted ns from parent} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1::test_ns_2::test_ns_3a {proc p {} {}} namespace eval test_ns_1::test_ns_2::test_ns_3b {proc q {} {}} list [namespace children test_ns_1] \ @@ -199,7 +228,7 @@ test namespace-8.2 {TclTeardownNamespace, remove deleted ns from parent} { [namespace children test_ns_1] } {::test_ns_1::test_ns_2 {} {}} test namespace-8.3 {TclTeardownNamespace, delete child namespaces} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1::test_ns_2::test_ns_3a {proc p {} {}} namespace eval test_ns_1::test_ns_2::test_ns_3b {proc q {} {}} list [namespace children test_ns_1] \ @@ -207,9 +236,9 @@ test namespace-8.3 {TclTeardownNamespace, delete child namespaces} { [namespace children test_ns_1] \ [catch {namespace children test_ns_1::test_ns_2} msg] $msg \ [info commands test_ns_1::test_ns_2::test_ns_3a::*] -} {::test_ns_1::test_ns_2 {} {} 1 {unknown namespace "test_ns_1::test_ns_2" in namespace children command} {}} +} {::test_ns_1::test_ns_2 {} {} 1 {namespace "test_ns_1::test_ns_2" not found in "::"} {}} test namespace-8.4 {TclTeardownNamespace, cmds imported from deleted ns go away} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_export { namespace export cmd1 cmd2 proc cmd1 {args} {return "cmd1: $args"} @@ -233,7 +262,7 @@ test namespace-8.5 {TclTeardownNamespace: preserve errorInfo; errorCode values} invoked from within "slave eval error foo bar baz"} test namespace-8.6 {TclTeardownNamespace: preserve errorInfo; errorCode values} { - interp create slave + interp create slave slave eval {trace add variable errorCode write {namespace delete :: ;#}} catch {slave eval error foo bar baz} interp delete slave @@ -241,16 +270,16 @@ test namespace-8.6 {TclTeardownNamespace: preserve errorInfo; errorCode values} } {bar invoked from within "slave eval error foo bar baz"} -test namespace-8.7 {TclTeardownNamespace: preserve errorInfo; errorCode values} { +test namespace-8.7 {TclTeardownNamespace: preserve errorInfo; errorCode values} { interp create slave slave eval {trace add execution error leave {namespace delete :: ;#}} catch {slave eval error foo bar baz} interp delete slave - set ::errorCode + set ::errorCode } baz test namespace-9.1 {Tcl_Import, empty import pattern} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {namespace eval test_ns_import {namespace import {}}} msg] $msg } {1 {empty import pattern}} test namespace-9.2 {Tcl_Import, unknown namespace in import pattern} { @@ -260,7 +289,7 @@ test namespace-9.3 {Tcl_Import, import ns == export ns} { list [catch {namespace eval test_ns_import {namespace import ::test_ns_import::puts}} msg] $msg } {1 {import pattern "::test_ns_import::puts" tries to import from namespace "test_ns_import" into itself}} test namespace-9.4 {Tcl_Import, simple import} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_export { namespace export cmd1 proc cmd1 {args} {return "cmd1: $args"} @@ -282,7 +311,7 @@ test namespace-9.6 {Tcl_Import, cmd redefinition ok if allowOverwrite!=0} { } } {cmd1: 555} test namespace-9.7 {Tcl_Import, links are preserved if cmd is redefined} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_export { namespace export cmd1 proc cmd1 {args} {return "cmd1: $args"} @@ -344,7 +373,7 @@ test namespace-9.9 {Tcl_Import: Bug 1017299} -setup { } -returnCodes error -match glob -result {import pattern * would create a loop*} test namespace-10.1 {Tcl_ForgetImport, check for valid namespaces} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {namespace forget xyzzy::*} msg] $msg } {1 {unknown namespace in namespace forget pattern "xyzzy::*"}} test namespace-10.2 {Tcl_ForgetImport, ignores patterns that don't match} { @@ -484,7 +513,7 @@ test namespace-10.9 {Tcl_ForgetImport: Bug 560297} -setup { } -returnCodes error -match glob -result * test namespace-11.1 {TclGetOriginalCommand, check if not imported cmd} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_export { namespace export cmd1 proc cmd1 {args} {return "cmd1: $args"} @@ -508,7 +537,7 @@ test namespace-11.3 {TclGetOriginalCommand, indirectly imported cmd} { } {{cmd1: 123} ::test_ns_export::cmd1} test namespace-12.1 {InvokeImportedCmd} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_export { namespace export cmd1 proc cmd1 {args} {namespace current} @@ -529,7 +558,7 @@ test namespace-13.1 {DeleteImportedCmd, deletes imported cmds} { } {::test_ns_import::cmd1 {}} test namespace-14.1 {TclGetNamespaceForQualName, absolute names} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} variable v 10 namespace eval test_ns_1::test_ns_2 { variable v 20 @@ -547,7 +576,7 @@ test namespace-14.2 {TclGetNamespaceForQualName, invalid absolute names} { list [catch {set ::test_ns_777::v} msg] $msg \ [catch {namespace children test_ns_777} msg] $msg } -} {1 {can't read "::test_ns_777::v": no such variable} 1 {unknown namespace "test_ns_777" in namespace children command}} +} {1 {can't read "::test_ns_777::v": no such variable} 1 {namespace "test_ns_777" not found in "::test_ns_1"}} test namespace-14.3 {TclGetNamespaceForQualName, relative names} { namespace eval test_ns_1 { list $v $test_ns_2::v @@ -561,7 +590,7 @@ test namespace-14.4 {TclGetNamespaceForQualName, relative ns names looked up onl list [namespace children test_ns_2] \ [catch {namespace children test_ns_1} msg] $msg } -} {::test_ns_1::test_ns_2::foo 1 {unknown namespace "test_ns_1" in namespace children command}} +} {::test_ns_1::test_ns_2::foo 1 {namespace "test_ns_1" not found in "::test_ns_1"}} test namespace-14.5 {TclGetNamespaceForQualName, relative ns names looked up only in current ns} { namespace eval ::test_ns_2 { namespace eval bar {} @@ -579,7 +608,7 @@ test namespace-14.6 {TclGetNamespaceForQualName, relative ns names looked up onl list [namespace children test_ns_2] \ [catch {namespace children test_ns_1} msg] $msg } -} {::test_ns_1::test_ns_2::foo 1 {unknown namespace "test_ns_1" in namespace children command}} +} {::test_ns_1::test_ns_2::foo 1 {namespace "test_ns_1" not found in "::test_ns_1"}} test namespace-14.7 {TclGetNamespaceForQualName, ignore extra :s if ns} { namespace children test_ns_1::: } {::test_ns_1::test_ns_2} @@ -607,7 +636,7 @@ test namespace-14.11 {TclGetNamespaceForQualName, extra ::s are significant for lappend l [test_ns_1::test_ns_2:: hello] } {1 {invalid command name "test_ns_1::test_ns_2::"} {{}: hello}} test namespace-14.12 {TclGetNamespaceForQualName, extra ::s are significant for vars} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1 { variable {} set test_ns_1::(x) y @@ -615,12 +644,12 @@ test namespace-14.12 {TclGetNamespaceForQualName, extra ::s are significant for set test_ns_1::(x) } y test namespace-14.13 {TclGetNamespaceForQualName, namespace other than global ns can't have empty name} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {namespace eval test_ns_1 {proc {} {} {}; namespace eval {} {}; {}}} msg] $msg } {1 {can't create namespace "": only global namespace can have empty name}} test namespace-15.1 {Tcl_FindNamespace, absolute name found} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_delete { namespace eval test_ns_delete2 {} proc cmd {args} {namespace current} @@ -647,7 +676,7 @@ test namespace-15.4 {Tcl_FindNamespace, relative name not found} { } {1 {unknown namespace "test_ns_delete2" in namespace delete command}} test namespace-16.1 {Tcl_FindCommand, absolute name found} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1 { proc cmd {args} {return "[namespace current]::cmd: $args"} variable v "::test_ns_1::cmd" @@ -715,7 +744,7 @@ test namespace-16.11 {Tcl_FindCommand, relative name not found} { catch {unset x} test namespace-17.1 {Tcl_FindNamespaceVar, absolute name found} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} set x 314159 namespace eval test_ns_1 { set ::x @@ -773,12 +802,26 @@ test namespace-17.9 {Tcl_FindNamespaceVar, relative name and TCL_GLOBAL_ONLY} { } set test_ns_1::a } {hello} +test namespace-17.10 {Tcl_FindNamespaceVar, interference with cached varNames} { + namespace eval test_ns_1 {} + proc test_ns {} { + set ::test_ns_1::a 0 + } + test_ns + rename test_ns {} + namespace eval test_ns_1 unset a + set a 0 + namespace eval test_ns_1 set a 1 + namespace delete test_ns_1 + set a +} 1 +catch {unset a} catch {unset x} catch {unset l} catch {rename foo {}} test namespace-18.1 {TclResetShadowedCmdRefs, one-level check for command shadowing} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} proc foo {} {return "global foo"} namespace eval test_ns_1 { proc trigger {} { @@ -819,7 +862,7 @@ catch {unset l} catch {rename foo {}} test namespace-19.1 {GetNamespaceFromObj, global name found} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1::test_ns_2 {} namespace children ::test_ns_1 } {::test_ns_1::test_ns_2} @@ -828,11 +871,11 @@ test namespace-19.2 {GetNamespaceFromObj, relative name found} { namespace children test_ns_2 } } {} -test namespace-19.3 {GetNamespaceFromObj, name not found} { +test namespace-19.3 {GetNamespaceFromObj, name not found} -body { namespace eval test_ns_1 { - list [catch {namespace children test_ns_99} msg] $msg + namespace children test_ns_99 } -} {1 {unknown namespace "test_ns_99" in namespace children command}} +} -returnCodes error -result {namespace "test_ns_99" not found in "::test_ns_1"} test namespace-19.4 {GetNamespaceFromObj, invalidation of cached ns refs} { namespace eval test_ns_1 { proc foo {} { @@ -849,18 +892,18 @@ test namespace-19.4 {GetNamespaceFromObj, invalidation of cached ns refs} { } {{} ::test_ns_1::test_ns_2::test_ns_3} test namespace-20.1 {Tcl_NamespaceObjCmd, bad subcommand} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {namespace} msg] $msg } {1 {wrong # args: should be "namespace subcommand ?arg ...?"}} -test namespace-20.2 {Tcl_NamespaceObjCmd, bad subcommand} { - list [catch {namespace wombat {}} msg] $msg -} {1 {bad option "wombat": must be children, code, current, delete, eval, exists, export, forget, import, inscope, origin, parent, qualifiers, tail, or which}} +test namespace-20.2 {Tcl_NamespaceObjCmd, bad subcommand} -body { + namespace wombat {} +} -returnCodes error -match glob -result {bad option "wombat": must be *} test namespace-20.3 {Tcl_NamespaceObjCmd, abbreviations are okay} { namespace ch :: test_ns_* } {} test namespace-21.1 {NamespaceChildrenCmd, no args} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1::test_ns_2 {} expr {[string first ::test_ns_1 [namespace children]] != -1} } {1} @@ -890,9 +933,13 @@ test namespace-21.7 {NamespaceChildrenCmd, glob-style pattern given} { namespace eval test_ns_1::test_ns_foo {} lsort [namespace children test_ns_1 test*] } [lsort {::test_ns_1::test_ns_2 ::test_ns_1::test_ns_foo}] +test namespace-21.8 {NamespaceChildrenCmd, trivial pattern starting with ::} { + namespace eval test_ns_1 {} + namespace children [namespace current] [fq test_ns_1] +} [fq test_ns_1] test namespace-22.1 {NamespaceCodeCmd, bad args} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {namespace code} msg] $msg \ [catch {namespace code xxx yyy} msg] $msg } {1 {wrong # args: should be "namespace code arg"} 1 {wrong # args: should be "namespace code arg"}} @@ -900,11 +947,11 @@ test namespace-22.2 {NamespaceCodeCmd, arg is already scoped value} { namespace eval test_ns_1 { proc cmd {} {return "test_ns_1::cmd"} } - namespace code {namespace inscope ::test_ns_1 cmd} -} {namespace inscope ::test_ns_1 cmd} + namespace code {::namespace inscope ::test_ns_1 cmd} +} {::namespace inscope ::test_ns_1 cmd} test namespace-22.3 {NamespaceCodeCmd, arg is already scoped value} { namespace code {namespace inscope ::test_ns_1 cmd} -} {namespace inscope ::test_ns_1 cmd} +} {::namespace inscope :: {namespace inscope ::test_ns_1 cmd}} test namespace-22.4 {NamespaceCodeCmd, in :: namespace} { namespace code unknown } {::namespace inscope :: unknown} @@ -924,9 +971,15 @@ test namespace-22.6 {NamespaceCodeCmd, in other namespace} { namespace code {set v} }] } {42} +test namespace-22.7 {NamespaceCodeCmd, Bug 3202171} { + namespace eval demo { + proc namespace args {puts $args} + ::namespace code {namespace inscope foo} + } +} [list ::namespace inscope [fq demo] {namespace inscope foo}] test namespace-23.1 {NamespaceCurrentCmd, bad args} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {namespace current xxx} msg] $msg \ [catch {namespace current xxx yyy} msg] $msg } {1 {wrong # args: should be "namespace current"} 1 {wrong # args: should be "namespace current"}} @@ -940,7 +993,7 @@ test namespace-23.3 {NamespaceCurrentCmd, in nested ns} { } {::test_ns_1::test_ns_2} test namespace-24.1 {NamespaceDeleteCmd, no args} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace delete } {} test namespace-24.2 {NamespaceDeleteCmd, one arg} { @@ -956,12 +1009,12 @@ test namespace-24.4 {NamespaceDeleteCmd, unknown ns} { } {1 {unknown namespace "::test_ns_foo" in namespace delete command}} test namespace-25.1 {NamespaceEvalCmd, bad args} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {namespace eval} msg] $msg } {1 {wrong # args: should be "namespace eval name arg ?arg...?"}} -test namespace-25.2 {NamespaceEvalCmd, bad args} { - list [catch {namespace test_ns_1} msg] $msg -} {1 {bad option "test_ns_1": must be children, code, current, delete, eval, exists, export, forget, import, inscope, origin, parent, qualifiers, tail, or which}} +test namespace-25.2 {NamespaceEvalCmd, bad args} -body { + namespace test_ns_1 +} -returnCodes error -match glob -result {bad option "test_ns_1": must be *} catch {unset v} test namespace-25.3 {NamespaceEvalCmd, new namespace} { set v 123 @@ -984,7 +1037,7 @@ test namespace-25.5 {NamespaceEvalCmd, multiple args} { namespace eval test_ns_1 "set" "v" } {314159} test namespace-25.6 {NamespaceEvalCmd, error in eval'd script} { - list [catch {namespace eval test_ns_1 {xxxx}} msg] $msg $errorInfo + list [catch {namespace eval test_ns_1 {xxxx}} msg] $msg $::errorInfo } {1 {invalid command name "xxxx"} {invalid command name "xxxx" while executing "xxxx" @@ -992,13 +1045,13 @@ test namespace-25.6 {NamespaceEvalCmd, error in eval'd script} { invoked from within "namespace eval test_ns_1 {xxxx}"}} test namespace-25.7 {NamespaceEvalCmd, error in eval'd script} { - list [catch {namespace eval test_ns_1 {error foo bar baz}} msg] $msg $errorInfo + list [catch {namespace eval test_ns_1 {error foo bar baz}} msg] $msg $::errorInfo } {1 foo {bar (in namespace eval "::test_ns_1" script line 1) invoked from within "namespace eval test_ns_1 {error foo bar baz}"}} -test namespace-25.8 {NamespaceEvalCmd, error in eval'd script} knownBug { - list [catch {namespace eval test_ns_1 error foo bar baz} msg] $msg $errorInfo +test namespace-25.8 {NamespaceEvalCmd, error in eval'd script} { + list [catch {namespace eval test_ns_1 error foo bar baz} msg] $msg $::errorInfo } {1 foo {bar (in namespace eval "::test_ns_1" script line 1) invoked from within @@ -1009,7 +1062,7 @@ test namespace-25.9 {NamespaceEvalCmd, 545325} { } {namespace eval test_ns_1 info level 0} test namespace-26.1 {NamespaceExportCmd, no args and new ns} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace export } {} test namespace-26.2 {NamespaceExportCmd, just -clear arg} { @@ -1058,7 +1111,7 @@ test namespace-26.7 {NamespaceExportCmd, -clear resets export list} { } [list [lsort {::test_ns_2::cmd4 ::test_ns_2::cmd1 ::test_ns_2::cmd3}] {cmd4: hello}] test namespace-27.1 {NamespaceForgetCmd, no args} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace forget } {} test namespace-27.2 {NamespaceForgetCmd, args must be valid namespaces} { @@ -1078,9 +1131,9 @@ test namespace-27.3 {NamespaceForgetCmd, arg is forgotten} { } {::test_ns_2::cmd2} test namespace-28.1 {NamespaceImportCmd, no args} { - catch {eval namespace delete [namespace children :: test_ns_*]} - namespace import -} {} + catch {namespace delete {*}[namespace children :: test_ns_*]} + lsort [namespace import] +} {bytestring cleanupTests configure customMatch debug errorChannel errorFile getMatchingFiles interpreter limitConstraints loadFile loadScript loadTestedCommands mainThread makeDirectory makeFile match matchDirectories matchFiles normalizeMsg normalizePath outputChannel outputFile preserveCore removeDirectory removeFile restoreState runAllTests saveState singleProcess skip skipDirectories skipFiles temporaryDirectory test testConstraint testsDirectory threadReap verbose viewFile workingDirectory} test namespace-28.2 {NamespaceImportCmd, no args and just "-force"} { namespace import -force } {} @@ -1098,15 +1151,15 @@ test namespace-28.3 {NamespaceImportCmd, arg is imported} { } {::test_ns_2::cmd2} test namespace-29.1 {NamespaceInscopeCmd, bad args} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {namespace inscope} msg] $msg } {1 {wrong # args: should be "namespace inscope name arg ?arg...?"}} test namespace-29.2 {NamespaceInscopeCmd, bad args} { list [catch {namespace inscope ::} msg] $msg } {1 {wrong # args: should be "namespace inscope name arg ?arg...?"}} -test namespace-29.3 {NamespaceInscopeCmd, specified ns must exist} { - list [catch {namespace inscope test_ns_1 {set v}} msg] $msg -} {1 {unknown namespace "test_ns_1" in inscope namespace command}} +test namespace-29.3 {NamespaceInscopeCmd, specified ns must exist} -body { + namespace inscope test_ns_1 {set v} +} -returnCodes error -result {namespace "test_ns_1" not found in "::"} test namespace-29.4 {NamespaceInscopeCmd, simple case} { namespace eval test_ns_1 { variable v 747 @@ -1121,13 +1174,13 @@ test namespace-29.5 {NamespaceInscopeCmd, has lappend semantics} { list [namespace inscope test_ns_1 cmd x y z] \ [namespace eval test_ns_1 [concat cmd [list x y z]]] } {{::test_ns_1::cmd: v=747, args=x y z} {::test_ns_1::cmd: v=747, args=x y z}} -test namespace-29.6 {NamespaceInscopeCmd, 1400572} knownBug { +test namespace-29.6 {NamespaceInscopeCmd, 1400572} { namespace inscope test_ns_1 {info level 0} } {namespace inscope test_ns_1 {info level 0}} test namespace-30.1 {NamespaceOriginCmd, bad args} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {namespace origin} msg] $msg } {1 {wrong # args: should be "namespace origin name"}} test namespace-30.2 {NamespaceOriginCmd, bad args} { @@ -1160,7 +1213,7 @@ test namespace-30.5 {NamespaceOriginCmd, imported command} { } {::foreach ::test_ns_2::p ::test_ns_1::cmd1 ::test_ns_1::cmd2} test namespace-31.1 {NamespaceParentCmd, bad args} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {namespace parent a b} msg] $msg } {1 {wrong # args: should be "namespace parent ?name?"}} test namespace-31.2 {NamespaceParentCmd, no args} { @@ -1176,12 +1229,12 @@ test namespace-31.3 {NamespaceParentCmd, namespace specified} { [namespace parent test_ns_1::test_ns_2] \ [namespace eval test_ns_1::test_ns_2::test_ns_3 {namespace parent ::test_ns_1::test_ns_2}] } {{} ::test_ns_1 ::test_ns_1} -test namespace-31.4 {NamespaceParentCmd, bad namespace specified} { - list [catch {namespace parent test_ns_1::test_ns_foo} msg] $msg -} {1 {unknown namespace "test_ns_1::test_ns_foo" in namespace parent command}} +test namespace-31.4 {NamespaceParentCmd, bad namespace specified} -body { + namespace parent test_ns_1::test_ns_foo +} -returnCodes error -result {namespace "test_ns_1::test_ns_foo" not found in "::"} test namespace-32.1 {NamespaceQualifiersCmd, bad args} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {namespace qualifiers} msg] $msg } {1 {wrong # args: should be "namespace qualifiers string"}} test namespace-32.2 {NamespaceQualifiersCmd, bad args} { @@ -1207,7 +1260,7 @@ test namespace-32.8 {NamespaceQualifiersCmd, odd number of :s} { } {foo} test namespace-33.1 {NamespaceTailCmd, bad args} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {namespace tail} msg] $msg } {1 {wrong # args: should be "namespace tail string"}} test namespace-33.2 {NamespaceTailCmd, bad args} { @@ -1233,15 +1286,15 @@ test namespace-33.8 {NamespaceTailCmd, odd number of :s} { } {} test namespace-34.1 {NamespaceWhichCmd, bad args} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {namespace which} msg] $msg } {1 {wrong # args: should be "namespace which ?-command? ?-variable? name"}} test namespace-34.2 {NamespaceWhichCmd, bad args} { - list [catch {namespace which -fred} msg] $msg -} {1 {wrong # args: should be "namespace which ?-command? ?-variable? name"}} -test namespace-34.3 {NamespaceWhichCmd, bad args} { - list [catch {namespace which -command} msg] $msg + list [catch {namespace which -fred x} msg] $msg } {1 {wrong # args: should be "namespace which ?-command? ?-variable? name"}} +test namespace-34.3 {NamespaceWhichCmd, single arg is always command name} { + namespace which -command +} {} test namespace-34.4 {NamespaceWhichCmd, bad args} { list [catch {namespace which a b} msg] $msg } {1 {wrong # args: should be "namespace which ?-command? ?-variable? name"}} @@ -1286,7 +1339,7 @@ test namespace-34.7 {NamespaceWhichCmd, variable lookup} { } {::env ::test_ns_3::v3 ::test_ns_2::v2 0 {}} test namespace-35.1 {FreeNsNameInternalRep, resulting ref count > 0} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1 { proc p {} { namespace delete [namespace current] @@ -1309,7 +1362,7 @@ test namespace-35.2 {FreeNsNameInternalRep, resulting ref count == 0} { catch {unset x} catch {unset y} test namespace-36.1 {DupNsNameInternalRep} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1 {} set x "::test_ns_1" list [namespace parent $x] [set y $x] [namespace parent $y] @@ -1318,27 +1371,27 @@ catch {unset x} catch {unset y} test namespace-37.1 {SetNsNameFromAny, ns name found} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1::test_ns_2 {} namespace eval test_ns_1 { namespace children ::test_ns_1 } } {::test_ns_1::test_ns_2} -test namespace-37.2 {SetNsNameFromAny, ns name not found} { +test namespace-37.2 {SetNsNameFromAny, ns name not found} -body { namespace eval test_ns_1 { - list [catch {namespace children ::test_ns_1::test_ns_foo} msg] $msg + namespace children ::test_ns_1::test_ns_foo } -} {1 {unknown namespace "::test_ns_1::test_ns_foo" in namespace children command}} +} -returnCodes error -result {namespace "::test_ns_1::test_ns_foo" not found} test namespace-38.1 {UpdateStringOfNsName} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} ;# Tcl_NamespaceObjCmd calls UpdateStringOfNsName to get subcmd name list [namespace eval {} {namespace current}] \ [namespace eval {} {namespace current}] } {:: ::} test namespace-39.1 {NamespaceExistsCmd} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval ::test_ns_z::test_me { variable foo } list [namespace exists ::] \ [namespace exists ::bogus_namespace] \ @@ -1399,7 +1452,7 @@ test namespace-41.2 {Shadowing byte-compiled commands, Bug: 231259} { set res } {New proc is called} -test namespace-41.3 {Shadowing byte-compiled commands, Bug: 231259} {knownBug} { +test namespace-41.3 {Shadowing byte-compiled commands, Bugs: 231259, 729692} { set res {} namespace eval ns { variable b 0 @@ -1416,23 +1469,1200 @@ test namespace-41.3 {Shadowing byte-compiled commands, Bug: 231259} {knownBug} { set res } {{New proc is called} 0} -# cleanup -catch {rename cmd1 {}} -catch {unset l} -catch {unset msg} -catch {unset trigger} -eval namespace delete [namespace children :: test_ns_*] -::tcltest::cleanupTests -return +# Ensembles (TIP#112) +test namespace-42.1 {ensembles: basic} { + namespace eval ns { + namespace export x + proc x {} {format 1} + namespace ensemble create + } + list [info command ns] [ns x] [namespace delete ns] [info command ns] +} {ns 1 {} {}} +test namespace-42.2 {ensembles: basic} { + namespace eval ns { + namespace export x + proc x {} {format 1} + namespace ensemble create + } + rename ns foo + list [info command foo] [foo x] [namespace delete ns] [info command foo] +} {foo 1 {} {}} +test namespace-42.3 {ensembles: basic} { + namespace eval ns { + namespace export x* + proc x1 {} {format 1} + proc x2 {} {format 2} + namespace ensemble create + } + set result [list [ns x1] [ns x2]] + lappend result [catch {ns x} msg] $msg + rename ns {} + lappend result [info command ns::x1] + namespace delete ns + lappend result [info command ns::x1] +} {1 2 1 {unknown or ambiguous subcommand "x": must be x1, or x2} ::ns::x1 {}} +test namespace-42.4 {ensembles: basic} { + namespace eval ns { + namespace export y* + proc x1 {} {format 1} + proc x2 {} {format 2} + namespace ensemble create + } + set result [list [catch {ns x} msg] $msg] + namespace delete ns + set result +} {1 {unknown subcommand "x": namespace ::ns does not export any commands}} +test namespace-42.5 {ensembles: basic} { + namespace eval ns { + namespace export x* + proc x1 {} {format 1} + proc x2 {} {format 2} + proc x3 {} {format 3} + namespace ensemble create + } + set result [list [catch {ns x} msg] $msg] + namespace delete ns + set result +} {1 {unknown or ambiguous subcommand "x": must be x1, x2, or x3}} +test namespace-42.6 {ensembles: nested} { + namespace eval ns { + namespace export x* + namespace eval x0 { + proc z {} {format 0} + namespace export z + namespace ensemble create + } + proc x1 {} {format 1} + proc x2 {} {format 2} + proc x3 {} {format 3} + namespace ensemble create + } + set result [list [ns x0 z] [ns x1] [ns x2] [ns x3]] + namespace delete ns + set result +} {0 1 2 3} +test namespace-42.7 {ensembles: nested} { + namespace eval ns { + namespace export x* + namespace eval x0 { + proc z {} {list [info level] [info level 1]} + namespace export z + namespace ensemble create + } + proc x1 {} {format 1} + proc x2 {} {format 2} + proc x3 {} {format 3} + namespace ensemble create + } + set result [list [ns x0 z] [ns x1] [ns x2] [ns x3]] + namespace delete ns + set result +} {{1 ::ns::x0::z} 1 2 3} +test namespace-42.8 {ensembles: [Bug 1670091]} -setup { + proc demo args {} + variable target [list [namespace which demo] x] + proc trial args {variable target; string length $target} + trace add execution demo enter [namespace code trial] + namespace ensemble create -command foo -map [list bar $target] +} -body { + foo bar +} -cleanup { + unset target + rename demo {} + rename trial {} + rename foo {} +} -result {} +test namespace-43.1 {ensembles: dict-driven} { + namespace eval ns { + namespace export x* + proc x1 {} {format 1} + proc x2 {} {format 2} + namespace ensemble create -map {a x1 b x2} + } + set result [list [catch {ns c} msg] $msg [namespace ensemble exists ns]] + rename ns {} + lappend result [namespace ensemble exists ns] +} {1 {unknown or ambiguous subcommand "c": must be a, or b} 1 0} +test namespace-43.2 {ensembles: dict-driven} { + namespace eval ns { + namespace export x* + proc x1 {args} {list 1 $args} + proc x2 {args} {list 2 [llength $args]} + namespace ensemble create -map { + a ::ns::x1 b ::ns::x2 c {::ns::x1 .} d {::ns::x2 .} + } + } + set result [list [ns a] [ns b] [ns c] [ns c foo] [ns d] [ns d foo]] + namespace delete ns + set result +} {{1 {}} {2 0} {1 .} {1 {. foo}} {2 1} {2 2}} +set SETUP { + namespace eval ns { + namespace export a b + proc a args {format 1,[llength $args]} + proc b args {format 2,[llength $args]} + proc c args {format 3,[llength $args]} + proc d args {format 4,[llength $args]} + namespace ensemble create -subcommands {b c} + } +} +test namespace-43.3 {ensembles: list-driven} -setup $SETUP -body { + namespace delete ns +} -result {} +test namespace-43.4 {ensembles: list-driven} -setup $SETUP -body { + ns a foo bar boo spong wibble +} -cleanup {namespace delete ns} -returnCodes error -result {unknown or ambiguous subcommand "a": must be b, or c} +test namespace-43.5 {ensembles: list-driven} -setup $SETUP -body { + ns b foo bar boo spong wibble +} -cleanup {namespace delete ns} -result 2,5 +test namespace-43.6 {ensembles: list-driven} -setup $SETUP -body { + ns c foo bar boo spong wibble +} -cleanup {namespace delete ns} -result 3,5 +test namespace-43.7 {ensembles: list-driven} -setup $SETUP -body { + ns d foo bar boo spong wibble +} -cleanup {namespace delete ns} -returnCodes error -result {unknown or ambiguous subcommand "d": must be b, or c} +set SETUP { + namespace eval ns { + namespace export a b + proc a args {format 1,[llength $args]} + proc b args {format 2,[llength $args]} + proc c args {format 3,[llength $args]} + proc d args {format 4,[llength $args]} + namespace ensemble create -subcommands {b c} -map {c ::ns::d} + } +} +test namespace-43.8 {ensembles: list-and-map-driven} -setup $SETUP -body { + namespace delete ns +} -result {} +test namespace-43.9 {ensembles: list-and-map-driven} -setup $SETUP -body { + ns a foo bar boo spong wibble +} -cleanup {namespace delete ns} -returnCodes error -result {unknown or ambiguous subcommand "a": must be b, or c} +test namespace-43.10 {ensembles: list-and-map-driven} -setup $SETUP -body { + ns b foo bar boo spong wibble +} -cleanup {namespace delete ns} -result 2,5 +test namespace-43.11 {ensembles: list-and-map-driven} -setup $SETUP -body { + ns c foo bar boo spong wibble +} -cleanup {namespace delete ns} -result 4,5 +test namespace-43.12 {ensembles: list-and-map-driven} -setup $SETUP -body { + ns d foo bar boo spong wibble +} -cleanup {namespace delete ns} -returnCodes error -result {unknown or ambiguous subcommand "d": must be b, or c} +set SETUP { + namespace eval ns { + namespace export * + proc foo args {format bar} + proc spong args {format wibble} + namespace ensemble create -prefixes off + } +} +test namespace-43.13 {ensembles: turn off prefixes} -setup $SETUP -body { + namespace delete ns +} -result {} +test namespace-43.14 {ensembles: turn off prefixes} -setup $SETUP -body { + ns fo +} -cleanup {namespace delete ns} -returnCodes error -result {unknown subcommand "fo": must be foo, or spong} +test namespace-43.15 {ensembles: turn off prefixes} -setup $SETUP -body { + ns foo +} -cleanup {namespace delete ns} -result bar +test namespace-43.16 {ensembles: turn off prefixes} -setup $SETUP -body { + ns s +} -cleanup {namespace delete ns} -returnCodes error -result {unknown subcommand "s": must be foo, or spong} +test namespace-43.17 {ensembles: turn off prefixes} -setup $SETUP -body { + ns spong +} -cleanup {namespace delete ns} -result wibble + +test namespace-44.1 {ensemble: errors} { + list [catch {namespace ensemble} msg] $msg +} {1 {wrong # args: should be "namespace ensemble subcommand ?arg ...?"}} +test namespace-44.2 {ensemble: errors} { + list [catch {namespace ensemble ?} msg] $msg +} {1 {bad subcommand "?": must be configure, create, or exists}} +test namespace-44.3 {ensemble: errors} { + namespace eval ns { + list [catch {namespace ensemble create -map x} msg] $msg + } +} {1 {missing value to go with key}} +test namespace-44.4 {ensemble: errors} { + namespace eval ns { + list [catch {namespace ensemble create -map {x {}}} msg] $msg + } +} {1 {ensemble subcommand implementations must be non-empty lists}} +test namespace-44.5 {ensemble: errors} -setup { + namespace ensemble create -command foobar -subcommands {foobarcget foobarconfigure} +} -body { + foobar foobarcon +} -cleanup { + rename foobar {} +} -returnCodes error -result {invalid command name "::foobarconfigure"} +test namespace-45.1 {ensemble: introspection} { + namespace eval ns { + namespace export x + proc x {} {} + namespace ensemble create + set ::result [namespace ensemble configure ::ns] + } + namespace delete ns + set result +} {-map {} -namespace ::ns -prefixes 1 -subcommands {} -unknown {}} +test namespace-45.2 {ensemble: introspection} { + namespace eval ns { + namespace export x + proc x {} {} + namespace ensemble create -map {A x} + set ::result [namespace ensemble configure ::ns -map] + } + namespace delete ns + set result +} {A ::ns::x} +test namespace-46.1 {ensemble: modification} { + namespace eval ns { + namespace export x + proc x {} {format 123} + # Ensemble maps A->x + namespace ensemble create -command ns -map {A ::ns::x} + set ::result [list [namespace ensemble configure ns -map] [ns A]] + # Ensemble maps B->x + namespace ensemble configure ns -map {B ::ns::x} + lappend ::result [namespace ensemble configure ns -map] [ns B] + # Ensemble maps x->x + namespace ensemble configure ns -map {} + lappend ::result [namespace ensemble configure ns -map] [ns x] + } + namespace delete ns + set result +} {{A ::ns::x} 123 {B ::ns::x} 123 {} 123} +test namespace-46.2 {ensemble: ensembles really use current export list} { + namespace eval ns { + namespace export x1 + proc x1 {} {format 1} + proc x2 {} {format 1} + namespace ensemble create + } + catch {ns ?} msg; set result [list $msg] + namespace eval ns {namespace export x*} + catch {ns ?} msg; lappend result $msg + rename ns::x1 {} + catch {ns ?} msg; lappend result $msg + namespace delete ns + set result +} {{unknown or ambiguous subcommand "?": must be x1} {unknown or ambiguous subcommand "?": must be x1, or x2} {unknown or ambiguous subcommand "?": must be x2}} +test namespace-46.3 {ensemble: implementation errors} { + namespace eval ns { + variable count 0 + namespace ensemble create -map { + a {::lappend ::result} + b {::incr ::ns::count} + } + } + set result {} + lappend result [catch { ns } msg] $msg + ns a [ns b 10] + catch {rename p {}} + rename ns p + p a [p b 3000] + lappend result $ns::count + namespace delete ns + lappend result [info command p] +} {1 {wrong # args: should be "ns subcommand ?argument ...?"} 10 3010 3010 {}} +test namespace-46.4 {ensemble: implementation errors} { + namespace eval ns { + namespace ensemble create + } + set result [info command ns] + lappend result [catch {ns ?} msg] $msg + namespace delete ns + set result +} {ns 1 {unknown subcommand "?": namespace ::ns does not export any commands}} +test namespace-46.5 {ensemble: implementation errors} { + namespace eval ns { + namespace ensemble create -map {makeError ::error} + } + list [catch {ns makeError "an error happened"} msg] $msg $::errorInfo [namespace delete ns] +} {1 {an error happened} {an error happened + while executing +"ns makeError "an error happened""} {}} +test namespace-46.6 {ensemble: implementation renames/deletes itself} { + namespace eval ns { + namespace ensemble create -map {to ::rename} + } + ns to ns foo + foo to foo bar + bar to bar spong + spong to spong {} + namespace delete ns +} {} +test namespace-46.7 {ensemble: implementation deletes its namespace} { + namespace eval ns { + namespace ensemble create -map {kill {::namespace delete}} + } + ns kill ns +} {} +test namespace-46.8 {ensemble: implementation deletes its namespace} { + namespace eval ns { + namespace export * + proc foo {} { + variable x 1 + bar + # Tricky; what is the correct return value anyway? + info exist x + } + proc bar {} { + namespace delete [namespace current] + } + namespace ensemble create + } + list [ns foo] [info exist ns::x] +} {1 0} +test namespace-46.9 {ensemble: configuring really configures things} { + namespace eval ns { + namespace ensemble create -map {a a} -prefixes 0 + } + set result [list [catch {ns x} msg] $msg] + namespace ensemble configure ns -map {b b} + lappend result [catch {ns x} msg] $msg + namespace delete ns + set result +} {1 {unknown subcommand "x": must be a} 1 {unknown subcommand "x": must be b}} +test namespace-47.1 {ensemble: unknown handler} { + set log {} + namespace eval ns { + namespace export {[a-z]*} + proc Magic {ensemble subcmd args} { + global log + if {[string match {[a-z]*} $subcmd]} { + lappend log "making $subcmd" + proc $subcmd args { + global log + lappend log "running [info level 0]" + llength $args + } + } else { + lappend log "unknown $subcmd - args = $args" + return -code error \ + "unknown or protected subcommand \"$subcmd\"" + } + } + namespace ensemble create -unknown ::ns::Magic + } + set result {} + lappend result [catch {ns a b c} msg] $msg + lappend result [catch {ns a b c} msg] $msg + lappend result [catch {ns b c d} msg] $msg + lappend result [catch {ns c d e} msg] $msg + lappend result [catch {ns Magic foo bar spong wibble} msg] $msg + list $result [lsort [info commands ::ns::*]] $log [namespace delete ns] +} {{0 2 0 2 0 2 0 2 1 {unknown or protected subcommand "Magic"}} {::ns::Magic ::ns::a ::ns::b ::ns::c} {{making a} {running ::ns::a b c} {running ::ns::a b c} {making b} {running ::ns::b c d} {making c} {running ::ns::c d e} {unknown Magic - args = foo bar spong wibble}} {}} +test namespace-47.2 {ensemble: unknown handler} { + namespace eval ns { + namespace export {[a-z]*} + proc Magic {ensemble subcmd args} { + error foobar + } + namespace ensemble create -unknown ::ns::Magic + } + list [catch {ns spong} msg] $msg $::errorInfo [namespace delete ns] +} {1 foobar {foobar + while executing +"error foobar" + (procedure "::ns::Magic" line 2) + invoked from within +"::ns::Magic ::ns spong" + (ensemble unknown subcommand handler) + invoked from within +"ns spong"} {}} +test namespace-47.3 {ensemble: unknown handler} { + namespace eval ns { + variable count 0 + namespace export {[a-z]*} + proc a {} {} + proc c {} {} + proc Magic {ensemble subcmd args} { + variable count + incr count + proc b {} {} + } + namespace ensemble create -unknown ::ns::Magic + } + list [catch {ns spong} msg] $msg $ns::count [namespace delete ns] +} {1 {unknown or ambiguous subcommand "spong": must be a, b, or c} 1 {}} +test namespace-47.4 {ensemble: unknown handler} { + namespace eval ns { + namespace export {[a-z]*} + proc Magic {ensemble subcmd args} { + return -code break + } + namespace ensemble create -unknown ::ns::Magic + } + list [catch {ns spong} msg] $msg $::errorInfo [namespace delete ns] +} {1 {unknown subcommand handler returned bad code: break} {unknown subcommand handler returned bad code: break + result of ensemble unknown subcommand handler: ::ns::Magic ::ns spong + invoked from within +"ns spong"} {}} +test namespace-47.5 {ensemble: unknown handler} { + namespace ensemble create -command foo -unknown bar + proc bar {args} { + global result target + lappend result "LOG $args" + return $target + } + set result {} + set target {} + lappend result [catch {foo bar} msg] $msg + set target {lappend result boo hoo} + lappend result [catch {foo bar} msg] $msg [namespace ensemble config foo] + rename foo {} + set result +} {{LOG ::foo bar} 1 {unknown subcommand "bar": namespace :: does not export any commands} {LOG ::foo bar} boo hoo 0 {{LOG ::foo bar} 1 {unknown subcommand "bar": namespace :: does not export any commands} {LOG ::foo bar} boo hoo} {-map {} -namespace :: -prefixes 1 -subcommands {} -unknown bar}} +test namespace-47.6 {ensemble: unknown handler} { + namespace ensemble create -command foo -unknown bar + proc bar {args} { + return "\{" + } + set result [list [catch {foo bar} msg] $msg $::errorInfo] + rename foo {} + set result +} {1 {unmatched open brace in list} {unmatched open brace in list + while parsing result of ensemble unknown subcommand handler + invoked from within +"foo bar"}} +test namespace-47.7 {ensemble: unknown handler, commands with spaces} { + namespace ensemble create -command foo -unknown bar + proc bar {args} { + list ::set ::x [join $args |] + } + set result [foo {one two three}] + rename foo {} + set result +} {::foo|one two three} +test namespace-47.8 {ensemble: unknown handler, commands with spaces} { + namespace ensemble create -command foo -unknown {bar boo} + proc bar {args} { + list ::set ::x [join $args |] + } + set result [foo {one two three}] + rename foo {} + set result +} {boo|::foo|one two three} + +test namespace-48.1 {ensembles and namespace import: unknown handler} { + namespace eval foo { + namespace export bar + namespace ensemble create -command bar -unknown ::foo::u -subcomm x + proc u {ens args} { + global result + lappend result $ens $args + namespace ensemble config $ens -subcommand {x y} + } + proc u2 {ens args} { + global result + lappend result $ens $args + namespace ensemble config ::bar -subcommand {x y z} + } + proc x args { + global result + lappend result XXX $args + } + proc y args { + global result + lappend result YYY $args + } + proc z args { + global result + lappend result ZZZ $args + } + } + namespace import -force foo::bar + set result [list [namespace ensemble config bar]] + bar x 123 + bar y 456 + namespace ensemble config bar -unknown ::foo::u2 + bar z 789 + namespace delete foo + set result +} {{-map {} -namespace ::foo -prefixes 1 -subcommands x -unknown ::foo::u} XXX 123 ::foo::bar {y 456} YYY 456 ::foo::bar {z 789} ZZZ 789} +test namespace-48.2 {ensembles and namespace import: exists} { + namespace eval foo { + namespace ensemble create -command ::foo::bar + namespace export bar + } + set result [namespace ensemble exist foo::bar] + lappend result [namespace ensemble exist bar] + namespace import foo::bar + lappend result [namespace ensemble exist bar] + rename foo::bar foo::bar2 + lappend result [namespace ensemble exist bar] \ + [namespace ensemble exist spong] + rename bar spong + lappend result [namespace ensemble exist bar] \ + [namespace ensemble exist spong] + rename foo::bar2 {} + lappend result [namespace ensemble exist spong] + namespace delete foo + set result +} {1 0 1 1 0 0 1 0} +test namespace-48.3 {ensembles and namespace import: config} { + catch {rename spong {}} + namespace eval foo { + namespace ensemble create -command ::foo::bar + namespace export bar boo + proc boo {} {} + } + namespace import foo::bar foo::boo + set result [namespace ensemble config bar -namespace] + lappend result [catch {namespace ensemble config boo} msg] $msg + lappend result [catch {namespace ensemble config spong} msg] $msg + namespace delete foo + set result +} {::foo 1 {"boo" is not an ensemble command} 1 {unknown command "spong"}} + +test namespace-49.1 {ensemble subcommand caching} -body { + namespace ens cre -command a -map {b {lappend result 1}} + namespace ens cre -command c -map {b {lappend result 2}} + proc x {} {a b; c b; a b; c b} + x +} -result {1 2 1 2} -cleanup { + rename a {} + rename c {} + rename x {} +} +test namespace-49.2 {strange delete crash} -body { + namespace eval foo {namespace ensemble create -command ::bar} + trace add command ::bar delete DeleteTrace + proc DeleteTrace {old new op} { + trace remove command ::bar delete DeleteTrace + rename $old "" + # This next line caused a bus error in [Bug 1220058] + namespace delete foo + } + rename ::bar "" +} -result "" -cleanup { + rename DeleteTrace "" +} +test namespace-50.1 {ensembles affect proc arguments error messages} -body { + namespace ens cre -command a -map {b {bb foo}} + proc bb {c d {e f} args} {list $c $args} + a b +} -returnCodes error -result "wrong # args: should be \"a b d ?e? ...\"" -cleanup { + rename a {} + rename bb {} +} +test namespace-50.2 {ensembles affect WrongNumArgs error messages} -body { + namespace ens cre -command a -map {b {string is}} + a b boolean +} -returnCodes error -result "wrong # args: should be \"a b class ?-strict? ?-failindex var? str\"" -cleanup { + rename a {} +} +test namespace-50.3 {chained ensembles affect error messages} -body { + namespace ens cre -command a -map {b c} + namespace ens cre -command c -map {d e} + proc e f {} + a b d +} -returnCodes error -result "wrong # args: should be \"a b d f\"" -cleanup { + rename a {} +} +test namespace-50.4 {chained ensembles affect error messages} -body { + namespace ens cre -command a -map {b {c d}} + namespace ens cre -command c -map {d {e f}} + proc e f {} + a b d +} -returnCodes error -result "wrong # args: should be \"a b\"" -cleanup { + rename a {} +} +test namespace-51.1 {name resolution path control} -body { + namespace eval ::test_ns_1 { + namespace eval test_ns_2 { + proc pathtestA {} { + ::return [pathtestB],[pathtestC],[pathtestD],[namespace path] + } + proc pathtestC {} { + ::return 2 + } + } + proc pathtestB {} { + return 1 + } + proc pathtestC {} { + return 1 + } + namespace path ::test_ns_1 + } + proc ::pathtestB {} { + return global + } + proc ::pathtestD {} { + return global + } + test_ns_1::test_ns_2::pathtestA +} -result "global,2,global," -cleanup { + namespace delete ::test_ns_1 + catch {rename ::pathtestB {}} + catch {rename ::pathtestD {}} +} +test namespace-51.2 {name resolution path control} -body { + namespace eval ::test_ns_1 { + namespace eval test_ns_2 { + namespace path ::test_ns_1 + proc pathtestA {} { + ::return [pathtestB],[pathtestC],[pathtestD],[namespace path] + } + proc pathtestC {} { + ::return 2 + } + } + proc pathtestB {} { + return 1 + } + proc pathtestC {} { + return 1 + } + } + proc ::pathtestB {} { + return global + } + proc ::pathtestD {} { + return global + } + ::test_ns_1::test_ns_2::pathtestA +} -result "1,2,global,::test_ns_1" -cleanup { + namespace delete ::test_ns_1 + catch {rename ::pathtestB {}} + catch {rename ::pathtestD {}} +} +test namespace-51.3 {name resolution path control} -body { + namespace eval ::test_ns_1 { + namespace eval test_ns_2 { + proc pathtestA {} { + ::return [pathtestB],[pathtestC],[pathtestD],[namespace path] + } + proc pathtestC {} { + ::return 2 + } + } + proc pathtestB {} { + return 1 + } + proc pathtestC {} { + return 1 + } + } + proc ::pathtestB {} { + return global + } + proc ::pathtestD {} { + return global + } + set result [::test_ns_1::test_ns_2::pathtestA] + namespace eval ::test_ns_1::test_ns_2 { + namespace path ::test_ns_1 + } + lappend result [::test_ns_1::test_ns_2::pathtestA] + rename ::test_ns_1::pathtestB {} + lappend result [::test_ns_1::test_ns_2::pathtestA] +} -result "global,2,global, 1,2,global,::test_ns_1 global,2,global,::test_ns_1" -cleanup { + namespace delete ::test_ns_1 + catch {rename ::pathtestB {}} + catch {rename ::pathtestD {}} +} +test namespace-51.4 {name resolution path control} -body { + namespace eval ::test_ns_1 { + namespace eval test_ns_2 { + proc pathtestA {} { + ::return [pathtestB],[pathtestC],[pathtestD],[namespace path] + } + proc pathtestC {} { + ::return 2 + } + } + proc pathtestB {} { + return 1 + } + proc pathtestC {} { + return 1 + } + } + proc ::pathtestB {} { + return global + } + proc ::pathtestD {} { + return global + } + set result [::test_ns_1::test_ns_2::pathtestA] + namespace eval ::test_ns_1::test_ns_2 { + namespace path ::test_ns_1 + } + lappend result [::test_ns_1::test_ns_2::pathtestA] + namespace eval ::test_ns_1::test_ns_2 { + namespace path {} + } + lappend result [::test_ns_1::test_ns_2::pathtestA] +} -result "global,2,global, 1,2,global,::test_ns_1 global,2,global," -cleanup { + namespace delete ::test_ns_1 + catch {rename ::pathtestB {}} + catch {rename ::pathtestD {}} +} +test namespace-51.5 {name resolution path control} -body { + namespace eval ::test_ns_1 { + namespace eval test_ns_2 { + proc pathtestA {} { + ::return [pathtestB],[pathtestC],[pathtestD],[namespace path] + } + proc pathtestC {} { + ::return 2 + } + namespace path ::test_ns_1 + } + proc pathtestB {} { + return 1 + } + proc pathtestC {} { + return 1 + } + proc pathtestD {} { + return 1 + } + } + proc ::pathtestB {} { + return global + } + proc ::pathtestD {} { + return global + } + set result [::test_ns_1::test_ns_2::pathtestA] + namespace eval ::test_ns_1::test_ns_2 { + namespace path {:: ::test_ns_1} + } + lappend result [::test_ns_1::test_ns_2::pathtestA] + rename ::test_ns_1::test_ns_2::pathtestC {} + lappend result [::test_ns_1::test_ns_2::pathtestA] +} -result "1,2,1,::test_ns_1 {global,2,global,:: ::test_ns_1} {global,1,global,:: ::test_ns_1}" -cleanup { + namespace delete ::test_ns_1 + catch {rename ::pathtestB {}} + catch {rename ::pathtestD {}} +} +test namespace-51.6 {name resolution path control} -body { + namespace eval ::test_ns_1 { + namespace eval test_ns_2 { + proc pathtestA {} { + ::return [pathtestB],[pathtestC],[pathtestD],[namespace path] + } + proc pathtestC {} { + ::return 2 + } + namespace path ::test_ns_1 + } + proc pathtestB {} { + return 1 + } + proc pathtestC {} { + return 1 + } + proc pathtestD {} { + return 1 + } + } + proc ::pathtestB {} { + return global + } + proc ::pathtestD {} { + return global + } + set result [::test_ns_1::test_ns_2::pathtestA] + namespace eval ::test_ns_1::test_ns_2 { + namespace path {:: ::test_ns_1} + } + lappend result [::test_ns_1::test_ns_2::pathtestA] + rename ::test_ns_1::test_ns_2::pathtestC {} + lappend result [::test_ns_1::test_ns_2::pathtestA] + proc ::pathtestC {} { + return global + } + lappend result [::test_ns_1::test_ns_2::pathtestA] +} -result "1,2,1,::test_ns_1 {global,2,global,:: ::test_ns_1} {global,1,global,:: ::test_ns_1} {global,global,global,:: ::test_ns_1}" -cleanup { + namespace delete ::test_ns_1 + catch {rename ::pathtestB {}} + catch {rename ::pathtestD {}} +} +test namespace-51.7 {name resolution path control} -body { + namespace eval ::test_ns_1 { + } + namespace eval ::test_ns_2 { + namespace path ::test_ns_1 + proc getpath {} {namespace path} + } + list [::test_ns_2::getpath] [namespace delete ::test_ns_1] [::test_ns_2::getpath] +} -result {::test_ns_1 {} {}} -cleanup { + catch {namespace delete ::test_ns_1} + namespace delete ::test_ns_2 +} +test namespace-51.8 {name resolution path control} -body { + namespace eval ::test_ns_1 { + } + namespace eval ::test_ns_2 { + } + namespace eval ::test_ns_3 { + } + namespace eval ::test_ns_4 { + namespace path {::test_ns_1 ::test_ns_2 ::test_ns_3} + proc getpath {} {namespace path} + } + list [::test_ns_4::getpath] [namespace delete ::test_ns_2] [::test_ns_4::getpath] +} -result {{::test_ns_1 ::test_ns_2 ::test_ns_3} {} {::test_ns_1 ::test_ns_3}} -cleanup { + catch {namespace delete ::test_ns_1} + catch {namespace delete ::test_ns_2} + catch {namespace delete ::test_ns_3} + catch {namespace delete ::test_ns_4} +} +test namespace-51.9 {name resolution path control} -body { + namespace eval ::test_ns_1 { + } + namespace eval ::test_ns_2 { + } + namespace eval ::test_ns_3 { + } + namespace eval ::test_ns_4 { + namespace path {::test_ns_1 ::test_ns_2 ::test_ns_3} + proc getpath {} {namespace path} + } + list [::test_ns_4::getpath] [namespace delete ::test_ns_2] [namespace eval ::test_ns_2 {}] [::test_ns_4::getpath] +} -result {{::test_ns_1 ::test_ns_2 ::test_ns_3} {} {} {::test_ns_1 ::test_ns_3}} -cleanup { + catch {namespace delete ::test_ns_1} + catch {namespace delete ::test_ns_2} + catch {namespace delete ::test_ns_3} + catch {namespace delete ::test_ns_4} +} +test namespace-51.10 {name resolution path control} -body { + namespace eval ::test_ns_1 { + namespace path does::not::exist + } +} -returnCodes error -result {namespace "does::not::exist" not found in "::test_ns_1"} -cleanup { + catch {namespace delete ::test_ns_1} +} +test namespace-51.11 {name resolution path control} -body { + namespace eval ::test_ns_1 { + proc foo {} {return 1} + } + namespace eval ::test_ns_2 { + proc foo {} {return 2} + } + namespace eval ::test_ns_3 { + namespace path ::test_ns_1 + } + namespace eval ::test_ns_4 { + namespace path {::test_ns_3 ::test_ns_2} + foo + } +} -result 2 -cleanup { + catch {namespace delete ::test_ns_1} + catch {namespace delete ::test_ns_2} + catch {namespace delete ::test_ns_3} + catch {namespace delete ::test_ns_4} +} +test namespace-51.12 {name resolution path control} -body { + namespace eval ::test_ns_1 { + proc foo {} {return 1} + } + namespace eval ::test_ns_2 { + proc foo {} {return 2} + } + namespace eval ::test_ns_3 { + namespace path ::test_ns_1 + } + namespace eval ::test_ns_4 { + namespace path {::test_ns_3 ::test_ns_2} + list [foo] [namespace delete ::test_ns_3] [foo] + } +} -result {2 {} 2} -cleanup { + catch {namespace delete ::test_ns_1} + catch {namespace delete ::test_ns_2} + catch {namespace delete ::test_ns_3} + catch {namespace delete ::test_ns_4} +} +test namespace-51.13 {name resolution path control} -body { + set ::result {} + namespace eval ::test_ns_1 { + proc foo {} {lappend ::result 1} + } + namespace eval ::test_ns_2 { + proc foo {} {lappend ::result 2} + trace add command foo delete {namespace eval ::test_ns_3 foo;#} + } + namespace eval ::test_ns_3 { + proc foo {} { + lappend ::result 3 + namespace delete [namespace current] + ::test_ns_4::bar + } + } + namespace eval ::test_ns_4 { + namespace path {::test_ns_2 ::test_ns_3 ::test_ns_1} + proc bar {} { + list [foo] [namespace delete ::test_ns_2] [foo] + } + bar + } + # Should the result be "2 {} {2 3 2 1}" instead? +} -result {2 {} {2 3 1 1}} -cleanup { + catch {namespace delete ::test_ns_1} + catch {namespace delete ::test_ns_2} + catch {namespace delete ::test_ns_3} + catch {namespace delete ::test_ns_4} +} +test namespace-51.14 {name resolution path control} -body { + foreach cmd [info commands foo*] { + rename $cmd {} + } + proc foo0 {} {} + namespace eval ::test_ns_1 { + proc foo1 {} {} + } + namespace eval ::test_ns_2 { + proc foo2 {} {} + } + namespace eval ::test_ns_3 { + variable result {} + lappend result [info commands foo*] + namespace path {::test_ns_1 ::test_ns_2} + lappend result [info commands foo*] + proc foo2 {} {} + lappend result [info commands foo*] + rename foo2 {} + lappend result [info commands foo*] + namespace delete ::test_ns_1 + lappend result [info commands foo*] + } +} -result {foo0 {foo1 foo2 foo0} {foo2 foo1 foo0} {foo1 foo2 foo0} {foo2 foo0}} -cleanup { + catch {namespace delete ::test_ns_1} + catch {namespace delete ::test_ns_2} + catch {namespace delete ::test_ns_3} +} +test namespace-51.15 {namespace resolution path control} -body { + namespace eval ::test_ns_2 { + proc foo {} {return 2} + } + namespace eval ::test_ns_1 { + namespace eval test_ns_2 { + proc foo {} {return 1_2} + } + namespace eval test_ns_3 { + namespace path ::test_ns_1 + test_ns_2::foo + } + } +} -result 1_2 -cleanup { + namespace delete ::test_ns_1 + namespace delete ::test_ns_2 +} +test namespace-51.16 {Bug 1566526} { + interp create slave + slave eval namespace eval demo namespace path :: + interp delete slave +} {} +test namespace-51.17 {Bug 3185407} -setup { + namespace eval ::test_ns_1 {} +} -body { + namespace eval ::test_ns_1 { + variable result {} + namespace eval ns {proc foo {} {}} + namespace eval ns2 {proc foo {} {}} + namespace path {ns ns2} + variable x foo + lappend result [namespace which $x] + proc foo {} {} + lappend result [namespace which $x] + } +} -cleanup { + namespace delete ::test_ns_1 +} -result {::test_ns_1::ns::foo ::test_ns_1::foo} + +# TIP 181 - namespace unknown tests +test namespace-52.1 {unknown: default handler ::unknown} { + set result [list [namespace eval foobar { namespace unknown }]] + lappend result [namespace eval :: { namespace unknown }] + namespace delete foobar + set result +} {{} ::unknown} +test namespace-52.2 {unknown: default resolution global} { + proc ::foo {} { return "GLOBAL" } + namespace eval ::bar { proc foo {} { return "NAMESPACE" } } + namespace eval ::bar::jim { proc test {} { foo } } + set result [::bar::jim::test] + namespace delete ::bar + rename ::foo {} + set result +} {GLOBAL} +test namespace-52.3 {unknown: default resolution local} { + proc ::foo {} { return "GLOBAL" } + namespace eval ::bar { + proc foo {} { return "NAMESPACE" } + proc test {} { foo } + } + set result [::bar::test] + namespace delete ::bar + rename ::foo {} + set result +} {NAMESPACE} +test namespace-52.4 {unknown: set handler} { + namespace eval foo { + namespace unknown [list dispatch] + proc dispatch {args} { return $args } + proc test {} { + UnknownCmd a b c + } + } + set result [foo::test] + namespace delete foo + set result +} {UnknownCmd a b c} +test namespace-52.5 {unknown: search path before unknown is unaltered} { + proc ::test2 {args} { return "TEST2: $args" } + namespace eval foo { + namespace unknown [list dispatch] + proc dispatch {args} { return "UNKNOWN: $args" } + proc test1 {args} { return "TEST1: $args" } + proc test {} { + set result [list [test1 a b c]] + lappend result [test2 a b c] + lappend result [test3 a b c] + return $result + } + } + set result [foo::test] + namespace delete foo + rename ::test2 {} + set result +} {{TEST1: a b c} {TEST2: a b c} {UNKNOWN: test3 a b c}} +test namespace-52.6 {unknown: deleting handler restores default} { + rename ::unknown ::_unknown_orig + proc ::unknown {args} { return "DEFAULT: $args" } + namespace eval foo { + namespace unknown dummy + namespace unknown {} + } + set result [namespace eval foo { dummy a b c }] + rename ::unknown {} + rename ::_unknown_orig ::unknown + namespace delete foo + set result +} {DEFAULT: dummy a b c} +test namespace-52.7 {unknown: setting global unknown handler} { + proc ::myunknown {args} { return "MYUNKNOWN: $args" } + namespace eval :: { namespace unknown ::myunknown } + set result [namespace eval foo { dummy a b c }] + namespace eval :: { namespace unknown {} } + rename ::myunknown {} + namespace delete foo + set result +} {MYUNKNOWN: dummy a b c} +test namespace-52.8 {unknown: destroying and redefining global namespace} { + set i [interp create] + $i hide proc + $i hide namespace + $i hide return + $i invokehidden namespace delete :: + $i expose return + $i invokehidden proc unknown args { return "FINE" } + $i eval { foo bar bob } +} {FINE} +test namespace-52.9 {unknown: refcounting} -setup { + proc this args { + unset args ;# stop sharing + set copy [namespace unknown] + string length $copy ;# shimmer away list rep + info level 0 + } + set handler [namespace unknown] + namespace unknown {this is a test} + catch {rename noSuchCommand {}} +} -body { + noSuchCommand +} -cleanup { + namespace unknown $handler + rename this {} +} -result {this is a test noSuchCommand} +testConstraint testevalobjv [llength [info commands testevalobjv]] +test namespace-52.10 {unknown: with TCL_EVAL_GLOBAL} -constraints { + testevalobjv +} -setup { + rename ::unknown unknown.save + proc ::unknown args { + set caller [uplevel 1 {namespace current}] + namespace eval $caller { + variable foo + return $foo + } + } + catch {rename ::noSuchCommand {}} +} -body { + namespace eval :: { + variable foo SUCCESS + } + namespace eval test_ns_1 { + variable foo FAIL + testevalobjv 1 noSuchCommand + } +} -cleanup { + unset -nocomplain ::foo + namespace delete test_ns_1 + rename ::unknown {} + rename unknown.save ::unknown +} -result SUCCESS +test namespace-52.11 {unknown: with TCL_EVAL_INVOKE} -setup { + set handler [namespace eval :: {namespace unknown}] + namespace eval :: {namespace unknown unknown} + rename ::unknown unknown.save + namespace eval :: { + proc unknown args { + return SUCCESS + } + } + catch {rename ::noSuchCommand {}} + set ::slave [interp create] +} -body { + $::slave alias bar noSuchCommand + namespace eval test_ns_1 { + namespace unknown unknown + proc unknown args { + return FAIL + } + $::slave eval bar + } +} -cleanup { + interp delete $::slave + unset ::slave + namespace delete test_ns_1 + rename ::unknown {} + rename unknown.save ::unknown + namespace eval :: [list namespace unknown $handler] +} -result SUCCESS +test namespace-52.12 {unknown: error case must not reset handler} -body { + namespace eval foo { + namespace unknown ok + catch {namespace unknown {{}{}{}}} + namespace unknown + } +} -cleanup { + namespace delete foo +} -result ok + +# cleanup +catch {rename cmd1 {}} +catch {unset l} +catch {unset msg} +catch {unset trigger} +namespace delete {*}[namespace children :: test_ns_*] +::tcltest::cleanupTests +return +# Local Variables: +# mode: tcl +# End: diff --git a/tests/notify.test b/tests/notify.test index ba52c50..ba52c50 100755..100644 --- a/tests/notify.test +++ b/tests/notify.test diff --git a/tests/obj.test b/tests/obj.test index a6ed2d1..126d5ca 100644 --- a/tests/obj.test +++ b/tests/obj.test @@ -16,54 +16,20 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -if {[info commands testobj] == {}} { - puts "This application hasn't been compiled with the \"testobj\"" - puts "command, so I can't test the Tcl type and object support." - ::tcltest::cleanupTests - return -} - -# Procedure to determine the integer range of the machine - -proc int_range {} { - for { set MIN_INT 1 } { $MIN_INT > 0 } {} { - set MIN_INT [expr { $MIN_INT << 1 }] - } - set MAX_INT [expr { ~ $MIN_INT }] - return [list $MIN_INT $MAX_INT] -} - -# Procedure to determine the range of wide integers on the machine. - -proc wide_range {} { - for { set MIN_WIDE [expr { wide(1) }] } { $MIN_WIDE > wide(0) } {} { - set MIN_WIDE [expr { $MIN_WIDE << 1 }] - } - set MAX_WIDE [expr { ~ $MIN_WIDE }] - return [list $MIN_WIDE $MAX_WIDE] -} +testConstraint testobj [llength [info commands testobj]] +testConstraint longIs32bit [expr {int(0x80000000) < 0}] +testConstraint wideBiggerThanInt [expr {wide(0x80000000) != int(0x80000000)}] -foreach { MIN_INT MAX_INT } [int_range] break -foreach { MIN_WIDE MAX_WIDE } [wide_range] break -::tcltest::testConstraint 32bit \ - [expr { $MAX_INT == 0x7fffffff }] -::tcltest::testConstraint wideBiggerThanInt \ - [expr { $MAX_WIDE > wide($MAX_INT) }] - -test obj-1.1 {Tcl_AppendAllObjTypes, and InitTypeTable, Tcl_RegisterObjType} { +test obj-1.1 {Tcl_AppendAllObjTypes, and InitTypeTable, Tcl_RegisterObjType} testobj { set r 1 foreach {t} { {array search} - boolean bytearray bytecode - double + cmdName + dict end-offset - index - int - list - nsName - procbody + regexp string } { set first [string first $t [testobj types]] @@ -72,26 +38,28 @@ test obj-1.1 {Tcl_AppendAllObjTypes, and InitTypeTable, Tcl_RegisterObjType} { set result $r } {1} -test obj-2.1 {Tcl_GetObjType error} { +test obj-2.1 {Tcl_GetObjType error} testobj { list [testintobj set 1 0] [catch {testobj convert 1 foo} msg] $msg } {0 1 {no type foo found}} -test obj-2.2 {Tcl_GetObjType and Tcl_ConvertToType} { +test obj-2.2 {Tcl_GetObjType and Tcl_ConvertToType} testobj { set result "" lappend result [testobj freeallvars] lappend result [testintobj set 1 12] - lappend result [testobj convert 1 double] + lappend result [testobj convert 1 bytearray] lappend result [testobj type 1] lappend result [testobj refcount 1] -} {{} 12 12 double 3} +} {{} 12 12 bytearray 3} -test obj-3.1 {Tcl_ConvertToType error} { - list [testdoubleobj set 1 12.34] [catch {testobj convert 1 int} msg] $msg -} {12.34 1 {expected integer but got "12.34"}} -test obj-3.2 {Tcl_ConvertToType error, "empty string" object} { - list [testobj newobj 1] [catch {testobj convert 1 int} msg] $msg -} {{} 1 {expected integer but got ""}} +test obj-3.1 {Tcl_ConvertToType error} testobj { + list [testdoubleobj set 1 12.34] \ + [catch {testobj convert 1 end-offset} msg] \ + $msg +} {12.34 1 {bad index "12.34": must be end?[+-]integer?}} +test obj-3.2 {Tcl_ConvertToType error, "empty string" object} testobj { + list [testobj newobj 1] [catch {testobj convert 1 end-offset} msg] $msg +} {{} 1 {bad index "": must be end?[+-]integer?}} -test obj-4.1 {Tcl_NewObj and AllocateFreeObjects} { +test obj-4.1 {Tcl_NewObj and AllocateFreeObjects} testobj { set result "" lappend result [testobj freeallvars] lappend result [testobj newobj 1] @@ -99,7 +67,7 @@ test obj-4.1 {Tcl_NewObj and AllocateFreeObjects} { lappend result [testobj refcount 1] } {{} {} string 2} -test obj-5.1 {Tcl_FreeObj} { +test obj-5.1 {Tcl_FreeObj} testobj { set result "" lappend result [testintobj set 1 12345] lappend result [testobj freeallvars] @@ -107,7 +75,7 @@ test obj-5.1 {Tcl_FreeObj} { lappend result $msg } {12345 {} 1 {variable 1 is unset (NULL)}} -test obj-6.1 {Tcl_DuplicateObj, object has internal rep} { +test obj-6.1 {Tcl_DuplicateObj, object has internal rep} testobj { set result "" lappend result [testobj freeallvars] lappend result [testintobj set 1 47] @@ -116,7 +84,7 @@ test obj-6.1 {Tcl_DuplicateObj, object has internal rep} { lappend result [testobj refcount 1] lappend result [testobj refcount 2] } {{} 47 47 47 2 3} -test obj-6.2 {Tcl_DuplicateObj, "empty string" object} { +test obj-6.2 {Tcl_DuplicateObj, "empty string" object} testobj { set result "" lappend result [testobj freeallvars] lappend result [testobj newobj 1] @@ -126,182 +94,184 @@ test obj-6.2 {Tcl_DuplicateObj, "empty string" object} { lappend result [testobj refcount 2] } {{} {} {} {} 2 3} -test obj-7.1 {Tcl_GetString, return existing string rep} { +# We assume that testobj is an indicator for test*obj as well + +test obj-7.1 {Tcl_GetString, return existing string rep} testobj { set result "" lappend result [testintobj set 1 47] lappend result [testintobj get2 1] } {47 47} -test obj-7.2 {Tcl_GetString, "empty string" object} { +test obj-7.2 {Tcl_GetString, "empty string" object} testobj { set result "" lappend result [testobj newobj 1] lappend result [teststringobj append 1 abc -1] lappend result [teststringobj get2 1] } {{} abc abc} -test obj-7.3 {Tcl_GetString, returns string internal rep (DString)} { +test obj-7.3 {Tcl_GetString, returns string internal rep (DString)} testobj { set result "" lappend result [teststringobj set 1 xyz] lappend result [teststringobj append 1 abc -1] lappend result [teststringobj get2 1] } {xyz xyzabc xyzabc} -test obj-7.4 {Tcl_GetString, recompute string rep from internal rep} { +test obj-7.4 {Tcl_GetString, recompute string rep from internal rep} testobj { set result "" lappend result [testintobj set 1 77] lappend result [testintobj mult10 1] lappend result [teststringobj get2 1] } {77 770 770} -test obj-8.1 {Tcl_GetStringFromObj, return existing string rep} { +test obj-8.1 {Tcl_GetStringFromObj, return existing string rep} testobj { set result "" lappend result [testintobj set 1 47] lappend result [testintobj get 1] } {47 47} -test obj-8.2 {Tcl_GetStringFromObj, "empty string" object} { +test obj-8.2 {Tcl_GetStringFromObj, "empty string" object} testobj { set result "" lappend result [testobj newobj 1] lappend result [teststringobj append 1 abc -1] lappend result [teststringobj get 1] } {{} abc abc} -test obj-8.3 {Tcl_GetStringFromObj, returns string internal rep (DString)} { +test obj-8.3 {Tcl_GetStringFromObj, returns string internal rep (DString)} testobj { set result "" lappend result [teststringobj set 1 xyz] lappend result [teststringobj append 1 abc -1] lappend result [teststringobj get 1] } {xyz xyzabc xyzabc} -test obj-8.4 {Tcl_GetStringFromObj, recompute string rep from internal rep} { +test obj-8.4 {Tcl_GetStringFromObj, recompute string rep from internal rep} testobj { set result "" lappend result [testintobj set 1 77] lappend result [testintobj mult10 1] lappend result [teststringobj get 1] } {77 770 770} -test obj-9.1 {Tcl_NewBooleanObj} { +test obj-9.1 {Tcl_NewBooleanObj} testobj { set result "" lappend result [testobj freeallvars] lappend result [testbooleanobj set 1 0] lappend result [testobj type 1] lappend result [testobj refcount 1] -} {{} 0 boolean 2} +} {{} 0 int 2} -test obj-10.1 {Tcl_SetBooleanObj, existing "empty string" object} { +test obj-10.1 {Tcl_SetBooleanObj, existing "empty string" object} testobj { set result "" lappend result [testobj freeallvars] lappend result [testobj newobj 1] lappend result [testbooleanobj set 1 0] ;# makes existing obj boolean lappend result [testobj type 1] lappend result [testobj refcount 1] -} {{} {} 0 boolean 2} -test obj-10.2 {Tcl_SetBooleanObj, existing non-"empty string" object} { +} {{} {} 0 int 2} +test obj-10.2 {Tcl_SetBooleanObj, existing non-"empty string" object} testobj { set result "" lappend result [testobj freeallvars] lappend result [testintobj set 1 98765] lappend result [testbooleanobj set 1 1] ;# makes existing obj boolean lappend result [testobj type 1] lappend result [testobj refcount 1] -} {{} 98765 1 boolean 2} +} {{} 98765 1 int 2} -test obj-11.1 {Tcl_GetBooleanFromObj, existing boolean object} { +test obj-11.1 {Tcl_GetBooleanFromObj, existing boolean object} testobj { set result "" lappend result [testbooleanobj set 1 1] lappend result [testbooleanobj not 1] ;# gets existing boolean rep } {1 0} -test obj-11.2 {Tcl_GetBooleanFromObj, convert to boolean} { +test obj-11.2 {Tcl_GetBooleanFromObj, convert to boolean} testobj { set result "" lappend result [testintobj set 1 47] lappend result [testbooleanobj not 1] ;# must convert to bool lappend result [testobj type 1] -} {47 0 boolean} -test obj-11.3 {Tcl_GetBooleanFromObj, error converting to boolean} { +} {47 0 int} +test obj-11.3 {Tcl_GetBooleanFromObj, error converting to boolean} testobj { set result "" lappend result [teststringobj set 1 abc] lappend result [catch {testbooleanobj not 1} msg] lappend result $msg } {abc 1 {expected boolean value but got "abc"}} -test obj-11.4 {Tcl_GetBooleanFromObj, error converting from "empty string"} { +test obj-11.4 {Tcl_GetBooleanFromObj, error converting from "empty string"} testobj { set result "" lappend result [testobj newobj 1] lappend result [catch {testbooleanobj not 1} msg] lappend result $msg } {{} 1 {expected boolean value but got ""}} -test obj-11.5 {Tcl_GetBooleanFromObj, convert hex to boolean} { +test obj-11.5 {Tcl_GetBooleanFromObj, convert hex to boolean} testobj { set result "" lappend result [teststringobj set 1 0xac] lappend result [testbooleanobj not 1] lappend result [testobj type 1] -} {0xac 0 boolean} -test obj-11.6 {Tcl_GetBooleanFromObj, convert float to boolean} { +} {0xac 0 int} +test obj-11.6 {Tcl_GetBooleanFromObj, convert float to boolean} testobj { set result "" lappend result [teststringobj set 1 5.42] lappend result [testbooleanobj not 1] lappend result [testobj type 1] -} {5.42 0 boolean} +} {5.42 0 int} -test obj-12.1 {DupBooleanInternalRep} { +test obj-12.1 {DupBooleanInternalRep} testobj { set result "" lappend result [testbooleanobj set 1 1] lappend result [testobj duplicate 1 2] ;# uses DupBooleanInternalRep lappend result [testbooleanobj get 2] } {1 1 1} -test obj-13.1 {SetBooleanFromAny, int to boolean special case} { +test obj-13.1 {SetBooleanFromAny, int to boolean special case} testobj { set result "" lappend result [testintobj set 1 1234] lappend result [testbooleanobj not 1] ;# converts with SetBooleanFromAny lappend result [testobj type 1] -} {1234 0 boolean} -test obj-13.2 {SetBooleanFromAny, double to boolean special case} { +} {1234 0 int} +test obj-13.2 {SetBooleanFromAny, double to boolean special case} testobj { set result "" lappend result [testdoubleobj set 1 3.14159] lappend result [testbooleanobj not 1] ;# converts with SetBooleanFromAny lappend result [testobj type 1] -} {3.14159 0 boolean} -test obj-13.3 {SetBooleanFromAny, special case strings representing booleans} { +} {3.14159 0 int} +test obj-13.3 {SetBooleanFromAny, special case strings representing booleans} testobj { set result "" foreach s {yes no true false on off} { teststringobj set 1 $s lappend result [testbooleanobj not 1] } lappend result [testobj type 1] -} {0 1 0 1 0 1 boolean} -test obj-13.4 {SetBooleanFromAny, recompute string rep then parse it} { +} {0 1 0 1 0 1 int} +test obj-13.4 {SetBooleanFromAny, recompute string rep then parse it} testobj { set result "" lappend result [testintobj set 1 456] lappend result [testintobj div10 1] lappend result [testbooleanobj not 1] ;# converts with SetBooleanFromAny lappend result [testobj type 1] -} {456 45 0 boolean} -test obj-13.5 {SetBooleanFromAny, error parsing string} { +} {456 45 0 int} +test obj-13.5 {SetBooleanFromAny, error parsing string} testobj { set result "" lappend result [teststringobj set 1 abc] lappend result [catch {testbooleanobj not 1} msg] lappend result $msg } {abc 1 {expected boolean value but got "abc"}} -test obj-13.6 {SetBooleanFromAny, error parsing string} { +test obj-13.6 {SetBooleanFromAny, error parsing string} testobj { set result "" lappend result [teststringobj set 1 x1.0] lappend result [catch {testbooleanobj not 1} msg] lappend result $msg } {x1.0 1 {expected boolean value but got "x1.0"}} -test obj-13.7 {SetBooleanFromAny, error converting from "empty string"} { +test obj-13.7 {SetBooleanFromAny, error converting from "empty string"} testobj { set result "" lappend result [testobj newobj 1] lappend result [catch {testbooleanobj not 1} msg] lappend result $msg } {{} 1 {expected boolean value but got ""}} -test obj-13.8 {SetBooleanFromAny, unicode strings} { +test obj-13.8 {SetBooleanFromAny, unicode strings} testobj { set result "" lappend result [teststringobj set 1 1\u7777] lappend result [catch {testbooleanobj not 1} msg] lappend result $msg } "1\u7777 1 {expected boolean value but got \"1\u7777\"}" -test obj-14.1 {UpdateStringOfBoolean} { +test obj-14.1 {UpdateStringOfBoolean} testobj { set result "" lappend result [testbooleanobj set 1 0] lappend result [testbooleanobj not 1] lappend result [testbooleanobj get 1] ;# must update string rep } {0 1 1} -test obj-15.1 {Tcl_NewDoubleObj} { +test obj-15.1 {Tcl_NewDoubleObj} testobj { set result "" lappend result [testobj freeallvars] lappend result [testdoubleobj set 1 3.1459] @@ -309,7 +279,7 @@ test obj-15.1 {Tcl_NewDoubleObj} { lappend result [testobj refcount 1] } {{} 3.1459 double 2} -test obj-16.1 {Tcl_SetDoubleObj, existing "empty string" object} { +test obj-16.1 {Tcl_SetDoubleObj, existing "empty string" object} testobj { set result "" lappend result [testobj freeallvars] lappend result [testobj newobj 1] @@ -317,7 +287,7 @@ test obj-16.1 {Tcl_SetDoubleObj, existing "empty string" object} { lappend result [testobj type 1] lappend result [testobj refcount 1] } {{} {} 0.123 double 2} -test obj-16.2 {Tcl_SetDoubleObj, existing non-"empty string" object} { +test obj-16.2 {Tcl_SetDoubleObj, existing non-"empty string" object} testobj { set result "" lappend result [testobj freeallvars] lappend result [testintobj set 1 98765] @@ -326,83 +296,83 @@ test obj-16.2 {Tcl_SetDoubleObj, existing non-"empty string" object} { lappend result [testobj refcount 1] } {{} 98765 27.56 double 2} -test obj-17.1 {Tcl_GetDoubleFromObj, existing double object} { +test obj-17.1 {Tcl_GetDoubleFromObj, existing double object} testobj { set result "" lappend result [testdoubleobj set 1 16.1] lappend result [testdoubleobj mult10 1] ;# gets existing double rep } {16.1 161.0} -test obj-17.2 {Tcl_GetDoubleFromObj, convert to double} { +test obj-17.2 {Tcl_GetDoubleFromObj, convert to double} testobj { set result "" lappend result [testintobj set 1 477] lappend result [testdoubleobj div10 1] ;# must convert to bool lappend result [testobj type 1] } {477 47.7 double} -test obj-17.3 {Tcl_GetDoubleFromObj, error converting to double} { +test obj-17.3 {Tcl_GetDoubleFromObj, error converting to double} testobj { set result "" lappend result [teststringobj set 1 abc] lappend result [catch {testdoubleobj mult10 1} msg] lappend result $msg } {abc 1 {expected floating-point number but got "abc"}} -test obj-17.4 {Tcl_GetDoubleFromObj, error converting from "empty string"} { +test obj-17.4 {Tcl_GetDoubleFromObj, error converting from "empty string"} testobj { set result "" lappend result [testobj newobj 1] lappend result [catch {testdoubleobj div10 1} msg] lappend result $msg } {{} 1 {expected floating-point number but got ""}} -test obj-18.1 {DupDoubleInternalRep} { +test obj-18.1 {DupDoubleInternalRep} testobj { set result "" lappend result [testdoubleobj set 1 17.1] lappend result [testobj duplicate 1 2] ;# uses DupDoubleInternalRep lappend result [testdoubleobj get 2] } {17.1 17.1 17.1} -test obj-19.1 {SetDoubleFromAny, int to double special case} { +test obj-19.1 {SetDoubleFromAny, int to double special case} testobj { set result "" lappend result [testintobj set 1 1234] lappend result [testdoubleobj mult10 1] ;# converts with SetDoubleFromAny lappend result [testobj type 1] } {1234 12340.0 double} -test obj-19.2 {SetDoubleFromAny, boolean to double special case} { +test obj-19.2 {SetDoubleFromAny, boolean to double special case} testobj { set result "" lappend result [testbooleanobj set 1 1] lappend result [testdoubleobj mult10 1] ;# converts with SetDoubleFromAny lappend result [testobj type 1] } {1 10.0 double} -test obj-19.3 {SetDoubleFromAny, recompute string rep then parse it} { +test obj-19.3 {SetDoubleFromAny, recompute string rep then parse it} testobj { set result "" lappend result [testintobj set 1 456] lappend result [testintobj div10 1] lappend result [testdoubleobj mult10 1] ;# converts with SetDoubleFromAny lappend result [testobj type 1] } {456 45 450.0 double} -test obj-19.4 {SetDoubleFromAny, error parsing string} { +test obj-19.4 {SetDoubleFromAny, error parsing string} testobj { set result "" lappend result [teststringobj set 1 abc] lappend result [catch {testdoubleobj mult10 1} msg] lappend result $msg } {abc 1 {expected floating-point number but got "abc"}} -test obj-19.5 {SetDoubleFromAny, error parsing string} { +test obj-19.5 {SetDoubleFromAny, error parsing string} testobj { set result "" lappend result [teststringobj set 1 x1.0] lappend result [catch {testdoubleobj mult10 1} msg] lappend result $msg } {x1.0 1 {expected floating-point number but got "x1.0"}} -test obj-19.6 {SetDoubleFromAny, error converting from "empty string"} { +test obj-19.6 {SetDoubleFromAny, error converting from "empty string"} testobj { set result "" lappend result [testobj newobj 1] lappend result [catch {testdoubleobj div10 1} msg] lappend result $msg } {{} 1 {expected floating-point number but got ""}} -test obj-20.1 {UpdateStringOfDouble} { +test obj-20.1 {UpdateStringOfDouble} testobj { set result "" lappend result [testdoubleobj set 1 3.14159] lappend result [testdoubleobj mult10 1] lappend result [testdoubleobj get 1] ;# must update string rep } {3.14159 31.4159 31.4159} -test obj-21.1 {Tcl_NewIntObj} { +test obj-21.1 {Tcl_NewIntObj} testobj { set result "" lappend result [testobj freeallvars] lappend result [testintobj set 1 55] @@ -410,7 +380,7 @@ test obj-21.1 {Tcl_NewIntObj} { lappend result [testobj refcount 1] } {{} 55 int 2} -test obj-22.1 {Tcl_SetIntObj, existing "empty string" object} { +test obj-22.1 {Tcl_SetIntObj, existing "empty string" object} testobj { set result "" lappend result [testobj freeallvars] lappend result [testobj newobj 1] @@ -418,7 +388,7 @@ test obj-22.1 {Tcl_SetIntObj, existing "empty string" object} { lappend result [testobj type 1] lappend result [testobj refcount 1] } {{} {} 77 int 2} -test obj-22.2 {Tcl_SetIntObj, existing non-"empty string" object} { +test obj-22.2 {Tcl_SetIntObj, existing non-"empty string" object} testobj { set result "" lappend result [testobj freeallvars] lappend result [testdoubleobj set 1 12.34] @@ -427,94 +397,94 @@ test obj-22.2 {Tcl_SetIntObj, existing non-"empty string" object} { lappend result [testobj refcount 1] } {{} 12.34 77 int 2} -test obj-23.1 {Tcl_GetIntFromObj, existing int object} { +test obj-23.1 {Tcl_GetIntFromObj, existing int object} testobj { set result "" lappend result [testintobj set 1 22] lappend result [testintobj mult10 1] ;# gets existing int rep } {22 220} -test obj-23.2 {Tcl_GetIntFromObj, convert to int} { +test obj-23.2 {Tcl_GetIntFromObj, convert to int} testobj { set result "" lappend result [testintobj set 1 477] lappend result [testintobj div10 1] ;# must convert to bool lappend result [testobj type 1] } {477 47 int} -test obj-23.3 {Tcl_GetIntFromObj, error converting to int} { +test obj-23.3 {Tcl_GetIntFromObj, error converting to int} testobj { set result "" lappend result [teststringobj set 1 abc] lappend result [catch {testintobj mult10 1} msg] lappend result $msg } {abc 1 {expected integer but got "abc"}} -test obj-23.4 {Tcl_GetIntFromObj, error converting from "empty string"} { +test obj-23.4 {Tcl_GetIntFromObj, error converting from "empty string"} testobj { set result "" lappend result [testobj newobj 1] lappend result [catch {testintobj div10 1} msg] lappend result $msg } {{} 1 {expected integer but got ""}} -test obj-23.5 {Tcl_GetIntFromObj, integer too large to represent as non-long error} {nonPortable} { +test obj-23.5 {Tcl_GetIntFromObj, integer too large to represent as non-long error} {testobj} { set result "" lappend result [testobj newobj 1] lappend result [testintobj inttoobigtest 1] } {{} 1} -test obj-24.1 {DupIntInternalRep} { +test obj-24.1 {DupIntInternalRep} testobj { set result "" lappend result [testintobj set 1 23] lappend result [testobj duplicate 1 2] ;# uses DupIntInternalRep lappend result [testintobj get 2] } {23 23 23} -test obj-25.1 {SetIntFromAny, int to int special case} { +test obj-25.1 {SetIntFromAny, int to int special case} testobj { set result "" lappend result [testintobj set 1 1234] lappend result [testintobj mult10 1] ;# converts with SetIntFromAny lappend result [testobj type 1] } {1234 12340 int} -test obj-25.2 {SetIntFromAny, boolean to int special case} { +test obj-25.2 {SetIntFromAny, boolean to int special case} testobj { set result "" lappend result [testbooleanobj set 1 1] lappend result [testintobj mult10 1] ;# converts with SetIntFromAny lappend result [testobj type 1] } {1 10 int} -test obj-25.3 {SetIntFromAny, recompute string rep then parse it} { +test obj-25.3 {SetIntFromAny, recompute string rep then parse it} testobj { set result "" lappend result [testintobj set 1 456] lappend result [testintobj div10 1] lappend result [testintobj mult10 1] ;# converts with SetIntFromAny lappend result [testobj type 1] } {456 45 450 int} -test obj-25.4 {SetIntFromAny, error parsing string} { +test obj-25.4 {SetIntFromAny, error parsing string} testobj { set result "" lappend result [teststringobj set 1 abc] lappend result [catch {testintobj mult10 1} msg] lappend result $msg } {abc 1 {expected integer but got "abc"}} -test obj-25.5 {SetIntFromAny, error parsing string} { +test obj-25.5 {SetIntFromAny, error parsing string} testobj { set result "" lappend result [teststringobj set 1 x17] lappend result [catch {testintobj mult10 1} msg] lappend result $msg } {x17 1 {expected integer but got "x17"}} -test obj-25.6 {SetIntFromAny, integer too large} {nonPortable} { +test obj-25.6 {SetIntFromAny, integer too large} {testobj} { set result "" lappend result [teststringobj set 1 123456789012345678901] lappend result [catch {testintobj mult10 1} msg] lappend result $msg } {123456789012345678901 1 {integer value too large to represent}} -test obj-25.7 {SetIntFromAny, error converting from "empty string"} { +test obj-25.7 {SetIntFromAny, error converting from "empty string"} testobj { set result "" lappend result [testobj newobj 1] lappend result [catch {testintobj div10 1} msg] lappend result $msg } {{} 1 {expected integer but got ""}} -test obj-26.1 {UpdateStringOfInt} { +test obj-26.1 {UpdateStringOfInt} testobj { set result "" lappend result [testintobj set 1 512] lappend result [testintobj mult10 1] lappend result [testintobj get 1] ;# must update string rep } {512 5120 5120} -test obj-27.1 {Tcl_NewLongObj} { +test obj-27.1 {Tcl_NewLongObj} testobj { set result "" lappend result [testobj freeallvars] testintobj setmaxlong 1 @@ -523,7 +493,7 @@ test obj-27.1 {Tcl_NewLongObj} { lappend result [testobj refcount 1] } {{} 1 int 1} -test obj-28.1 {Tcl_SetLongObj, existing "empty string" object} { +test obj-28.1 {Tcl_SetLongObj, existing "empty string" object} testobj { set result "" lappend result [testobj freeallvars] lappend result [testobj newobj 1] @@ -531,7 +501,7 @@ test obj-28.1 {Tcl_SetLongObj, existing "empty string" object} { lappend result [testobj type 1] lappend result [testobj refcount 1] } {{} {} 77 int 2} -test obj-28.2 {Tcl_SetLongObj, existing non-"empty string" object} { +test obj-28.2 {Tcl_SetLongObj, existing non-"empty string" object} testobj { set result "" lappend result [testobj freeallvars] lappend result [testdoubleobj set 1 12.34] @@ -540,31 +510,31 @@ test obj-28.2 {Tcl_SetLongObj, existing non-"empty string" object} { lappend result [testobj refcount 1] } {{} 12.34 77 int 2} -test obj-29.1 {Tcl_GetLongFromObj, existing long integer object} { +test obj-29.1 {Tcl_GetLongFromObj, existing long integer object} testobj { set result "" lappend result [testintobj setlong 1 22] lappend result [testintobj mult10 1] ;# gets existing long int rep } {22 220} -test obj-29.2 {Tcl_GetLongFromObj, convert to long} { +test obj-29.2 {Tcl_GetLongFromObj, convert to long} testobj { set result "" lappend result [testintobj setlong 1 477] lappend result [testintobj div10 1] ;# must convert to bool lappend result [testobj type 1] } {477 47 int} -test obj-29.3 {Tcl_GetLongFromObj, error converting to long integer} { +test obj-29.3 {Tcl_GetLongFromObj, error converting to long integer} testobj { set result "" lappend result [teststringobj set 1 abc] lappend result [catch {testintobj ismaxlong 1} msg] ;# cvts to long int lappend result $msg } {abc 1 {expected integer but got "abc"}} -test obj-29.4 {Tcl_GetLongFromObj, error converting from "empty string"} { +test obj-29.4 {Tcl_GetLongFromObj, error converting from "empty string"} testobj { set result "" lappend result [testobj newobj 1] lappend result [catch {testintobj ismaxlong 1} msg] ;# cvts to long int lappend result $msg } {{} 1 {expected integer but got ""}} -test obj-30.1 {Ref counting and object deletion, simple types} { +test obj-30.1 {Ref counting and object deletion, simple types} testobj { set result "" lappend result [testobj freeallvars] lappend result [testintobj set 1 1024] @@ -576,93 +546,87 @@ test obj-30.1 {Ref counting and object deletion, simple types} { lappend result [testobj type 2] lappend result [testobj refcount 1] lappend result [testobj refcount 2] -} {{} 1024 1024 int 4 4 0 boolean 3 2} +} {{} 1024 1024 int 4 4 0 int 3 2} -test obj-31.1 {regenerate string rep of "end"} { +test obj-31.1 {regenerate string rep of "end"} testobj { testobj freeallvars teststringobj set 1 end testobj convert 1 end-offset testobj invalidateStringRep 1 } end - -test obj-31.2 {regenerate string rep of "end-1"} { +test obj-31.2 {regenerate string rep of "end-1"} testobj { testobj freeallvars teststringobj set 1 end-0x1 testobj convert 1 end-offset testobj invalidateStringRep 1 } end-1 - -test obj-31.3 {regenerate string rep of "end--1"} { +test obj-31.3 {regenerate string rep of "end--1"} testobj { testobj freeallvars teststringobj set 1 end--0x1 testobj convert 1 end-offset testobj invalidateStringRep 1 } end--1 - -test obj-31.4 {regenerate string rep of "end-bigInteger"} { +test obj-31.4 {regenerate string rep of "end-bigInteger"} testobj { testobj freeallvars teststringobj set 1 end-0x7fffffff testobj convert 1 end-offset testobj invalidateStringRep 1 } end-2147483647 - -test obj-31.5 {regenerate string rep of "end--bigInteger"} { +test obj-31.5 {regenerate string rep of "end--bigInteger"} testobj { testobj freeallvars teststringobj set 1 end--0x7fffffff testobj convert 1 end-offset testobj invalidateStringRep 1 } end--2147483647 - - -test obj-31.6 {regenerate string rep of "end--bigInteger"} {nonPortable} { +test obj-31.6 {regenerate string rep of "end--bigInteger"} {testobj longIs32bit} { testobj freeallvars teststringobj set 1 end--0x80000000 testobj convert 1 end-offset testobj invalidateStringRep 1 } end--2147483648 -test obj-32.1 {integer overflow on input} {32bit wideBiggerThanInt} { +test obj-32.1 {freeing very large object trees} { + set x {} + for {set i 0} {$i<100000} {incr i} { + set x [list $x {}] + } + unset x +} {} + +test obj-33.1 {integer overflow on input} {longIs32bit wideBiggerThanInt} { set x 0x8000; append x 0000 list [string is integer $x] [expr { wide($x) }] } {1 2147483648} - -test obj-32.2 {integer overflow on input} {32bit wideBiggerThanInt} { +test obj-33.2 {integer overflow on input} {longIs32bit wideBiggerThanInt} { set x 0xffff; append x ffff list [string is integer $x] [expr { wide($x) }] } {1 4294967295} - -test obj-32.3 {integer overflow on input} {32bit wideBiggerThanInt} { +test obj-33.3 {integer overflow on input} {longIs32bit wideBiggerThanInt} { set x 0x10000; append x 0000 list [string is integer $x] [expr { wide($x) }] } {0 4294967296} - -test obj-32.4 {integer overflow on input} {32bit wideBiggerThanInt} { +test obj-33.4 {integer overflow on input} {longIs32bit wideBiggerThanInt} { set x -0x8000; append x 0000 list [string is integer $x] [expr { wide($x) }] } {1 -2147483648} - -test obj-32.5 {integer overflow on input} {32bit wideBiggerThanInt} { +test obj-33.5 {integer overflow on input} {longIs32bit wideBiggerThanInt} { set x -0x8000; append x 0001 list [string is integer $x] [expr { wide($x) }] } {1 -2147483649} - -test obj-32.6 {integer overflow on input} {32bit wideBiggerThanInt} { +test obj-33.6 {integer overflow on input} {longIs32bit wideBiggerThanInt} { set x -0xffff; append x ffff list [string is integer $x] [expr { wide($x) }] } {1 -4294967295} - -test obj-32.7 {integer overflow on input} {32bit wideBiggerThanInt} { +test obj-33.7 {integer overflow on input} {longIs32bit wideBiggerThanInt} { set x -0x10000; append x 0000 list [string is integer $x] [expr { wide($x) }] } {0 -4294967296} -testobj freeallvars +if {[testConstraint testobj]} { + testobj freeallvars +} # cleanup ::tcltest::cleanupTests return - -# Local Variables: -# mode: tcl -# End: diff --git a/tests/opt.test b/tests/opt.test index b3aba91..ba59f6c 100644 --- a/tests/opt.test +++ b/tests/opt.test @@ -37,7 +37,6 @@ test opt-2.1 {OptKeyDelete} { [info exists ::tcl::OptDesc(testkey)] } {testkey 1 {} 0} - test opt-3.1 {OptParse / temp key is removed} { set n $::tcl::OptDescN set prev [array names ::tcl::OptDesc] @@ -48,8 +47,6 @@ test opt-3.1 {OptParse / temp key is removed} { [info exists ::tcl::OptDesc($n)]\ [expr {"[lsort $prev]"=="[lsort [array names ::tcl::OptDesc]]"}] } {1 {} {} 0 1} - - test opt-3.2 {OptParse / temp key is removed even on errors} { set n $::tcl::OptDescN catch {::tcl::OptKeyDelete $n} @@ -63,7 +60,6 @@ test opt-4.1 {OptProc} { ::tcl::OptKeyDelete optTest } {} - test opt-5.1 {OptProcArgGiven} { ::tcl::OptProc optTest {{-foo}} { if {[::tcl::OptProcArgGiven "-foo"]} { @@ -83,7 +79,6 @@ test opt-6.1 {OptKeyParse} { ------------ ---- ----- ---- ( -help gives this help )}} - test opt-7.1 {OptCheckType} { list \ [::tcl::OptCheckType 23 int] \ @@ -100,7 +95,6 @@ test opt-7.1 {OptCheckType} { [catch {::tcl::OptCheckType foo choice {x y Foo z}}] } {23 23.0 1 -blah {a b c} maYbe 1 1 1 1 1 1} - test opt-8.1 {List utilities} { ::tcl::Lempty {} } 1 @@ -110,37 +104,32 @@ test opt-8.2 {List utilities} { test opt-8.3 {List utilities} { ::tcl::Lget {a {b c d} e} {1 2} } d - test opt-8.4 {List utilities} { set l {a {b c d e} f} ::tcl::Lvarset l {1 2} D set l } {a {b c D e} f} - test opt-8.5 {List utilities} { set l {a b c} ::tcl::Lvarset1 l 6 X set l } {a b c {} {} {} X} - test opt-8.6 {List utilities} { set l {a {b c 7 e} f} ::tcl::Lvarincr l {1 2} set l } {a {b c 8 e} f} - test opt-8.7 {List utilities} { set l {a {b c 7 e} f} ::tcl::Lvarincr l {1 2} -9 set l } {a {b c -2 e} f} - +# 8.8 and 8.9 missing? test opt-8.10 {List utilities} { set l {a {b c 7 e} f} ::tcl::Lvarpop l set l } {{b c 7 e} f} - test opt-8.11 {List utilities} { catch {unset x} set l {a {b c 7 e} f} @@ -155,7 +144,6 @@ test opt-9.1 {Misc utilities} { ::tcl::SetMax v 6 set v } 7 - test opt-9.2 {Misc utilities} { catch {unset v} ::tcl::SetMin v 3 @@ -174,21 +162,18 @@ test opt-10.1 {ambigous flags} { -fla boolflag (false) -flag2xyz boolflag (false) -flag3xyz boolflag (false) } - test opt-10.2 {non ambigous flags} { ::tcl::OptProc optTest {{-flag1xyz} {-other} {-flag2xyz} {-flag3xyz}} { return $flag2xyz } optTest -fLaG2 } 1 - test opt-10.3 {non ambigous flags because of exact match} { ::tcl::OptProc optTest {{-flag1x} {-other} {-flag1} {-flag1xy}} { return $flag1 } optTest -flAg1 } 1 - test opt-10.4 {ambigous flags, not exact match} { ::tcl::OptProc optTest {{-flag1xy} {-other} {-flag1} {-flag1xyz}} { return $flag1 @@ -199,8 +184,6 @@ test opt-10.4 {ambigous flags, not exact match} { -flag1xy boolflag (false) -flag1xyz boolflag (false) } - - # medium size overall test example: (defined once) ::tcl::OptProc optTest { {cmd -choice {print save delete} "sub command to choose"} @@ -216,8 +199,6 @@ test opt-10.5 {medium size overall test} { list [catch {optTest} msg] $msg } {1 {no value given for parameter "cmd" (use -help for full usage) : cmd choice (print save delete) sub command to choose}} - - test opt-10.6 {medium size overall test} { list [catch {optTest -help} msg] $msg } {1 {Usage information: @@ -229,19 +210,15 @@ test opt-10.6 {medium size overall test} { arg2 string () this is help ?arg3? int (7) optional number -moreflags boolflag (false) }} - test opt-10.7 {medium size overall test} { optTest save tst } {save 1 tst 7 0} - test opt-10.8 {medium size overall test} { optTest save -allowBoing false -- 8 } {save 0 8 7 0} - test opt-10.9 {medium size overall test} { optTest save tst -m -- } {save 1 tst 7 1} - test opt-10.10 {medium size overall test} { list [catch {optTest save tst foo} msg] [lindex [split $msg "\n"] 0] } {1 {too many arguments (unexpected argument(s): foo), usage:}} @@ -266,15 +243,3 @@ test opt-11.2 {default value for args} { # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/parse.test b/tests/parse.test index 3118cf8..37c44d5 100644 --- a/tests/parse.test +++ b/tests/parse.test @@ -8,166 +8,258 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. -if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest 2 - namespace import -force ::tcltest::* +if {[catch {package require tcltest 2.0.2}]} { + puts stderr "Skipping tests in [info script]. tcltest 2.0.2 required." + return } -if {[info commands testparser] == {}} { - puts "This application hasn't been compiled with the \"testparser\"" - puts "command, so I can't test the Tcl parser." - ::tcltest::cleanupTests - return -} +namespace eval ::tcl::test::parse { + namespace import ::tcltest::* -test parse-1.1 {Tcl_ParseCommand procedure, computing string length} { +testConstraint testparser [llength [info commands testparser]] +testConstraint testevalobjv [llength [info commands testevalobjv]] +testConstraint testevalex [llength [info commands testevalex]] +testConstraint testparsevarname [llength [info commands testparsevarname]] +testConstraint testparsevar [llength [info commands testparsevar]] +testConstraint testasync [llength [info commands testasync]] +testConstraint testcmdtrace [llength [info commands testcmdtrace]] + +test parse-1.1 {Tcl_ParseCommand procedure, computing string length} testparser { testparser [bytestring "foo\0 bar"] -1 } {- foo 1 simple foo 1 text foo 0 {}} -test parse-1.2 {Tcl_ParseCommand procedure, computing string length} { +test parse-1.2 {Tcl_ParseCommand procedure, computing string length} testparser { testparser "foo bar" -1 } {- {foo bar} 2 simple foo 1 text foo 0 simple bar 1 text bar 0 {}} -test parse-1.3 {Tcl_ParseCommand procedure, leading space} { +test parse-1.3 {Tcl_ParseCommand procedure, leading space} testparser { testparser " \n\t foo" 0 } {- foo 1 simple foo 1 text foo 0 {}} -test parse-1.4 {Tcl_ParseCommand procedure, leading space} { +test parse-1.4 {Tcl_ParseCommand procedure, leading space} testparser { testparser "\f\r\vfoo" 0 } {- foo 1 simple foo 1 text foo 0 {}} -test parse-1.5 {Tcl_ParseCommand procedure, backslash-newline in leading space} { +test parse-1.5 {Tcl_ParseCommand procedure, backslash-newline in leading space} testparser { testparser " \\\n foo" 0 } {- foo 1 simple foo 1 text foo 0 {}} -test parse-1.6 {Tcl_ParseCommand procedure, backslash-newline in leading space} { +test parse-1.6 {Tcl_ParseCommand procedure, backslash-newline in leading space} testparser { testparser { \a foo} 0 } {- {\a foo} 2 word {\a} 1 backslash {\a} 0 simple foo 1 text foo 0 {}} -test parse-1.7 {Tcl_ParseCommand procedure, missing continuation line in leading space} { +test parse-1.7 {Tcl_ParseCommand procedure, missing continuation line in leading space} testparser { testparser " \\\n" 0 } {- {} 0 {}} -test parse-1.8 {Tcl_ParseCommand procedure, eof in leading space} { +test parse-1.8 {Tcl_ParseCommand procedure, eof in leading space} testparser { testparser " foo" 3 } {- {} 0 { foo}} +test parse-1.9 {Tcl_ParseCommand procedure, backslash newline + newline} testparser { + testparser "cmd1\\\n\ncmd2" 0 +} {- cmd1\\\n\n 1 simple cmd1 1 text cmd1 0 cmd2} +test parse-1.10 {Tcl_ParseCommand procedure, backslash newline + newline} testparser { + testparser "list \\\nA B\\\n\nlist C D" 0 +} {- list\ \\\nA\ B\\\n\n 3 simple list 1 text list 0 simple A 1 text A 0 simple B 1 text B 0 {list C D}} -test parse-2.1 {Tcl_ParseCommand procedure, comments} { +test parse-2.1 {Tcl_ParseCommand procedure, comments} testparser { testparser "# foo bar\n foo" 0 } {{# foo bar } foo 1 simple foo 1 text foo 0 {}} -test parse-2.2 {Tcl_ParseCommand procedure, several comments} { +test parse-2.2 {Tcl_ParseCommand procedure, several comments} testparser { testparser " # foo bar\n # another comment\n\n foo" 0 } {{# foo bar # another comment } foo 1 simple foo 1 text foo 0 {}} -test parse-2.3 {Tcl_ParseCommand procedure, backslash-newline in comments} { +test parse-2.3 {Tcl_ParseCommand procedure, backslash-newline in comments} testparser { testparser " # foo bar\\\ncomment on continuation line\nfoo" 0 -} {#\ foo\ bar\\\ncomment\ on\ continuation\ line\n foo 1 simple foo 1 text foo 0 {}} -test parse-2.4 {Tcl_ParseCommand procedure, missing continuation line in comment} { +} {\#\ foo\ bar\\\ncomment\ on\ continuation\ line\n foo 1 simple foo 1 text foo 0 {}} +test parse-2.4 {Tcl_ParseCommand procedure, missing continuation line in comment} testparser { testparser "# \\\n" 0 -} {#\ \ \ \\\n {} 0 {}} -test parse-2.5 {Tcl_ParseCommand procedure, eof in comment} { +} {\#\ \ \ \\\n {} 0 {}} +test parse-2.5 {Tcl_ParseCommand procedure, eof in comment} testparser { testparser " # foo bar\nfoo" 8 } {{# foo b} {} 0 {ar foo}} -test parse-3.1 {Tcl_ParseCommand procedure, parsing words, skipping space} { +test parse-3.1 {Tcl_ParseCommand procedure, parsing words, skipping space} testparser { testparser "foo bar\t\tx" 0 } {- {foo bar x} 3 simple foo 1 text foo 0 simple bar 1 text bar 0 simple x 1 text x 0 {}} -test parse-3.2 {Tcl_ParseCommand procedure, missing continuation line in leading space} { +test parse-3.2 {Tcl_ParseCommand procedure, missing continuation line in leading space} testparser { testparser "abc \\\n" 0 } {- abc\ \ \\\n 1 simple abc 1 text abc 0 {}} -test parse-3.3 {Tcl_ParseCommand procedure, parsing words, command ends in space} { +test parse-3.3 {Tcl_ParseCommand procedure, parsing words, command ends in space} testparser { testparser "foo ; bar x" 0 } {- {foo ;} 1 simple foo 1 text foo 0 { bar x}} -test parse-3.4 {Tcl_ParseCommand procedure, parsing words, command ends in space} { +test parse-3.4 {Tcl_ParseCommand procedure, parsing words, command ends in space} testparser { testparser "foo " 5 } {- {foo } 1 simple foo 1 text foo 0 { }} -test parse-3.5 {Tcl_ParseCommand procedure, quoted words} { +test parse-3.5 {Tcl_ParseCommand procedure, quoted words} testparser { testparser {foo "a b c" d "efg";} 0 } {- {foo "a b c" d "efg";} 4 simple foo 1 text foo 0 simple {"a b c"} 1 text {a b c} 0 simple d 1 text d 0 simple {"efg"} 1 text efg 0 {}} -test parse-3.6 {Tcl_ParseCommand procedure, words in braces} { +test parse-3.6 {Tcl_ParseCommand procedure, words in braces} testparser { testparser {foo {a $b [concat foo]} {c d}} 0 } {- {foo {a $b [concat foo]} {c d}} 3 simple foo 1 text foo 0 simple {{a $b [concat foo]}} 1 text {a $b [concat foo]} 0 simple {{c d}} 1 text {c d} 0 {}} -test parse-3.7 {Tcl_ParseCommand procedure, error in unquoted word} { - list [catch {testparser "foo \$\{abc" 0} msg] $msg $errorInfo +test parse-3.7 {Tcl_ParseCommand procedure, error in unquoted word} testparser { + list [catch {testparser "foo \$\{abc" 0} msg] $msg $::errorInfo } {1 {missing close-brace for variable name} missing\ close-brace\ for\ variable\ name\n\ \ \ \ (remainder\ of\ script:\ \"\{abc\")\n\ \ \ \ invoked\ from\ within\n\"testparser\ \"foo\ \\\$\\\{abc\"\ 0\"} -test parse-4.1 {Tcl_ParseCommand procedure, simple words} { +test parse-4.1 {Tcl_ParseCommand procedure, simple words} testparser { testparser {foo} 0 } {- foo 1 simple foo 1 text foo 0 {}} -test parse-4.2 {Tcl_ParseCommand procedure, simple words} { +test parse-4.2 {Tcl_ParseCommand procedure, simple words} testparser { testparser {{abc}} 0 } {- {{abc}} 1 simple {{abc}} 1 text abc 0 {}} -test parse-4.3 {Tcl_ParseCommand procedure, simple words} { +test parse-4.3 {Tcl_ParseCommand procedure, simple words} testparser { testparser {"c d"} 0 } {- {"c d"} 1 simple {"c d"} 1 text {c d} 0 {}} -test parse-4.4 {Tcl_ParseCommand procedure, simple words} { +test parse-4.4 {Tcl_ParseCommand procedure, simple words} testparser { testparser {x$d} 0 } {- {x$d} 1 word {x$d} 3 text x 0 variable {$d} 1 text d 0 {}} -test parse-4.5 {Tcl_ParseCommand procedure, simple words} { +test parse-4.5 {Tcl_ParseCommand procedure, simple words} testparser { testparser {"a [foo] b"} 0 } {- {"a [foo] b"} 1 word {"a [foo] b"} 3 text {a } 0 command {[foo]} 0 text { b} 0 {}} -test parse-4.6 {Tcl_ParseCommand procedure, simple words} { +test parse-4.6 {Tcl_ParseCommand procedure, simple words} testparser { testparser {$x} 0 } {- {$x} 1 word {$x} 2 variable {$x} 1 text x 0 {}} -test parse-5.1 {Tcl_ParseCommand procedure, backslash-newline terminates word} { +test parse-5.1 {Tcl_ParseCommand procedure, backslash-newline terminates word} testparser { testparser "{abc}\\\n" 0 } {- \{abc\}\\\n 1 simple {{abc}} 1 text abc 0 {}} -test parse-5.2 {Tcl_ParseCommand procedure, backslash-newline terminates word} { +test parse-5.2 {Tcl_ParseCommand procedure, backslash-newline terminates word} testparser { testparser "foo\\\nbar" 0 } {- foo\\\nbar 2 simple foo 1 text foo 0 simple bar 1 text bar 0 {}} -test parse-5.3 {Tcl_ParseCommand procedure, word terminator is command terminator} { +test parse-5.3 {Tcl_ParseCommand procedure, word terminator is command terminator} testparser { testparser "foo\n bar" 0 } {- {foo } 1 simple foo 1 text foo 0 { bar}} -test parse-5.4 {Tcl_ParseCommand procedure, word terminator is command terminator} { +test parse-5.4 {Tcl_ParseCommand procedure, word terminator is command terminator} testparser { testparser "foo; bar" 0 } {- {foo;} 1 simple foo 1 text foo 0 { bar}} -test parse-5.5 {Tcl_ParseCommand procedure, word terminator is end of string} { +test parse-5.5 {Tcl_ParseCommand procedure, word terminator is end of string} testparser { testparser "\"foo\" bar" 5 } {- {"foo"} 1 simple {"foo"} 1 text foo 0 { bar}} -test parse-5.6 {Tcl_ParseCommand procedure, junk after close quote} { - list [catch {testparser {foo "bar"x} 0} msg] $msg $errorInfo +test parse-5.6 {Tcl_ParseCommand procedure, junk after close quote} testparser { + list [catch {testparser {foo "bar"x} 0} msg] $msg $::errorInfo } {1 {extra characters after close-quote} {extra characters after close-quote (remainder of script: "x") invoked from within "testparser {foo "bar"x} 0"}} -test parse-5.7 {Tcl_ParseCommand procedure, backslash-newline after close quote} { +test parse-5.7 {Tcl_ParseCommand procedure, backslash-newline after close quote} testparser { testparser "foo \"bar\"\\\nx" 0 } {- foo\ \"bar\"\\\nx 3 simple foo 1 text foo 0 simple {"bar"} 1 text bar 0 simple x 1 text x 0 {}} -test parse-5.8 {Tcl_ParseCommand procedure, junk after close brace} { - list [catch {testparser {foo {bar}x} 0} msg] $msg $errorInfo +test parse-5.8 {Tcl_ParseCommand procedure, junk after close brace} testparser { + list [catch {testparser {foo {bar}x} 0} msg] $msg $::errorInfo } {1 {extra characters after close-brace} {extra characters after close-brace (remainder of script: "x") invoked from within "testparser {foo {bar}x} 0"}} -test parse-5.9 {Tcl_ParseCommand procedure, backslash-newline after close brace} { +test parse-5.9 {Tcl_ParseCommand procedure, backslash-newline after close brace} testparser { testparser "foo {bar}\\\nx" 0 } {- foo\ \{bar\}\\\nx 3 simple foo 1 text foo 0 simple {{bar}} 1 text bar 0 simple x 1 text x 0 {}} -test parse-5.10 {Tcl_ParseCommand procedure, multiple deletion of non-static buffer} { +test parse-5.10 {Tcl_ParseCommand procedure, multiple deletion of non-static buffer} testparser { # This test is designed to catch bug 1681. - list [catch {testparser "a \"\\1\\2\\3\\4\\5\\6\\7\\8\\9\\1\\2\\3\\4\\5\\6\\7\\8" 0} msg] $msg $errorInfo + list [catch {testparser "a \"\\1\\2\\3\\4\\5\\6\\7\\8\\9\\1\\2\\3\\4\\5\\6\\7\\8" 0} msg] $msg $::errorInfo } "1 {missing \"} {missing \" (remainder of script: \"\"\\1\\2\\3\\4\\5\\6\\7\\8\\9\\1\\2\\3\\4\\5\\6\\7\\8\") invoked from within \"testparser \"a \\\"\\\\1\\\\2\\\\3\\\\4\\\\5\\\\6\\\\7\\\\8\\\\9\\\\1\\\\2\\\\3\\\\4\\\\5\\\\6\\\\7\\\\8\" 0\"}" -test parse-6.1 {ParseTokens procedure, empty word} { +test parse-5.11 {Tcl_ParseCommand: {*} parsing} testparser { + testparser {{expan}} 0 +} {- {{expan}} 1 simple {{expan}} 1 text expan 0 {}} +test parse-5.12 {Tcl_ParseCommand: {*} parsing} -constraints { + testparser +} -body { + testparser {{expan}x} 0 +} -returnCodes error -result {extra characters after close-brace} +test parse-5.13 {Tcl_ParseCommand: {*} parsing} testparser { + testparser {{**}} 0 +} {- {{**}} 1 simple {{**}} 1 text ** 0 {}} +test parse-5.14 {Tcl_ParseCommand: {*} parsing} -constraints { + testparser +} -body { + testparser {{**}x} 0 +} -returnCodes error -result {extra characters after close-brace} +test parse-5.15 {Tcl_ParseCommand: {*} parsing} -constraints { + testparser +} -body { + testparser {{*}{123456}x} 0 +} -returnCodes error -result {extra characters after close-brace} +test parse-5.16 {Tcl_ParseCommand: {*} parsing} testparser { + testparser {{123456\ + }} 0 +} {- {{123456 }} 1 simple {{123456 }} 1 text {123456 } 0 {}} +test parse-5.17 {Tcl_ParseCommand: {*} parsing} -constraints { + testparser +} -body { + testparser {{123456\ + }x} 0 +} -returnCodes error -result {extra characters after close-brace} +test parse-5.18 {Tcl_ParseCommand: {*} parsing} testparser { + testparser {{*\ + }} 0 +} {- {{* }} 1 simple {{* }} 1 text {* } 0 {}} +test parse-5.19 {Tcl_ParseCommand: {*} parsing} -constraints { + testparser +} -body { + testparser {{*\ + }x} 0 +} -returnCodes error -result {extra characters after close-brace} +test parse-5.20 {Tcl_ParseCommand: {*} parsing} testparser { + testparser {{123456}} 0 +} {- {{123456}} 1 simple {{123456}} 1 text 123456 0 {}} +test parse-5.21 {Tcl_ParseCommand: {*} parsing} -constraints { + testparser +} -body { + testparser {{123456}x} 0 +} -returnCodes error -result {extra characters after close-brace} +test parse-5.22 {Tcl_ParseCommand: {*} parsing} testparser { + testparser {{*}} 0 +} {- {{*}} 1 simple {{*}} 1 text * 0 {}} +test parse-5.23 {Tcl_ParseCommand: {*} parsing} testparser { + testparser {{*} } 0 +} {- {{*} } 1 simple {{*}} 1 text * 0 {}} +test parse-5.24 {Tcl_ParseCommand: {*} parsing} testparser { + testparser {{*}x} 0 +} {- {{*}x} 1 simple x 1 text x 0 {}} +test parse-5.25 {Tcl_ParseCommand: {*} parsing} testparser { + testparser {{*} +} 0 +} {- {{*} +} 1 simple {{*}} 1 text * 0 {}} +test parse-5.26 {Tcl_ParseCommand: {*} parsing} testparser { + testparser {{*};} 0 +} {- {{*};} 1 simple {{*}} 1 text * 0 {}} +test parse-5.27 {Tcl_ParseCommand: {*} parsing} testparser { + testparser "{*}\\\n foo bar" 0 +} {- \{*\}\\\n\ foo\ bar 3 simple {{*}} 1 text * 0 simple foo 1 text foo 0 simple bar 1 text bar 0 {}} +test parse-5.28 {Tcl_ParseCommand: {*} parsing, expanded literals} testparser { + testparser {{*}{a b}} 0 +} {- {{*}{a b}} 2 simple a 1 text a 0 simple b 1 text b 0 {}} +test parse-5.29 {Tcl_ParseCommand: {*} parsing, expanded literals, naked backslashes} testparser { + testparser {{*}{a \n b}} 0 +} {- {{*}{a \n b}} 1 expand {{*}{a \n b}} 1 text {a \n b} 0 {}} +test parse-5.30 {Tcl_ParseCommand: {*} parsing, expanded literals} testparser { + testparser {{*}"a b"} 0 +} {- {{*}"a b"} 2 simple a 1 text a 0 simple b 1 text b 0 {}} +test parse-5.31 {Tcl_ParseCommand: {*} parsing, expanded literals, naked backslashes} testparser { + testparser {{*}"a \n b"} 0 +} {- {{*}"a \n b"} 1 expand {{*}"a \n b"} 3 text {a } 0 backslash {\n} 0 text { b} 0 {}} + +test parse-6.1 {ParseTokens procedure, empty word} testparser { testparser {""} 0 } {- {""} 1 simple {""} 1 text {} 0 {}} -test parse-6.2 {ParseTokens procedure, simple range} { +test parse-6.2 {ParseTokens procedure, simple range} testparser { testparser {"abc$x.e"} 0 } {- {"abc$x.e"} 1 word {"abc$x.e"} 4 text abc 0 variable {$x} 1 text x 0 text .e 0 {}} -test parse-6.3 {ParseTokens procedure, variable reference} { +test parse-6.3 {ParseTokens procedure, variable reference} testparser { testparser {abc$x.e $y(z)} 0 } {- {abc$x.e $y(z)} 2 word {abc$x.e} 4 text abc 0 variable {$x} 1 text x 0 text .e 0 word {$y(z)} 3 variable {$y(z)} 2 text y 0 text z 0 {}} -test parse-6.4 {ParseTokens procedure, variable reference} { +test parse-6.4 {ParseTokens procedure, variable reference} testparser { list [catch {testparser {$x([a )} 0} msg] $msg } {1 {missing close-bracket}} -test parse-6.5 {ParseTokens procedure, command substitution} { +test parse-6.5 {ParseTokens procedure, command substitution} testparser { testparser {[foo $x bar]z} 0 } {- {[foo $x bar]z} 1 word {[foo $x bar]z} 2 command {[foo $x bar]} 0 text z 0 {}} -test parse-6.6 {ParseTokens procedure, command substitution} { +test parse-6.6 {ParseTokens procedure, command substitution} testparser { testparser {[foo \] [a b]]} 0 } {- {[foo \] [a b]]} 1 word {[foo \] [a b]]} 1 command {[foo \] [a b]]} 0 {}} -test parse-6.7 {ParseTokens procedure, error in command substitution} { - list [catch {testparser {a [b {}c d] e} 0} msg] $msg $errorInfo +test parse-6.7 {ParseTokens procedure, error in command substitution} testparser { + list [catch {testparser {a [b {}c d] e} 0} msg] $msg $::errorInfo } {1 {extra characters after close-brace} {extra characters after close-brace (remainder of script: "c d] e") invoked from within @@ -183,87 +275,94 @@ test parse-6.10 {ParseTokens procedure, incomplete sub-command} { expr 1+1 #this is a comment ]} } {0} -test parse-6.11 {ParseTokens procedure, memory allocation for big nested command} { +test parse-6.11 {ParseTokens procedure, memory allocation for big nested command} testparser { testparser {[$a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b)]} 0 } {- {[$a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b)]} 1 word {[$a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b)]} 1 command {[$a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b)]} 0 {}} -test parse-6.12 {ParseTokens procedure, missing close bracket} { - list [catch {testparser {[foo $x bar} 0} msg] $msg $errorInfo +test parse-6.12 {ParseTokens procedure, missing close bracket} testparser { + list [catch {testparser {[foo $x bar} 0} msg] $msg $::errorInfo } {1 {missing close-bracket} {missing close-bracket (remainder of script: "[foo $x bar") invoked from within "testparser {[foo $x bar} 0"}} -test parse-6.13 {ParseTokens procedure, backslash-newline without continuation line} { - list [catch {testparser "\"a b\\\n" 0} msg] $msg $errorInfo +test parse-6.13 {ParseTokens procedure, backslash-newline without continuation line} testparser { + list [catch {testparser "\"a b\\\n" 0} msg] $msg $::errorInfo } {1 {missing "} missing\ \"\n\ \ \ \ (remainder\ of\ script:\ \"\"a\ b\\\n\")\n\ \ \ \ invoked\ from\ within\n\"testparser\ \"\\\"a\ b\\\\\\n\"\ 0\"} -test parse-6.14 {ParseTokens procedure, backslash-newline} { +test parse-6.14 {ParseTokens procedure, backslash-newline} testparser { testparser "b\\\nc" 0 } {- b\\\nc 2 simple b 1 text b 0 simple c 1 text c 0 {}} -test parse-6.15 {ParseTokens procedure, backslash-newline} { +test parse-6.15 {ParseTokens procedure, backslash-newline} testparser { testparser "\"b\\\nc\"" 0 } {- \"b\\\nc\" 1 word \"b\\\nc\" 3 text b 0 backslash \\\n 0 text c 0 {}} -test parse-6.16 {ParseTokens procedure, backslash substitution} { +test parse-6.16 {ParseTokens procedure, backslash substitution} testparser { testparser {\n\a\x7f} 0 } {- {\n\a\x7f} 1 word {\n\a\x7f} 3 backslash {\n} 0 backslash {\a} 0 backslash {\x7f} 0 {}} -test parse-6.17 {ParseTokens procedure, null characters} { +test parse-6.17 {ParseTokens procedure, null characters} testparser { testparser [bytestring "foo\0zz"] 0 } "- [bytestring foo\0zz] 1 word [bytestring foo\0zz] 3 text foo 0 text [bytestring \0] 0 text zz 0 {}" -test parse-6.18 {ParseTokens procedure, seek past numBytes for close-bracket} { +test parse-6.18 {ParseTokens procedure, seek past numBytes for close-bracket} testparser { # Test for Bug 681841 list [catch {testparser {[a]} 2} msg] $msg } {1 {missing close-bracket}} -test parse-7.1 {Tcl_FreeParse and ExpandTokenArray procedures} { +test parse-7.1 {Tcl_FreeParse and ExpandTokenArray procedures} testparser { testparser {$a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) } 0 } {- {$a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) $a(b) } 16 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 word {$a(b)} 3 variable {$a(b)} 2 text a 0 text b 0 {}} -testConstraint testevalobjv [llength [info commands testevalobjv]] -testConstraint testevalex [llength [info commands testevalex]] test parse-8.1 {Tcl_EvalObjv procedure} testevalobjv { testevalobjv 0 concat this is a test } {this is a test} test parse-8.2 {Tcl_EvalObjv procedure, unknown commands} testevalobjv { - rename unknown unknown.old + rename ::unknown unknown.old set x [catch {testevalobjv 10 asdf poiu} msg] - rename unknown.old unknown + rename unknown.old ::unknown list $x $msg } {1 {invalid command name "asdf"}} test parse-8.3 {Tcl_EvalObjv procedure, unknown commands} testevalobjv { - rename unknown unknown.old - proc unknown args { + rename ::unknown unknown.old + proc ::unknown args { return "unknown $args" } set x [catch {testevalobjv 0 asdf poiu} msg] - rename unknown {} - rename unknown.old unknown + rename ::unknown {} + rename unknown.old ::unknown list $x $msg } {0 {unknown asdf poiu}} test parse-8.4 {Tcl_EvalObjv procedure, unknown commands} testevalobjv { - rename unknown unknown.old - proc unknown args { + rename ::unknown unknown.old + proc ::unknown args { error "I don't like that command" } set x [catch {testevalobjv 0 asdf poiu} msg] - rename unknown {} - rename unknown.old unknown + rename ::unknown {} + rename unknown.old ::unknown list $x $msg } {1 {I don't like that command}} -test parse-8.5 {Tcl_EvalObjv procedure, command traces} testevalobjv { +test parse-8.5 {Tcl_EvalObjv procedure, command traces} {testevalobjv testcmdtrace} { testevalobjv 0 set x 123 testcmdtrace tracetest {testevalobjv 0 set x $x} } {{testevalobjv 0 set x $x} {testevalobjv 0 set x 123} {set x 123} {set x 123}} -test parse-8.7 {Tcl_EvalObjv procedure, TCL_EVAL_GLOBAL flag} testevalobjv { +test parse-8.7 {Tcl_EvalObjv procedure, TCL_EVAL_GLOBAL flag} -constraints { + testevalobjv +} -setup { proc x {} { set y 23 set z [testevalobjv 1 set y] return [list $z $y] } - catch {unset y} - set y 16 + set ::y 16 +} -cleanup { + unset ::y +} -body { x -} {16 23} -test parse-8.8 {Tcl_EvalObjv procedure, async handlers} testevalobjv { +} -result {16 23} +test parse-8.8 {Tcl_EvalObjv procedure, async handlers} -constraints { + testevalobjv testasync +} -setup { + variable ::aresult + variable ::acode proc async1 {result code} { - global aresult acode + variable ::aresult + variable ::acode set aresult $result set acode $code return "new result" @@ -271,10 +370,11 @@ test parse-8.8 {Tcl_EvalObjv procedure, async handlers} testevalobjv { set handler1 [testasync create async1] set aresult xxx set acode yyy - set x [list [catch [list testevalobjv 0 testasync mark $handler1 original 0] msg] $msg $acode $aresult] +} -cleanup { testasync delete - set x -} {0 {new result} 0 original} +} -body { + list [testevalobjv 0 testasync mark $handler1 original 0] $acode $aresult +} -result {{new result} 0 original} test parse-8.9 {Tcl_EvalObjv procedure, exceptional return} testevalobjv { list [catch {testevalobjv 0 error message} msg] $msg } {1 message} @@ -284,8 +384,8 @@ test parse-8.10 {Tcl_EvalObjv procedure, TCL_EVAL_GLOBAL} testevalobjv { catch {rename ::noSuchCommand {}} set ::info {} namespace eval test_ns_1 { - testevalobjv 1 noSuchCommand - uplevel #0 noSuchCommand + testevalobjv 1 noSuchCommand + uplevel #0 noSuchCommand } namespace delete test_ns_1 rename ::unknown {} @@ -301,10 +401,10 @@ test parse-8.11 {Tcl_EvalObjv procedure, TCL_EVAL_INVOKE} testevalobjv { $::slave alias bar noSuchCommand set ::info {} namespace eval test_ns_1 { - proc foo args {lappend ::info namespace} - $::slave eval bar - testevalobjv 1 [list $::slave eval bar] - uplevel #0 [list $::slave eval bar] + proc foo args {lappend ::info namespace} + $::slave eval bar + testevalobjv 1 [list $::slave eval bar] + uplevel #0 [list $::slave eval bar] } namespace delete test_ns_1 rename ::foo {} @@ -314,18 +414,18 @@ test parse-8.11 {Tcl_EvalObjv procedure, TCL_EVAL_INVOKE} testevalobjv { } [subst {[set level 2; incr level [info level]] global 1 global 1 global}] test parse-8.12 {Tcl_EvalObjv procedure, TCL_EVAL_INVOKE} { set ::auto_index(noSuchCommand) { - proc noSuchCommand {} {lappend ::info global} + proc noSuchCommand {} {lappend ::info global} } set ::auto_index(::[string trimleft [namespace current]::test_ns_1::noSuchCommand :]) [list \ - proc [namespace current]::test_ns_1::noSuchCommand {} { - lappend ::info ns - }] + proc [namespace current]::test_ns_1::noSuchCommand {} { + lappend ::info ns + }] catch {rename ::noSuchCommand {}} set ::slave [interp create] $::slave alias bar noSuchCommand set ::info {} namespace eval test_ns_1 { - $::slave eval bar + $::slave eval bar } namespace delete test_ns_1 interp delete $::slave @@ -333,14 +433,15 @@ test parse-8.12 {Tcl_EvalObjv procedure, TCL_EVAL_INVOKE} { set ::info } global -test parse-9.1 {Tcl_LogCommandInfo, line numbers} { + +test parse-9.1 {Tcl_LogCommandInfo, line numbers} testevalex { catch {unset x} list [catch {testevalex {for {} 1 {} { # asdf set x - }}}] $errorInfo + }}}] $::errorInfo } {1 {can't read "x": no such variable while executing "set x" @@ -360,264 +461,268 @@ test parse-9.1 {Tcl_LogCommandInfo, line numbers} { set x }}"}} test parse-9.2 {Tcl_LogCommandInfo, truncating long commands} { - list [testevalex {catch {set a b 111111111 222222222 333333333 444444444 555555555 666666666 777777777 888888888 999999999 000000000 aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee fffffffff ggggggggg}}] $errorInfo + list [catch {set a b 111111111 222222222 333333333 444444444 555555555 666666666 777777777 888888888 999999999 000000000 aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee fffffffff ggggggggg}] $::errorInfo } {1 {wrong # args: should be "set varName ?newValue?" while executing "set a b 111111111 222222222 333333333 444444444 555555555 666666666 777777777 888888888 999999999 000000000 aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd ee..."}} -test parse-10.1 {Tcl_EvalTokens, simple text} { +test parse-10.1 {Tcl_EvalTokens, simple text} testevalex { testevalex {concat test} } {test} -test parse-10.2 {Tcl_EvalTokens, backslash sequences} { +test parse-10.2 {Tcl_EvalTokens, backslash sequences} testevalex { testevalex {concat test\063\062test} } {test32test} -test parse-10.3 {Tcl_EvalTokens, nested commands} { +test parse-10.3 {Tcl_EvalTokens, nested commands} testevalex { testevalex {concat [expr 2 + 6]} } {8} -test parse-10.4 {Tcl_EvalTokens, nested commands} { +test parse-10.4 {Tcl_EvalTokens, nested commands} testevalex { catch {unset a} list [catch {testevalex {concat xxx[expr $a]}} msg] $msg } {1 {can't read "a": no such variable}} -test parse-10.5 {Tcl_EvalTokens, simple variables} { +test parse-10.5 {Tcl_EvalTokens, simple variables} testevalex { set a hello testevalex {concat $a} } {hello} -test parse-10.6 {Tcl_EvalTokens, array variables} { +test parse-10.6 {Tcl_EvalTokens, array variables} testevalex { catch {unset a} set a(12) 46 testevalex {concat $a(12)} } {46} -test parse-10.7 {Tcl_EvalTokens, array variables} { +test parse-10.7 {Tcl_EvalTokens, array variables} testevalex { catch {unset a} set a(12) 46 testevalex {concat $a(1[expr 3 - 1])} } {46} -test parse-10.8 {Tcl_EvalTokens, array variables} { +test parse-10.8 {Tcl_EvalTokens, array variables} testevalex { catch {unset a} list [catch {testevalex {concat $x($a)}} msg] $msg } {1 {can't read "a": no such variable}} -test parse-10.9 {Tcl_EvalTokens, array variables} { +test parse-10.9 {Tcl_EvalTokens, array variables} testevalex { catch {unset a} list [catch {testevalex {concat xyz$a(1)}} msg] $msg } {1 {can't read "a(1)": no such variable}} -test parse-10.10 {Tcl_EvalTokens, object values} { +test parse-10.10 {Tcl_EvalTokens, object values} testevalex { set a 123 testevalex {concat $a} } {123} -test parse-10.11 {Tcl_EvalTokens, object values} { +test parse-10.11 {Tcl_EvalTokens, object values} testevalex { set a 123 testevalex {concat $a$a$a} } {123123123} -test parse-10.12 {Tcl_EvalTokens, object values} { +test parse-10.12 {Tcl_EvalTokens, object values} testevalex { testevalex {concat [expr 2][expr 4][expr 6]} } {246} -test parse-10.13 {Tcl_EvalTokens, string values} { +test parse-10.13 {Tcl_EvalTokens, string values} testevalex { testevalex {concat {a" b"}} } {a" b"} -test parse-10.14 {Tcl_EvalTokens, string values} { +test parse-10.14 {Tcl_EvalTokens, string values} testevalex { set a 111 testevalex {concat x$a.$a.$a} } {x111.111.111} -test parse-11.1 {Tcl_EvalEx, TCL_EVAL_GLOBAL flag} { +test parse-11.1 {Tcl_EvalEx, TCL_EVAL_GLOBAL flag} -constraints { + testevalex +} -setup { proc x {} { set y 777 set z [testevalex "set y" global] return [list $z $y] } - catch {unset y} - set y 321 + set ::y 321 +} -cleanup { + unset ::y +} -body { x -} {321 777} -test parse-11.2 {Tcl_EvalEx, error while parsing} { +} -result {321 777} +test parse-11.2 {Tcl_EvalEx, error while parsing} testevalex { list [catch {testevalex {concat "abc}} msg] $msg } {1 {missing "}} -test parse-11.3 {Tcl_EvalEx, error while collecting words} { +test parse-11.3 {Tcl_EvalEx, error while collecting words} testevalex { catch {unset a} list [catch {testevalex {concat xyz $a}} msg] $msg } {1 {can't read "a": no such variable}} -test parse-11.4 {Tcl_EvalEx, error in Tcl_EvalObjv call} { +test parse-11.4 {Tcl_EvalEx, error in Tcl_EvalObjv call} testevalex { catch {unset a} list [catch {testevalex {_bogus_ a b c d}} msg] $msg } {1 {invalid command name "_bogus_"}} -test parse-11.5 {Tcl_EvalEx, exceptional return} { +test parse-11.5 {Tcl_EvalEx, exceptional return} testevalex { list [catch {testevalex {break}} msg] $msg } {3 {}} -test parse-11.6 {Tcl_EvalEx, freeing memory} { +test parse-11.6 {Tcl_EvalEx, freeing memory} testevalex { testevalex {concat a b c d e f g h i j k l m n o p q r s t u v w x y z} } {a b c d e f g h i j k l m n o p q r s t u v w x y z} -test parse-11.7 {Tcl_EvalEx, multiple commands in script} { +test parse-11.7 {Tcl_EvalEx, multiple commands in script} testevalex { list [testevalex {set a b; set c d}] $a $c } {d b d} -test parse-11.8 {Tcl_EvalEx, multiple commands in script} { +test parse-11.8 {Tcl_EvalEx, multiple commands in script} testevalex { list [testevalex { set a b set c d }] $a $c } {d b d} -test parse-11.9 {Tcl_EvalEx, freeing memory after error} { +test parse-11.9 {Tcl_EvalEx, freeing memory after error} testevalex { catch {unset a} list [catch {testevalex {concat a b c d e f g h i j k l m n o p q r s t u v w x y z $a}} msg] $msg } {1 {can't read "a": no such variable}} -test parse-11.10 {Tcl_EvalTokens, empty commands} { +test parse-11.10 {Tcl_EvalTokens, empty commands} testevalex { testevalex {concat xyz; } } {xyz} -test parse-11.11 {Tcl_EvalTokens, empty commands} { +test parse-11.11 {Tcl_EvalTokens, empty commands} testevalex { testevalex "concat abc; ; # this is a comment\n" } {abc} -test parse-11.12 {Tcl_EvalTokens, empty commands} { +test parse-11.12 {Tcl_EvalTokens, empty commands} testevalex { testevalex {} } {} -test parse-12.1 {Tcl_ParseVarName procedure, initialization} { +test parse-12.1 {Tcl_ParseVarName procedure, initialization} testparsevarname { list [catch {testparsevarname {$a([first second])} 8 0} msg] $msg } {1 {missing close-bracket}} -test parse-12.2 {Tcl_ParseVarName procedure, initialization} { +test parse-12.2 {Tcl_ParseVarName procedure, initialization} testparsevarname { testparsevarname {$a([first second])} 0 0 } {- {} 0 variable {$a([first second])} 2 text a 0 command {[first second]} 0 {}} -test parse-12.3 {Tcl_ParseVarName procedure, initialization} { +test parse-12.3 {Tcl_ParseVarName procedure, initialization} testparsevarname { list [catch {testparsevarname {$abcd} 3 0} msg] $msg } {0 {- {} 0 variable {$ab} 1 text ab 0 cd}} -test parse-12.4 {Tcl_ParseVarName procedure, initialization} { +test parse-12.4 {Tcl_ParseVarName procedure, initialization} testparsevarname { testparsevarname {$abcd} 0 0 } {- {} 0 variable {$abcd} 1 text abcd 0 {}} -test parse-12.5 {Tcl_ParseVarName procedure, just a dollar sign} { +test parse-12.5 {Tcl_ParseVarName procedure, just a dollar sign} testparsevarname { testparsevarname {$abcd} 1 0 } {- {} 0 text {$} 0 abcd} -test parse-12.6 {Tcl_ParseVarName procedure, braced variable name} { +test parse-12.6 {Tcl_ParseVarName procedure, braced variable name} testparser { testparser {${..[]b}cd} 0 } {- {${..[]b}cd} 1 word {${..[]b}cd} 3 variable {${..[]b}} 1 text {..[]b} 0 text cd 0 {}} -test parse-12.7 {Tcl_ParseVarName procedure, braced variable name} { +test parse-12.7 {Tcl_ParseVarName procedure, braced variable name} testparser { testparser "\$\{\{\} " 0 } {- \$\{\{\}\ 1 word \$\{\{\} 2 variable \$\{\{\} 1 text \{ 0 {}} -test parse-12.8 {Tcl_ParseVarName procedure, missing close brace} { - list [catch {testparser "$\{abc" 0} msg] $msg $errorInfo +test parse-12.8 {Tcl_ParseVarName procedure, missing close brace} testparser { + list [catch {testparser "$\{abc" 0} msg] $msg $::errorInfo } {1 {missing close-brace for variable name} missing\ close-brace\ for\ variable\ name\n\ \ \ \ (remainder\ of\ script:\ \"\{abc\")\n\ \ \ \ invoked\ from\ within\n\"testparser\ \"\$\\\{abc\"\ 0\"} -test parse-12.9 {Tcl_ParseVarName procedure, missing close brace} { +test parse-12.9 {Tcl_ParseVarName procedure, missing close brace} testparsevarname { list [catch {testparsevarname {${bcd}} 4 0} msg] $msg } {1 {missing close-brace for variable name}} -test parse-12.10 {Tcl_ParseVarName procedure, missing close brace} { +test parse-12.10 {Tcl_ParseVarName procedure, missing close brace} testparsevarname { list [catch {testparsevarname {${bc}} 4 0} msg] $msg } {1 {missing close-brace for variable name}} -test parse-12.11 {Tcl_ParseVarName procedure, simple variable name} { +test parse-12.11 {Tcl_ParseVarName procedure, simple variable name} testparser { testparser {$az_AZ.} 0 } {- {$az_AZ.} 1 word {$az_AZ.} 3 variable {$az_AZ} 1 text az_AZ 0 text . 0 {}} -test parse-12.12 {Tcl_ParseVarName procedure, simple variable name} { +test parse-12.12 {Tcl_ParseVarName procedure, simple variable name} testparser { testparser {$abcdefg} 4 } {- {$abc} 1 word {$abc} 2 variable {$abc} 1 text abc 0 defg} -test parse-12.13 {Tcl_ParseVarName procedure, simple variable name with ::} { +test parse-12.13 {Tcl_ParseVarName procedure, simple variable name with ::} testparser { testparser {$xyz::ab:c} 0 } {- {$xyz::ab:c} 1 word {$xyz::ab:c} 3 variable {$xyz::ab} 1 text xyz::ab 0 text :c 0 {}} -test parse-12.14 {Tcl_ParseVarName procedure, variable names with many colons} { +test parse-12.14 {Tcl_ParseVarName procedure, variable names with many colons} testparser { testparser {$xyz:::::c} 0 } {- {$xyz:::::c} 1 word {$xyz:::::c} 2 variable {$xyz:::::c} 1 text xyz:::::c 0 {}} -test parse-12.15 {Tcl_ParseVarName procedure, : vs. ::} { +test parse-12.15 {Tcl_ParseVarName procedure, : vs. ::} testparsevarname { testparsevarname {$ab:cd} 0 0 } {- {} 0 variable {$ab} 1 text ab 0 :cd} -test parse-12.16 {Tcl_ParseVarName procedure, eof in ::} { +test parse-12.16 {Tcl_ParseVarName procedure, eof in ::} testparsevarname { testparsevarname {$ab::cd} 4 0 } {- {} 0 variable {$ab} 1 text ab 0 ::cd} -test parse-12.17 {Tcl_ParseVarName procedure, eof in ::} { +test parse-12.17 {Tcl_ParseVarName procedure, eof in ::} testparsevarname { testparsevarname {$ab:::cd} 5 0 } {- {} 0 variable {$ab::} 1 text ab:: 0 :cd} -test parse-12.18 {Tcl_ParseVarName procedure, no variable name} { +test parse-12.18 {Tcl_ParseVarName procedure, no variable name} testparser { testparser {$$ $.} 0 } {- {$$ $.} 2 word {$$} 2 text {$} 0 text {$} 0 word {$.} 2 text {$} 0 text . 0 {}} -test parse-12.19 {Tcl_ParseVarName procedure, EOF before (} { +test parse-12.19 {Tcl_ParseVarName procedure, EOF before (} testparsevarname { testparsevarname {$ab(cd)} 3 0 } {- {} 0 variable {$ab} 1 text ab 0 (cd)} -test parse-12.20 {Tcl_ParseVarName procedure, array reference} { +test parse-12.20 {Tcl_ParseVarName procedure, array reference} testparser { testparser {$x(abc)} 0 } {- {$x(abc)} 1 word {$x(abc)} 3 variable {$x(abc)} 2 text x 0 text abc 0 {}} -test parse-12.21 {Tcl_ParseVarName procedure, array reference} { +test parse-12.21 {Tcl_ParseVarName procedure, array reference} testparser { testparser {$x(ab$cde[foo bar])} 0 } {- {$x(ab$cde[foo bar])} 1 word {$x(ab$cde[foo bar])} 6 variable {$x(ab$cde[foo bar])} 5 text x 0 text ab 0 variable {$cde} 1 text cde 0 command {[foo bar]} 0 {}} -test parse-12.22 {Tcl_ParseVarName procedure, array reference} { +test parse-12.22 {Tcl_ParseVarName procedure, array reference} testparser { testparser {$x([cmd arg]zz)} 0 } {- {$x([cmd arg]zz)} 1 word {$x([cmd arg]zz)} 4 variable {$x([cmd arg]zz)} 3 text x 0 command {[cmd arg]} 0 text zz 0 {}} -test parse-12.23 {Tcl_ParseVarName procedure, missing close paren in array reference} { - list [catch {testparser {$x(poiu} 0} msg] $msg $errorInfo +test parse-12.23 {Tcl_ParseVarName procedure, missing close paren in array reference} testparser { + list [catch {testparser {$x(poiu} 0} msg] $msg $::errorInfo } {1 {missing )} {missing ) (remainder of script: "(poiu") invoked from within "testparser {$x(poiu} 0"}} -test parse-12.24 {Tcl_ParseVarName procedure, missing close paren in array reference} { - list [catch {testparsevarname {$ab(cd)} 6 0} msg] $msg $errorInfo +test parse-12.24 {Tcl_ParseVarName procedure, missing close paren in array reference} testparsevarname { + list [catch {testparsevarname {$ab(cd)} 6 0} msg] $msg $::errorInfo } {1 {missing )} {missing ) (remainder of script: "(cd)") invoked from within "testparsevarname {$ab(cd)} 6 0"}} -test parse-12.25 {Tcl_ParseVarName procedure, nested array reference} { +test parse-12.25 {Tcl_ParseVarName procedure, nested array reference} testparser { testparser {$x(a$y(b$z))} 0 } {- {$x(a$y(b$z))} 1 word {$x(a$y(b$z))} 8 variable {$x(a$y(b$z))} 7 text x 0 text a 0 variable {$y(b$z)} 4 text y 0 text b 0 variable {$z} 1 text z 0 {}} -test parse-13.1 {Tcl_ParseVar procedure} { +test parse-13.1 {Tcl_ParseVar procedure} testparsevar { set abc 24 testparsevar {$abc.fg} } {24 .fg} -test parse-13.2 {Tcl_ParseVar procedure, no variable name} { +test parse-13.2 {Tcl_ParseVar procedure, no variable name} testparsevar { testparsevar {$} } {{$} {}} -test parse-13.3 {Tcl_ParseVar procedure, no variable name} { +test parse-13.3 {Tcl_ParseVar procedure, no variable name} testparsevar { testparsevar {$.123} } {{$} .123} -test parse-13.4 {Tcl_ParseVar procedure, error looking up variable} { +test parse-13.4 {Tcl_ParseVar procedure, error looking up variable} testparsevar { catch {unset abc} list [catch {testparsevar {$abc}} msg] $msg } {1 {can't read "abc": no such variable}} -test parse-13.5 {Tcl_ParseVar procedure, error looking up variable} { +test parse-13.5 {Tcl_ParseVar procedure, error looking up variable} testparsevar { catch {unset abc} list [catch {testparsevar {$abc([bogus x y z])}} msg] $msg } {1 {invalid command name "bogus"}} -test parse-14.1 {Tcl_ParseBraces procedure, computing string length} { +test parse-14.1 {Tcl_ParseBraces procedure, computing string length} testparser { testparser [bytestring "foo\0 bar"] -1 } {- foo 1 simple foo 1 text foo 0 {}} -test parse-14.2 {Tcl_ParseBraces procedure, computing string length} { +test parse-14.2 {Tcl_ParseBraces procedure, computing string length} testparser { testparser "foo bar" -1 } {- {foo bar} 2 simple foo 1 text foo 0 simple bar 1 text bar 0 {}} -test parse-14.3 {Tcl_ParseBraces procedure, words in braces} { +test parse-14.3 {Tcl_ParseBraces procedure, words in braces} testparser { testparser {foo {a $b [concat foo]} {c d}} 0 } {- {foo {a $b [concat foo]} {c d}} 3 simple foo 1 text foo 0 simple {{a $b [concat foo]}} 1 text {a $b [concat foo]} 0 simple {{c d}} 1 text {c d} 0 {}} -test parse-14.4 {Tcl_ParseBraces procedure, empty nested braces} { +test parse-14.4 {Tcl_ParseBraces procedure, empty nested braces} testparser { testparser {foo {{}}} 0 } {- {foo {{}}} 2 simple foo 1 text foo 0 simple {{{}}} 1 text {{}} 0 {}} -test parse-14.5 {Tcl_ParseBraces procedure, nested braces} { +test parse-14.5 {Tcl_ParseBraces procedure, nested braces} testparser { testparser {foo {{a {b} c} {} {d e}}} 0 } {- {foo {{a {b} c} {} {d e}}} 2 simple foo 1 text foo 0 simple {{{a {b} c} {} {d e}}} 1 text {{a {b} c} {} {d e}} 0 {}} -test parse-14.6 {Tcl_ParseBraces procedure, backslashes in words in braces} { +test parse-14.6 {Tcl_ParseBraces procedure, backslashes in words in braces} testparser { testparser "foo {a \\n\\\{}" 0 } {- {foo {a \n\{}} 2 simple foo 1 text foo 0 simple {{a \n\{}} 1 text {a \n\{} 0 {}} -test parse-14.7 {Tcl_ParseBraces procedure, missing continuation line in braces} { - list [catch {testparser "\{abc\\\n" 0} msg] $msg $errorInfo +test parse-14.7 {Tcl_ParseBraces procedure, missing continuation line in braces} testparser { + list [catch {testparser "\{abc\\\n" 0} msg] $msg $::errorInfo } {1 {missing close-brace} missing\ close-brace\n\ \ \ \ (remainder\ of\ script:\ \"\{abc\\\n\")\n\ \ \ \ invoked\ from\ within\n\"testparser\ \"\\\{abc\\\\\\n\"\ 0\"} -test parse-14.8 {Tcl_ParseBraces procedure, backslash-newline in braces} { +test parse-14.8 {Tcl_ParseBraces procedure, backslash-newline in braces} testparser { testparser "foo {\\\nx}" 0 } {- foo\ \{\\\nx\} 2 simple foo 1 text foo 0 word \{\\\nx\} 2 backslash \\\n 0 text x 0 {}} -test parse-14.9 {Tcl_ParseBraces procedure, backslash-newline in braces} { +test parse-14.9 {Tcl_ParseBraces procedure, backslash-newline in braces} testparser { testparser "foo {a \\\n b}" 0 } {- foo\ \{a\ \\\n\ \ \ b\} 2 simple foo 1 text foo 0 word \{a\ \\\n\ \ \ b\} 3 text {a } 0 backslash \\\n\ \ \ 0 text b 0 {}} -test parse-14.10 {Tcl_ParseBraces procedure, backslash-newline in braces} { +test parse-14.10 {Tcl_ParseBraces procedure, backslash-newline in braces} testparser { testparser "foo {xyz\\\n }" 0 } {- foo\ \{xyz\\\n\ \} 2 simple foo 1 text foo 0 word \{xyz\\\n\ \} 2 text xyz 0 backslash \\\n\ 0 {}} -test parse-14.11 {Tcl_ParseBraces procedure, empty braced string} { +test parse-14.11 {Tcl_ParseBraces procedure, empty braced string} testparser { testparser {foo {}} 0 } {- {foo {}} 2 simple foo 1 text foo 0 simple {{}} 1 text {} 0 {}} -test parse-14.12 {Tcl_ParseBraces procedure, missing close brace} { - list [catch {testparser "foo \{xy\\\nz" 0} msg] $msg $errorInfo +test parse-14.12 {Tcl_ParseBraces procedure, missing close brace} testparser { + list [catch {testparser "foo \{xy\\\nz" 0} msg] $msg $::errorInfo } {1 {missing close-brace} missing\ close-brace\n\ \ \ \ (remainder\ of\ script:\ \"\{xy\\\nz\")\n\ \ \ \ invoked\ from\ within\n\"testparser\ \"foo\ \\\{xy\\\\\\nz\"\ 0\"} -test parse-15.1 {Tcl_ParseQuotedString procedure, computing string length} { +test parse-15.1 {Tcl_ParseQuotedString procedure, computing string length} testparser { testparser [bytestring "foo\0 bar"] -1 } {- foo 1 simple foo 1 text foo 0 {}} -test parse-15.2 {Tcl_ParseQuotedString procedure, computing string length} { +test parse-15.2 {Tcl_ParseQuotedString procedure, computing string length} testparser { testparser "foo bar" -1 } {- {foo bar} 2 simple foo 1 text foo 0 simple bar 1 text bar 0 {}} -test parse-15.3 {Tcl_ParseQuotedString procedure, word is quoted string} { +test parse-15.3 {Tcl_ParseQuotedString procedure, word is quoted string} testparser { testparser {foo "a b c" d "efg";} 0 } {- {foo "a b c" d "efg";} 4 simple foo 1 text foo 0 simple {"a b c"} 1 text {a b c} 0 simple d 1 text d 0 simple {"efg"} 1 text efg 0 {}} -test parse-15.4 {Tcl_ParseQuotedString procedure, garbage after quoted string} { - list [catch {testparser {foo "a b c"d} 0} msg] $msg $errorInfo +test parse-15.4 {Tcl_ParseQuotedString procedure, garbage after quoted string} testparser { + list [catch {testparser {foo "a b c"d} 0} msg] $msg $::errorInfo } {1 {extra characters after close-quote} {extra characters after close-quote (remainder of script: "d") invoked from within @@ -762,16 +867,16 @@ test parse-15.50 {CommandComplete procedure} { info complete "abc\\\n" } 0 test parse-15.51 {CommandComplete procedure} " - info complete \"\\{abc\\}\\{\" + info complete \"\\\{abc\\\}\\\{\" " 1 test parse-15.52 {CommandComplete procedure} { info complete "\"abc\"(" } 1 test parse-15.53 {CommandComplete procedure} " - info complete \" # {\" + info complete \" # \{\" " 1 test parse-15.54 {CommandComplete procedure} " - info complete \"foo bar;# {\" + info complete \"foo bar;# \{\" " 1 test parse-15.55 {CommandComplete procedure} { info complete "set x [bytestring \0]; puts hi" @@ -789,6 +894,10 @@ test parse-15.59 {CommandComplete procedure} { # Test for Tcl Bug 684744 info complete [encoding convertfrom identity "\x00;if 1 \{"] } 0 +test parse-15.60 {CommandComplete procedure} { + # Test for Tcl Bug 1968882 + info complete \\\n +} 0 test parse-16.1 {Tcl_EvalEx, check termOffset is set correctly for non TCL_OK cases, bug 2535} { subst {[eval {return foo}]bar} @@ -798,6 +907,115 @@ test parse-17.1 {Correct return codes from errors during substitution} { catch {eval {w[continue]}} } 4 +test parse-18.1 {Tcl_SubstObj, ParseTokens flags} { + subst {foo\t$::tcl_library\t[set ::tcl_library]} +} "foo $::tcl_library $::tcl_library" +test parse-18.2 {Tcl_SubstObj, ParseTokens flags} { + subst -nocommands {foo\t$::tcl_library\t[set ::tcl_library]} +} "foo $::tcl_library \[set ::tcl_library]" +test parse-18.3 {Tcl_SubstObj, ParseTokens flags} { + subst -novariables {foo\t$::tcl_library\t[set ::tcl_library]} +} "foo \$::tcl_library $::tcl_library" +test parse-18.4 {Tcl_SubstObj, ParseTokens flags} { + subst -nobackslashes {foo\t$::tcl_library\t[set ::tcl_library]} +} "foo\\t$::tcl_library\\t$::tcl_library" +test parse-18.5 {Tcl_SubstObj, ParseTokens flags} { + subst -novariables -nobackslashes {foo\t$::tcl_library\t[set ::tcl_library]} +} "foo\\t\$::tcl_library\\t$::tcl_library" +test parse-18.6 {Tcl_SubstObj, ParseTokens flags} { + subst -nocommands -nobackslashes {foo\t$::tcl_library\t[set ::tcl_library]} +} "foo\\t$::tcl_library\\t\[set ::tcl_library]" +test parse-18.7 {Tcl_SubstObj, ParseTokens flags} { + subst -nocommands -novariables {foo\t$::tcl_library\t[set ::tcl_library]} +} "foo \$::tcl_library \[set ::tcl_library]" +test parse-18.8 {Tcl_SubstObj, ParseTokens flags} { + subst -nocommands -novariables -nobackslashes \ + {foo\t$::tcl_library\t[set ::tcl_library]} +} "foo\\t\$::tcl_library\\t\[set ::tcl_library]" + +test parse-18.9 {Tcl_SubstObj, parse errors} { + list [catch "subst foo\$\{foo" msg] $msg +} [list 1 "missing close-brace for variable name"] +test parse-18.10 {Tcl_SubstObj, parse errors} { + list [catch "subst foo\[set \$\{foo]" msg] $msg +} [list 1 "missing close-brace for variable name"] +test parse-18.11 {Tcl_SubstObj, parse errors} { + list [catch "subst foo\$array(\$\{foo)" msg] $msg +} [list 1 "missing close-brace for variable name"] +test parse-18.12 {Tcl_SubstObj, parse errors} { + list [catch "subst foo\$(\$\{foo)" msg] $msg +} [list 1 "missing close-brace for variable name"] +test parse-18.13 {Tcl_SubstObj, parse errors} { + list [catch "subst \[" msg] $msg +} [list 1 "missing close-bracket"] + +test parse-18.14 {Tcl_SubstObj, exception handling} { + subst {abc,[break],def} +} {abc,} +test parse-18.15 {Tcl_SubstObj, exception handling} { + subst {abc,[continue; expr 1+2],def} +} {abc,,def} +test parse-18.16 {Tcl_SubstObj, exception handling} { + subst {abc,[return foo; expr 1+2],def} +} {abc,foo,def} +test parse-18.17 {Tcl_SubstObj, exception handling} { + subst {abc,[return -code 10 foo; expr 1+2],def} +} {abc,foo,def} +test parse-18.18 {Tcl_SubstObj, exception handling} { + subst {abc,[break; set {} {}{}],def} +} {abc,} +test parse-18.19 {Tcl_SubstObj, exception handling} { + list [catch {subst {abc,[continue; expr 1+2; set {} {}{}],def}} msg] $msg +} [list 1 "extra characters after close-brace"] +test parse-18.20 {Tcl_SubstObj, exception handling} { + list [catch {subst {abc,[return foo; expr 1+2; set {} {}{}],def}} msg] $msg +} [list 1 "extra characters after close-brace"] +test parse-18.21 {Tcl_SubstObj, exception handling} { + list [catch { + subst {abc,[return -code 10 foo; expr 1+2; set {} {}{}],def} + } msg] $msg +} [list 1 "extra characters after close-brace"] + +test parse-18.22 {Tcl_SubstObj, side effects} { + set a 0 + list [subst {foo[incr a]bar}] $a +} [list foo1bar 1] +test parse-18.23 {Tcl_SubstObj, side effects} { + set a 0 + list [subst {foo[incr a; incr a]bar}] $a +} [list foo2bar 2] +test parse-18.24 {Tcl_SubstObj, side effects} { + set a 0 + list [subst {foo[incr a; break; incr a]bar}] $a +} [list foo 1] +test parse-18.25 {Tcl_SubstObj, side effects} { + set a 0 + list [subst {foo[incr a; continue; incr a]bar}] $a +} [list foobar 1] +test parse-18.26 {Tcl_SubstObj, side effects} { + set a 0 + list [subst {foo[incr a; return; incr a]bar}] $a +} [list foobar 1] +test parse-18.27 {Tcl_SubstObj, side effects} { + set a 0 + list [subst {foo[incr a; return -code 10; incr a]bar}] $a +} [list foobar 1] +test parse-18.28 {Tcl_SubstObj, side effects} { + set a 0 + catch {subst {foo[incr a; parse error {}{}; incr a]bar}} + set a +} 1 +test parse-18.29 {Tcl_SubstObj, side effects} { + set a 0 + catch {subst {foo[incr a; incr a; parse error {}{}]bar}} + set a +} 2 +test parse-18.30 {Tcl_SubstObj, side effects} { + set a 0 + catch {subst {foo[incr a; incr a parse error {}{}]bar}} + set a +} 1 + test parse-19.1 {Bug 1115904: recursion limit in Tcl_EvalEx} -constraints { testevalex } -setup { @@ -844,45 +1062,46 @@ test parse-19.4 {Bug 1115904: recursion limit in Tcl_EvalEx} -setup { interp delete i } -returnCodes error -match glob -result {too many nested*} -test parse-20.1 {TclParseBackslash: truncated escape} { +test parse-20.1 {TclParseBackslash: truncated escape} testparser { testparser {\u12345} 1 } {- \\ 1 simple \\ 1 text \\ 0 u12345} -test parse-20.2 {TclParseBackslash: truncated escape} { +test parse-20.2 {TclParseBackslash: truncated escape} testparser { testparser {\u12345} 2 } {- {\u} 1 word {\u} 1 backslash {\u} 0 12345} -test parse-20.3 {TclParseBackslash: truncated escape} { +test parse-20.3 {TclParseBackslash: truncated escape} testparser { testparser {\u12345} 3 } {- {\u1} 1 word {\u1} 1 backslash {\u1} 0 2345} -test parse-20.4 {TclParseBackslash: truncated escape} { +test parse-20.4 {TclParseBackslash: truncated escape} testparser { testparser {\u12345} 4 } {- {\u12} 1 word {\u12} 1 backslash {\u12} 0 345} -test parse-20.5 {TclParseBackslash: truncated escape} { +test parse-20.5 {TclParseBackslash: truncated escape} testparser { testparser {\u12345} 5 } {- {\u123} 1 word {\u123} 1 backslash {\u123} 0 45} -test parse-20.6 {TclParseBackslash: truncated escape} { +test parse-20.6 {TclParseBackslash: truncated escape} testparser { testparser {\u12345} 6 } {- {\u1234} 1 word {\u1234} 1 backslash {\u1234} 0 5} -test parse-20.7 {TclParseBackslash: truncated escape} { +test parse-20.7 {TclParseBackslash: truncated escape} testparser { testparser {\u12345} 7 } {- {\u12345} 1 word {\u12345} 2 backslash {\u1234} 0 text 5 0 {}} -test parse-20.8 {TclParseBackslash: truncated escape} { +test parse-20.8 {TclParseBackslash: truncated escape} testparser { testparser {\x12X} 1 } {- \\ 1 simple \\ 1 text \\ 0 x12X} -test parse-20.9 {TclParseBackslash: truncated escape} { +test parse-20.9 {TclParseBackslash: truncated escape} testparser { testparser {\x12X} 2 } {- {\x} 1 word {\x} 1 backslash {\x} 0 12X} -test parse-20.10 {TclParseBackslash: truncated escape} { +test parse-20.10 {TclParseBackslash: truncated escape} testparser { testparser {\x12X} 3 } {- {\x1} 1 word {\x1} 1 backslash {\x1} 0 2X} -test parse-20.11 {TclParseBackslash: truncated escape} { +test parse-20.11 {TclParseBackslash: truncated escape} testparser { testparser {\x12X} 4 } {- {\x12} 1 word {\x12} 1 backslash {\x12} 0 X} -test parse-20.12 {TclParseBackslash: truncated escape} { +test parse-20.12 {TclParseBackslash: truncated escape} testparser { testparser {\x12X} 5 } {- {\x12X} 1 word {\x12X} 2 backslash {\x12} 0 text X 0 {}} -# cleanup -catch {unset a} -::tcltest::cleanupTests +cleanupTests +} + +namespace delete ::tcl::test::parse return diff --git a/tests/parseExpr.test b/tests/parseExpr.test index 156a2cc..29d8c9f 100644 --- a/tests/parseExpr.test +++ b/tests/parseExpr.test @@ -1,5 +1,5 @@ # This file contains a collection of tests for the procedures in the -# file tclParseExpr.c. Sourcing this file into Tcl runs the tests and +# file tclCompExpr.c. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1997 Sun Microsystems, Inc. @@ -13,638 +13,1046 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -# Note that the Tcl expression parser (tclParseExpr.c) does not check +# Note that the Tcl expression parser (tclCompExpr.c) does not check # the semantic validity of the expressions it parses. It does not check, # for example, that a math function actually exists, or that the operands # of "<<" are integers. -if {[info commands testexprparser] == {}} { - puts "This application hasn't been compiled with the \"testexprparser\"" - puts "command, so I can't test the Tcl expression parser." - ::tcltest::cleanupTests - return +testConstraint testexprparser [llength [info commands testexprparser]] + +# Big test for correct ordering of data in [expr] + +proc testIEEE {} { + variable ieeeValues + binary scan [binary format dd -1.0 1.0] c* c + switch -exact -- $c { + {0 0 0 0 0 0 -16 -65 0 0 0 0 0 0 -16 63} { + # little endian + binary scan \x00\x00\x00\x00\x00\x00\xf0\xff d \ + ieeeValues(-Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf0\xbf d \ + ieeeValues(-Normal) + binary scan \x00\x00\x00\x00\x00\x00\x08\x80 d \ + ieeeValues(-Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\x00\x80 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x00\x00\x00\x00\x00\x08\x00 d \ + ieeeValues(+Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x3f d \ + ieeeValues(+Normal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x7f d \ + ieeeValues(+Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf8\x7f d \ + ieeeValues(NaN) + set ieeeValues(littleEndian) 1 + return 1 + } + {-65 -16 0 0 0 0 0 0 63 -16 0 0 0 0 0 0} { + binary scan \xff\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Infinity) + binary scan \xbf\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Normal) + binary scan \x80\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Subnormal) + binary scan \x80\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Subnormal) + binary scan \x3f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Normal) + binary scan \x7f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Infinity) + binary scan \x7f\xf8\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(NaN) + set ieeeValues(littleEndian) 0 + return 1 + } + default { + return 0 + } + } } +testConstraint ieeeFloatingPoint [testIEEE] -# Some tests only work if wide integers (>32bit) are not found to be -# integers at all. -set ::tcltest::testConstraints(wideIntegerUnparsed) \ - [expr {-1 == 0xffffffff}] +###################################################################### -test parseExpr-1.1 {Tcl_ParseExpr procedure, computing string length} { +test parseExpr-1.1 {Tcl_ParseExpr procedure, computing string length} testexprparser { testexprparser [bytestring "1+2\0 +3"] -1 } {- {} 0 subexpr 1+2 5 operator + 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 {}} -test parseExpr-1.2 {Tcl_ParseExpr procedure, computing string length} { +test parseExpr-1.2 {Tcl_ParseExpr procedure, computing string length} testexprparser { testexprparser "1 + 2" -1 } {- {} 0 subexpr {1 + 2} 5 operator + 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 {}} -test parseExpr-1.3 {Tcl_ParseExpr procedure, error getting initial lexeme} {wideIntegerUnparsed} { - list [catch {testexprparser {12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-1.4 {Tcl_ParseExpr procedure, error in conditional expression} { - list [catch {testexprparser {foo+} -1} msg] $msg -} {1 {syntax error in expression "foo+": variable references require preceding $}} -test parseExpr-1.5 {Tcl_ParseExpr procedure, lexemes after the expression} { - list [catch {testexprparser {1+2 345} -1} msg] $msg -} {1 {syntax error in expression "1+2 345": extra tokens at end of expression}} - -test parseExpr-2.1 {ParseCondExpr procedure, valid test subexpr} { +test parseExpr-1.3 {Tcl_ParseExpr procedure, error getting initial lexeme} testexprparser { + testexprparser 12345678901234567890 -1 +} {- {} 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-1.4 {Tcl_ParseExpr procedure, error in conditional expression} \ + -constraints testexprparser -body { + testexprparser {foo+} -1 + } -match glob -returnCodes error -result * +test parseExpr-1.5 {Tcl_ParseExpr procedure, lexemes after the expression} -constraints testexprparser -body { + testexprparser {1+2 345} -1 +} -returnCodes error -match glob -result * + +test parseExpr-2.1 {ParseCondExpr procedure, valid test subexpr} testexprparser { testexprparser {2>3? 1 : 0} -1 } {- {} 0 subexpr {2>3? 1 : 0} 11 operator ? 0 subexpr 2>3 5 operator > 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 subexpr 1 1 text 1 0 subexpr 0 1 text 0 0 {}} -test parseExpr-2.2 {ParseCondExpr procedure, error in test subexpr} { - list [catch {testexprparser {0 || foo} -1} msg] $msg -} {1 {syntax error in expression "0 || foo": variable references require preceding $}} -test parseExpr-2.3 {ParseCondExpr procedure, next lexeme isn't "?"} { +test parseExpr-2.2 {ParseCondExpr procedure, error in test subexpr} \ + -constraints testexprparser -body { + testexprparser {0 || foo} -1 + } -match glob -returnCodes error -result * +test parseExpr-2.3 {ParseCondExpr procedure, next lexeme isn't "?"} testexprparser { testexprparser {1+2} -1 } {- {} 0 subexpr 1+2 5 operator + 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 {}} -test parseExpr-2.4 {ParseCondExpr procedure, next lexeme is "?"} { +test parseExpr-2.4 {ParseCondExpr procedure, next lexeme is "?"} testexprparser { testexprparser {1+2 ? 3 : 4} -1 } {- {} 0 subexpr {1+2 ? 3 : 4} 11 operator ? 0 subexpr 1+2 5 operator + 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 subexpr 4 1 text 4 0 {}} -test parseExpr-2.5 {ParseCondExpr procedure, bad lexeme after "?"} {wideIntegerUnparsed} { - list [catch {testexprparser {1+2 ? 12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-2.6 {ParseCondExpr procedure, valid "then" subexpression} { +test parseExpr-2.5 {ParseCondExpr procedure, bad lexeme after "?"} testexprparser { + testexprparser {1+2 ? 12345678901234567890 : 0} -1 +} {- {} 0 subexpr {1+2 ? 12345678901234567890 : 0} 11 operator ? 0 subexpr 1+2 5 operator + 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 subexpr 0 1 text 0 0 {}} +test parseExpr-2.6 {ParseCondExpr procedure, valid "then" subexpression} testexprparser { testexprparser {1? 3 : 4} -1 } {- {} 0 subexpr {1? 3 : 4} 7 operator ? 0 subexpr 1 1 text 1 0 subexpr 3 1 text 3 0 subexpr 4 1 text 4 0 {}} -test parseExpr-2.7 {ParseCondExpr procedure, error in "then" subexpression} { - list [catch {testexprparser {1? fred : martha} -1} msg] $msg -} {1 {syntax error in expression "1? fred : martha": variable references require preceding $}} -test parseExpr-2.8 {ParseCondExpr procedure, lexeme after "then" subexpr isn't ":"} { - list [catch {testexprparser {1? 2 martha 3} -1} msg] $msg -} {1 {syntax error in expression "1? 2 martha 3": missing colon from ternary conditional}} -test parseExpr-2.9 {ParseCondExpr procedure, valid "else" subexpression} { +test parseExpr-2.7 {ParseCondExpr procedure, error in "then" subexpression} \ + -constraints testexprparser -body { + testexprparser {1? fred : martha} -1 + } -match glob -returnCodes error -result * +test parseExpr-2.8 {ParseCondExpr procedure, lexeme after "then" subexpr isn't ":"} -constraints testexprparser -body { + testexprparser {1? 2 martha 3} -1 +} -returnCodes error -match glob -result * +test parseExpr-2.9 {ParseCondExpr procedure, valid "else" subexpression} testexprparser { testexprparser {27||3? 3 : 4&&9} -1 } {- {} 0 subexpr {27||3? 3 : 4&&9} 15 operator ? 0 subexpr 27||3 5 operator || 0 subexpr 27 1 text 27 0 subexpr 3 1 text 3 0 subexpr 3 1 text 3 0 subexpr 4&&9 5 operator && 0 subexpr 4 1 text 4 0 subexpr 9 1 text 9 0 {}} -test parseExpr-2.10 {ParseCondExpr procedure, error in "else" subexpression} { - list [catch {testexprparser {1? 2 : martha} -1} msg] $msg -} {1 {syntax error in expression "1? 2 : martha": variable references require preceding $}} +test parseExpr-2.10 {ParseCondExpr procedure, error in "else" subexpression} \ + -constraints testexprparser -body { + testexprparser {1? 2 : martha} -1 + } -match glob -returnCodes error -result * -test parseExpr-3.1 {ParseLorExpr procedure, valid logical and subexpr} { +test parseExpr-3.1 {ParseLorExpr procedure, valid logical and subexpr} testexprparser { testexprparser {1&&2 || 3} -1 } {- {} 0 subexpr {1&&2 || 3} 9 operator || 0 subexpr 1&&2 5 operator && 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-3.2 {ParseLorExpr procedure, error in logical and subexpr} { - list [catch {testexprparser {1&&foo || 3} -1} msg] $msg -} {1 {syntax error in expression "1&&foo || 3": variable references require preceding $}} -test parseExpr-3.3 {ParseLorExpr procedure, next lexeme isn't "||"} { +test parseExpr-3.2 {ParseLorExpr procedure, error in logical and subexpr} \ + -constraints testexprparser -body { + testexprparser {1&&foo || 3} -1 + } -match glob -returnCodes error -result * +test parseExpr-3.3 {ParseLorExpr procedure, next lexeme isn't "||"} testexprparser { testexprparser {1&&2? 1 : 0} -1 } {- {} 0 subexpr {1&&2? 1 : 0} 11 operator ? 0 subexpr 1&&2 5 operator && 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 1 1 text 1 0 subexpr 0 1 text 0 0 {}} -test parseExpr-3.4 {ParseLorExpr procedure, next lexeme is "||"} { +test parseExpr-3.4 {ParseLorExpr procedure, next lexeme is "||"} testexprparser { testexprparser {1&&2 || 3} -1 } {- {} 0 subexpr {1&&2 || 3} 9 operator || 0 subexpr 1&&2 5 operator && 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-3.5 {ParseLorExpr procedure, bad lexeme after "||"} {wideIntegerUnparsed} { - list [catch {testexprparser {1&&2 || 12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-3.6 {ParseLorExpr procedure, valid RHS subexpression} { +test parseExpr-3.5 {ParseLorExpr procedure, bad lexeme after "||"} testexprparser { + testexprparser {1&&2 || 12345678901234567890} -1 +} {- {} 0 subexpr {1&&2 || 12345678901234567890} 9 operator || 0 subexpr 1&&2 5 operator && 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-3.6 {ParseLorExpr procedure, valid RHS subexpression} testexprparser { testexprparser {1&&2 || 3 || 4} -1 } {- {} 0 subexpr {1&&2 || 3 || 4} 13 operator || 0 subexpr {1&&2 || 3} 9 operator || 0 subexpr 1&&2 5 operator && 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 subexpr 4 1 text 4 0 {}} -test parseExpr-3.7 {ParseLorExpr procedure, error in RHS subexpression} { - list [catch {testexprparser {1&&2 || 3 || martha} -1} msg] $msg -} {1 {syntax error in expression "1&&2 || 3 || martha": variable references require preceding $}} +test parseExpr-3.7 {ParseLorExpr procedure, error in RHS subexpression} \ + -constraints testexprparser -body { + testexprparser {1&&2 || 3 || martha} -1 + } -match glob -returnCodes error -result * -test parseExpr-4.1 {ParseLandExpr procedure, valid LHS "|" subexpr} { +test parseExpr-4.1 {ParseLandExpr procedure, valid LHS "|" subexpr} testexprparser { testexprparser {1|2 && 3} -1 } {- {} 0 subexpr {1|2 && 3} 9 operator && 0 subexpr 1|2 5 operator | 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-4.2 {ParseLandExpr procedure, error in LHS "|" subexpr} { - list [catch {testexprparser {1&&foo && 3} -1} msg] $msg -} {1 {syntax error in expression "1&&foo && 3": variable references require preceding $}} -test parseExpr-4.3 {ParseLandExpr procedure, next lexeme isn't "&&"} { +test parseExpr-4.2 {ParseLandExpr procedure, error in LHS "|" subexpr} \ + -constraints testexprparser -body { + testexprparser {1&&foo && 3} -1 + } -match glob -returnCodes error -result * +test parseExpr-4.3 {ParseLandExpr procedure, next lexeme isn't "&&"} testexprparser { testexprparser {1|2? 1 : 0} -1 } {- {} 0 subexpr {1|2? 1 : 0} 11 operator ? 0 subexpr 1|2 5 operator | 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 1 1 text 1 0 subexpr 0 1 text 0 0 {}} -test parseExpr-4.4 {ParseLandExpr procedure, next lexeme is "&&"} { +test parseExpr-4.4 {ParseLandExpr procedure, next lexeme is "&&"} testexprparser { testexprparser {1|2 && 3} -1 } {- {} 0 subexpr {1|2 && 3} 9 operator && 0 subexpr 1|2 5 operator | 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-4.5 {ParseLandExpr procedure, bad lexeme after "&&"} {wideIntegerUnparsed} { - list [catch {testexprparser {1|2 && 12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-4.6 {ParseLandExpr procedure, valid RHS subexpression} { +test parseExpr-4.5 {ParseLandExpr procedure, bad lexeme after "&&"} testexprparser { + testexprparser {1|2 && 12345678901234567890} -1 +} {- {} 0 subexpr {1|2 && 12345678901234567890} 9 operator && 0 subexpr 1|2 5 operator | 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-4.6 {ParseLandExpr procedure, valid RHS subexpression} testexprparser { testexprparser {1|2 && 3 && 4} -1 } {- {} 0 subexpr {1|2 && 3 && 4} 13 operator && 0 subexpr {1|2 && 3} 9 operator && 0 subexpr 1|2 5 operator | 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 subexpr 4 1 text 4 0 {}} -test parseExpr-4.7 {ParseLandExpr procedure, error in RHS subexpression} { - list [catch {testexprparser {1|2 && 3 && martha} -1} msg] $msg -} {1 {syntax error in expression "1|2 && 3 && martha": variable references require preceding $}} +test parseExpr-4.7 {ParseLandExpr procedure, error in RHS subexpression} \ + -constraints testexprparser -body { + testexprparser {1|2 && 3 && martha} -1 + } -match glob -returnCodes error -result * -test parseExpr-5.1 {ParseBitOrExpr procedure, valid LHS "^" subexpr} { +test parseExpr-5.1 {ParseBitOrExpr procedure, valid LHS "^" subexpr} testexprparser { testexprparser {1^2 | 3} -1 } {- {} 0 subexpr {1^2 | 3} 9 operator | 0 subexpr 1^2 5 operator ^ 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-5.2 {ParseBitOrExpr procedure, error in LHS "^" subexpr} { - list [catch {testexprparser {1|foo | 3} -1} msg] $msg -} {1 {syntax error in expression "1|foo | 3": variable references require preceding $}} -test parseExpr-5.3 {ParseBitOrExpr procedure, next lexeme isn't "|"} { +test parseExpr-5.2 {ParseBitOrExpr procedure, error in LHS "^" subexpr} \ + -constraints testexprparser -body { + testexprparser {1|foo | 3} -1 + } -match glob -returnCodes error -result * +test parseExpr-5.3 {ParseBitOrExpr procedure, next lexeme isn't "|"} testexprparser { testexprparser {1^2? 1 : 0} -1 } {- {} 0 subexpr {1^2? 1 : 0} 11 operator ? 0 subexpr 1^2 5 operator ^ 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 1 1 text 1 0 subexpr 0 1 text 0 0 {}} -test parseExpr-5.4 {ParseBitOrExpr procedure, next lexeme is "|"} { +test parseExpr-5.4 {ParseBitOrExpr procedure, next lexeme is "|"} testexprparser { testexprparser {1^2 | 3} -1 } {- {} 0 subexpr {1^2 | 3} 9 operator | 0 subexpr 1^2 5 operator ^ 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-5.5 {ParseBitOrExpr procedure, bad lexeme after "|"} {wideIntegerUnparsed} { - list [catch {testexprparser {1^2 | 12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-5.6 {ParseBitOrExpr procedure, valid RHS subexpression} { +test parseExpr-5.5 {ParseBitOrExpr procedure, bad lexeme after "|"} testexprparser { + testexprparser {1^2 | 12345678901234567890} -1 +} {- {} 0 subexpr {1^2 | 12345678901234567890} 9 operator | 0 subexpr 1^2 5 operator ^ 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-5.6 {ParseBitOrExpr procedure, valid RHS subexpression} testexprparser { testexprparser {1^2 | 3 | 4} -1 } {- {} 0 subexpr {1^2 | 3 | 4} 13 operator | 0 subexpr {1^2 | 3} 9 operator | 0 subexpr 1^2 5 operator ^ 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 subexpr 4 1 text 4 0 {}} -test parseExpr-5.7 {ParseBitOrExpr procedure, error in RHS subexpression} { - list [catch {testexprparser {1^2 | 3 | martha} -1} msg] $msg -} {1 {syntax error in expression "1^2 | 3 | martha": variable references require preceding $}} +test parseExpr-5.7 {ParseBitOrExpr procedure, error in RHS subexpression} \ + -constraints testexprparser -body { + testexprparser {1^2 | 3 | martha} -1 + } -match glob -returnCodes error -result * -test parseExpr-6.1 {ParseBitXorExpr procedure, valid LHS "&" subexpr} { +test parseExpr-6.1 {ParseBitXorExpr procedure, valid LHS "&" subexpr} testexprparser { testexprparser {1&2 ^ 3} -1 } {- {} 0 subexpr {1&2 ^ 3} 9 operator ^ 0 subexpr 1&2 5 operator & 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-6.2 {ParseBitXorExpr procedure, error in LHS "&" subexpr} { - list [catch {testexprparser {1^foo ^ 3} -1} msg] $msg -} {1 {syntax error in expression "1^foo ^ 3": variable references require preceding $}} -test parseExpr-6.3 {ParseBitXorExpr procedure, next lexeme isn't "^"} { +test parseExpr-6.2 {ParseBitXorExpr procedure, error in LHS "&" subexpr} \ + -constraints testexprparser -body { + testexprparser {1^foo ^ 3} -1 + } -match glob -returnCodes error -result * +test parseExpr-6.3 {ParseBitXorExpr procedure, next lexeme isn't "^"} testexprparser { testexprparser {1&2? 1 : 0} -1 } {- {} 0 subexpr {1&2? 1 : 0} 11 operator ? 0 subexpr 1&2 5 operator & 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 1 1 text 1 0 subexpr 0 1 text 0 0 {}} -test parseExpr-6.4 {ParseBitXorExpr procedure, next lexeme is "^"} { +test parseExpr-6.4 {ParseBitXorExpr procedure, next lexeme is "^"} testexprparser { testexprparser {1&2 ^ 3} -1 } {- {} 0 subexpr {1&2 ^ 3} 9 operator ^ 0 subexpr 1&2 5 operator & 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-6.5 {ParseBitXorExpr procedure, bad lexeme after "^"} {wideIntegerUnparsed} { - list [catch {testexprparser {1&2 ^ 12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-6.6 {ParseBitXorExpr procedure, valid RHS subexpression} { +test parseExpr-6.5 {ParseBitXorExpr procedure, bad lexeme after "^"} testexprparser { + testexprparser {1&2 ^ 12345678901234567890} -1 +} {- {} 0 subexpr {1&2 ^ 12345678901234567890} 9 operator ^ 0 subexpr 1&2 5 operator & 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-6.6 {ParseBitXorExpr procedure, valid RHS subexpression} testexprparser { testexprparser {1&2 ^ 3 ^ 4} -1 } {- {} 0 subexpr {1&2 ^ 3 ^ 4} 13 operator ^ 0 subexpr {1&2 ^ 3} 9 operator ^ 0 subexpr 1&2 5 operator & 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 subexpr 4 1 text 4 0 {}} -test parseExpr-6.7 {ParseBitXorExpr procedure, error in RHS subexpression} { - list [catch {testexprparser {1&2 ^ 3 ^ martha} -1} msg] $msg -} {1 {syntax error in expression "1&2 ^ 3 ^ martha": variable references require preceding $}} +test parseExpr-6.7 {ParseBitXorExpr procedure, error in RHS subexpression} \ + -constraints testexprparser -body { + testexprparser {1&2 ^ 3 ^ martha} -1 + } -match glob -returnCodes error -result * -test parseExpr-7.1 {ParseBitAndExpr procedure, valid LHS equality subexpr} { +test parseExpr-7.1 {ParseBitAndExpr procedure, valid LHS equality subexpr} testexprparser { testexprparser {1==2 & 3} -1 } {- {} 0 subexpr {1==2 & 3} 9 operator & 0 subexpr 1==2 5 operator == 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-7.2 {ParseBitAndExpr procedure, error in LHS equality subexpr} { - list [catch {testexprparser {1!=foo & 3} -1} msg] $msg -} {1 {syntax error in expression "1!=foo & 3": variable references require preceding $}} -test parseExpr-7.3 {ParseBitAndExpr procedure, next lexeme isn't "&"} { +test parseExpr-7.2 {ParseBitAndExpr procedure, error in LHS equality subexpr} \ + -constraints testexprparser -body { + testexprparser {1!=foo & 3} -1 + } -match glob -returnCodes error -result * +test parseExpr-7.3 {ParseBitAndExpr procedure, next lexeme isn't "&"} testexprparser { testexprparser {1==2? 1 : 0} -1 } {- {} 0 subexpr {1==2? 1 : 0} 11 operator ? 0 subexpr 1==2 5 operator == 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 1 1 text 1 0 subexpr 0 1 text 0 0 {}} -test parseExpr-7.4 {ParseBitAndExpr procedure, next lexeme is "&"} { +test parseExpr-7.4 {ParseBitAndExpr procedure, next lexeme is "&"} testexprparser { testexprparser {1>2 & 3} -1 } {- {} 0 subexpr {1>2 & 3} 9 operator & 0 subexpr 1>2 5 operator > 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-7.5 {ParseBitAndExpr procedure, bad lexeme after "&"} {wideIntegerUnparsed} { - list [catch {testexprparser {1==2 & 12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-7.6 {ParseBitAndExpr procedure, valid RHS subexpression} { +test parseExpr-7.5 {ParseBitAndExpr procedure, bad lexeme after "&"} {testexprparser} { + testexprparser {1==2 & 12345678901234567890} -1 +} {- {} 0 subexpr {1==2 & 12345678901234567890} 9 operator & 0 subexpr 1==2 5 operator == 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-7.6 {ParseBitAndExpr procedure, valid RHS subexpression} testexprparser { testexprparser {1<2 & 3 & 4} -1 } {- {} 0 subexpr {1<2 & 3 & 4} 13 operator & 0 subexpr {1<2 & 3} 9 operator & 0 subexpr 1<2 5 operator < 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 subexpr 4 1 text 4 0 {}} -test parseExpr-7.7 {ParseBitAndExpr procedure, error in RHS subexpression} { - list [catch {testexprparser {1==2 & 3>2 & martha} -1} msg] $msg -} {1 {syntax error in expression "1==2 & 3>2 & martha": variable references require preceding $}} +test parseExpr-7.7 {ParseBitAndExpr procedure, error in RHS subexpression} \ + -constraints testexprparser -body { + testexprparser {1==2 & 3>2 & martha} -1 + } -match glob -returnCodes error -result * -test parseExpr-8.1 {ParseEqualityExpr procedure, valid LHS relational subexpr} { +test parseExpr-8.1 {ParseEqualityExpr procedure, valid LHS relational subexpr} testexprparser { testexprparser {1<2 == 3} -1 } {- {} 0 subexpr {1<2 == 3} 9 operator == 0 subexpr 1<2 5 operator < 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-8.2 {ParseEqualityExpr procedure, error in LHS relational subexpr} { - list [catch {testexprparser {1>=foo == 3} -1} msg] $msg -} {1 {syntax error in expression "1>=foo == 3": variable references require preceding $}} -test parseExpr-8.3 {ParseEqualityExpr procedure, next lexeme isn't "==" or "!="} { +test parseExpr-8.2 {ParseEqualityExpr procedure, error in LHS relational subexpr} \ + -constraints testexprparser -body { + testexprparser {1>=foo == 3} -1 + } -match glob -returnCodes error -result * +test parseExpr-8.3 {ParseEqualityExpr procedure, next lexeme isn't "==" or "!="} testexprparser { testexprparser {1<2? 1 : 0} -1 } {- {} 0 subexpr {1<2? 1 : 0} 11 operator ? 0 subexpr 1<2 5 operator < 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 1 1 text 1 0 subexpr 0 1 text 0 0 {}} -test parseExpr-8.4 {ParseEqualityExpr procedure, next lexeme is "==" or "!="} { +test parseExpr-8.4 {ParseEqualityExpr procedure, next lexeme is "==" or "!="} testexprparser { testexprparser {1<2 == 3} -1 } {- {} 0 subexpr {1<2 == 3} 9 operator == 0 subexpr 1<2 5 operator < 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-8.5 {ParseEqualityExpr procedure, next lexeme is "==" or "!="} { +test parseExpr-8.5 {ParseEqualityExpr procedure, next lexeme is "==" or "!="} testexprparser { testexprparser {1<2 != 3} -1 } {- {} 0 subexpr {1<2 != 3} 9 operator != 0 subexpr 1<2 5 operator < 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-8.6 {ParseEqualityExpr procedure, bad lexeme after "==" or "!="} {wideIntegerUnparsed} { - list [catch {testexprparser {1<2 == 12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-8.7 {ParseEqualityExpr procedure, valid RHS subexpression} { +test parseExpr-8.6 {ParseEqualityExpr procedure, bad lexeme after "==" or "!="} testexprparser { + testexprparser {1<2 == 12345678901234567890} -1 +} {- {} 0 subexpr {1<2 == 12345678901234567890} 9 operator == 0 subexpr 1<2 5 operator < 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-8.7 {ParseEqualityExpr procedure, valid RHS subexpression} testexprparser { testexprparser {1<2 == 3 == 4} -1 } {- {} 0 subexpr {1<2 == 3 == 4} 13 operator == 0 subexpr {1<2 == 3} 9 operator == 0 subexpr 1<2 5 operator < 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 subexpr 4 1 text 4 0 {}} -test parseExpr-8.8 {ParseEqualityExpr procedure, error in RHS subexpression} { - list [catch {testexprparser {1<2 == 3 != martha} -1} msg] $msg -} {1 {syntax error in expression "1<2 == 3 != martha": variable references require preceding $}} +test parseExpr-8.8 {ParseEqualityExpr procedure, error in RHS subexpression} \ + -constraints testexprparser -body { + testexprparser {1<2 == 3 != martha} -1 + } -match glob -returnCodes error -result * -test parseExpr-9.1 {ParseRelationalExpr procedure, valid LHS shift subexpr} { +test parseExpr-9.1 {ParseRelationalExpr procedure, valid LHS shift subexpr} testexprparser { testexprparser {1<<2 < 3} -1 } {- {} 0 subexpr {1<<2 < 3} 9 operator < 0 subexpr 1<<2 5 operator << 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-9.2 {ParseRelationalExpr procedure, error in LHS shift subexpr} { - list [catch {testexprparser {1>=foo < 3} -1} msg] $msg -} {1 {syntax error in expression "1>=foo < 3": variable references require preceding $}} -test parseExpr-9.3 {ParseRelationalExpr procedure, next lexeme isn't relational op} { +test parseExpr-9.2 {ParseRelationalExpr procedure, error in LHS shift subexpr} \ + -constraints testexprparser -body { + testexprparser {1>=foo < 3} -1 + } -match glob -returnCodes error -result * +test parseExpr-9.3 {ParseRelationalExpr procedure, next lexeme isn't relational op} testexprparser { testexprparser {1<<2? 1 : 0} -1 } {- {} 0 subexpr {1<<2? 1 : 0} 11 operator ? 0 subexpr 1<<2 5 operator << 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 1 1 text 1 0 subexpr 0 1 text 0 0 {}} -test parseExpr-9.4 {ParseRelationalExpr procedure, next lexeme is relational op} { +test parseExpr-9.4 {ParseRelationalExpr procedure, next lexeme is relational op} testexprparser { testexprparser {1<<2 < 3} -1 } {- {} 0 subexpr {1<<2 < 3} 9 operator < 0 subexpr 1<<2 5 operator << 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-9.5 {ParseRelationalExpr procedure, next lexeme is relational op} { +test parseExpr-9.5 {ParseRelationalExpr procedure, next lexeme is relational op} testexprparser { testexprparser {1>>2 > 3} -1 } {- {} 0 subexpr {1>>2 > 3} 9 operator > 0 subexpr 1>>2 5 operator >> 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-9.6 {ParseRelationalExpr procedure, next lexeme is relational op} { +test parseExpr-9.6 {ParseRelationalExpr procedure, next lexeme is relational op} testexprparser { testexprparser {1<<2 <= 3} -1 } {- {} 0 subexpr {1<<2 <= 3} 9 operator <= 0 subexpr 1<<2 5 operator << 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-9.7 {ParseRelationalExpr procedure, next lexeme is relational op} { +test parseExpr-9.7 {ParseRelationalExpr procedure, next lexeme is relational op} testexprparser { testexprparser {1<<2 >= 3} -1 } {- {} 0 subexpr {1<<2 >= 3} 9 operator >= 0 subexpr 1<<2 5 operator << 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-9.8 {ParseRelationalExpr procedure, bad lexeme after relational op} {wideIntegerUnparsed} { - list [catch {testexprparser {1<<2 < 12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-9.9 {ParseRelationalExpr procedure, valid RHS subexpression} { +test parseExpr-9.8 {ParseRelationalExpr procedure, bad lexeme after relational op} testexprparser { + testexprparser {1<<2 < 12345678901234567890} -1 +} {- {} 0 subexpr {1<<2 < 12345678901234567890} 9 operator < 0 subexpr 1<<2 5 operator << 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-9.9 {ParseRelationalExpr procedure, valid RHS subexpression} testexprparser { testexprparser {1<<2 < 3 < 4} -1 } {- {} 0 subexpr {1<<2 < 3 < 4} 13 operator < 0 subexpr {1<<2 < 3} 9 operator < 0 subexpr 1<<2 5 operator << 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 subexpr 4 1 text 4 0 {}} -test parseExpr-9.10 {ParseRelationalExpr procedure, error in RHS subexpression} { - list [catch {testexprparser {1<<2 < 3 > martha} -1} msg] $msg -} {1 {syntax error in expression "1<<2 < 3 > martha": variable references require preceding $}} +test parseExpr-9.10 {ParseRelationalExpr procedure, error in RHS subexpression} \ + -constraints testexprparser -body { + testexprparser {1<<2 < 3 > martha} -1 + } -match glob -returnCodes error -result * -test parseExpr-10.1 {ParseShiftExpr procedure, valid LHS add subexpr} { +test parseExpr-10.1 {ParseShiftExpr procedure, valid LHS add subexpr} testexprparser { testexprparser {1+2 << 3} -1 } {- {} 0 subexpr {1+2 << 3} 9 operator << 0 subexpr 1+2 5 operator + 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-10.2 {ParseShiftExpr procedure, error in LHS add subexpr} { - list [catch {testexprparser {1-foo << 3} -1} msg] $msg -} {1 {syntax error in expression "1-foo << 3": variable references require preceding $}} -test parseExpr-10.3 {ParseShiftExpr procedure, next lexeme isn't "<<" or ">>"} { +test parseExpr-10.2 {ParseShiftExpr procedure, error in LHS add subexpr} \ + -constraints testexprparser -body { + testexprparser {1-foo << 3} -1 + } -match glob -returnCodes error -result * +test parseExpr-10.3 {ParseShiftExpr procedure, next lexeme isn't "<<" or ">>"} testexprparser { testexprparser {1+2? 1 : 0} -1 } {- {} 0 subexpr {1+2? 1 : 0} 11 operator ? 0 subexpr 1+2 5 operator + 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 1 1 text 1 0 subexpr 0 1 text 0 0 {}} -test parseExpr-10.4 {ParseShiftExpr procedure, next lexeme is "<<" or ">>"} { +test parseExpr-10.4 {ParseShiftExpr procedure, next lexeme is "<<" or ">>"} testexprparser { testexprparser {1+2 << 3} -1 } {- {} 0 subexpr {1+2 << 3} 9 operator << 0 subexpr 1+2 5 operator + 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-10.5 {ParseShiftExpr procedure, next lexeme is "<<" or ">>"} { +test parseExpr-10.5 {ParseShiftExpr procedure, next lexeme is "<<" or ">>"} testexprparser { testexprparser {1+2 >> 3} -1 } {- {} 0 subexpr {1+2 >> 3} 9 operator >> 0 subexpr 1+2 5 operator + 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-10.6 {ParseShiftExpr procedure, bad lexeme after "<<" or ">>"} {wideIntegerUnparsed} { - list [catch {testexprparser {1+2 << 12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-10.7 {ParseShiftExpr procedure, valid RHS subexpression} { +test parseExpr-10.6 {ParseShiftExpr procedure, bad lexeme after "<<" or ">>"} testexprparser { + testexprparser {1+2 << 12345678901234567890} -1 +} {- {} 0 subexpr {1+2 << 12345678901234567890} 9 operator << 0 subexpr 1+2 5 operator + 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-10.7 {ParseShiftExpr procedure, valid RHS subexpression} testexprparser { testexprparser {1+2 << 3 << 4} -1 } {- {} 0 subexpr {1+2 << 3 << 4} 13 operator << 0 subexpr {1+2 << 3} 9 operator << 0 subexpr 1+2 5 operator + 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 subexpr 4 1 text 4 0 {}} -test parseExpr-10.8 {ParseShiftExpr procedure, error in RHS subexpression} { - list [catch {testexprparser {1+2 << 3 >> martha} -1} msg] $msg -} {1 {syntax error in expression "1+2 << 3 >> martha": variable references require preceding $}} +test parseExpr-10.8 {ParseShiftExpr procedure, error in RHS subexpression} \ + -constraints testexprparser -body { + testexprparser {1+2 << 3 >> martha} -1 + } -match glob -returnCodes error -result * -test parseExpr-11.1 {ParseAddExpr procedure, valid LHS multiply subexpr} { +test parseExpr-11.1 {ParseAddExpr procedure, valid LHS multiply subexpr} testexprparser { testexprparser {1*2 + 3} -1 } {- {} 0 subexpr {1*2 + 3} 9 operator + 0 subexpr 1*2 5 operator * 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-11.2 {ParseAddExpr procedure, error in LHS multiply subexpr} { - list [catch {testexprparser {1/foo + 3} -1} msg] $msg -} {1 {syntax error in expression "1/foo + 3": variable references require preceding $}} -test parseExpr-11.3 {ParseAddExpr procedure, next lexeme isn't "+" or "-"} { +test parseExpr-11.2 {ParseAddExpr procedure, error in LHS multiply subexpr} \ + -constraints testexprparser -body { + testexprparser {1/foo + 3} -1 + } -match glob -returnCodes error -result * +test parseExpr-11.3 {ParseAddExpr procedure, next lexeme isn't "+" or "-"} testexprparser { testexprparser {1*2? 1 : 0} -1 } {- {} 0 subexpr {1*2? 1 : 0} 11 operator ? 0 subexpr 1*2 5 operator * 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 1 1 text 1 0 subexpr 0 1 text 0 0 {}} -test parseExpr-11.4 {ParseAddExpr procedure, next lexeme is "+" or "-"} { +test parseExpr-11.4 {ParseAddExpr procedure, next lexeme is "+" or "-"} testexprparser { testexprparser {1*2 + 3} -1 } {- {} 0 subexpr {1*2 + 3} 9 operator + 0 subexpr 1*2 5 operator * 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-11.5 {ParseAddExpr procedure, next lexeme is "+" or "-"} { +test parseExpr-11.5 {ParseAddExpr procedure, next lexeme is "+" or "-"} testexprparser { testexprparser {1*2 - 3} -1 } {- {} 0 subexpr {1*2 - 3} 9 operator - 0 subexpr 1*2 5 operator * 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-11.6 {ParseAddExpr procedure, bad lexeme after "+" or "-"} {wideIntegerUnparsed} { - list [catch {testexprparser {1*2 + 12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-11.7 {ParseAddExpr procedure, valid RHS subexpression} { +test parseExpr-11.6 {ParseAddExpr procedure, bad lexeme after "+" or "-"} testexprparser { + testexprparser {1*2 + 12345678901234567890} -1 +} {- {} 0 subexpr {1*2 + 12345678901234567890} 9 operator + 0 subexpr 1*2 5 operator * 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-11.7 {ParseAddExpr procedure, valid RHS subexpression} testexprparser { testexprparser {1*2 + 3 + 4} -1 } {- {} 0 subexpr {1*2 + 3 + 4} 13 operator + 0 subexpr {1*2 + 3} 9 operator + 0 subexpr 1*2 5 operator * 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 subexpr 4 1 text 4 0 {}} -test parseExpr-11.8 {ParseAddExpr procedure, error in RHS subexpression} { - list [catch {testexprparser {1*2 + 3 - martha} -1} msg] $msg -} {1 {syntax error in expression "1*2 + 3 - martha": variable references require preceding $}} +test parseExpr-11.8 {ParseAddExpr procedure, error in RHS subexpression} \ + -constraints testexprparser -body { + testexprparser {1*2 + 3 - martha} -1 + } -match glob -returnCodes error -result * -test parseExpr-12.1 {ParseAddExpr procedure, valid LHS multiply subexpr} { +test parseExpr-12.1 {ParseAddExpr procedure, valid LHS multiply subexpr} testexprparser { testexprparser {1*2 + 3} -1 } {- {} 0 subexpr {1*2 + 3} 9 operator + 0 subexpr 1*2 5 operator * 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-12.2 {ParseAddExpr procedure, error in LHS multiply subexpr} { - list [catch {testexprparser {1/foo + 3} -1} msg] $msg -} {1 {syntax error in expression "1/foo + 3": variable references require preceding $}} -test parseExpr-12.3 {ParseAddExpr procedure, next lexeme isn't "+" or "-"} { +test parseExpr-12.2 {ParseAddExpr procedure, error in LHS multiply subexpr} \ + -constraints testexprparser -body { + testexprparser {1/foo + 3} -1 + } -match glob -returnCodes error -result * +test parseExpr-12.3 {ParseAddExpr procedure, next lexeme isn't "+" or "-"} testexprparser { testexprparser {1*2? 1 : 0} -1 } {- {} 0 subexpr {1*2? 1 : 0} 11 operator ? 0 subexpr 1*2 5 operator * 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 1 1 text 1 0 subexpr 0 1 text 0 0 {}} -test parseExpr-12.4 {ParseAddExpr procedure, next lexeme is "+" or "-"} { +test parseExpr-12.4 {ParseAddExpr procedure, next lexeme is "+" or "-"} testexprparser { testexprparser {1*2 + 3} -1 } {- {} 0 subexpr {1*2 + 3} 9 operator + 0 subexpr 1*2 5 operator * 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-12.5 {ParseAddExpr procedure, next lexeme is "+" or "-"} { +test parseExpr-12.5 {ParseAddExpr procedure, next lexeme is "+" or "-"} testexprparser { testexprparser {1*2 - 3} -1 } {- {} 0 subexpr {1*2 - 3} 9 operator - 0 subexpr 1*2 5 operator * 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-12.6 {ParseAddExpr procedure, bad lexeme after "+" or "-"} {wideIntegerUnparsed} { - list [catch {testexprparser {1*2 + 12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-12.7 {ParseAddExpr procedure, valid RHS subexpression} { +test parseExpr-12.6 {ParseAddExpr procedure, bad lexeme after "+" or "-"} testexprparser { + testexprparser {1*2 + 12345678901234567890} -1 +} {- {} 0 subexpr {1*2 + 12345678901234567890} 9 operator + 0 subexpr 1*2 5 operator * 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-12.7 {ParseAddExpr procedure, valid RHS subexpression} testexprparser { testexprparser {1*2 + 3 + 4} -1 } {- {} 0 subexpr {1*2 + 3 + 4} 13 operator + 0 subexpr {1*2 + 3} 9 operator + 0 subexpr 1*2 5 operator * 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 subexpr 4 1 text 4 0 {}} -test parseExpr-12.8 {ParseAddExpr procedure, error in RHS subexpression} { - list [catch {testexprparser {1*2 + 3 - martha} -1} msg] $msg -} {1 {syntax error in expression "1*2 + 3 - martha": variable references require preceding $}} +test parseExpr-12.8 {ParseAddExpr procedure, error in RHS subexpression} \ + -constraints testexprparser -body { + testexprparser {1*2 + 3 - martha} -1 + } -match glob -returnCodes error -result * -test parseExpr-13.1 {ParseMultiplyExpr procedure, valid LHS unary subexpr} { +test parseExpr-13.1 {ParseMultiplyExpr procedure, valid LHS unary subexpr} testexprparser { testexprparser {+2 * 3} -1 } {- {} 0 subexpr {+2 * 3} 7 operator * 0 subexpr +2 3 operator + 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-13.2 {ParseMultiplyExpr procedure, error in LHS unary subexpr} {wideIntegerUnparsed} { - list [catch {testexprparser {-12345678901234567890 * 3} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-13.3 {ParseMultiplyExpr procedure, next lexeme isn't "*", "/", or "%"} { +test parseExpr-13.2 {ParseMultiplyExpr procedure, error in LHS unary subexpr} testexprparser { + testexprparser {-12345678901234567890 * 3} -1 +} {- {} 0 subexpr {-12345678901234567890 * 3} 7 operator * 0 subexpr -12345678901234567890 3 operator - 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 subexpr 3 1 text 3 0 {}} +test parseExpr-13.3 {ParseMultiplyExpr procedure, next lexeme isn't "*", "/", or "%"} testexprparser { testexprparser {+2? 1 : 0} -1 } {- {} 0 subexpr {+2? 1 : 0} 9 operator ? 0 subexpr +2 3 operator + 0 subexpr 2 1 text 2 0 subexpr 1 1 text 1 0 subexpr 0 1 text 0 0 {}} -test parseExpr-13.4 {ParseMultiplyExpr procedure, next lexeme is "*", "/", or "%"} { +test parseExpr-13.4 {ParseMultiplyExpr procedure, next lexeme is "*", "/", or "%"} testexprparser { testexprparser {-123 * 3} -1 } {- {} 0 subexpr {-123 * 3} 7 operator * 0 subexpr -123 3 operator - 0 subexpr 123 1 text 123 0 subexpr 3 1 text 3 0 {}} -test parseExpr-13.5 {ParseMultiplyExpr procedure, next lexeme is "*", "/", or "%"} { +test parseExpr-13.5 {ParseMultiplyExpr procedure, next lexeme is "*", "/", or "%"} testexprparser { testexprparser {+-456 / 3} -1 } {- {} 0 subexpr {+-456 / 3} 9 operator / 0 subexpr +-456 5 operator + 0 subexpr -456 3 operator - 0 subexpr 456 1 text 456 0 subexpr 3 1 text 3 0 {}} -test parseExpr-13.6 {ParseMultiplyExpr procedure, next lexeme is "*", "/", or "%"} { +test parseExpr-13.6 {ParseMultiplyExpr procedure, next lexeme is "*", "/", or "%"} testexprparser { testexprparser {+-456 % 3} -1 } {- {} 0 subexpr {+-456 % 3} 9 operator % 0 subexpr +-456 5 operator + 0 subexpr -456 3 operator - 0 subexpr 456 1 text 456 0 subexpr 3 1 text 3 0 {}} -test parseExpr-13.7 {ParseMultiplyExpr procedure, bad lexeme after "*", "/", or "%"} {wideIntegerUnparsed} { - list [catch {testexprparser {--++5 / 12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-13.8 {ParseMultiplyExpr procedure, valid RHS subexpression} { +test parseExpr-13.7 {ParseMultiplyExpr procedure, bad lexeme after "*", "/", or "%"} testexprparser { + testexprparser {--++5 / 12345678901234567890} -1 +} {- {} 0 subexpr {--++5 / 12345678901234567890} 13 operator / 0 subexpr --++5 9 operator - 0 subexpr -++5 7 operator - 0 subexpr ++5 5 operator + 0 subexpr +5 3 operator + 0 subexpr 5 1 text 5 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-13.8 {ParseMultiplyExpr procedure, valid RHS subexpression} testexprparser { testexprparser {-2 / 3 % 4} -1 } {- {} 0 subexpr {-2 / 3 % 4} 11 operator % 0 subexpr {-2 / 3} 7 operator / 0 subexpr -2 3 operator - 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 subexpr 4 1 text 4 0 {}} -test parseExpr-13.9 {ParseMultiplyExpr procedure, error in RHS subexpression} { - list [catch {testexprparser {++2 / 3 * martha} -1} msg] $msg -} {1 {syntax error in expression "++2 / 3 * martha": variable references require preceding $}} +test parseExpr-13.9 {ParseMultiplyExpr procedure, error in RHS subexpression} \ + -constraints testexprparser -body { + testexprparser {++2 / 3 * martha} -1 + } -match glob -returnCodes error -result * -test parseExpr-14.1 {ParseUnaryExpr procedure, first token is unary operator} { +test parseExpr-14.1 {ParseUnaryExpr procedure, first token is unary operator} testexprparser { testexprparser {+2} -1 } {- {} 0 subexpr +2 3 operator + 0 subexpr 2 1 text 2 0 {}} -test parseExpr-14.2 {ParseUnaryExpr procedure, first token is unary operator} { +test parseExpr-14.2 {ParseUnaryExpr procedure, first token is unary operator} testexprparser { testexprparser {-2} -1 } {- {} 0 subexpr -2 3 operator - 0 subexpr 2 1 text 2 0 {}} -test parseExpr-14.3 {ParseUnaryExpr procedure, first token is unary operator} { +test parseExpr-14.3 {ParseUnaryExpr procedure, first token is unary operator} testexprparser { testexprparser {~2} -1 } {- {} 0 subexpr ~2 3 operator ~ 0 subexpr 2 1 text 2 0 {}} -test parseExpr-14.4 {ParseUnaryExpr procedure, first token is unary operator} { +test parseExpr-14.4 {ParseUnaryExpr procedure, first token is unary operator} testexprparser { testexprparser {!2} -1 } {- {} 0 subexpr !2 3 operator ! 0 subexpr 2 1 text 2 0 {}} -test parseExpr-14.5 {ParseUnaryExpr procedure, error in lexeme after unary op} {wideIntegerUnparsed} { - list [catch {testexprparser {-12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-14.6 {ParseUnaryExpr procedure, simple unary expr after unary op} { +test parseExpr-14.5 {ParseUnaryExpr procedure, error in lexeme after unary op} testexprparser { + testexprparser {-12345678901234567890} -1 +} {- {} 0 subexpr -12345678901234567890 3 operator - 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-14.6 {ParseUnaryExpr procedure, simple unary expr after unary op} testexprparser { testexprparser {+"1234"} -1 } {- {} 0 subexpr +\"1234\" 3 operator + 0 subexpr {"1234"} 1 text 1234 0 {}} -test parseExpr-14.7 {ParseUnaryExpr procedure, another unary expr after unary op} { +test parseExpr-14.7 {ParseUnaryExpr procedure, another unary expr after unary op} testexprparser { testexprparser {~!{fred}} -1 } {- {} 0 subexpr ~!{fred} 5 operator ~ 0 subexpr !{fred} 3 operator ! 0 subexpr {{fred}} 1 text fred 0 {}} -test parseExpr-14.8 {ParseUnaryExpr procedure, error in unary expr after unary op} { - list [catch {testexprparser {+-||27} -1} msg] $msg -} {1 {syntax error in expression "+-||27": unexpected operator ||}} -test parseExpr-14.9 {ParseUnaryExpr procedure, error in unary expr after unary op} { - list [catch {testexprparser {+-||27} -1} msg] $msg -} {1 {syntax error in expression "+-||27": unexpected operator ||}} -test parseExpr-14.10 {ParseUnaryExpr procedure, first token is not unary op} { +test parseExpr-14.8 {ParseUnaryExpr procedure, error in unary expr after unary op} -constraints testexprparser -body { + testexprparser {+-||27} -1 +} -returnCodes error -match glob -result * +test parseExpr-14.9 {ParseUnaryExpr procedure, error in unary expr after unary op} -constraints testexprparser -body { + testexprparser {+-||27} -1 +} -returnCodes error -match glob -result * +test parseExpr-14.10 {ParseUnaryExpr procedure, first token is not unary op} testexprparser { testexprparser {123} -1 } {- {} 0 subexpr 123 1 text 123 0 {}} -test parseExpr-14.11 {ParseUnaryExpr procedure, not unary expr, complex primary expr} { +test parseExpr-14.11 {ParseUnaryExpr procedure, not unary expr, complex primary expr} testexprparser { testexprparser {(1+2)} -1 } {- {} 0 subexpr 1+2 5 operator + 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 {}} -test parseExpr-14.12 {ParseUnaryExpr procedure, not unary expr, error in primary expr} {wideIntegerUnparsed} { - list [catch {testexprparser {(12345678901234567890)} -1} msg] $msg -} {1 {integer value too large to represent}} +test parseExpr-14.12 {ParseUnaryExpr procedure, not unary expr, error in primary expr} testexprparser { + testexprparser {(12345678901234567890)} -1 +} {- {} 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} -test parseExpr-15.1 {ParsePrimaryExpr procedure, just parenthesized subexpr} { +test parseExpr-15.1 {ParsePrimaryExpr procedure, just parenthesized subexpr} testexprparser { testexprparser {({abc}/{def})} -1 } {- {} 0 subexpr {{abc}/{def}} 5 operator / 0 subexpr {{abc}} 1 text abc 0 subexpr {{def}} 1 text def 0 {}} -test parseExpr-15.2 {ParsePrimaryExpr procedure, bad lexeme after "("} {wideIntegerUnparsed} { - list [catch {testexprparser {(12345678901234567890)} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-15.3 {ParsePrimaryExpr procedure, valid parenthesized subexpr} { +test parseExpr-15.2 {ParsePrimaryExpr procedure, bad lexeme after "("} {testexprparser} { + testexprparser {(12345678901234567890)} -1 +} {- {} 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-15.3 {ParsePrimaryExpr procedure, valid parenthesized subexpr} testexprparser { testexprparser {({abc}? 2*4 : -6)} -1 } {- {} 0 subexpr {{abc}? 2*4 : -6} 13 operator ? 0 subexpr {{abc}} 1 text abc 0 subexpr 2*4 5 operator * 0 subexpr 2 1 text 2 0 subexpr 4 1 text 4 0 subexpr -6 3 operator - 0 subexpr 6 1 text 6 0 {}} -test parseExpr-15.4 {ParsePrimaryExpr procedure, error in parenthesized subexpr} { - list [catch {testexprparser {(? 123 : 456)} -1} msg] $msg -} {1 {syntax error in expression "(? 123 : 456)": unexpected ternary 'then' separator}} -test parseExpr-15.5 {ParsePrimaryExpr procedure, missing ")" after in parenthesized subexpr} { - list [catch {testexprparser {({abc}/{def}} -1} msg] $msg -} {1 {syntax error in expression "({abc}/{def}": looking for close parenthesis}} -test parseExpr-15.6 {ParsePrimaryExpr procedure, primary is literal} { +test parseExpr-15.4 {ParsePrimaryExpr procedure, error in parenthesized subexpr} -constraints testexprparser -body { + testexprparser {(? 123 : 456)} -1 +} -returnCodes error -match glob -result * +test parseExpr-15.5 {ParsePrimaryExpr procedure, missing ")" after in parenthesized subexpr} -constraints testexprparser -body { + testexprparser {({abc}/{def}} -1 +} -returnCodes error -match glob -result * +test parseExpr-15.6 {ParsePrimaryExpr procedure, primary is literal} testexprparser { testexprparser {12345} -1 } {- {} 0 subexpr 12345 1 text 12345 0 {}} -test parseExpr-15.7 {ParsePrimaryExpr procedure, primary is literal} { +test parseExpr-15.7 {ParsePrimaryExpr procedure, primary is literal} testexprparser { testexprparser {12345.6789} -1 } {- {} 0 subexpr 12345.6789 1 text 12345.6789 0 {}} -test parseExpr-15.8 {ParsePrimaryExpr procedure, primary is var reference} { +test parseExpr-15.8 {ParsePrimaryExpr procedure, primary is var reference} testexprparser { testexprparser {$a} -1 } {- {} 0 subexpr {$a} 2 variable {$a} 1 text a 0 {}} -test parseExpr-15.9 {ParsePrimaryExpr procedure, primary is var reference} { +test parseExpr-15.9 {ParsePrimaryExpr procedure, primary is var reference} testexprparser { testexprparser {$a(hello$there)} -1 } {- {} 0 subexpr {$a(hello$there)} 5 variable {$a(hello$there)} 4 text a 0 text hello 0 variable {$there} 1 text there 0 {}} -test parseExpr-15.10 {ParsePrimaryExpr procedure, primary is var reference} { +test parseExpr-15.10 {ParsePrimaryExpr procedure, primary is var reference} testexprparser { testexprparser {$a()} -1 } {- {} 0 subexpr {$a()} 3 variable {$a()} 2 text a 0 text {} 0 {}} -test parseExpr-15.11 {ParsePrimaryExpr procedure, error in var reference} { - list [catch {testexprparser {$a(} -1} msg] $msg -} {1 {missing )}} -test parseExpr-15.12 {ParsePrimaryExpr procedure, primary is quoted string} { +test parseExpr-15.11 {ParsePrimaryExpr procedure, error in var reference} -constraints testexprparser -body { + testexprparser {$a(} -1 +} -returnCodes error -match glob -result * +test parseExpr-15.12 {ParsePrimaryExpr procedure, primary is quoted string} testexprparser { testexprparser {"abc $xyz def"} -1 } {- {} 0 subexpr {"abc $xyz def"} 5 word {"abc $xyz def"} 4 text {abc } 0 variable {$xyz} 1 text xyz 0 text { def} 0 {}} -test parseExpr-15.13 {ParsePrimaryExpr procedure, error in quoted string} { - list [catch {testexprparser {"$a(12"} -1} msg] $msg -} {1 {missing )}} -test parseExpr-15.14 {ParsePrimaryExpr procedure, quoted string has multiple tokens} { +test parseExpr-15.13 {ParsePrimaryExpr procedure, error in quoted string} -constraints testexprparser -body { + testexprparser {"$a(12"} -1 +} -returnCodes error -match glob -result * +test parseExpr-15.14 {ParsePrimaryExpr procedure, quoted string has multiple tokens} testexprparser { testexprparser {"abc [xyz] $def"} -1 } {- {} 0 subexpr {"abc [xyz] $def"} 6 word {"abc [xyz] $def"} 5 text {abc } 0 command {[xyz]} 0 text { } 0 variable {$def} 1 text def 0 {}} -test parseExpr-15.15 {ParsePrimaryExpr procedure, primary is command} { +test parseExpr-15.15 {ParsePrimaryExpr procedure, primary is command} testexprparser { testexprparser {[def]} -1 } {- {} 0 subexpr {[def]} 1 command {[def]} 0 {}} -test parseExpr-15.16 {ParsePrimaryExpr procedure, primary is multiple commands} { +test parseExpr-15.16 {ParsePrimaryExpr procedure, primary is multiple commands} testexprparser { testexprparser {[one; two; three; four;]} -1 } {- {} 0 subexpr {[one; two; three; four;]} 1 command {[one; two; three; four;]} 0 {}} -test parseExpr-15.17 {ParsePrimaryExpr procedure, primary is multiple commands} { +test parseExpr-15.17 {ParsePrimaryExpr procedure, primary is multiple commands} testexprparser { testexprparser {[one; two; three; four;]} -1 } {- {} 0 subexpr {[one; two; three; four;]} 1 command {[one; two; three; four;]} 0 {}} -test parseExpr-15.18 {ParsePrimaryExpr procedure, missing close bracket} { - list [catch {testexprparser {[one} -1} msg] $msg -} {1 {missing close-bracket}} -test parseExpr-15.19 {ParsePrimaryExpr procedure, primary is braced string} { +test parseExpr-15.18 {ParsePrimaryExpr procedure, missing close bracket} -constraints testexprparser -body { + testexprparser {[one} -1 +} -returnCodes error -match glob -result * +test parseExpr-15.19 {ParsePrimaryExpr procedure, primary is braced string} testexprparser { testexprparser {{hello world}} -1 } {- {} 0 subexpr {{hello world}} 1 text {hello world} 0 {}} -test parseExpr-15.20 {ParsePrimaryExpr procedure, error in primary, which is braced string} { - list [catch {testexprparser "\{abc\\\n" -1} msg] $msg -} {1 {missing close-brace}} -test parseExpr-15.21 {ParsePrimaryExpr procedure, primary is braced string with multiple tokens} { +test parseExpr-15.20 {ParsePrimaryExpr procedure, error in primary, which is braced string} -constraints testexprparser -body { + testexprparser "\{abc\\\n" -1 +} -returnCodes error -match glob -result * +test parseExpr-15.21 {ParsePrimaryExpr procedure, primary is braced string with multiple tokens} testexprparser { testexprparser "\{ \\ +123 \}" -1 } {- {} 0 subexpr \{\ \ \\\n\ +123\ \} 4 word \{\ \ \\\n\ +123\ \} 3 text { } 0 backslash \\\n\ 0 text {+123 } 0 {}} -test parseExpr-15.22 {ParsePrimaryExpr procedure, primary is function call} { +test parseExpr-15.22 {ParsePrimaryExpr procedure, primary is function call} testexprparser { testexprparser {foo(123)} -1 } {- {} 0 subexpr foo(123) 3 operator foo 0 subexpr 123 1 text 123 0 {}} -test parseExpr-15.23 {ParsePrimaryExpr procedure, bad lexeme after function name} {wideIntegerUnparsed} { - list [catch {testexprparser {foo 12345678901234567890 123)} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-15.24 {ParsePrimaryExpr procedure, lexeme after function name isn't "("} { - list [catch {testexprparser {foo 27.4 123)} -1} msg] $msg -} {1 {syntax error in expression "foo 27.4 123)": variable references require preceding $}} -test parseExpr-15.25 {ParsePrimaryExpr procedure, bad lexeme after "("} {wideIntegerUnparsed} { - list [catch {testexprparser {foo(12345678901234567890)} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-15.26 {ParsePrimaryExpr procedure, function call, one arg} { +test parseExpr-15.23 {ParsePrimaryExpr procedure, bad lexeme after function name} -constraints testexprparser -body { + testexprparser {foo 12345678901234567890 123)} -1 +} -returnCodes error -match glob -result * +test parseExpr-15.24 {ParsePrimaryExpr procedure, lexeme after function name isn't "("} \ + -constraints testexprparser -body { + testexprparser {foo 27.4 123)} -1 + } -match glob -returnCodes error -result * +test parseExpr-15.25 {ParsePrimaryExpr procedure, bad lexeme after "("} testexprparser { + testexprparser {foo(12345678901234567890)} -1 +} {- {} 0 subexpr foo(12345678901234567890) 3 operator foo 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-15.26 {ParsePrimaryExpr procedure, function call, one arg} testexprparser { testexprparser {foo(27*4)} -1 } {- {} 0 subexpr foo(27*4) 7 operator foo 0 subexpr 27*4 5 operator * 0 subexpr 27 1 text 27 0 subexpr 4 1 text 4 0 {}} -test parseExpr-15.27 {ParsePrimaryExpr procedure, error in function arg} { - list [catch {testexprparser {foo(*1-2)} -1} msg] $msg -} {1 {syntax error in expression "foo(*1-2)": unexpected operator *}} -test parseExpr-15.28 {ParsePrimaryExpr procedure, error in function arg} { - list [catch {testexprparser {foo(*1-2)} -1} msg] $msg -} {1 {syntax error in expression "foo(*1-2)": unexpected operator *}} -test parseExpr-15.29 {ParsePrimaryExpr procedure, function call, comma after arg} { +test parseExpr-15.27 {ParsePrimaryExpr procedure, error in function arg} -constraints testexprparser -body { + testexprparser {foo(*1-2)} -1 +} -returnCodes error -match glob -result * +test parseExpr-15.28 {ParsePrimaryExpr procedure, error in function arg} -constraints testexprparser -body { + testexprparser {foo(*1-2)} -1 +} -returnCodes error -match glob -result * +test parseExpr-15.29 {ParsePrimaryExpr procedure, function call, comma after arg} testexprparser { testexprparser {foo(27-2, (-2*[foo]))} -1 } {- {} 0 subexpr {foo(27-2, (-2*[foo]))} 15 operator foo 0 subexpr 27-2 5 operator - 0 subexpr 27 1 text 27 0 subexpr 2 1 text 2 0 subexpr {-2*[foo]} 7 operator * 0 subexpr -2 3 operator - 0 subexpr 2 1 text 2 0 subexpr {[foo]} 1 command {[foo]} 0 {}} -test parseExpr-15.30 {ParsePrimaryExpr procedure, bad lexeme after comma} {wideIntegerUnparsed} { - list [catch {testexprparser {foo(123, 12345678901234567890)} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-15.31 {ParsePrimaryExpr procedure, lexeme not "," or ")" after arg} { - list [catch {testexprparser {foo(123 [foo])} -1} msg] $msg -} {1 {syntax error in expression "foo(123 [foo])": missing close parenthesis at end of function call}} -test parseExpr-15.32 {ParsePrimaryExpr procedure, bad lexeme after primary} {wideIntegerUnparsed} { - list [catch {testexprparser {123 12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} -test parseExpr-15.33 {ParsePrimaryExpr procedure, comma-specific message} { - list [catch {testexprparser {123+,456} -1} msg] $msg -} {1 {syntax error in expression "123+,456": commas can only separate function arguments}} -test parseExpr-15.34 {ParsePrimaryExpr procedure, single equal-specific message} { - list [catch {testexprparser {123+=456} -1} msg] $msg -} {1 {syntax error in expression "123+=456": single equality character not legal in expressions}} -test parseExpr-15.35 {ParsePrimaryExpr procedure, error in parenthesized subexpr} { - list [catch {testexprparser {(: 123 : 456)} -1} msg] $msg -} {1 {syntax error in expression "(: 123 : 456)": unexpected ternary 'else' separator}} -test parseExpr-15.36 {ParsePrimaryExpr procedure, missing close-bracket} { +test parseExpr-15.30 {ParsePrimaryExpr procedure, bad lexeme after comma} testexprparser { + testexprparser {foo(123, 12345678901234567890)} -1 +} {- {} 0 subexpr {foo(123, 12345678901234567890)} 5 operator foo 0 subexpr 123 1 text 123 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-15.31 {ParsePrimaryExpr procedure, lexeme not "," or ")" after arg} -constraints testexprparser -body { + testexprparser {foo(123 [foo])} -1 +} -returnCodes error -match glob -result * +test parseExpr-15.32 {ParsePrimaryExpr procedure, bad lexeme after primary} -constraints testexprparser -body { + testexprparser {123 12345678901234567890} -1 +} -returnCodes error -match glob -result * +test parseExpr-15.33 {ParsePrimaryExpr procedure, comma-specific message} -constraints testexprparser -body { + testexprparser {123+,456} -1 +} -returnCodes error -match glob -result * +test parseExpr-15.34 {ParsePrimaryExpr procedure, single equal-specific message} -constraints testexprparser -body { + testexprparser {123+=456} -1 +} -returnCodes error -match glob -result * +test parseExpr-15.35 {ParsePrimaryExpr procedure, error in parenthesized subexpr} -constraints testexprparser -body { + testexprparser {(: 123 : 456)} -1 +} -returnCodes error -match glob -result * +test parseExpr-15.36 {ParsePrimaryExpr procedure, missing close-bracket} -constraints testexprparser -body { # Test for Bug 681841 - list [catch {testexprparser {[set a [format bc]} -1} msg] $msg -} {1 {missing close-bracket}} + testexprparser {[set a [format bc]} -1 +} -returnCodes error -match glob -result * -test parseExpr-16.1 {GetLexeme procedure, whitespace before lexeme} { +test parseExpr-16.1 {GetLexeme procedure, whitespace before lexeme} testexprparser { testexprparser { 123} -1 } {- {} 0 subexpr 123 1 text 123 0 {}} -test parseExpr-16.2 {GetLexeme procedure, whitespace before lexeme} { +test parseExpr-16.2 {GetLexeme procedure, whitespace before lexeme} testexprparser { testexprparser { \ 456} -1 } {- {} 0 subexpr 456 1 text 456 0 {}} -test parseExpr-16.3 {GetLexeme procedure, no lexeme after whitespace} { +test parseExpr-16.3 {GetLexeme procedure, no lexeme after whitespace} testexprparser { testexprparser { 123 \ } -1 } {- {} 0 subexpr 123 1 text 123 0 {}} -test parseExpr-16.4 {GetLexeme procedure, integer lexeme} { +test parseExpr-16.4 {GetLexeme procedure, integer lexeme} testexprparser { testexprparser {000} -1 } {- {} 0 subexpr 000 1 text 000 0 {}} -test parseExpr-16.5 {GetLexeme procedure, integer lexeme too big} {wideIntegerUnparsed} { - list [catch {testexprparser {12345678901234567890} -1} msg] $msg -} {1 {integer value too large to represent}} - -test parseExpr-16.6 {GetLexeme procedure, bad integer lexeme} -body { - testexprparser {0999} -1 +test parseExpr-16.5 {GetLexeme procedure, integer lexeme too big} testexprparser { + testexprparser {12345678901234567890} -1 +} {- {} 0 subexpr 12345678901234567890 1 text 12345678901234567890 0 {}} +test parseExpr-16.6 {GetLexeme procedure, bad integer lexeme} -constraints testexprparser -body { + testexprparser {0o999} -1 } -returnCodes error -match glob -result {*invalid octal number*} - -test parseExpr-16.7 {GetLexeme procedure, double lexeme} { +test parseExpr-16.7 {GetLexeme procedure, double lexeme} testexprparser { testexprparser {0.999} -1 } {- {} 0 subexpr 0.999 1 text 0.999 0 {}} -test parseExpr-16.8 {GetLexeme procedure, double lexeme} { +test parseExpr-16.8 {GetLexeme procedure, double lexeme} testexprparser { testexprparser {.123} -1 } {- {} 0 subexpr .123 1 text .123 0 {}} -test parseExpr-16.9 {GetLexeme procedure, double lexeme} {nonPortable unixOnly} { +test parseExpr-16.9 {GetLexeme procedure, double lexeme} {testexprparser unix} { testexprparser {nan} -1 } {- {} 0 subexpr nan 1 text nan 0 {}} -test parseExpr-16.10 {GetLexeme procedure, double lexeme} {nonPortable unixOnly} { +test parseExpr-16.10 {GetLexeme procedure, double lexeme} {testexprparser unix} { testexprparser {NaN} -1 } {- {} 0 subexpr NaN 1 text NaN 0 {}} -test parseExpr-16.11 {GetLexeme procedure, bad double lexeme too big} { +test parseExpr-16.11a {GetLexeme procedure, bad double lexeme too big} {testexprparser && !ieeeFloatingPoint} { list [catch {testexprparser {123.e+99999999999999} -1} msg] $msg } {1 {floating-point value too large to represent}} -test parseExpr-16.12 {GetLexeme procedure, bad double lexeme} { - list [catch {testexprparser {123.4x56} -1} msg] $msg -} {1 {syntax error in expression "123.4x56": extra tokens at end of expression}} -test parseExpr-16.13 {GetLexeme procedure, lexeme is "["} { +test parseExpr-16.11b {GetLexeme procedure, bad double lexeme too big} {testexprparser && ieeeFloatingPoint} { + list [catch {testexprparser {123.e+99999999999999} -1} msg] $msg +} {0 {- {} 0 subexpr 123.e+99999999999999 1 text 123.e+99999999999999 0 {}}} +test parseExpr-16.12 {GetLexeme procedure, bad double lexeme} -constraints testexprparser -body { + testexprparser {123.4x56} -1 +} -returnCodes error -match glob -result * +test parseExpr-16.13 {GetLexeme procedure, lexeme is "["} testexprparser { testexprparser {[foo]} -1 } {- {} 0 subexpr {[foo]} 1 command {[foo]} 0 {}} -test parseExpr-16.14 {GetLexeme procedure, lexeme is open brace} { +test parseExpr-16.14 {GetLexeme procedure, lexeme is open brace} testexprparser { testexprparser {{bar}} -1 } {- {} 0 subexpr {{bar}} 1 text bar 0 {}} -test parseExpr-16.15 {GetLexeme procedure, lexeme is "("} { +test parseExpr-16.15 {GetLexeme procedure, lexeme is "("} testexprparser { testexprparser {(123)} -1 } {- {} 0 subexpr 123 1 text 123 0 {}} -test parseExpr-16.16 {GetLexeme procedure, lexeme is ")"} { +test parseExpr-16.16 {GetLexeme procedure, lexeme is ")"} testexprparser { testexprparser {(2*3)} -1 } {- {} 0 subexpr 2*3 5 operator * 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-16.17 {GetLexeme procedure, lexeme is "$"} { +test parseExpr-16.17 {GetLexeme procedure, lexeme is "$"} testexprparser { testexprparser {$wombat} -1 } {- {} 0 subexpr {$wombat} 2 variable {$wombat} 1 text wombat 0 {}} -test parseExpr-16.18 "GetLexeme procedure, lexeme is '\"'" { +test parseExpr-16.18 "GetLexeme procedure, lexeme is '\"'" testexprparser { testexprparser {"fred"} -1 } {- {} 0 subexpr {"fred"} 1 text fred 0 {}} -test parseExpr-16.19 {GetLexeme procedure, lexeme is ","} { +test parseExpr-16.19 {GetLexeme procedure, lexeme is ","} testexprparser { testexprparser {foo(1,2)} -1 } {- {} 0 subexpr foo(1,2) 5 operator foo 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 {}} -test parseExpr-16.20 {GetLexeme procedure, lexeme is "*"} { +test parseExpr-16.20 {GetLexeme procedure, lexeme is "*"} testexprparser { testexprparser {$a*$b} -1 } {- {} 0 subexpr {$a*$b} 7 operator * 0 subexpr {$a} 2 variable {$a} 1 text a 0 subexpr {$b} 2 variable {$b} 1 text b 0 {}} -test parseExpr-16.21 {GetLexeme procedure, lexeme is "/"} { +test parseExpr-16.21 {GetLexeme procedure, lexeme is "/"} testexprparser { testexprparser {5/6} -1 } {- {} 0 subexpr 5/6 5 operator / 0 subexpr 5 1 text 5 0 subexpr 6 1 text 6 0 {}} -test parseExpr-16.22 {GetLexeme procedure, lexeme is "%"} { +test parseExpr-16.22 {GetLexeme procedure, lexeme is "%"} testexprparser { testexprparser {5%[xxx]} -1 } {- {} 0 subexpr {5%[xxx]} 5 operator % 0 subexpr 5 1 text 5 0 subexpr {[xxx]} 1 command {[xxx]} 0 {}} -test parseExpr-16.23 {GetLexeme procedure, lexeme is "+"} { +test parseExpr-16.23 {GetLexeme procedure, lexeme is "+"} testexprparser { testexprparser {1+2} -1 } {- {} 0 subexpr 1+2 5 operator + 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 {}} -test parseExpr-16.24 {GetLexeme procedure, lexeme is "-"} { +test parseExpr-16.24 {GetLexeme procedure, lexeme is "-"} testexprparser { testexprparser {.12-0e27} -1 } {- {} 0 subexpr .12-0e27 5 operator - 0 subexpr .12 1 text .12 0 subexpr 0e27 1 text 0e27 0 {}} -test parseExpr-16.25 {GetLexeme procedure, lexeme is "?" or ":"} { +test parseExpr-16.25 {GetLexeme procedure, lexeme is "?" or ":"} testexprparser { testexprparser {$b? 1 : 0} -1 } {- {} 0 subexpr {$b? 1 : 0} 8 operator ? 0 subexpr {$b} 2 variable {$b} 1 text b 0 subexpr 1 1 text 1 0 subexpr 0 1 text 0 0 {}} -test parseExpr-16.26 {GetLexeme procedure, lexeme is "<"} { +test parseExpr-16.26 {GetLexeme procedure, lexeme is "<"} testexprparser { testexprparser {2<3} -1 } {- {} 0 subexpr 2<3 5 operator < 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-16.27 {GetLexeme procedure, lexeme is "<<"} { +test parseExpr-16.27 {GetLexeme procedure, lexeme is "<<"} testexprparser { testexprparser {2<<3} -1 } {- {} 0 subexpr 2<<3 5 operator << 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-16.28 {GetLexeme procedure, lexeme is "<="} { +test parseExpr-16.28 {GetLexeme procedure, lexeme is "<="} testexprparser { testexprparser {2<=3} -1 } {- {} 0 subexpr 2<=3 5 operator <= 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-16.29 {GetLexeme procedure, lexeme is ">"} { +test parseExpr-16.29 {GetLexeme procedure, lexeme is ">"} testexprparser { testexprparser {2>3} -1 } {- {} 0 subexpr 2>3 5 operator > 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-16.30 {GetLexeme procedure, lexeme is ">>"} { +test parseExpr-16.30 {GetLexeme procedure, lexeme is ">>"} testexprparser { testexprparser {2>>3} -1 } {- {} 0 subexpr 2>>3 5 operator >> 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-16.31 {GetLexeme procedure, lexeme is ">="} { +test parseExpr-16.31 {GetLexeme procedure, lexeme is ">="} testexprparser { testexprparser {2>=3} -1 } {- {} 0 subexpr 2>=3 5 operator >= 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-16.32 {GetLexeme procedure, lexeme is "=="} { +test parseExpr-16.32 {GetLexeme procedure, lexeme is "=="} testexprparser { testexprparser {2==3} -1 } {- {} 0 subexpr 2==3 5 operator == 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-16.33 {GetLexeme procedure, bad lexeme starting with "="} { - list [catch {testexprparser {2=+3} -1} msg] $msg -} {1 {syntax error in expression "2=+3": extra tokens at end of expression}} -test parseExpr-16.34 {GetLexeme procedure, lexeme is "!="} { +test parseExpr-16.33 {GetLexeme procedure, bad lexeme starting with "="} -constraints testexprparser -body { + testexprparser {2=+3} -1 +} -returnCodes error -match glob -result * +test parseExpr-16.34 {GetLexeme procedure, lexeme is "!="} testexprparser { testexprparser {2!=3} -1 } {- {} 0 subexpr 2!=3 5 operator != 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-16.35 {GetLexeme procedure, lexeme is "!"} { +test parseExpr-16.35 {GetLexeme procedure, lexeme is "!"} testexprparser { testexprparser {!2} -1 } {- {} 0 subexpr !2 3 operator ! 0 subexpr 2 1 text 2 0 {}} -test parseExpr-16.36 {GetLexeme procedure, lexeme is "&&"} { +test parseExpr-16.36 {GetLexeme procedure, lexeme is "&&"} testexprparser { testexprparser {2&&3} -1 } {- {} 0 subexpr 2&&3 5 operator && 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-16.37 {GetLexeme procedure, lexeme is "&"} { +test parseExpr-16.37 {GetLexeme procedure, lexeme is "&"} testexprparser { testexprparser {1&2} -1 } {- {} 0 subexpr 1&2 5 operator & 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 {}} -test parseExpr-16.38 {GetLexeme procedure, lexeme is "^"} { +test parseExpr-16.38 {GetLexeme procedure, lexeme is "^"} testexprparser { testexprparser {1^2} -1 } {- {} 0 subexpr 1^2 5 operator ^ 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 {}} -test parseExpr-16.39 {GetLexeme procedure, lexeme is "||"} { +test parseExpr-16.39 {GetLexeme procedure, lexeme is "||"} testexprparser { testexprparser {2||3} -1 } {- {} 0 subexpr 2||3 5 operator || 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-16.40 {GetLexeme procedure, lexeme is "|"} { +test parseExpr-16.40 {GetLexeme procedure, lexeme is "|"} testexprparser { testexprparser {1|2} -1 } {- {} 0 subexpr 1|2 5 operator | 0 subexpr 1 1 text 1 0 subexpr 2 1 text 2 0 {}} -test parseExpr-16.41 {GetLexeme procedure, lexeme is "~"} { +test parseExpr-16.41 {GetLexeme procedure, lexeme is "~"} testexprparser { testexprparser {~2} -1 } {- {} 0 subexpr ~2 3 operator ~ 0 subexpr 2 1 text 2 0 {}} -test parseExpr-16.42 {GetLexeme procedure, lexeme is func name} { +test parseExpr-16.42 {GetLexeme procedure, lexeme is func name} testexprparser { testexprparser {george()} -1 } {- {} 0 subexpr george() 1 operator george 0 {}} -test parseExpr-16.43 {GetLexeme procedure, lexeme is func name} { +test parseExpr-16.43 {GetLexeme procedure, lexeme is func name} testexprparser { testexprparser {harmonic_ratio(2,3)} -1 } {- {} 0 subexpr harmonic_ratio(2,3) 5 operator harmonic_ratio 0 subexpr 2 1 text 2 0 subexpr 3 1 text 3 0 {}} -test parseExpr-16.44 {GetLexeme procedure, unknown lexeme} { - list [catch {testexprparser {@27} -1} msg] $msg -} {1 {syntax error in expression "@27": character not legal in expressions}} +test parseExpr-16.44 {GetLexeme procedure, unknown lexeme} -constraints testexprparser -body { + testexprparser {@27} -1 +} -returnCodes error -match glob -result * -test parseExpr-17.1 {PrependSubExprTokens procedure, expand token array} { +test parseExpr-17.1 {PrependSubExprTokens procedure, expand token array} testexprparser { testexprparser {[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]} -1 } {- {} 0 subexpr {[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]} 13 operator && 0 subexpr {[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]} 9 operator && 0 subexpr {[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]} 5 operator && 0 subexpr {[string compare [format %c $i] [string index $a $i]]} 1 command {[string compare [format %c $i] [string index $a $i]]} 0 subexpr {[string compare [format %c $i] [string index $a $i]]} 1 command {[string compare [format %c $i] [string index $a $i]]} 0 subexpr {[string compare [format %c $i] [string index $a $i]]} 1 command {[string compare [format %c $i] [string index $a $i]]} 0 subexpr {[string compare [format %c $i] [string index $a $i]]} 1 command {[string compare [format %c $i] [string index $a $i]]} 0 {}} -test parseExpr-18.1 {LogSyntaxError procedure, error in expr longer than 60 chars} { - list [catch {testexprparser {(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)/} -1} msg] $msg -} {1 {syntax error in expression "(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+012...": premature end of expression}} +test parseExpr-18.1 {LogSyntaxError procedure, error in expr longer than 60 chars} -constraints testexprparser -body { + testexprparser {(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)/} -1 +} -returnCodes error -match glob -result * -test parseExpr-19.1 {TclParseInteger: [Bug 648441]} { +test parseExpr-19.1 {TclParseInteger: [Bug 648441]} -body { # Should see this as integer "0" followed by incomplete function "x" # Thus, syntax error. # If Bug 648441 is not fixed, "0x" will be seen as floating point 0.0 - list [catch {expr 0x} result] $result -} [list 1 {syntax error in expression "0x": extra tokens at end of expression}] + expr 0x +} -returnCodes error -match glob -result * + +test parseExpr-20.1 {Bug 1451233} { + expr 1000000000000000000042 +} 1000000000000000000042 +test parseExpr-20.2 {Bug 1451233} { + expr 10000000000000000000420000000042 +} 10000000000000000000420000000042 +test parseExpr-20.3 {Bug 1451233} { + expr 10000000000000000000020000000002 +} 10000000000000000000020000000002 + +test parseExpr-21.1 {error messages} -body { + expr @ +} -returnCodes error -result {invalid character "@" +in expression "@"} +test parseExpr-21.2 {error messages} -body { + expr = +} -returnCodes error -result {incomplete operator "=" +in expression "="} +test parseExpr-21.3 {error messages} -body { + expr x +} -returnCodes error -result {invalid bareword "x" +in expression "x"; +should be "$x" or "{x}" or "x(...)" or ...} +test parseExpr-21.4 {error messages} -body { + expr abcdefghijklmnopqrstuvwxyz +} -returnCodes error -result {invalid bareword "abcdefghijklmnopqrstuv..." +in expression "abcdefghijklmnopqrstuv..."; +should be "$abcdefghijklmnopqrstuv..." or "{abcdefghijklmnopqrstuv...}" or "abcdefghijklmnopqrstuv...(...)" or ...} +test parseExpr-21.5 {error messages} -body { + expr {[][]} +} -returnCodes error -result {missing operator at _@_ +in expression "[]_@_[]"} +test parseExpr-21.6 {error messages} -body { + expr {0 0} +} -returnCodes error -result {missing operator at _@_ +in expression "0 _@_0"} +test parseExpr-21.7 {error messages} -body { + expr {0o8} +} -returnCodes error -match glob -result {*invalid octal number*} +test parseExpr-21.8 {error messages} -body { + expr {0o8x} +} -returnCodes error -match glob -result {*invalid octal number*} +test parseExpr-21.9 {error messages} -body { + expr {"} +} -returnCodes error -result {missing " +in expression """} +test parseExpr-21.10 {error messages} -body { + expr \{ +} -returnCodes error -result "missing close-brace +in expression \"\{\"" +test parseExpr-21.11 {error messages} -body { + expr $ +} -returnCodes error -result {invalid character "$" +in expression "$"} +test parseExpr-21.12 {error messages} -body { + expr {$(} +} -returnCodes error -result {missing ) +in expression "$("} +test parseExpr-21.13 {error messages} -body { + expr {[""x]} +} -returnCodes error -result {extra characters after close-quote +in expression "[""x]"} +test parseExpr-21.14 {error messages} -body { + expr {[} +} -returnCodes error -result {missing close-bracket +in expression "["} +test parseExpr-21.15 {error messages} -body { + expr 0~0 +} -returnCodes error -result {missing operator at _@_ +in expression "0_@_~0"} +test parseExpr-21.16 {error messages} -body { + expr () +} -returnCodes error -result {empty subexpression at _@_ +in expression "(_@_)"} +test parseExpr-21.17 {error messages} -body { + expr ( +} -returnCodes error -result {unbalanced open paren +in expression "("} +test parseExpr-21.18 {error messages} -body { + expr a(0,) +} -returnCodes error -result {missing function argument at _@_ +in expression "a(0,_@_)"} +test parseExpr-21.19 {error messages} -body { + expr {} +} -returnCodes error -result {empty expression +in expression ""} +test parseExpr-21.20 {error messages} -body { + expr ) +} -returnCodes error -result {unbalanced close paren +in expression ")"} +test parseExpr-21.21 {error messages} -body { + expr a(,0) +} -returnCodes error -result {missing function argument at _@_ +in expression "a(_@_,0)"} +test parseExpr-21.22 {error messages} -body { + expr 0&|0 +} -returnCodes error -result {missing operand at _@_ +in expression "0&_@_|0"} +test parseExpr-21.23 {error messages} -body { + expr 0^^0 +} -returnCodes error -result {missing operand at _@_ +in expression "0^_@_^0"} +test parseExpr-21.24 {error messages} -body { + expr 0|&0 +} -returnCodes error -result {missing operand at _@_ +in expression "0|_@_&0"} +test parseExpr-21.25 {error messages} -body { + expr a(1+,0) +} -returnCodes error -result {missing operand at _@_ +in expression "a(1+_@_,0)"} +test parseExpr-21.26 {error messages} -body { + expr (0 +} -returnCodes error -result {unbalanced open paren +in expression "(0"} +test parseExpr-21.27 {error messages} -body { + expr 0?0 +} -returnCodes error -result {missing operator ":" at _@_ +in expression "0?0_@_"} +test parseExpr-21.28 {error messages} -body { + expr 0:0 +} -returnCodes error -result {unexpected operator ":" without preceding "?" +in expression "0:0"} +test parseExpr-21.29 {error messages} -body { + expr 0) +} -returnCodes error -result {unbalanced close paren +in expression "0)"} +test parseExpr-21.30 {error messages} -body { + expr 0, +} -returnCodes error -result {unexpected "," outside function argument list +in expression "0,"} +test parseExpr-21.31 {error messages} -body { + expr 0,0 +} -returnCodes error -result {unexpected "," outside function argument list +in expression "0,0"} +test parseExpr-21.32 {error messages} -body { + expr (0,0) +} -returnCodes error -result {unexpected "," outside function argument list +in expression "(0,0)"} +test parseExpr-21.33 {error messages} -body { + expr a(0:0,0) +} -returnCodes error -result {unexpected operator ":" without preceding "?" +in expression "a(0:0,0)"} +test parseExpr-21.34 {error messages} -body { + expr {"abcdefghijklmnopqrstuvwxyz"@0} +} -returnCodes error -result {invalid character "@" +in expression "...fghijklmnopqrstuvwxyz"@0"} +test parseExpr-21.35 {error messages} -body { + expr {0@"abcdefghijklmnopqrstuvwxyz"} +} -returnCodes error -result {invalid character "@" +in expression "0@"abcdefghijklmnopqrstu..."} +test parseExpr-21.36 {error messages} -body { + expr {"abcdefghijklmnopqrstuvwxyz"@"abcdefghijklmnopqrstuvwxyz"} +} -returnCodes error -result {invalid character "@" +in expression "...fghijklmnopqrstuvwxyz"@"abcdefghijklmnopqrstu..."} +test parseExpr-21.37 {error messages} -body { + expr [format {"%s" @ 0} [string repeat \u00a7 25]] +} -returnCodes error -result [format {invalid character "@" +in expression "...%s" @ 0"} [string repeat \u00a7 10]] +test parseExpr-21.38 {error messages} -body { + expr [format {0 @ "%s"} [string repeat \u00a7 25]] +} -returnCodes error -result [format {invalid character "@" +in expression "0 @ "%s..."} [string repeat \u00a7 10]] +test parseExpr-21.39 {error messages} -body { + expr [format {"%s" @ "%s"} [string repeat \u00a7 25] [string repeat \u00a7 25]] +} -returnCodes error -result [format {invalid character "@" +in expression "...%s" @ "%s..."} [string repeat \u00a7 10] [string repeat \u00a7 10]] +test parseExpr-21.40 {error messages} -body { + catch {expr {"abcdefghijklmnopqrstuvwxyz"@0}} m o + dict get $o -errorinfo +} -result {invalid character "@" +in expression "...fghijklmnopqrstuvwxyz"@0" + (parsing expression ""abcdefghijklmnopqrstu...") + invoked from within +"expr {"abcdefghijklmnopqrstuvwxyz"@0}"} +test parseExpr-21.41 {error messages} -body { + catch {expr [format {"%s" @ 0} [string repeat \u00a7 25]]} m o + dict get $o -errorinfo +} -result [format {invalid character "@" +in expression "...%s" @ 0" + (parsing expression ""%s...") + invoked from within +"expr [format {"%%s" @ 0} [string repeat \u00a7 25]]"} [string repeat \u00a7 10] [string repeat \u00a7 10]] +test parseExpr-21.42 {error message} -body { + expr {123456789012345678901234567890*"abcdefghijklmnopqrstuvwxyz} +} -returnCodes error -result {missing " +in expression "...012345678901234567890*"abcdefghijklmnopqrstuv..."} +test parseExpr-21.43 {error message} -body { + expr "123456789012345678901234567890*\"foobar\$\{abcdefghijklmnopqrstuvwxyz\"" +} -returnCodes error -result "missing close-brace for variable name +in expression \"...8901234567890*\"foobar\$\{abcdefghijklmnopqrstuv...\"" +test parseExpr-21.44 {error message} -body { + expr {123456789012345678901234567890*"foo$bar(abcdefghijklmnopqrstuvwxyz"} +} -returnCodes error -result {missing ) +in expression "...8901234567890*"foo$bar(abcdefghijklmnopqrstuv..."} +test parseExpr-21.45 {error message} -body { + expr {123456789012345678901234567890*"foo$bar([{}abcdefghijklmnopqrstuvwxyz])"} +} -returnCodes error -result {extra characters after close-brace +in expression "...234567890*"foo$bar([{}abcdefghijklmnopqrstuv..."} +test parseExpr-21.46 {error message} -body { + expr {123456789012345678901234567890*"foo$bar([""abcdefghijklmnopqrstuvwxyz])"} +} -returnCodes error -result {extra characters after close-quote +in expression "...234567890*"foo$bar([""abcdefghijklmnopqrstuv..."} +test parseExpr-21.47 {error message} -body { + expr {123456789012345678901234567890*"foo$bar([abcdefghijklmnopqrstuvwxyz)"} +} -returnCodes error -result {missing close-bracket +in expression "...901234567890*"foo$bar([abcdefghijklmnopqrstuv..."} +test parseExpr-21.48 {error message} -body { + expr "123456789012345678901234567890*\"foo\$bar(\[\{abcdefghijklmnopqrstuvwxyz])\"" +} -returnCodes error -result "missing close-brace +in expression \"...01234567890*\"foo\$bar(\[\{abcdefghijklmnopqrstuv...\"" + +test parseExpr-21.49 {error message} -body { + expr "123456789012345678901234567890*\{abcdefghijklmnopqrstuvwxyz" +} -returnCodes error -result "missing close-brace +in expression \"...012345678901234567890*\{abcdefghijklmnopqrstuv...\"" + +test parseExpr-21.50 {error message} -body { + expr {123456789012345678901234567890*$foo(["abcdefghijklmnopqrstuvwxyz])} +} -returnCodes error -result {missing " +in expression "...678901234567890*$foo(["abcdefghijklmnopqrstuv..."} +test parseExpr-21.51 {error message} -body { + expr "123456789012345678901234567890*\$\{abcdefghijklmnopqrstuvwxyz" +} -returnCodes error -result "missing close-brace for variable name +in expression \"...12345678901234567890*\$\{abcdefghijklmnopqrstuv...\"" +test parseExpr-21.52 {error message} -body { + expr {123456789012345678901234567890*$bar(abcdefghijklmnopqrstuvwxyz} +} -returnCodes error -result {missing ) +in expression "...45678901234567890*$bar(abcdefghijklmnopqrstuv..."} +test parseExpr-21.53 {error message} -body { + expr {123456789012345678901234567890*$bar([{}abcdefghijklmnopqrstuvwxyz])"} +} -returnCodes error -result {extra characters after close-brace +in expression "...8901234567890*$bar([{}abcdefghijklmnopqrstuv..."} +test parseExpr-21.54 {error message} -body { + expr {123456789012345678901234567890*$bar([""abcdefghijklmnopqrstuvwxyz])"} +} -returnCodes error -result {extra characters after close-quote +in expression "...8901234567890*$bar([""abcdefghijklmnopqrstuv..."} +test parseExpr-21.55 {error message} -body { + expr {123456789012345678901234567890*$bar([abcdefghijklmnopqrstuvwxyz)"} +} -returnCodes error -result {missing close-bracket +in expression "...5678901234567890*$bar([abcdefghijklmnopqrstuv..."} +test parseExpr-21.56 {error message} -body { + expr "123456789012345678901234567890*\$bar(\[\{abcdefghijklmnopqrstuvwxyz])" +} -returnCodes error -result "missing close-brace +in expression \"...678901234567890*\$bar(\[\{abcdefghijklmnopqrstuv...\"" + +test parseExpr-21.57 {error message} -body { + expr {123456789012345678901234567890*["abcdefghijklmnopqrstuvwxyz]} +} -returnCodes error -result {missing " +in expression "...12345678901234567890*["abcdefghijklmnopqrstuv..."} +test parseExpr-21.58 {error message} -body { + expr "123456789012345678901234567890*\[\$\{abcdefghijklmnopqrstuvwxyz]" +} -returnCodes error -result "missing close-brace for variable name +in expression \"...2345678901234567890*\[\$\{abcdefghijklmnopqrstuv...\"" +test parseExpr-21.59 {error message} -body { + expr {123456789012345678901234567890*[$bar(abcdefghijklmnopqrstuvwxyz]} +} -returnCodes error -result {missing ) +in expression "...5678901234567890*[$bar(abcdefghijklmnopqrstuv..."} +test parseExpr-21.60 {error message} -body { + expr {123456789012345678901234567890*[{}abcdefghijklmnopqrstuvwxyz]"} +} -returnCodes error -result {extra characters after close-brace +in expression "...345678901234567890*[{}abcdefghijklmnopqrstuv..."} +test parseExpr-21.61 {error message} -body { + expr {123456789012345678901234567890*[""abcdefghijklmnopqrstuvwxyz]"} +} -returnCodes error -result {extra characters after close-quote +in expression "...345678901234567890*[""abcdefghijklmnopqrstuv..."} +test parseExpr-21.62 {error message} -body { + expr {123456789012345678901234567890*[abcdefghijklmnopqrstuvwxyz"} +} -returnCodes error -result {missing close-bracket +in expression "...012345678901234567890*[abcdefghijklmnopqrstuv..."} +test parseExpr-21.63 {error message} -body { + expr "123456789012345678901234567890*\[\{abcdefghijklmnopqrstuvwxyz]" +} -returnCodes error -result "missing close-brace +in expression \"...12345678901234567890*\[\{abcdefghijklmnopqrstuv...\"" + +test parseExpr-22.1 {Bug 3401704} -constraints testexprparser -body { + testexprparser 2a() 1 +} -result {- {} 0 subexpr 2 1 text 2 0 {}} +test parseExpr-22.2 {Bug 3401704} -constraints testexprparser -body { + testexprparser nana() 3 +} -result {- {} 0 subexpr nan 1 text nan 0 {}} +test parseExpr-22.3 {Bug 3401704} -constraints testexprparser -body { + testexprparser 2a() -1 +} -result {- {} 0 subexpr 2a() 1 operator 2a 0 {}} +test parseExpr-22.4 {Bug 3401704} -constraints testexprparser -body { + testexprparser nana() -1 +} -result {- {} 0 subexpr nana() 1 operator nana 0 {}} +test parseExpr-22.5 {Bug 3401704} -constraints testexprparser -body { + testexprparser nan9() -1 +} -result {- {} 0 subexpr nan9() 1 operator nan9 0 {}} +test parseExpr-22.6 {Bug 3401704} -constraints testexprparser -body { + testexprparser 2_() -1 +} -result {- {} 0 subexpr 2_() 1 operator 2_ 0 {}} +test parseExpr-22.7 {Bug 3401704} -constraints testexprparser -body { + testexprparser nan_() -1 +} -result {- {} 0 subexpr nan_() 1 operator nan_ 0 {}} +test parseExpr-22.8 {Bug 3401704} -constraints testexprparser -body { + testexprparser nan!() -1 +} -returnCodes error -match glob -result * +test parseExpr-22.9 {Bug 3401704} -constraints testexprparser -body { + testexprparser 1e3_() -1 +} -result {- {} 0 subexpr 1e3_() 1 operator 1e3_ 0 {}} +test parseExpr-22.10 {Bug 3401704} -constraints testexprparser -body { + testexprparser 1.3_() -1 +} -returnCodes error -match glob -result * +test parseExpr-22.11 {Bug 3401704} -constraints testexprparser -body { + testexprparser 1e-3_() -1 +} -returnCodes error -match glob -result * +test parseExpr-22.12 {Bug 3401704} -constraints testexprparser -body { + testexprparser naneq() -1 +} -returnCodes error -match glob -result * +test parseExpr-22.13 {Bug 3401704} -constraints testexprparser -body { + testexprparser naner() -1 +} -result {- {} 0 subexpr naner() 1 operator naner 0 {}} + +test parseExpr-22.14 {Bug 3401704} -constraints testexprparser -body { + testexprparser 08 -1 +} -returnCodes error -match glob -result {*invalid octal number*} +test parseExpr-22.15 {Bug 3401704} -constraints testexprparser -body { + testexprparser 0o8 -1 +} -returnCodes error -match glob -result {*invalid octal number*} +test parseExpr-22.16 {Bug 3401704} -constraints testexprparser -body { + testexprparser 0o08 -1 +} -returnCodes error -match glob -result {*invalid octal number*} +test parseExpr-22.17 {Bug 3401704} -constraints testexprparser -body { + testexprparser 0b2 -1 +} -returnCodes error -match glob -result {*invalid binary number*} +test parseExpr-22.18 {Bug 3401704} -constraints testexprparser -body { + testexprparser 0b02 -1 +} -returnCodes error -match glob -result {*invalid binary number*} + # cleanup ::tcltest::cleanupTests diff --git a/tests/parseOld.test b/tests/parseOld.test index 27978e2..132481c 100644 --- a/tests/parseOld.test +++ b/tests/parseOld.test @@ -18,8 +18,7 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -tcltest::testConstraint testwordend \ - [string equal "testwordend" [info commands testwordend]] +testConstraint testwordend [llength [info commands testwordend]] # Save the argv value for restoration later set savedArgv $argv @@ -351,7 +350,7 @@ test parseOld-10.13 {syntax errors} { # since MetroWerks may some day fix this. test parseOld-10.14 {syntax errors} { - list [catch {eval \$x[format "%01000d" 0](} msg] $msg $errorInfo + list [catch {eval \$x[format "%01000d" 0](} msg] $msg $::errorInfo } {1 {missing )} {missing ) while executing "$x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000..." @@ -466,7 +465,7 @@ test parseOld-14.3 {TclWordEnd procedure} {testwordend} { test parseOld-14.4 {TclWordEnd procedure} {testwordend} { testwordend {"abc"} } {"} -#" Emacs formatting >:^( +#" Emacs formatting :^( test parseOld-14.5 {TclWordEnd procedure} {testwordend} { testwordend {{xyz}} } \} @@ -512,7 +511,7 @@ test parseOld-14.18 {TclWordEnd procedure} {testwordend} { test parseOld-14.19 {TclWordEnd procedure} {testwordend} { testwordend \"a\000\" } {"} -#" Emacs formatting >:^( +#" Emacs formatting :^( test parseOld-14.20 {TclWordEnd procedure} {testwordend} { testwordend a{\000}b } {b} diff --git a/tests/pid.test b/tests/pid.test index d149df6..d21dbaa 100644 --- a/tests/pid.test +++ b/tests/pid.test @@ -16,18 +16,12 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -# If pid is not defined just return with no error -# Some platforms may not have the pid command implemented -if {[info commands pid] == ""} { - puts "pid is not implemented for this machine" - ::tcltest::cleanupTests - return -} +testConstraint pidDefined [llength [info commands pid]] -test pid-1.1 {pid command} { +test pid-1.1 {pid command} pidDefined { regexp {(^[0-9]+$)|(^0x[0-9a-fA-F]+$)} [pid] } 1 -test pid-1.2 {pid command} -constraints {unixOrPc unixExecs} -setup { +test pid-1.2 {pid command} -constraints {unixOrPc unixExecs pidDefined} -setup { set path(test1) [makeFile {} test1] file delete $path(test1) } -body { @@ -40,7 +34,7 @@ test pid-1.2 {pid command} -constraints {unixOrPc unixExecs} -setup { } -cleanup { removeFile test1 } -result {2 1 1 0} -test pid-1.3 {pid command} -setup { +test pid-1.3 {pid command} -constraints pidDefined -setup { set path(test1) [makeFile {} test1] file delete $path(test1) } -body { @@ -51,25 +45,13 @@ test pid-1.3 {pid command} -setup { } -cleanup { removeFile test1 } -result {} -test pid-1.4 {pid command} { +test pid-1.4 {pid command} pidDefined { list [catch {pid a b} msg] $msg } {1 {wrong # args: should be "pid ?channelId?"}} -test pid-1.5 {pid command} { +test pid-1.5 {pid command} pidDefined { list [catch {pid gorp} msg] $msg } {1 {can not find channel named "gorp"}} # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/pkg.test b/tests/pkg.test index 68d2a92..b935a3f 100644 --- a/tests/pkg.test +++ b/tests/pkg.test @@ -1,3 +1,4 @@ +# -*- tcl -*- # Commands covered: pkg # # This file contains a collection of tests for one or more of the Tcl @@ -11,27 +12,23 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest 2 + package require tcltest 2.3.4 namespace import -force ::tcltest::* } # Do all this in a slave interp to avoid garbaging the # package list set i [interp create] -interp eval $i [list set argv $argv] -interp eval $i [list package require tcltest 2] -interp eval $i [list namespace import -force ::tcltest::*] -interp eval $i { +tcltest::loadIntoSlaveInterpreter $i {*}$argv -eval package forget [package names] +interp eval $i { +namespace import -force ::tcltest::* +package forget {*}[package names] set oldPkgUnknown [package unknown] package unknown {} set oldPath $auto_path set auto_path "" -testConstraint tip268 [info exists tcl_platform(tip,268)] -testConstraint !tip268 [expr {![info exists tcl_platform(tip,268)]}] - test pkg-1.1 {Tcl_PkgProvide procedure} { package forget t package provide t 2.3 @@ -57,7 +54,7 @@ test pkg-1.5 {Tcl_PkgProvide procedure} { package provide t 2.3 } {} -test pkg-1.6 {Tcl_PkgProvide procedure} tip268 { +test pkg-1.6 {Tcl_PkgProvide procedure} { package forget t package provide t 2.3a1 } {} @@ -67,7 +64,7 @@ foreach v { 2.3k1 2a3a2 2ab3 2.a4 2.b4 2b.4 2a.4 2ba4 2a4b1 2b4a1 2b3b2 } { - test pkg-1.7.$n {Tcl_PkgProvide procedure} tip268 { + test pkg-1.7.$n {Tcl_PkgProvide procedure} { package forget t list [catch {package provide t $v} msg] $msg } [list 1 "expected version number but got \"$v\""] @@ -135,24 +132,14 @@ test pkg-2.7 {Tcl_PkgRequire procedure, can't find suitable version} { } list [catch {package require t 4.1} msg] $msg } {1 {can't find package t 4.1}} -test pkg-2.8 {Tcl_PkgRequire procedure, can't find suitable version} !tip268 { - package forget t - package unknown {} - foreach i {1.4 3.4 2.3 2.4 2.2} { - package ifneeded t $i "set x $i" - } - list [catch {package require -exact t 1.3} msg] $msg - -} {1 {can't find package t 1.3}} -test pkg-2.8-268 {Tcl_PkgRequire procedure, can't find suitable version} tip268 { +test pkg-2.8 {Tcl_PkgRequire procedure, can't find suitable version} { package forget t package unknown {} foreach i {1.4 3.4 2.3 2.4 2.2} { package ifneeded t $i "set x $i" } list [catch {package require -exact t 1.3} msg] $msg - -} {1 {can't find package t 1.3}} +} {1 {can't find package t exactly 1.3}} test pkg-2.9 {Tcl_PkgRequire procedure, can't find suitable version} { package forget t package unknown {} @@ -161,7 +148,7 @@ test pkg-2.9 {Tcl_PkgRequire procedure, can't find suitable version} { test pkg-2.10 {Tcl_PkgRequire procedure, error in ifneeded script} -body { package forget t package ifneeded t 2.1 {package provide t 2.1; error "ifneeded test"} - list [catch {package require t 2.1} msg] $msg $errorInfo + list [catch {package require t 2.1} msg] $msg $::errorInfo } -match glob -result {1 {ifneeded test} {ifneeded test while executing "error "ifneeded test"" @@ -181,24 +168,7 @@ test pkg-2.12 {Tcl_PkgRequire procedure, self-deleting script} { package require t 1.2 set x } {1.2} -test pkg-2.13-!268 {Tcl_PkgRequire procedure, "package unknown" support} !tip268 { - proc pkgUnknown args { - global x - set x $args - package provide [lindex $args 0] [lindex $args 1] - } - package forget t - foreach i {1.4 3.4 2.3 2.4 2.2} { - package ifneeded t $i "set x $i" - } - package unknown pkgUnknown - set x xxx - package require -exact t 1.5 - package unknown {} - set x -} {t 1.5 -exact} - -test pkg-2.13-268 {Tcl_PkgRequire procedure, "package unknown" support} tip268 { +test pkg-2.13 {Tcl_PkgRequire procedure, "package unknown" support} { proc pkgUnknown args { # args = name requirement # requirement = v-v (for exact version) @@ -216,7 +186,6 @@ test pkg-2.13-268 {Tcl_PkgRequire procedure, "package unknown" support} tip268 { package unknown {} set x } {t 1.5-1.5} - test pkg-2.14 {Tcl_PkgRequire procedure, "package unknown" support} { proc pkgUnknown args { package ifneeded t 1.2 "set x loaded; package provide t 1.2" @@ -228,20 +197,7 @@ test pkg-2.14 {Tcl_PkgRequire procedure, "package unknown" support} { package unknown {} set result } {1.2 loaded} -test pkg-2.15 {Tcl_PkgRequire procedure, "package unknown" support} !tip268 { - proc pkgUnknown args { - global x - set x $args - package provide [lindex $args 0] 2.0 - } - package forget {a b} - package unknown pkgUnknown - set x xxx - package require {a b} - package unknown {} - set x -} {{a b} {}} -test pkg-2.15-268 {Tcl_PkgRequire procedure, "package unknown" support} tip268 { +test pkg-2.15 {Tcl_PkgRequire procedure, "package unknown" support} { proc pkgUnknown args { global x set x $args @@ -254,31 +210,13 @@ test pkg-2.15-268 {Tcl_PkgRequire procedure, "package unknown" support} tip268 { package unknown {} set x } {{a b} 0-} -test pkg-2.16 {Tcl_PkgRequire procedure, "package unknown" error} !tip268 { - proc pkgUnknown args { - error "testing package unknown" - } - package forget t - package unknown pkgUnknown - set result [list [catch {package require t} msg] $msg $errorInfo] - package unknown {} - set result -} {1 {testing package unknown} {testing package unknown - while executing -"error "testing package unknown"" - (procedure "pkgUnknown" line 2) - invoked from within -"pkgUnknown t {}" - ("package unknown" script) - invoked from within -"package require t"}} -test pkg-2.16-268 {Tcl_PkgRequire procedure, "package unknown" error} tip268 { +test pkg-2.16 {Tcl_PkgRequire procedure, "package unknown" error} { proc pkgUnknown args { error "testing package unknown" } package forget t package unknown pkgUnknown - set result [list [catch {package require t} msg] $msg $errorInfo] + set result [list [catch {package require t} msg] $msg $::errorInfo] package unknown {} set result } {1 {testing package unknown} {testing package unknown @@ -290,22 +228,7 @@ test pkg-2.16-268 {Tcl_PkgRequire procedure, "package unknown" error} tip268 { ("package unknown" script) invoked from within "package require t"}} -test pkg-2.17 {Tcl_PkgRequire procedure, "package unknown" doesn't load package} !tip268 { - proc pkgUnknown args { - global x - set x $args - } - package forget t - foreach i {1.4 3.4 2.3 2.4 2.2} { - package ifneeded t $i "set x $i" - } - package unknown pkgUnknown - set x xxx - set result [list [catch {package require -exact t 1.5} msg] $msg $x] - package unknown {} - set result -} {1 {can't find package t 1.5} {t 1.5 -exact}} -test pkg-2.17-268 {Tcl_PkgRequire procedure, "package unknown" doesn't load package} tip268 { +test pkg-2.17 {Tcl_PkgRequire procedure, "package unknown" doesn't load package} { proc pkgUnknown args { global x set x $args @@ -319,7 +242,7 @@ test pkg-2.17-268 {Tcl_PkgRequire procedure, "package unknown" doesn't load pack set result [list [catch {package require -exact t 1.5} msg] $msg $x] package unknown {} set result -} {1 {can't find package t 1.5} {t 1.5-1.5}} +} {1 {can't find package t exactly 1.5} {t 1.5-1.5}} test pkg-2.18 {Tcl_PkgRequire procedure, version checks} { package forget t package provide t 2.3 @@ -350,28 +273,23 @@ test pkg-2.23 {Tcl_PkgRequire procedure, version checks} { package provide t 2.3 package require -exact t 2.3 } {2.3} -test pkg-2.24 {Tcl_PkgRequire procedure, version checks} !tip268 { +test pkg-2.24 {Tcl_PkgRequire procedure, version checks} { package forget t package provide t 2.3 list [catch {package require -exact t 2.2} msg] $msg -} {1 {version conflict for package "t": have 2.3, need 2.2}} -test pkg-2.24-268 {Tcl_PkgRequire procedure, version checks} tip268 { - package forget t - package provide t 2.3 - list [catch {package require -exact t 2.2} msg] $msg -} {1 {version conflict for package "t": have 2.3, need 2.2}} +} {1 {version conflict for package "t": have 2.3, need exactly 2.2}} test pkg-2.25 {Tcl_PkgRequire procedure, error in ifneeded script} -body { package forget t package ifneeded t 2.1 {package provide t 2.1; error "ifneeded test" EI} - list [catch {package require t 2.1} msg] $msg $errorInfo + list [catch {package require t 2.1} msg] $msg $::errorInfo } -match glob -result {1 {ifneeded test} {EI ("package ifneeded*" script) invoked from within -"package require t 2.1"}} -constraints knownBug +"package require t 2.1"}} test pkg-2.26 {Tcl_PkgRequire procedure, error in ifneeded script} -body { package forget t package ifneeded t 2.1 {package provide t 2.1; foreach x 1 {error "ifneeded test" EI}} - list [catch {package require t 2.1} msg] $msg $errorInfo + list [catch {package require t 2.1} msg] $msg $::errorInfo } -match glob -result {1 {ifneeded test} {EI ("foreach" body line 1) invoked from within @@ -450,7 +368,7 @@ test pkg-2.34 {Tcl_PkgRequire: consistent return values (1162286)} -setup { package require foo 1 } -cleanup { package forget foo -} -result 1.1 +} -returnCodes error -match glob -result {attempt to provide package * failed:*} test pkg-2.34.1 {Tcl_PkgRequire: consistent return values (1162286)} -setup { package forget foo } -body { @@ -458,7 +376,7 @@ test pkg-2.34.1 {Tcl_PkgRequire: consistent return values (1162286)} -setup { package require foo 1 } -cleanup { package forget foo -} -result 1 +} -returnCodes error -match glob -result {attempt to provide package * failed:*} test pkg-2.34.2 {Tcl_PkgRequire: consistent return values (1162286)} -setup { package forget foo } -body { @@ -505,10 +423,9 @@ test pkg-2.37 {Tcl_PkgRequire: consistent return values (1162286)} -setup { test pkg-2.38 {Tcl_PkgRequire: consistent return values (1162286)} -setup { package forget foo } -body { - package ifneeded foo 1 {proc x {} {return -code 10}; x} + package ifneeded foo 1 {return -level 0 -code 10} package require foo 1 } -cleanup { - rename x {} package forget foo } -returnCodes error -match glob \ -result {attempt to provide package * failed: bad return code:*} @@ -555,19 +472,23 @@ test pkg-2.42 {Tcl_PkgRequire: consistent return values (1162286)} -setup { test pkg-2.43 {Tcl_PkgRequire: consistent return values (1162286)} -setup { package forget foo set saveUnknown [package unknown] - proc x args {return -code 10} - package unknown x + package unknown {return -level 0 -code 10 ;#} } -body { package require foo 1 } -cleanup { - rename x {} package forget foo package unknown $saveUnknown } -returnCodes error -match glob -result {bad return code:*} +test pkg-2.44 {Tcl_PkgRequire: exact version matching (1578344)} -setup { + package provide demo 1.2.3 +} -body { + package require -exact demo 1.2 +} -cleanup { + package forget demo +} -returnCodes error -result {version conflict for package "demo": have 1.2.3, need exactly 1.2} - -test pkg-2.50 {Tcl_PkgRequire procedure, picking best stable version} tip268 { +test pkg-2.50 {Tcl_PkgRequire procedure, picking best stable version} { package forget t foreach i {1.4 3.4 4.0a1 2.3 2.4 2.2} { package ifneeded t $i "set x $i; package provide t $i" @@ -577,7 +498,7 @@ test pkg-2.50 {Tcl_PkgRequire procedure, picking best stable version} tip268 { set x } {3.4} -test pkg-2.51 {Tcl_PkgRequire procedure, picking best stable version} tip268 { +test pkg-2.51 {Tcl_PkgRequire procedure, picking best stable version} { package forget t foreach i {1.2b1 1.2 1.3a2 1.3} { package ifneeded t $i "set x $i; package provide t $i" @@ -587,7 +508,7 @@ test pkg-2.51 {Tcl_PkgRequire procedure, picking best stable version} tip268 { set x } {1.3} -test pkg-2.52 {Tcl_PkgRequire procedure, picking best stable version} tip268 { +test pkg-2.52 {Tcl_PkgRequire procedure, picking best stable version} { package forget t foreach i {1.2b1 1.2 1.3 1.3a2} { package ifneeded t $i "set x $i; package provide t $i" @@ -722,42 +643,26 @@ test pkg-3.21 {Tcl_PackageCmd procedure, "provide" option} { package forget t list [catch {package provide t a.b} msg] $msg } {1 {expected version number but got "a.b"}} -test pkg-3.22 {Tcl_PackageCmd procedure, "require" option} !tip268 { - list [catch {package require} msg] $msg -} {1 {wrong # args: should be "package require ?-exact? package ?version?"}} -test pkg-3.22-268 {Tcl_PackageCmd procedure, "require" option} tip268 { +test pkg-3.22 {Tcl_PackageCmd procedure, "require" option} { list [catch {package require} msg] $msg } {1 {wrong # args: should be "package require ?-exact? package ?requirement...?"}} -test pkg-3.23 {Tcl_PackageCmd procedure, "require" option} !tip268 { - list [catch {package require a b c} msg] $msg -} {1 {wrong # args: should be "package require ?-exact? package ?version?"}} -test pkg-3.24 {Tcl_PackageCmd procedure, "require" option} !tip268 { - list [catch {package require -exact a b c} msg] $msg -} {1 {wrong # args: should be "package require ?-exact? package ?version?"}} -test pkg-3.24-268 {Tcl_PackageCmd procedure, "require" option} tip268 { + +test pkg-3.24 {Tcl_PackageCmd procedure, "require" option} { list [catch {package require -exact a b c} msg] $msg # Exact syntax: -exact name version # name ?requirement...? } {1 {wrong # args: should be "package require ?-exact? package ?requirement...?"}} -test pkg-3.25 {Tcl_PackageCmd procedure, "require" option} !tip268 { - list [catch {package require -bs a b} msg] $msg -} {1 {wrong # args: should be "package require ?-exact? package ?version?"}} + test pkg-3.26 {Tcl_PackageCmd procedure, "require" option} { list [catch {package require x a.b} msg] $msg } {1 {expected version number but got "a.b"}} test pkg-3.27 {Tcl_PackageCmd procedure, "require" option} { list [catch {package require -exact x a.b} msg] $msg } {1 {expected version number but got "a.b"}} -test pkg-3.28 {Tcl_PackageCmd procedure, "require" option} !tip268 { - list [catch {package require -exact x} msg] $msg -} {1 {wrong # args: should be "package require ?-exact? package ?version?"}} -test pkg-3.28-268 {Tcl_PackageCmd procedure, "require" option} tip268 { +test pkg-3.28 {Tcl_PackageCmd procedure, "require" option} { list [catch {package require -exact x} msg] $msg } {1 {wrong # args: should be "package require ?-exact? package ?requirement...?"}} -test pkg-3.29 {Tcl_PackageCmd procedure, "require" option} !tip268 { - list [catch {package require -exact} msg] $msg -} {1 {wrong # args: should be "package require ?-exact? package ?version?"}} -test pkg-3.29-268 {Tcl_PackageCmd procedure, "require" option} tip268 { +test pkg-3.29 {Tcl_PackageCmd procedure, "require" option} { list [catch {package require -exact} msg] $msg } {1 {wrong # args: should be "package require ?-exact? package ?requirement...?"}} test pkg-3.30 {Tcl_PackageCmd procedure, "require" option} { @@ -825,15 +730,10 @@ test pkg-3.46 {Tcl_PackageCmd procedure, "versions" option} { package ifneeded t 2.4 y package versions t } {2.3 2.4} -test pkg-3.47 {Tcl_PackageCmd procedure, "vsatisfies" option} !tip268 { - list [catch {package vsatisfies a} msg] $msg -} {1 {wrong # args: should be "package vsatisfies version1 version2"}} -test pkg-3.47-268 {Tcl_PackageCmd procedure, "vsatisfies" option} tip268 { +test pkg-3.47 {Tcl_PackageCmd procedure, "vsatisfies" option} { list [catch {package vsatisfies a} msg] $msg } {1 {wrong # args: should be "package vsatisfies version requirement requirement..."}} -test pkg-3.48 {Tcl_PackageCmd procedure, "vsatisfies" option} !tip268 { - list [catch {package vsatisfies a b c} msg] $msg -} {1 {wrong # args: should be "package vsatisfies version1 version2"}} + test pkg-3.49 {Tcl_PackageCmd procedure, "vsatisfies" option} { list [catch {package vsatisfies x.y 3.4} msg] $msg } {1 {expected version number but got "x.y"}} @@ -846,25 +746,23 @@ test pkg-3.51 {Tcl_PackageCmd procedure, "vsatisfies" option} { test pkg-3.52 {Tcl_PackageCmd procedure, "vsatisfies" option} { package vs 2.3 1.2 } {0} -test pkg-3.53 {Tcl_PackageCmd procedure, "versions" option} !tip268 { - list [catch {package foo} msg] $msg -} {1 {bad option "foo": must be forget, ifneeded, names, present, provide, require, unknown, vcompare, versions, or vsatisfies}} -test pkg-3.53-268 {Tcl_PackageCmd procedure, "versions" option} tip268 { +test pkg-3.53 {Tcl_PackageCmd procedure, "versions" option} { list [catch {package foo} msg] $msg } {1 {bad option "foo": must be forget, ifneeded, names, prefer, present, provide, require, unknown, vcompare, versions, or vsatisfies}} -test pkg-3.54 {Tcl_PackageCmd procedure, "vsatisfies" option} tip268 { +test pkg-3.54 {Tcl_PackageCmd procedure, "vsatisfies" option} { list [catch {package vsatisfies 2.1 2.1-3.2-4.5} msg] $msg } {1 {expected versionMin-versionMax but got "2.1-3.2-4.5"}} -test pkg-3.55 {Tcl_PackageCmd procedure, "vsatisfies" option} tip268 { +test pkg-3.55 {Tcl_PackageCmd procedure, "vsatisfies" option} { list [catch {package vsatisfies 2.1 3.2-x.y} msg] $msg } {1 {expected version number but got "x.y"}} -test pkg-3.56 {Tcl_PackageCmd procedure, "vsatisfies" option} tip268 { +test pkg-3.56 {Tcl_PackageCmd procedure, "vsatisfies" option} { list [catch {package vsatisfies 2.1 x.y-3.2} msg] $msg } {1 {expected version number but got "x.y"}} + # No tests for FindPackage; can't think up anything detectable # errors. @@ -972,7 +870,7 @@ test pkg-7.7 {Tcl_PkgPresent procedure, not exact version} { package forget t package provide t 2.4 list [catch {package present -exact t 2.3} msg] $msg -} {1 {version conflict for package "t": have 2.4, need 2.3}} +} {1 {version conflict for package "t": have 2.4, need exactly 2.3}} test pkg-7.8 {Tcl_PkgPresent procedure, unknown package} { package forget t list [catch {package present t} msg] $msg @@ -985,50 +883,36 @@ test pkg-7.10 {Tcl_PkgPresent procedure, unknown package} { package forget t list [catch {package present -exact t 2.4} msg] $msg } {1 {package t 2.4 is not present}} -test pkg-7.11 {Tcl_PackageCmd procedure, "present" option} !tip268 { +test pkg-7.11 {Tcl_PackageCmd procedure, "present" option} { list [catch {package present} msg] $msg -} {1 {wrong # args: should be "package present ?-exact? package ?version?"}} -test pkg-7.12 {Tcl_PackageCmd procedure, "present" option} !tip268 { +} {1 {wrong # args: should be "package present ?-exact? package ?requirement...?"}} +test pkg-7.12 {Tcl_PackageCmd procedure, "present" option} { list [catch {package present a b c} msg] $msg -} {1 {wrong # args: should be "package present ?-exact? package ?version?"}} -test pkg-7.13 {Tcl_PackageCmd procedure, "present" option} !tip268 { +} {1 {expected version number but got "b"}} +test pkg-7.13 {Tcl_PackageCmd procedure, "present" option} { list [catch {package present -exact a b c} msg] $msg -} {1 {wrong # args: should be "package present ?-exact? package ?version?"}} -test pkg-7.14 {Tcl_PackageCmd procedure, "present" option} !tip268 { +} {1 {wrong # args: should be "package present ?-exact? package ?requirement...?"}} +test pkg-7.14 {Tcl_PackageCmd procedure, "present" option} { list [catch {package present -bs a b} msg] $msg -} {1 {wrong # args: should be "package present ?-exact? package ?version?"}} +} {1 {expected version number but got "a"}} test pkg-7.15 {Tcl_PackageCmd procedure, "present" option} { list [catch {package present x a.b} msg] $msg } {1 {expected version number but got "a.b"}} test pkg-7.16 {Tcl_PackageCmd procedure, "present" option} { list [catch {package present -exact x a.b} msg] $msg } {1 {expected version number but got "a.b"}} -test pkg-7.17 {Tcl_PackageCmd procedure, "present" option} !tip268 { +test pkg-7.17 {Tcl_PackageCmd procedure, "present" option} { list [catch {package present -exact x} msg] $msg -} {1 {wrong # args: should be "package present ?-exact? package ?version?"}} -test pkg-7.18 {Tcl_PackageCmd procedure, "present" option} !tip268 { +} {1 {wrong # args: should be "package present ?-exact? package ?requirement...?"}} +test pkg-7.18 {Tcl_PackageCmd procedure, "present" option} { list [catch {package present -exact} msg] $msg -} {1 {wrong # args: should be "package present ?-exact? package ?version?"}} +} {1 {wrong # args: should be "package present ?-exact? package ?requirement...?"}} -# Note: It is correct that the result of the very first test, -# i.e. "5.0 5.0a0" is 1, i.e. that version 5.0a0 satisfies a 5.0 -# requirement. -# The requirement "5.0" internally translates first to "5.0-6", and -# then to its final form of "5.0a0-6a0". These translations are -# explicitly specified by the TIP (Search for "padded/extended -# internally with 'a0'"). This was done intentionally for exactly the -# tested case, that an alpha package can satisfy a requirement for the -# regular package. An example would be a package FOO requiring Tcl 8.X -# for its operation. It can be used with Tcl 8.Xa0. Without our -# translation that would not be possible. set n 0 foreach {r p vs vc} { - 5.0 5.0a0 1 1 - 5.0a0 5.0 1 -1 - 8.5a0 8.5a5 1 -1 8.5a0 8.5b1 1 -1 8.5a0 8.5.1 1 -1 @@ -1065,20 +949,43 @@ foreach {r p vs vc} { 8.5.0 8.6a0 1 -1 8.5.0 8.6b0 1 -1 8.5.0 8.6.0 1 -1 + 10 8 0 1 + 8 10 0 -1 + 0.0.1.2 0.1.2 1 -1 } { - test package-vsatisfies-1.$n {package vsatisfies} tip268 { + test package-vsatisfies-1.$n {package vsatisfies} { package vsatisfies $p $r } $vs - test package-vcompare-1.$n {package vcompare} tip268 { + test package-vcompare-1.$n {package vcompare} { package vcompare $r $p } $vc incr n } +test package-vcompare-2.0 {package vcompare at 32bit boundary} { + package vcompare [expr {1<<31}] [expr {(1<<31)-1}] +} 1 + +# Note: It is correct that the result of the very first test, +# i.e. "5.0 5.0a0" is 1, i.e. that version 5.0a0 satisfies a 5.0 +# requirement. + +# The requirement "5.0" internally translates first to "5.0-6", and +# then to its final form of "5.0a0-6a0". These translations are +# explicitly specified by the TIP (Search for "padded/extended +# internally with 'a0'"). This was done intentionally for exactly the +# tested case, that an alpha package can satisfy a requirement for the +# regular package. An example would be a package FOO requiring Tcl 8.X +# for its operation. It can be used with Tcl 8.Xa0. Without our +# translation that would not be possible. + set n 0 foreach {required provided satisfied} { + 5.0 5.0a0 1 + 5.0a0 5.0 1 + 8.5a0- 8.5a5 1 8.5a0- 8.5b1 1 8.5a0- 8.5.1 1 @@ -1218,28 +1125,28 @@ foreach {required provided satisfied} { 8.5a0-8.5.0 8.5 0 } { - test package-vsatisfies-2.$n "package vsatisfies $provided $required" tip268 { + test package-vsatisfies-2.$n "package vsatisfies $provided $required" { package vsatisfies $provided $required } $satisfied incr n } -test package-vsatisfies-3.0 "package vsatisfies multiple" tip268 { +test package-vsatisfies-3.0 "package vsatisfies multiple" { # yes no package vsatisfies 8.4 8.4 7.3 } 1 -test package-vsatisfies-3.1 "package vsatisfies multiple" tip268 { +test package-vsatisfies-3.1 "package vsatisfies multiple" { # no yes package vsatisfies 8.4 7.3 8.4 } 1 -test package-vsatisfies-3.2 "package vsatisfies multiple" tip268 { +test package-vsatisfies-3.2 "package vsatisfies multiple" { # yes yes package vsatisfies 8.4.2 8.4 8.4.1 } 1 -test package-vsatisfies-3.3 "package vsatisfies multiple" tip268 { +test package-vsatisfies-3.3 "package vsatisfies multiple" { # no no package vsatisfies 8.4 7.3 6.1 } 0 @@ -1255,44 +1162,44 @@ proc prefer {args} { return $res } -test package-prefer-1.0 {default} tip268 { +test package-prefer-1.0 {default} { prefer } stable -test package-prefer-1.1 {default} tip268 { +test package-prefer-1.1 {default} { set ::env(TCL_PKG_PREFER_LATEST) stable ; # value not relevant! set res [prefer] unset ::env(TCL_PKG_PREFER_LATEST) set res } latest -test package-prefer-2.0 {wrong\#args} tip268 { +test package-prefer-2.0 {wrong\#args} { catch {package prefer foo bar} msg set msg } {wrong # args: should be "package prefer ?latest|stable?"} -test package-prefer-2.1 {bogus argument} tip268 { +test package-prefer-2.1 {bogus argument} { catch {package prefer foo} msg set msg } {bad preference "foo": must be latest or stable} -test package-prefer-3.0 {set, keep} tip268 { +test package-prefer-3.0 {set, keep} { package prefer stable } stable -test package-prefer-3.1 {set stable, keep} tip268 { +test package-prefer-3.1 {set stable, keep} { prefer stable } {stable stable} -test package-prefer-3.2 {set latest, change} tip268 { +test package-prefer-3.2 {set latest, change} { prefer latest } {stable latest} -test package-prefer-3.3 {set latest, keep} tip268 { +test package-prefer-3.3 {set latest, keep} { prefer latest latest } {stable latest latest} -test package-prefer-3.4 {set stable, rejected} tip268 { +test package-prefer-3.4 {set stable, rejected} { prefer latest stable } {stable latest latest} diff --git a/tests/pkgMkIndex.test b/tests/pkgMkIndex.test index 9f3b8fa..663a6b2 100644 --- a/tests/pkgMkIndex.test +++ b/tests/pkgMkIndex.test @@ -87,7 +87,7 @@ proc pkgtest::parseIndex { filePath } { set ver [lindex $args 2] set ::PKGS($pkg:$ver) [lindex $args 3] } else { - return [eval package_original $args] + return [package_original {*}$args] } } array set ::PKGS {} @@ -146,7 +146,7 @@ proc pkgtest::parseIndex { filePath } { # 1: the error result if element 0 was 1 proc pkgtest::createIndex { args } { - set parsed [eval parseArgs $args] + set parsed [parseArgs {*}$args] set options [lindex $parsed 0] set dirPath [lindex $parsed 1] set patternList [lindex $parsed 2] @@ -155,7 +155,7 @@ proc pkgtest::createIndex { args } { if {[catch { file delete [file join $dirPath pkgIndex.tcl] - eval pkg_mkIndex $options [list $dirPath] $patternList + pkg_mkIndex {*}$options $dirPath {*}$patternList } err]} { return [list 1 $err] } @@ -229,7 +229,7 @@ proc makePkgList { inList } { proc pkgtest::runCreatedIndex {rv args} { if {[lindex $rv 0] == 0} { - set parsed [eval parseArgs $args] + set parsed [parseArgs {*}$args] set dirPath [lindex $parsed 1] set idxFile [file join $dirPath pkgIndex.tcl] @@ -246,8 +246,8 @@ proc pkgtest::runCreatedIndex {rv args} { return $result } proc pkgtest::runIndex { args } { - set rv [eval createIndex $args] - return [eval [list runCreatedIndex $rv] $args] + set rv [createIndex {*}$args] + return [runCreatedIndex $rv {*}$args] } # If there is no match to the patterns, make sure the directory hasn't @@ -560,17 +560,17 @@ removeFile [file join pkg circ3.tcl] set x [file join [file dirname [info nameofexecutable]] dltest \ pkga[info sharedlibextension]] set dll "[file tail $x]Required" -::tcltest::testConstraint $dll [file exists $x] +testConstraint $dll [file exists $x] if {[testConstraint $dll]} { -makeFile { + makeFile { # This package provides Pkga, which is also provided by a DLL. package provide Pkga 1.0 proc pkga_neq { x } { return [expr {! [pkgq_eq $x]}] } } [file join pkg pkga.tcl] -file copy -force $x $fullPkgPath + file copy -force $x $fullPkgPath } testConstraint exec [llength [info commands ::exec]] @@ -596,8 +596,8 @@ test pkgMkIndex-10.2 {package in DLL hidden by -load} [list exec $dll] { } {0 {}} if {[testConstraint $dll]} { -file delete -force [file join $fullPkgPath [file tail $x]] -removeFile [file join pkg pkga.tcl] + file delete -force [file join $fullPkgPath [file tail $x]] + removeFile [file join pkg pkga.tcl] } # Tolerate "namespace import" at the global scope @@ -671,24 +671,24 @@ test pkgMkIndex-13.1 {proc names with embedded spaces} { removeFile [file join pkg spacename.tcl] -# Test the pkg_compareExtension helper function -test pkgMkIndex-14.1 {pkg_compareExtension} {unixOnly} { - pkg_compareExtension foo.so .so +# Test the tcl::Pkg::CompareExtension helper function +test pkgMkIndex-14.1 {tcl::Pkg::CompareExtension} {unix} { + tcl::Pkg::CompareExtension foo.so .so } 1 -test pkgMkIndex-14.2 {pkg_compareExtension} {unixOnly} { - pkg_compareExtension foo.so.bar .so +test pkgMkIndex-14.2 {tcl::Pkg::CompareExtension} {unix} { + tcl::Pkg::CompareExtension foo.so.bar .so } 0 -test pkgMkIndex-14.3 {pkg_compareExtension} {unixOnly} { - pkg_compareExtension foo.so.1 .so +test pkgMkIndex-14.3 {tcl::Pkg::CompareExtension} {unix} { + tcl::Pkg::CompareExtension foo.so.1 .so } 1 -test pkgMkIndex-14.4 {pkg_compareExtension} {unixOnly} { - pkg_compareExtension foo.so.1.2 .so +test pkgMkIndex-14.4 {tcl::Pkg::CompareExtension} {unix} { + tcl::Pkg::CompareExtension foo.so.1.2 .so } 1 -test pkgMkIndex-14.5 {pkg_compareExtension} {unixOnly} { - pkg_compareExtension foo .so +test pkgMkIndex-14.5 {tcl::Pkg::CompareExtension} {unix} { + tcl::Pkg::CompareExtension foo .so } 0 -test pkgMkIndex-14.6 {pkg_compareExtension} {unixOnly} { - pkg_compareExtension foo.so.1.2.bar .so +test pkgMkIndex-14.6 {tcl::Pkg::CompareExtension} {unix} { + tcl::Pkg::CompareExtension foo.so.1.2.bar .so } 0 # cleanup diff --git a/tests/platform.test b/tests/platform.test index 223c8db..4f1eb82 100644 --- a/tests/platform.test +++ b/tests/platform.test @@ -20,22 +20,20 @@ test platform-1.1 {TclpSetVariables: tcl_platform} { interp create i i eval {catch {unset tcl_platform(debug)}} i eval {catch {unset tcl_platform(threaded)}} - i eval {catch {unset tcl_platform(tip,268)}} - i eval {catch {unset tcl_platform(tip,280)}} set result [i eval {lsort [array names tcl_platform]}] interp delete i set result -} {byteOrder machine os osVersion platform user wordSize} +} {byteOrder machine os osVersion platform pointerSize user wordSize} # Test assumes twos-complement arithmetic, which is true of virtually # everything these days. Note that this does *not* use wide(), and # this is intentional since that could make Tcl's numbers wider than # the machine-integer on some platforms... test platform-2.1 {tcl_platform(wordSize) indicates size of native word} { - set result [expr {1 << (8 * $tcl_platform(wordSize) - 1)}] + set result [expr {int(1 << (8 * $tcl_platform(wordSize) - 1))}] # Result must be the largest bit in a machine word, which this checks # without assuming how wide the word really is - list [expr {$result < 0}] [expr {$result ^ ($result - 1)}] + list [expr {$result < 0}] [expr {$result ^ int($result - 1)}] } {1 -1} # On Windows/UNIX, test that the CPU ID works diff --git a/tests/proc-old.test b/tests/proc-old.test index 71558cf..5aec4f7 100644 --- a/tests/proc-old.test +++ b/tests/proc-old.test @@ -231,7 +231,7 @@ test proc-old-30.12 {arguments and defaults} { return [list $x $y $args] } list [catch {tproc} msg] $msg -} {1 {wrong # args: should be "tproc x ?y? args"}} +} {1 {wrong # args: should be "tproc x ?y? ..."}} test proc-old-4.1 {variable numbers of arguments} { proc tproc args {return $args} @@ -256,7 +256,7 @@ test proc-old-4.5 {variable numbers of arguments} { test proc-old-4.6 {variable numbers of arguments} { proc tproc {x missing args} {return $args} list [catch {tproc 1} msg] $msg -} {1 {wrong # args: should be "tproc x missing args"}} +} {1 {wrong # args: should be "tproc x missing ..."}} test proc-old-5.1 {error conditions} { list [catch {proc} msg] $msg @@ -272,10 +272,10 @@ test proc-old-5.4 {error conditions} { } {1 {unmatched open brace in list}} test proc-old-5.5 {error conditions} { list [catch {proc tproc {{} y} {return foo}} msg] $msg -} {1 {procedure "tproc" has argument with no name}} +} {1 {argument with no name}} test proc-old-5.6 {error conditions} { list [catch {proc tproc {{} y} {return foo}} msg] $msg -} {1 {procedure "tproc" has argument with no name}} +} {1 {argument with no name}} test proc-old-5.7 {error conditions} { list [catch {proc tproc {{x 1 2} y} {return foo}} msg] $msg } {1 {too many fields in argument specifier "x 1 2"}} @@ -314,7 +314,7 @@ test proc-old-5.13 {error conditions} { return } catch tproc msg - set errorInfo + set ::errorInfo } {error in procedure while executing "error "error in procedure"" @@ -328,7 +328,7 @@ test proc-old-5.14 {error conditions} { return } catch tproc msg - set errorInfo + set ::errorInfo } {invoked "break" outside of a loop (procedure "tproc" line 1) invoked from within @@ -340,7 +340,7 @@ test proc-old-5.15 {error conditions} { return } catch tproc msg - set errorInfo + set ::errorInfo } {invoked "continue" outside of a loop (procedure "tproc" line 1) invoked from within @@ -358,7 +358,7 @@ test proc-old-5.16 {error conditions} { } } set fooMsg "foo not called" - list [catch tproc msg] $msg $errorInfo $fooMsg + list [catch tproc msg] $msg $::errorInfo $fooMsg } {1 {Nested error} {Nested error while executing "error "Nested error"" @@ -393,7 +393,7 @@ test proc-old-7.1 {return with special completion code} { list [catch {tproc ok} msg] $msg } {0 abc} test proc-old-7.2 {return with special completion code} { - list [catch {tproc error} msg] $msg $errorInfo $errorCode + list [catch {tproc error} msg] $msg $::errorInfo $::errorCode } {1 abc {abc while executing "tproc error"} NONE} @@ -433,7 +433,7 @@ test proc-old-7.11 {return with special completion code} { catch {open _bad_file_name r} msg return -code error -errorinfo $errorInfo -errorcode $errorCode $msg } - set msg [list [catch tproc2 msg] $msg $errorInfo $errorCode] + set msg [list [catch tproc2 msg] $msg $::errorInfo $::errorCode] regsub -all [file join {} _bad_file_name] $msg "_bad_file_name" msg normalizeMsg $msg } {1 {couldn't open "_bad_file_name": no such file or directory} {couldn't open "_bad_file_name": no such file or directory @@ -447,7 +447,7 @@ test proc-old-7.12 {return with special completion code} { catch {open _bad_file_name r} msg return -code error -errorcode $errorCode $msg } - set msg [list [catch tproc2 msg] $msg $errorInfo $errorCode] + set msg [list [catch tproc2 msg] $msg $::errorInfo $::errorCode] regsub -all [file join {} _bad_file_name] $msg "_bad_file_name" msg normalizeMsg $msg } {1 {couldn't open "_bad_file_name": no such file or directory} {couldn't open "_bad_file_name": no such file or directory @@ -459,7 +459,7 @@ test proc-old-7.13 {return with special completion code} { catch {open _bad_file_name r} msg return -code error -errorinfo $errorInfo $msg } - set msg [list [catch tproc2 msg] $msg $errorInfo $errorCode] + set msg [list [catch tproc2 msg] $msg $::errorInfo $::errorCode] regsub -all [file join {} _bad_file_name] $msg "_bad_file_name" msg normalizeMsg $msg } {1 {couldn't open "_bad_file_name": no such file or directory} {couldn't open "_bad_file_name": no such file or directory @@ -473,7 +473,7 @@ test proc-old-7.14 {return with special completion code} { catch {open _bad_file_name r} msg return -code error $msg } - set msg [list [catch tproc2 msg] $msg $errorInfo $errorCode] + set msg [list [catch tproc2 msg] $msg $::errorInfo $::errorCode] regsub -all [file join {} _bad_file_name] $msg "_bad_file_name" msg normalizeMsg $msg } {1 {couldn't open "_bad_file_name": no such file or directory} {couldn't open "_bad_file_name": no such file or directory @@ -481,7 +481,7 @@ test proc-old-7.14 {return with special completion code} { "tproc2"} none} test proc-old-7.15 {return with special completion code} { list [catch {return -badOption foo message} msg] $msg -} {1 {bad option "-badOption": must be -code, -errorcode, or -errorinfo}} +} {2 message} test proc-old-8.1 {unset and undefined local arrays} { proc t1 {} { @@ -518,15 +518,3 @@ catch {rename t1 ""} catch {rename foo ""} ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/proc.test b/tests/proc.test index 8974663..c0f80e3 100644 --- a/tests/proc.test +++ b/tests/proc.test @@ -18,15 +18,21 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } +if {[catch {package require procbodytest}]} { + testConstraint procbodytest 0 +} else { + testConstraint procbodytest 1 +} + testConstraint memory [llength [info commands memory]] -catch {eval namespace delete [namespace children :: test_ns_*]} +catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename p ""} catch {rename {} ""} catch {unset msg} test proc-1.1 {Tcl_ProcObjCmd, put proc in namespace specified in name, if any} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1 { namespace eval baz {} } @@ -38,11 +44,11 @@ test proc-1.1 {Tcl_ProcObjCmd, put proc in namespace specified in name, if any} [info commands test_ns_1::baz::*] } {{p in ::test_ns_1::baz} {p in ::test_ns_1::baz} ::test_ns_1::baz::p} test proc-1.2 {Tcl_ProcObjCmd, namespace specified in proc name must exist} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} list [catch {proc test_ns_1::baz::p {} {}} msg] $msg } {1 {can't create procedure "test_ns_1::baz::p": unknown namespace}} test proc-1.3 {Tcl_ProcObjCmd, empty proc name} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} proc :: {} { return "empty called" } @@ -52,7 +58,7 @@ test proc-1.3 {Tcl_ProcObjCmd, empty proc name} { return "empty called" }} test proc-1.4 {Tcl_ProcObjCmd, simple proc name and proc defined in namespace} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1 { namespace eval baz { proc p {} { @@ -64,7 +70,7 @@ test proc-1.4 {Tcl_ProcObjCmd, simple proc name and proc defined in namespace} { [info commands test_ns_1::baz::*] } {{p in ::test_ns_1::baz} ::test_ns_1::baz::p} test proc-1.5 {Tcl_ProcObjCmd, qualified proc name and proc defined in namespace} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1::baz {} namespace eval test_ns_1 { proc baz::p {} { @@ -76,7 +82,7 @@ test proc-1.5 {Tcl_ProcObjCmd, qualified proc name and proc defined in namespace [namespace eval test_ns_1::baz {namespace which p}] } {{p in ::test_ns_1::baz} ::test_ns_1::baz::p ::test_ns_1::baz::p} test proc-1.6 {Tcl_ProcObjCmd, namespace code ignores single ":"s in middle or end of command names} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1 { proc q: {} {return "q:"} proc value:at: {} {return "value:at:"} @@ -95,21 +101,21 @@ test proc-1.7 {Tcl_ProcObjCmd, check that formal parameter names are not array e set z [expr $a(1)+$a(2)] puts "$z=z, $a(1)=$a(1)" }} msg] $msg -} {1 {procedure "p" has formal parameter "a(1)" that is an array element}} +} {1 {formal parameter "a(1)" is an array element}} test proc-1.8 {Tcl_ProcObjCmd, check that formal parameter names are simple names} { catch {rename p ""} list [catch {proc p {b:a b::a} { }} msg] $msg -} {1 {procedure "p" has formal parameter "b::a" that is not a simple name}} +} {1 {formal parameter "b::a" is not a simple name}} test proc-2.1 {TclFindProc, simple proc name and proc not in namespace} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename p ""} proc p {} {return "p in [namespace current]"} info body p } {return "p in [namespace current]"} test proc-2.2 {TclFindProc, simple proc name and proc defined in namespace} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1 { namespace eval baz { proc p {} {return "p in [namespace current]"} @@ -118,7 +124,7 @@ test proc-2.2 {TclFindProc, simple proc name and proc defined in namespace} { namespace eval test_ns_1::baz {info body p} } {return "p in [namespace current]"} test proc-2.3 {TclFindProc, qualified proc name and proc defined in namespace} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1::baz {} namespace eval test_ns_1 { proc baz::p {} {return "p in [namespace current]"} @@ -126,26 +132,26 @@ test proc-2.3 {TclFindProc, qualified proc name and proc defined in namespace} { namespace eval test_ns_1 {info body baz::p} } {return "p in [namespace current]"} test proc-2.4 {TclFindProc, global proc and executing in namespace} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename p ""} proc p {} {return "global p"} namespace eval test_ns_1::baz {info body p} } {return "global p"} test proc-3.1 {TclObjInterpProc, proc defined and executing in same namespace} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} proc p {} {return "p in [namespace current]"} p } {p in ::} test proc-3.2 {TclObjInterpProc, proc defined and executing in same namespace} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} namespace eval test_ns_1::baz { proc p {} {return "p in [namespace current]"} p } } {p in ::test_ns_1::baz} test proc-3.3 {TclObjInterpProc, proc defined and executing in different namespaces} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename p ""} proc p {} {return "p in [namespace current]"} namespace eval test_ns_1::baz { @@ -153,7 +159,7 @@ test proc-3.3 {TclObjInterpProc, proc defined and executing in different namespa } } {p in ::} test proc-3.4 {TclObjInterpProc, procs execute in the namespace in which they were defined unless renamed into new namespace} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename p ""} namespace eval test_ns_1::baz { proc p {} {return "p in [namespace current]"} @@ -176,19 +182,12 @@ test proc-3.7 {TclObjInterpProc, wrong num args, Bug 3366265} { list [catch {{}} msg] $msg } {1 {wrong # args: should be "{} x"}} -catch {eval namespace delete [namespace children :: test_ns_*]} +catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename p ""} catch {rename {} ""} catch {rename {a b c} {}} catch {unset msg} -if {[catch {package require procbodytest}]} { - puts "This application couldn't load the \"procbodytest\" package, so I" - puts "can't test creation of procs whose bodies have type \"procbody\"." - ::tcltest::cleanupTests - return -} - catch {rename p ""} catch {rename t ""} @@ -197,7 +196,7 @@ catch {rename t ""} # is executed, so that the Proc struct is populated correctly (CompiledLocals # are added at compile time). -test proc-4.1 {TclCreateProc, procbody obj} { +test proc-4.1 {TclCreateProc, procbody obj} procbodytest { catch { proc p x {return "$x:$x"} set rv [p P] @@ -209,8 +208,7 @@ test proc-4.1 {TclCreateProc, procbody obj} { catch {rename t ""} set result } {P:P T:T} - -test proc-4.2 {TclCreateProc, procbody obj, use compiled locals} { +test proc-4.2 {TclCreateProc, procbody obj, use compiled locals} procbodytest { catch { proc p x { set y [string tolower $x] @@ -225,8 +223,7 @@ test proc-4.2 {TclCreateProc, procbody obj, use compiled locals} { catch {rename t ""} set result } {P:p T:t} - -test proc-4.3 {TclCreateProc, procbody obj, too many args} { +test proc-4.3 {TclCreateProc, procbody obj, too many args} procbodytest { catch { proc p x { set y [string tolower $x] @@ -241,8 +238,7 @@ test proc-4.3 {TclCreateProc, procbody obj, too many args} { catch {rename t ""} set result } {procedure "t": arg list contains 3 entries, precompiled header expects 1} - -test proc-4.4 {TclCreateProc, procbody obj, inconsistent arg name} { +test proc-4.4 {TclCreateProc, procbody obj, inconsistent arg name} procbodytest { catch { proc p {x y z} { set v [join [list $x $y $z]] @@ -258,8 +254,7 @@ test proc-4.4 {TclCreateProc, procbody obj, inconsistent arg name} { catch {rename t ""} set result } {procedure "t": formal parameter 1 is inconsistent with precompiled body} - -test proc-4.5 {TclCreateProc, procbody obj, inconsistent arg default type} { +test proc-4.5 {TclCreateProc, procbody obj, inconsistent arg default type} procbodytest { catch { proc p {x y {z Z}} { set v [join [list $x $y $z]] @@ -275,8 +270,7 @@ test proc-4.5 {TclCreateProc, procbody obj, inconsistent arg default type} { catch {rename t ""} set result } {procedure "t": formal parameter 2 is inconsistent with precompiled body} - -test proc-4.6 {TclCreateProc, procbody obj, inconsistent arg default type} { +test proc-4.6 {TclCreateProc, procbody obj, inconsistent arg default type} procbodytest { catch { proc p {x y z} { set v [join [list $x $y $z]] @@ -292,8 +286,7 @@ test proc-4.6 {TclCreateProc, procbody obj, inconsistent arg default type} { catch {rename t ""} set result } {procedure "t": formal parameter 2 is inconsistent with precompiled body} - -test proc-4.7 {TclCreateProc, procbody obj, inconsistent arg default value} { +test proc-4.7 {TclCreateProc, procbody obj, inconsistent arg default value} procbodytest { catch { proc p {x y {z Z}} { set v [join [list $x $y $z]] @@ -309,7 +302,6 @@ test proc-4.7 {TclCreateProc, procbody obj, inconsistent arg default value} { catch {rename t ""} set result } {procedure "t": formal parameter "z" has default value inconsistent with precompiled body} - test proc-4.8 {TclCreateProc, procbody obj, no leak on multiple iterations} -setup { proc getbytes {} { set lines [split [memory info] "\n"] @@ -320,7 +312,8 @@ test proc-4.8 {TclCreateProc, procbody obj, no leak on multiple iterations} -set return "$x:$y" } px x -} -constraints memory -body { +} -constraints {procbodytest memory} -body { + set end [getbytes] for {set i 0} {$i < 5} {incr i} { @@ -332,6 +325,7 @@ test proc-4.8 {TclCreateProc, procbody obj, no leak on multiple iterations} -set set leakedBytes [expr {$end - $tmp}] } -cleanup { rename getbytes {} + unset -nocomplain end i tmp leakedBytes } -result 0 test proc-5.1 {Bytecompiling noop; test for correct argument substitution} { @@ -360,20 +354,55 @@ test proc-6.1 {ProcessProcResultCode: Bug 647307 (negative return code)} { set result } -5 +test proc-7.1 {Redefining a compiled cmd: Bug 729692} { + proc bar args {} + proc foo {} { + proc bar args {return bar} + bar + } + foo +} bar + +test proc-7.2 {Shadowing a compiled cmd: Bug 729692} { + namespace eval ugly {} + proc ugly::foo {} { + proc set args {return bar} + set x 1 + } + set res [list [catch {ugly::foo} msg] $msg] + namespace delete ugly + set res +} {0 bar} + +test proc-7.3 {Returning loop exception from redefined cmd: Bug 729692} { + namespace eval ugly {} + proc ugly::foo {} { + set i 0 + while { 1 } { + if { [incr i] > 3 } { + proc continue {} {return -code break} + } + continue + } + return $i + } + set res [list [catch {ugly::foo} msg] $msg] + namespace delete ugly + set res +} {0 4} + +test proc-7.4 {Proc struct outlives its interp: Bug 3532959} { + set lambda x + lappend lambda {set a 1} + interp create slave + slave eval [list apply $lambda foo] + interp delete slave + unset lambda +} {} + + # cleanup catch {rename p ""} catch {rename t ""} ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/pwd.test b/tests/pwd.test index 58612d9..175c852 100644 --- a/tests/pwd.test +++ b/tests/pwd.test @@ -12,29 +12,20 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } test pwd-1.1 {simple pwd} { - catch pwd + catch pwd } 0 test pwd-1.2 {simple pwd} { - expr [string length pwd]>0 + expr [string length pwd]>0 } 1 +test pwd-1.3 {pwd takes no args} -body { + pwd foobar +} -returnCodes error -result "wrong \# args: should be \"pwd\"" # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/reg.test b/tests/reg.test index 4b09c06..0ebfa11 100644 --- a/tests/reg.test +++ b/tests/reg.test @@ -11,40 +11,40 @@ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest 2 - namespace import -force ::tcltest::* } # All tests require the testregexp command, return if this # command doesn't exist -::tcltest::testConstraint testregexp \ - [expr {[info commands testregexp] != {}}] +::tcltest::testConstraint testregexp [llength [info commands testregexp]] ::tcltest::testConstraint localeRegexp 0 # This file uses some custom procedures, defined below, for regexp regression # testing. The name of the procedure indicates the general nature of the # test: -# e compile error expected -# f match failure expected -# m successful match -# i successful match with -indices (used in checking things like -# nonparticipating subexpressions) -# p unsuccessful match with -indices (!!) (used in checking -# partial-match reporting) +# expectError compile error expected +# expectNomatch match failure expected +# expectMatch successful match +# expectIndices successful match with -indices (used in checking things +# like nonparticipating subexpressions) +# expectPartial unsuccessful match with -indices (!!) (used in checking +# partial-match reporting) # There is also "doing" which sets up title and major test number for each # block of tests. -# The first 3 arguments are constant: a minor number (which often gets -# a letter or two suffixed to it internally), some flags, and the RE itself. -# For e, the remaining argument is the name of the compile error expected, -# less the leading "REG_". For the rest, the next argument is the string -# to try the match against. Remaining arguments are the substring expected -# to be matched, and any substrings expected to be matched by subexpressions. -# (For f, these arguments are optional, and if present are ignored except -# that they indicate how many subexpressions should be present in the RE.) -# It is an error for the number of subexpression arguments to be wrong. -# Cases involving nonparticipating subexpressions, checking where empty -# substrings are located, etc. should be done using i and p. +# The first 3 arguments are constant: a minor number (which often gets +# a letter or two suffixed to it internally), some flags, and the RE +# itself. For expectError, the remaining argument is the name of the +# compile error expected, less the leading "REG_". For the rest, the +# next argument is the string to try the match against. Remaining +# arguments are the substring expected to be matched, and any +# substrings expected to be matched by subexpressions. (For +# expectNomatch, these arguments are optional, and if present are +# ignored except that they indicate how many subexpressions should be +# present in the RE.) It is an error for the number of subexpression +# arguments to be wrong. Cases involving nonparticipating +# subexpressions, checking where empty substrings are located, +# etc. should be done using expectIndices and expectPartial. # The flag characters are complex and a bit eclectic. Generally speaking, # lowercase letters are compile options, uppercase are expected re_info @@ -96,68 +96,55 @@ if {[lsearch [namespace children] ::tcltest] == -1} { # the moment, but this is a historical accident which should be fixed. - # test procedures and related +namespace eval RETest { + namespace export doing expect* knownBug + + variable regBug 0 + + # re_info abbreviation mapping table + variable infonames + array set infonames { + A REG_UBSALNUM + B REG_UBRACES + E REG_UBBS + H REG_ULOOKAHEAD + I REG_UIMPOSSIBLE + L REG_ULOCALE + M REG_UUNPORT + N REG_UEMPTYMATCH + P REG_UNONPOSIX + Q REG_UBOUNDS + R REG_UBACKREF + S REG_UUNSPEC + T REG_USHORTEST + U REG_UPBOTCH + } + variable infonameorder "RHQBAUEPSMLNIT" ;# must match bit order, lsb first -set ask "about" -set xflags "xflags" -set testbypassed 0 - -# re_info abbreviation mapping table -set infonames(A) "REG_UBSALNUM" -set infonames(B) "REG_UBRACES" -set infonames(E) "REG_UBBS" -set infonames(H) "REG_ULOOKAHEAD" -set infonames(I) "REG_UIMPOSSIBLE" -set infonames(L) "REG_ULOCALE" -set infonames(M) "REG_UUNPORT" -set infonames(N) "REG_UEMPTYMATCH" -set infonames(P) "REG_UNONPOSIX" -set infonames(Q) "REG_UBOUNDS" -set infonames(R) "REG_UBACKREF" -set infonames(S) "REG_UUNSPEC" -set infonames(T) "REG_USHORTEST" -set infonames(U) "REG_UPBOTCH" -set infonameorder "RHQBAUEPSMLNIT" ;# must match bit order, lsb first - -# set major test number and description -proc doing {major desc} { - global prefix description testbypassed - - if {$testbypassed != 0} { - puts stdout "!!! bypassed $testbypassed tests in\ - $prefix, `$description'" - } - - set prefix reg-$major - set description "reg $desc" - set testbypassed 0 -} - -# build test number (internal) -proc tno {testid} { - return [join $testid .] -} + # build test number (internal) + proc TestNum {args} { + return reg-[join [concat $args] .] + } -# build description, with possible modifiers (internal) -proc desc {testid} { - global description + # build description, with possible modifiers (internal) + proc TestDesc {args} { + variable description + set testid [concat $args] set d $description if {[llength $testid] > 1} { - set d "([lreplace $testid 0 0]) $d" + set d "$d ([lrange $testid 1 end])" } return $d -} - -# build trailing options and flags argument from a flags string (internal) -proc flags {fl} { - global xflags + } + # build trailing options and flags argument from a flags string (internal) + proc TestFlags {fl} { set args [list] set flags "" foreach f [split $fl ""] { - switch -exact -- $f { + switch -exact -- $f { "i" { lappend args "-nocase" } "x" { lappend args "-expanded" } "n" { lappend args "-line" } @@ -165,825 +152,785 @@ proc flags {fl} { "w" { lappend args "-lineanchor" } "-" { } default { append flags $f } - } + } } - if {[string compare $flags ""] != 0} { - lappend args -$xflags $flags + if {$flags ne ""} { + lappend args -xflags $flags } return $args -} + } -# build info-flags list from a flags string (internal) -proc infoflags {fl} { - global infonames infonameorder + # build info-flags list from a flags string (internal) + proc TestInfoFlags {fl} { + variable infonames + variable infonameorder set ret [list] foreach f [split $infonameorder ""] { - if {[string first $f $fl] >= 0} { - lappend ret $infonames($f) - } + if {[string match *$f* $fl]} { + lappend ret $infonames($f) + } } return $ret -} + } -# compilation error expected -proc e {testid flags re err} { - global prefix ask errorCode + # Share the generation of the list of test constraints so it is + # done the same on all routes. + proc TestConstraints {flags} { + set constraints [list testregexp] - # Tcl locale stuff doesn't do the ch/xy test fakery yet - if {[string first "+" $flags] >= 0} { - # This will register as a skipped test - test $prefix.[tno $testid] [desc $testid] localeRegexp {} {} - return - } - - # if &, test as both ARE and BRE - set amp [string first "&" $flags] - if {$amp >= 0} { - set f [string range $flags 0 [expr $amp - 1]] - append f [string range $flags [expr $amp + 1] end] - e [linsert $testid end ARE] ${f} $re $err - e [linsert $testid end BRE] ${f}b $re $err - return + variable regBug + if {$regBug} { + # This will trigger registration as a skipped test + lappend constraints knownBug } - set cmd [concat [list testregexp -$ask] [flags $flags] [list $re]] - set run "list \[catch \{$cmd\}\] \[lindex \$errorCode 1\]" - test $prefix.[tno $testid] [desc $testid] \ - {testregexp} $run [list 1 REG_$err] -} - -# match failure expected -proc f {testid flags re target args} { - global prefix description ask - # Tcl locale stuff doesn't do the ch/xy test fakery yet - if {[string first "+" $flags] >= 0} { - # This will register as a skipped test - test $prefix.[tno $testid] [desc $testid] localeRegexp {} {} - return - } - - # if &, test as both ARE and BRE - set amp [string first "&" $flags] - if {$amp >= 0} { - set f [string range $flags 0 [expr $amp - 1]] - append f [string range $flags [expr $amp + 1] end] - eval [linsert $args 0 f [linsert $testid end ARE] ${f} $re \ - $target] - eval [linsert $args 0 f [linsert $testid end BRE] ${f}b $re \ - $target] - return - } - - set f [flags $flags] - set infoflags [infoflags $flags] - set ccmd [concat [list testregexp -$ask] $f [list $re]] - set nsub [expr [llength $args] - 1] - if {$nsub == -1} { - # didn't tell us number of subexps - set ccmd "lreplace \[$ccmd\] 0 0" - set info [list $infoflags] - } else { - set info [list $nsub $infoflags] + if {[string match *+* $flags]} { + # This will trigger registration as a skipped test + lappend constraints localeRegexp } - lappend testid "compile" - test $prefix.[tno $testid] [desc $testid] {testregexp} $ccmd $info - set testid [lreplace $testid end end "execute"] - set ecmd [concat [list testregexp] $f [list $re $target]] - test $prefix.[tno $testid] [desc $testid] {testregexp} $ecmd 0 -} - -# match expected, internal routine that does the work -# parameters like the "real" routines except they don't have "opts", -# which is a possibly-empty list of switches for the regexp match attempt -# The ! flag is used to indicate expected match failure (for REG_EXPECT, -# which wants argument testing even in the event of failure). -proc matchexpected {opts testid flags re target args} { - global prefix description ask regBug - - if {[info exists regBug] && $regBug} { - # This will register as a skipped test - test $prefix.[tno $testid] [desc $testid] knownBug {format 0} {1} - return + return $constraints } - # Tcl locale stuff doesn't do the ch/xy test fakery yet - if {[string first "+" $flags] >= 0} { - # This will register as a skipped test - test $prefix.[tno $testid] [desc $testid] localeRegexp {} {} + # match expected, internal routine that does the work + # parameters like the "real" routines except they don't have "opts", + # which is a possibly-empty list of switches for the regexp match attempt + # The ! flag is used to indicate expected match failure (for REG_EXPECT, + # which wants argument testing even in the event of failure). + proc MatchExpected {opts testid flags re target args} { + # if &, test as both BRE and ARE + if {[string match *&* $flags]} { + set f [string map {& {}} $flags] + MatchExpected $opts "$testid ARE" ${f} $re $target {*}$args + MatchExpected $opts "$testid BRE" ${f}b $re $target {*}$args return } - # if &, test as both BRE and ARE - set amp [string first "&" $flags] - if {$amp >= 0} { - set f [string range $flags 0 [expr $amp - 1]] - append f [string range $flags [expr $amp + 1] end] - eval [concat [list matchexpected $opts \ - [linsert $testid end ARE] ${f} $re $target] $args] - eval [concat [list matchexpected $opts \ - [linsert $testid end BRE] ${f}b $re $target] $args] - return - } + set constraints [TestConstraints $flags] - set f [flags $flags] - set infoflags [infoflags $flags] - set ccmd [concat [list testregexp -$ask] $f [list $re]] - set ecmd [concat [list testregexp] $opts $f [list $re $target]] + set f [TestFlags $flags] + set infoflags [TestInfoFlags $flags] + set ccmd [list testregexp -about {*}$f $re] + set ecmd [list testregexp {*}$opts {*}$f $re $target] - set nsub [expr [llength $args] - 1] + set nsub [expr {[llength $args] - 1}] set names [list] set refs "" - for {set i 0} {$i <= $nsub} {incr i} { - if {$i == 0} { - set name match - } else { - set name sub$i - } - lappend names $name - append refs " \$$name" - set $name "" + for {set i 0} {$i < [llength $args]} {incr i} { + if {$i == 0} { + set name match + } else { + set name sub$i + } + lappend names $name + append refs " \$$name" + set $name "" } - if {[string first "o" $flags] >= 0} { ;# REG_NOSUB kludge - set nsub 0 ;# unsigned value cannot be -1 + if {[string match *o* $flags]} { ;# REG_NOSUB kludge + set nsub 0 ;# unsigned value cannot be -1 } - if {[string first "t" $flags] >= 0} { ;# REG_EXPECT - incr nsub -1 ;# the extra does not count + if {[string match *t* $flags]} { ;# REG_EXPECT + incr nsub -1 ;# the extra does not count } - set ecmd [concat $ecmd $names] - set erun "list \[$ecmd\] $refs" - set retcode [list 1] - if {[string first "!" $flags] >= 0} { - set retcode [list 0] + set erun "list \[[concat $ecmd $names]\] $refs" + set result [list [expr {![string match *!* $flags]}] {*}$args] + set info [list $nsub $infoflags] + + ::tcltest::test [TestNum $testid compile] [TestDesc $testid compile] \ + -constraints $constraints -body $ccmd -result $info + ::tcltest::test [TestNum $testid execute] [TestDesc $testid execute] \ + -constraints $constraints -body $erun -result $result + } + + # set major test number and description + proc doing {major desc} { + variable description "RE engine $desc" + } + + # compilation error expected + proc expectError {testid flags re err} { + # if &, test as both ARE and BRE + if {[string match *&* $flags]} { + set f [string map {& {}} $flags] + expectError "$testid ARE" ${f} $re $err + expectError "$testid BRE" ${f}b $re $err + return } - set result [concat $retcode $args] - set info [list $nsub $infoflags] - lappend testid "compile" - test $prefix.[tno $testid] [desc $testid] {testregexp} $ccmd $info - set testid [lreplace $testid end end "execute"] - test $prefix.[tno $testid] [desc $testid] {testregexp} $erun $result -} + set constraints [TestConstraints $flags] -# match expected (no missing, empty, or ambiguous submatches) -# m testno flags re target mat submat ... -proc m {args} { - eval matchexpected [linsert $args 0 [list]] -} + set cmd [list testregexp -about {*}[TestFlags $flags] $re] + ::tcltest::test [TestNum $testid error] [TestDesc $testid error] \ + -constraints $constraints -result [list 1 REG_$err] -body \ + "list \[catch \{$cmd\}\] \[lindex \$::errorCode 1\]" + } -# match expected (full fanciness) -# i testno flags re target mat submat ... -proc i {args} { - eval matchexpected [linsert $args 0 [list "-indices"]] -} + # match failure expected + proc expectNomatch {testid flags re target args} { + variable regBug + # if &, test as both ARE and BRE + if {[string match *&* $flags]} { + set f [string map {& {}} $flags] + expectNomatch "$testid ARE" ${f} $re $target {*}$args + expectNomatch "$testid BRE" ${f}b $re $target {*}$args + return + } -# partial match expected -# p testno flags re target mat "" ... -# Quirk: number of ""s must be one more than number of subREs. -proc p {args} { - set f [lindex $args 1] ;# add ! flag - set args [lreplace $args 1 1 "!$f"] - eval matchexpected [linsert $args 0 [list "-indices"]] -} + set constraints [TestConstraints $flags] -# test is a knownBug -proc knownBug {args} { - set ::regBug 1 - uplevel #0 $args - set ::regBug 0 -} + set f [TestFlags $flags] + set infoflags [TestInfoFlags $flags] + set ccmd [list testregexp -about {*}$f $re] + set nsub [expr {[llength $args] - 1}] + if {$nsub == -1} { + # didn't tell us number of subexps + set ccmd "lreplace \[$ccmd\] 0 0" + set info [list $infoflags] + } else { + set info [list $nsub $infoflags] + } + set ecmd [list testregexp {*}$f $re $target] + ::tcltest::test [TestNum $testid compile] [TestDesc $testid compile] \ + -constraints $constraints -body $ccmd -result $info + ::tcltest::test [TestNum $testid execute] [TestDesc $testid execute] \ + -constraints $constraints -body $ecmd -result 0 + } + # match expected (no missing, empty, or ambiguous submatches) + # expectMatch testno flags re target mat submat ... + proc expectMatch {args} { + MatchExpected {} {*}$args + } -# the tests themselves + # match expected (full fanciness) + # expectIndices testno flags re target mat submat ... + proc expectIndices {args} { + MatchExpected -indices {*}$args + } + # partial match expected + # expectPartial testno flags re target mat "" ... + # Quirk: number of ""s must be one more than number of subREs. + proc expectPartial {args} { + lset args 1 ![lindex $args 1] ;# add ! flag + MatchExpected -indices {*}$args + } + # test is a knownBug + proc knownBug {args} { + variable regBug 1 + uplevel \#0 $args + set regBug 0 + } +} +namespace import RETest::* + +######## the tests themselves ######## # support functions and preliminary misc. # This is sensitive to changes in message wording, but we really have to # test the code->message expansion at least once. -test reg-0.1 "regexp error reporting" { - list [catch {regexp (*) ign} msg] $msg +::tcltest::test reg-0.1 "regexp error reporting" { + list [catch {regexp (*) ign} msg] $msg } {1 {couldn't compile regular expression pattern: quantifier operand invalid}} - doing 1 "basic sanity checks" -m 1 & abc abc abc -f 2 & abc def -m 3 & abc xyabxabce abc - +expectMatch 1.1 & abc abc abc +expectNomatch 1.2 & abc def +expectMatch 1.3 & abc xyabxabce abc doing 2 "invalid option combinations" -e 1 qe a INVARG -e 2 qa a INVARG -e 3 qx a INVARG -e 4 qn a INVARG -e 5 ba a INVARG - +expectError 2.1 qe a INVARG +expectError 2.2 qa a INVARG +expectError 2.3 qx a INVARG +expectError 2.4 qn a INVARG +expectError 2.5 ba a INVARG doing 3 "basic syntax" -i 1 &NS "" a {0 -1} -m 2 NS a| a a -m 3 - a|b a a -m 4 - a|b b b -m 5 NS a||b b b -m 6 & ab ab ab - +expectIndices 3.1 &NS "" a {0 -1} +expectMatch 3.2 NS a| a a +expectMatch 3.3 - a|b a a +expectMatch 3.4 - a|b b b +expectMatch 3.5 NS a||b b b +expectMatch 3.6 & ab ab ab doing 4 "parentheses" -m 1 - (a)e ae ae a -m 2 o (a)e ae -m 3 b {\(a\)b} ab ab a -m 4 - a((b)c) abc abc bc b -m 5 - a(b)(c) abc abc b c -e 6 - a(b EPAREN -e 7 b {a\(b} EPAREN +expectMatch 4.1 - (a)e ae ae a +expectMatch 4.2 o (a)e ae +expectMatch 4.3 b {\(a\)b} ab ab a +expectMatch 4.4 - a((b)c) abc abc bc b +expectMatch 4.5 - a(b)(c) abc abc b c +expectError 4.6 - a(b EPAREN +expectError 4.7 b {a\(b} EPAREN # sigh, we blew it on the specs here... someday this will be fixed in POSIX, # but meanwhile, it's fixed in AREs -m 8 eU a)b a)b a)b -e 9 - a)b EPAREN -e 10 b {a\)b} EPAREN -m 11 P a(?:b)c abc abc -e 12 e a(?:b)c BADRPT -i 13 S a()b ab {0 1} {1 0} -m 14 SP a(?:)b ab ab -i 15 S a(|b)c ac {0 1} {1 0} -m 16 S a(b|)c abc abc b - +expectMatch 4.8 eU a)b a)b a)b +expectError 4.9 - a)b EPAREN +expectError 4.10 b {a\)b} EPAREN +expectMatch 4.11 P a(?:b)c abc abc +expectError 4.12 e a(?:b)c BADRPT +expectIndices 4.13 S a()b ab {0 1} {1 0} +expectMatch 4.14 SP a(?:)b ab ab +expectIndices 4.15 S a(|b)c ac {0 1} {1 0} +expectMatch 4.16 S a(b|)c abc abc b doing 5 "simple one-char matching" # general case of brackets done later -m 1 & a.b axb axb -f 2 &n "a.b" "a\nb" -m 3 & {a[bc]d} abd abd -m 4 & {a[bc]d} acd acd -f 5 & {a[bc]d} aed -f 6 & {a[^bc]d} abd -m 7 & {a[^bc]d} aed aed -f 8 &p "a\[^bc]d" "a\nd" - +expectMatch 5.1 & a.b axb axb +expectNomatch 5.2 &n "a.b" "a\nb" +expectMatch 5.3 & {a[bc]d} abd abd +expectMatch 5.4 & {a[bc]d} acd acd +expectNomatch 5.5 & {a[bc]d} aed +expectNomatch 5.6 & {a[^bc]d} abd +expectMatch 5.7 & {a[^bc]d} aed aed +expectNomatch 5.8 &p "a\[^bc]d" "a\nd" doing 6 "context-dependent syntax" # plus odds and ends -e 1 - * BADRPT -m 2 b * * * -m 3 b {\(*\)} * * * -e 4 - (*) BADRPT -m 5 b ^* * * -e 6 - ^* BADRPT -f 7 & ^b ^b -m 8 b x^ x^ x^ -f 9 I x^ x -m 10 n "\n^" "x\nb" "\n" -f 11 bS {\(^b\)} ^b -m 12 - (^b) b b b -m 13 & {x$} x x -m 14 bS {\(x$\)} x x x -m 15 - {(x$)} x x x -m 16 b {x$y} "x\$y" "x\$y" -f 17 I {x$y} xy -m 18 n "x\$\n" "x\n" "x\n" -e 19 - + BADRPT -e 20 - ? BADRPT - +expectError 6.1 - * BADRPT +expectMatch 6.2 b * * * +expectMatch 6.3 b {\(*\)} * * * +expectError 6.4 - (*) BADRPT +expectMatch 6.5 b ^* * * +expectError 6.6 - ^* BADRPT +expectNomatch 6.7 & ^b ^b +expectMatch 6.8 b x^ x^ x^ +expectNomatch 6.9 I x^ x +expectMatch 6.10 n "\n^" "x\nb" "\n" +expectNomatch 6.11 bS {\(^b\)} ^b +expectMatch 6.12 - (^b) b b b +expectMatch 6.13 & {x$} x x +expectMatch 6.14 bS {\(x$\)} x x x +expectMatch 6.15 - {(x$)} x x x +expectMatch 6.16 b {x$y} "x\$y" "x\$y" +expectNomatch 6.17 I {x$y} xy +expectMatch 6.18 n "x\$\n" "x\n" "x\n" +expectError 6.19 - + BADRPT +expectError 6.20 - ? BADRPT doing 7 "simple quantifiers" -m 1 &N a* aa aa -i 2 &N a* b {0 -1} -m 3 - a+ aa aa -m 4 - a?b ab ab -m 5 - a?b b b -e 6 - ** BADRPT -m 7 bN ** *** *** -e 8 & a** BADRPT -e 9 & a**b BADRPT -e 10 & *** BADRPT -e 11 - a++ BADRPT -e 12 - a?+ BADRPT -e 13 - a?* BADRPT -e 14 - a+* BADRPT -e 15 - a*+ BADRPT - +expectMatch 7.1 &N a* aa aa +expectIndices 7.2 &N a* b {0 -1} +expectMatch 7.3 - a+ aa aa +expectMatch 7.4 - a?b ab ab +expectMatch 7.5 - a?b b b +expectError 7.6 - ** BADRPT +expectMatch 7.7 bN ** *** *** +expectError 7.8 & a** BADRPT +expectError 7.9 & a**b BADRPT +expectError 7.10 & *** BADRPT +expectError 7.11 - a++ BADRPT +expectError 7.12 - a?+ BADRPT +expectError 7.13 - a?* BADRPT +expectError 7.14 - a+* BADRPT +expectError 7.15 - a*+ BADRPT doing 8 "braces" -m 1 NQ "a{0,1}" "" "" -m 2 NQ "a{0,1}" ac a -e 3 - "a{1,0}" BADBR -e 4 - "a{1,2,3}" BADBR -e 5 - "a{257}" BADBR -e 6 - "a{1000}" BADBR -e 7 - "a{1" EBRACE -e 8 - "a{1n}" BADBR -m 9 BS "a{b" "a\{b" "a\{b" -m 10 BS "a{" "a\{" "a\{" -m 11 bQ "a\\{0,1\\}b" cb b -e 12 b "a\\{0,1" EBRACE -e 13 - "a{0,1\\" BADBR -m 14 Q "a{0}b" ab b -m 15 Q "a{0,0}b" ab b -m 16 Q "a{0,1}b" ab ab -m 17 Q "a{0,2}b" b b -m 18 Q "a{0,2}b" aab aab -m 19 Q "a{0,}b" aab aab -m 20 Q "a{1,1}b" aab ab -m 21 Q "a{1,3}b" aaaab aaab -f 22 Q "a{1,3}b" b -m 23 Q "a{1,}b" aab aab -f 24 Q "a{2,3}b" ab -m 25 Q "a{2,3}b" aaaab aaab -f 26 Q "a{2,}b" ab -m 27 Q "a{2,}b" aaaab aaaab - +expectMatch 8.1 NQ "a{0,1}" "" "" +expectMatch 8.2 NQ "a{0,1}" ac a +expectError 8.3 - "a{1,0}" BADBR +expectError 8.4 - "a{1,2,3}" BADBR +expectError 8.5 - "a{257}" BADBR +expectError 8.6 - "a{1000}" BADBR +expectError 8.7 - "a{1" EBRACE +expectError 8.8 - "a{1n}" BADBR +expectMatch 8.9 BS "a{b" "a\{b" "a\{b" +expectMatch 8.10 BS "a{" "a\{" "a\{" +expectMatch 8.11 bQ "a\\{0,1\\}b" cb b +expectError 8.12 b "a\\{0,1" EBRACE +expectError 8.13 - "a{0,1\\" BADBR +expectMatch 8.14 Q "a{0}b" ab b +expectMatch 8.15 Q "a{0,0}b" ab b +expectMatch 8.16 Q "a{0,1}b" ab ab +expectMatch 8.17 Q "a{0,2}b" b b +expectMatch 8.18 Q "a{0,2}b" aab aab +expectMatch 8.19 Q "a{0,}b" aab aab +expectMatch 8.20 Q "a{1,1}b" aab ab +expectMatch 8.21 Q "a{1,3}b" aaaab aaab +expectNomatch 8.22 Q "a{1,3}b" b +expectMatch 8.23 Q "a{1,}b" aab aab +expectNomatch 8.24 Q "a{2,3}b" ab +expectMatch 8.25 Q "a{2,3}b" aaaab aaab +expectNomatch 8.26 Q "a{2,}b" ab +expectMatch 8.27 Q "a{2,}b" aaaab aaaab doing 9 "brackets" -m 1 & {a[bc]} ac ac -m 2 & {a[-]} a- a- -m 3 & {a[[.-.]]} a- a- -m 4 &L {a[[.zero.]]} a0 a0 -m 5 &LM {a[[.zero.]-9]} a2 a2 -m 6 &M {a[0-[.9.]]} a2 a2 -m 7 &+L {a[[=x=]]} ax ax -m 8 &+L {a[[=x=]]} ay ay -f 9 &+L {a[[=x=]]} az -e 10 & {a[0-[=x=]]} ERANGE -m 11 &L {a[[:digit:]]} a0 a0 -e 12 & {a[[:woopsie:]]} ECTYPE -f 13 &L {a[[:digit:]]} ab -e 14 & {a[0-[:digit:]]} ERANGE -m 15 &LP {[[:<:]]a} a a -m 16 &LP {a[[:>:]]} a a -e 17 & {a[[..]]b} ECOLLATE -e 18 & {a[[==]]b} ECOLLATE -e 19 & {a[[::]]b} ECTYPE -e 20 & {a[[.a} EBRACK -e 21 & {a[[=a} EBRACK -e 22 & {a[[:a} EBRACK -e 23 & {a[} EBRACK -e 24 & {a[b} EBRACK -e 25 & {a[b-} EBRACK -e 26 & {a[b-c} EBRACK -m 27 &M {a[b-c]} ab ab -m 28 & {a[b-b]} ab ab -m 29 &M {a[1-2]} a2 a2 -e 30 & {a[c-b]} ERANGE -e 31 & {a[a-b-c]} ERANGE -m 32 &M {a[--?]b} a?b a?b -m 33 & {a[---]b} a-b a-b -m 34 & {a[]b]c} a]c a]c -m 35 EP {a[\]]b} a]b a]b -f 36 bE {a[\]]b} a]b -m 37 bE {a[\]]b} "a\\]b" "a\\]b" -m 38 eE {a[\]]b} "a\\]b" "a\\]b" -m 39 EP {a[\\]b} "a\\b" "a\\b" -m 40 eE {a[\\]b} "a\\b" "a\\b" -m 41 bE {a[\\]b} "a\\b" "a\\b" -e 42 - {a[\Z]b} EESCAPE -m 43 & {a[[b]c} "a\[c" "a\[c" -m 44 EMP* {a[\u00fe-\u0507][\u00ff-\u0300]b} \ - "a\u0102\u02ffb" "a\u0102\u02ffb" - +expectMatch 9.1 & {a[bc]} ac ac +expectMatch 9.2 & {a[-]} a- a- +expectMatch 9.3 & {a[[.-.]]} a- a- +expectMatch 9.4 &L {a[[.zero.]]} a0 a0 +expectMatch 9.5 &LM {a[[.zero.]-9]} a2 a2 +expectMatch 9.6 &M {a[0-[.9.]]} a2 a2 +expectMatch 9.7 &+L {a[[=x=]]} ax ax +expectMatch 9.8 &+L {a[[=x=]]} ay ay +expectNomatch 9.9 &+L {a[[=x=]]} az +expectError 9.10 & {a[0-[=x=]]} ERANGE +expectMatch 9.11 &L {a[[:digit:]]} a0 a0 +expectError 9.12 & {a[[:woopsie:]]} ECTYPE +expectNomatch 9.13 &L {a[[:digit:]]} ab +expectError 9.14 & {a[0-[:digit:]]} ERANGE +expectMatch 9.15 &LP {[[:<:]]a} a a +expectMatch 9.16 &LP {a[[:>:]]} a a +expectError 9.17 & {a[[..]]b} ECOLLATE +expectError 9.18 & {a[[==]]b} ECOLLATE +expectError 9.19 & {a[[::]]b} ECTYPE +expectError 9.20 & {a[[.a} EBRACK +expectError 9.21 & {a[[=a} EBRACK +expectError 9.22 & {a[[:a} EBRACK +expectError 9.23 & {a[} EBRACK +expectError 9.24 & {a[b} EBRACK +expectError 9.25 & {a[b-} EBRACK +expectError 9.26 & {a[b-c} EBRACK +expectMatch 9.27 &M {a[b-c]} ab ab +expectMatch 9.28 & {a[b-b]} ab ab +expectMatch 9.29 &M {a[1-2]} a2 a2 +expectError 9.30 & {a[c-b]} ERANGE +expectError 9.31 & {a[a-b-c]} ERANGE +expectMatch 9.32 &M {a[--?]b} a?b a?b +expectMatch 9.33 & {a[---]b} a-b a-b +expectMatch 9.34 & {a[]b]c} a]c a]c +expectMatch 9.35 EP {a[\]]b} a]b a]b +expectNomatch 9.36 bE {a[\]]b} a]b +expectMatch 9.37 bE {a[\]]b} "a\\]b" "a\\]b" +expectMatch 9.38 eE {a[\]]b} "a\\]b" "a\\]b" +expectMatch 9.39 EP {a[\\]b} "a\\b" "a\\b" +expectMatch 9.40 eE {a[\\]b} "a\\b" "a\\b" +expectMatch 9.41 bE {a[\\]b} "a\\b" "a\\b" +expectError 9.42 - {a[\Z]b} EESCAPE +expectMatch 9.43 & {a[[b]c} "a\[c" "a\[c" +expectMatch 9.44 EMP* {a[\u00fe-\u0507][\u00ff-\u0300]b} \ + "a\u0102\u02ffb" "a\u0102\u02ffb" doing 10 "anchors and newlines" -m 1 & ^a a a -f 2 &^ ^a a -i 3 &N ^ a {0 -1} -i 4 & {a$} aba {2 2} -f 5 {&$} {a$} a -i 6 &N {$} ab {2 1} -m 7 &n ^a a a -m 8 &n "^a" "b\na" "a" -i 9 &w "^a" "a\na" {0 0} -i 10 &n^ "^a" "a\na" {2 2} -m 11 &n {a$} a a -m 12 &n "a\$" "a\nb" "a" -i 13 &n "a\$" "a\na" {0 0} -i 14 N ^^ a {0 -1} -m 15 b ^^ ^ ^ -i 16 N {$$} a {1 0} -m 17 b {$$} "\$" "\$" -m 18 &N {^$} "" "" -f 19 &N {^$} a -i 20 &nN "^\$" "a\n\nb" {2 1} -m 21 N {$^} "" "" -m 22 b {$^} "\$^" "\$^" -m 23 P {\Aa} a a -m 24 ^P {\Aa} a a -f 25 ^nP {\Aa} "b\na" -m 26 P {a\Z} a a -m 27 {$P} {a\Z} a a -f 28 {$nP} {a\Z} "a\nb" -e 29 - ^* BADRPT -e 30 - {$*} BADRPT -e 31 - {\A*} BADRPT -e 32 - {\Z*} BADRPT - +expectMatch 10.1 & ^a a a +expectNomatch 10.2 &^ ^a a +expectIndices 10.3 &N ^ a {0 -1} +expectIndices 10.4 & {a$} aba {2 2} +expectNomatch 10.5 {&$} {a$} a +expectIndices 10.6 &N {$} ab {2 1} +expectMatch 10.7 &n ^a a a +expectMatch 10.8 &n "^a" "b\na" "a" +expectIndices 10.9 &w "^a" "a\na" {0 0} +expectIndices 10.10 &n^ "^a" "a\na" {2 2} +expectMatch 10.11 &n {a$} a a +expectMatch 10.12 &n "a\$" "a\nb" "a" +expectIndices 10.13 &n "a\$" "a\na" {0 0} +expectIndices 10.14 N ^^ a {0 -1} +expectMatch 10.15 b ^^ ^ ^ +expectIndices 10.16 N {$$} a {1 0} +expectMatch 10.17 b {$$} "\$" "\$" +expectMatch 10.18 &N {^$} "" "" +expectNomatch 10.19 &N {^$} a +expectIndices 10.20 &nN "^\$" a\n\nb {2 1} +expectMatch 10.21 N {$^} "" "" +expectMatch 10.22 b {$^} "\$^" "\$^" +expectMatch 10.23 P {\Aa} a a +expectMatch 10.24 ^P {\Aa} a a +expectNomatch 10.25 ^nP {\Aa} "b\na" +expectMatch 10.26 P {a\Z} a a +expectMatch 10.27 \$P {a\Z} a a +expectNomatch 10.28 \$nP {a\Z} "a\nb" +expectError 10.29 - ^* BADRPT +expectError 10.30 - {$*} BADRPT +expectError 10.31 - {\A*} BADRPT +expectError 10.32 - {\Z*} BADRPT doing 11 "boundary constraints" -m 1 &LP {[[:<:]]a} a a -m 2 &LP {[[:<:]]a} -a a -f 3 &LP {[[:<:]]a} ba -m 4 &LP {a[[:>:]]} a a -m 5 &LP {a[[:>:]]} a- a -f 6 &LP {a[[:>:]]} ab -m 7 bLP {\<a} a a -f 8 bLP {\<a} ba -m 9 bLP {a\>} a a -f 10 bLP {a\>} ab -m 11 LP {\ya} a a -f 12 LP {\ya} ba -m 13 LP {a\y} a a -f 14 LP {a\y} ab -m 15 LP {a\Y} ab a -f 16 LP {a\Y} a- -f 17 LP {a\Y} a -f 18 LP {-\Y} -a -m 19 LP {-\Y} -% - -f 20 LP {\Y-} a- -e 21 - {[[:<:]]*} BADRPT -e 22 - {[[:>:]]*} BADRPT -e 23 b {\<*} BADRPT -e 24 b {\>*} BADRPT -e 25 - {\y*} BADRPT -e 26 - {\Y*} BADRPT -m 27 LP {\ma} a a -f 28 LP {\ma} ba -m 29 LP {a\M} a a -f 30 LP {a\M} ab -f 31 ILP {\Ma} a -f 32 ILP {a\m} a - +expectMatch 11.1 &LP {[[:<:]]a} a a +expectMatch 11.2 &LP {[[:<:]]a} -a a +expectNomatch 11.3 &LP {[[:<:]]a} ba +expectMatch 11.4 &LP {a[[:>:]]} a a +expectMatch 11.5 &LP {a[[:>:]]} a- a +expectNomatch 11.6 &LP {a[[:>:]]} ab +expectMatch 11.7 bLP {\<a} a a +expectNomatch 11.8 bLP {\<a} ba +expectMatch 11.9 bLP {a\>} a a +expectNomatch 11.10 bLP {a\>} ab +expectMatch 11.11 LP {\ya} a a +expectNomatch 11.12 LP {\ya} ba +expectMatch 11.13 LP {a\y} a a +expectNomatch 11.14 LP {a\y} ab +expectMatch 11.15 LP {a\Y} ab a +expectNomatch 11.16 LP {a\Y} a- +expectNomatch 11.17 LP {a\Y} a +expectNomatch 11.18 LP {-\Y} -a +expectMatch 11.19 LP {-\Y} -% - +expectNomatch 11.20 LP {\Y-} a- +expectError 11.21 - {[[:<:]]*} BADRPT +expectError 11.22 - {[[:>:]]*} BADRPT +expectError 11.23 b {\<*} BADRPT +expectError 11.24 b {\>*} BADRPT +expectError 11.25 - {\y*} BADRPT +expectError 11.26 - {\Y*} BADRPT +expectMatch 11.27 LP {\ma} a a +expectNomatch 11.28 LP {\ma} ba +expectMatch 11.29 LP {a\M} a a +expectNomatch 11.30 LP {a\M} ab +expectNomatch 11.31 ILP {\Ma} a +expectNomatch 11.32 ILP {a\m} a doing 12 "character classes" -m 1 LP {a\db} a0b a0b -f 2 LP {a\db} axb -f 3 LP {a\Db} a0b -m 4 LP {a\Db} axb axb -m 5 LP "a\\sb" "a b" "a b" -m 6 LP "a\\sb" "a\tb" "a\tb" -m 7 LP "a\\sb" "a\nb" "a\nb" -f 8 LP {a\sb} axb -m 9 LP {a\Sb} axb axb -f 10 LP "a\\Sb" "a b" -m 11 LP {a\wb} axb axb -f 12 LP {a\wb} a-b -f 13 LP {a\Wb} axb -m 14 LP {a\Wb} a-b a-b -m 15 LP {\y\w+z\y} adze-guz guz -m 16 LPE {a[\d]b} a1b a1b -m 17 LPE "a\[\\s]b" "a b" "a b" -m 18 LPE {a[\w]b} axb axb - +expectMatch 12.1 LP {a\db} a0b a0b +expectNomatch 12.2 LP {a\db} axb +expectNomatch 12.3 LP {a\Db} a0b +expectMatch 12.4 LP {a\Db} axb axb +expectMatch 12.5 LP "a\\sb" "a b" "a b" +expectMatch 12.6 LP "a\\sb" "a\tb" "a\tb" +expectMatch 12.7 LP "a\\sb" "a\nb" "a\nb" +expectNomatch 12.8 LP {a\sb} axb +expectMatch 12.9 LP {a\Sb} axb axb +expectNomatch 12.10 LP "a\\Sb" "a b" +expectMatch 12.11 LP {a\wb} axb axb +expectNomatch 12.12 LP {a\wb} a-b +expectNomatch 12.13 LP {a\Wb} axb +expectMatch 12.14 LP {a\Wb} a-b a-b +expectMatch 12.15 LP {\y\w+z\y} adze-guz guz +expectMatch 12.16 LPE {a[\d]b} a1b a1b +expectMatch 12.17 LPE "a\[\\s]b" "a b" "a b" +expectMatch 12.18 LPE {a[\w]b} axb axb doing 13 "escapes" -e 1 & "a\\" EESCAPE -m 2 - {a\<b} a<b a<b -m 3 e {a\<b} a<b a<b -m 4 bAS {a\wb} awb awb -m 5 eAS {a\wb} awb awb -m 6 PL "a\\ab" "a\007b" "a\007b" -m 7 P "a\\bb" "a\bb" "a\bb" -m 8 P {a\Bb} "a\\b" "a\\b" -m 9 MP "a\\chb" "a\bb" "a\bb" -m 10 MP "a\\cHb" "a\bb" "a\bb" -m 11 LMP "a\\e" "a\033" "a\033" -m 12 P "a\\fb" "a\fb" "a\fb" -m 13 P "a\\nb" "a\nb" "a\nb" -m 14 P "a\\rb" "a\rb" "a\rb" -m 15 P "a\\tb" "a\tb" "a\tb" -m 16 P "a\\u0008x" "a\bx" "a\bx" -e 17 - {a\u008x} EESCAPE -m 18 P "a\\u00088x" "a\b8x" "a\b8x" -m 19 P "a\\U00000008x" "a\bx" "a\bx" -e 20 - {a\U0000008x} EESCAPE -m 21 P "a\\vb" "a\vb" "a\vb" -m 22 MP "a\\x08x" "a\bx" "a\bx" -e 23 - {a\xq} EESCAPE -m 24 MP "a\\x0008x" "a\bx" "a\bx" -e 25 - {a\z} EESCAPE -m 26 MP "a\\010b" "a\bb" "a\bb" - +expectError 13.1 & "a\\" EESCAPE +expectMatch 13.2 - {a\<b} a<b a<b +expectMatch 13.3 e {a\<b} a<b a<b +expectMatch 13.4 bAS {a\wb} awb awb +expectMatch 13.5 eAS {a\wb} awb awb +expectMatch 13.6 PL "a\\ab" "a\007b" "a\007b" +expectMatch 13.7 P "a\\bb" "a\bb" "a\bb" +expectMatch 13.8 P {a\Bb} "a\\b" "a\\b" +expectMatch 13.9 MP "a\\chb" "a\bb" "a\bb" +expectMatch 13.10 MP "a\\cHb" "a\bb" "a\bb" +expectMatch 13.11 LMP "a\\e" "a\033" "a\033" +expectMatch 13.12 P "a\\fb" "a\fb" "a\fb" +expectMatch 13.13 P "a\\nb" "a\nb" "a\nb" +expectMatch 13.14 P "a\\rb" "a\rb" "a\rb" +expectMatch 13.15 P "a\\tb" "a\tb" "a\tb" +expectMatch 13.16 P "a\\u0008x" "a\bx" "a\bx" +expectError 13.17 - {a\u008x} EESCAPE +expectMatch 13.18 P "a\\u00088x" "a\b8x" "a\b8x" +expectMatch 13.19 P "a\\U00000008x" "a\bx" "a\bx" +expectError 13.20 - {a\U0000008x} EESCAPE +expectMatch 13.21 P "a\\vb" "a\vb" "a\vb" +expectMatch 13.22 MP "a\\x08x" "a\bx" "a\bx" +expectError 13.23 - {a\xq} EESCAPE +expectMatch 13.24 MP "a\\x0008x" "a\bx" "a\bx" +expectError 13.25 - {a\z} EESCAPE +expectMatch 13.26 MP "a\\010b" "a\bb" "a\bb" doing 14 "back references" # ugh -m 1 RP {a(b*)c\1} abbcbb abbcbb bb -m 2 RP {a(b*)c\1} ac ac "" -f 3 RP {a(b*)c\1} abbcb -m 4 RP {a(b*)\1} abbcbb abb b -m 5 RP {a(b|bb)\1} abbcbb abb b -m 6 RP {a([bc])\1} abb abb b -f 7 RP {a([bc])\1} abc -m 8 RP {a([bc])\1} abcabb abb b -f 9 RP {a([bc])*\1} abc -f 10 RP {a([bc])\1} abB -m 11 iRP {a([bc])\1} abB abB b -m 12 RP {a([bc])\1+} abbb abbb b -m 13 QRP "a(\[bc])\\1{3,4}" abbbb abbbb b -f 14 QRP "a(\[bc])\\1{3,4}" abbb -m 15 RP {a([bc])\1*} abbb abbb b -m 16 RP {a([bc])\1*} ab ab b -m 17 RP {a([bc])(\1*)} ab ab b "" -e 18 - {a((b)\1)} ESUBREG -e 19 - {a(b)c\2} ESUBREG -m 20 bR {a\(b*\)c\1} abbcbb abbcbb bb - +expectMatch 14.1 RP {a(b*)c\1} abbcbb abbcbb bb +expectMatch 14.2 RP {a(b*)c\1} ac ac "" +expectNomatch 14.3 RP {a(b*)c\1} abbcb +expectMatch 14.4 RP {a(b*)\1} abbcbb abb b +expectMatch 14.5 RP {a(b|bb)\1} abbcbb abb b +expectMatch 14.6 RP {a([bc])\1} abb abb b +expectNomatch 14.7 RP {a([bc])\1} abc +expectMatch 14.8 RP {a([bc])\1} abcabb abb b +expectNomatch 14.9 RP {a([bc])*\1} abc +expectNomatch 14.10 RP {a([bc])\1} abB +expectMatch 14.11 iRP {a([bc])\1} abB abB b +expectMatch 14.12 RP {a([bc])\1+} abbb abbb b +expectMatch 14.13 QRP "a(\[bc])\\1{3,4}" abbbb abbbb b +expectNomatch 14.14 QRP "a(\[bc])\\1{3,4}" abbb +expectMatch 14.15 RP {a([bc])\1*} abbb abbb b +expectMatch 14.16 RP {a([bc])\1*} ab ab b +expectMatch 14.17 RP {a([bc])(\1*)} ab ab b "" +expectError 14.18 - {a((b)\1)} ESUBREG +expectError 14.19 - {a(b)c\2} ESUBREG +expectMatch 14.20 bR {a\(b*\)c\1} abbcbb abbcbb bb +expectMatch 14.21 RP {^([bc])\1*$} bbb bbb b +expectMatch 14.22 RP {^([bc])\1*$} ccc ccc c +knownBug expectNomatch 14.23 R {^([bc])\1*$} bcb doing 15 "octal escapes vs back references" # initial zero is always octal -m 1 MP "a\\010b" "a\bb" "a\bb" -m 2 MP "a\\0070b" "a\0070b" "a\0070b" -m 3 MP "a\\07b" "a\007b" "a\007b" -m 4 MP "a(b)(b)(b)(b)(b)(b)(b)(b)(b)(b)\\07c" "abbbbbbbbbb\007c" \ - "abbbbbbbbbb\007c" "b" "b" "b" "b" "b" "b" \ - "b" "b" "b" "b" +expectMatch 15.1 MP "a\\010b" "a\bb" "a\bb" +expectMatch 15.2 MP "a\\0070b" "a\0070b" "a\0070b" +expectMatch 15.3 MP "a\\07b" "a\007b" "a\007b" +expectMatch 15.4 MP "a(b)(b)(b)(b)(b)(b)(b)(b)(b)(b)\\07c" \ + "abbbbbbbbbb\007c" abbbbbbbbbb\007c b b b b b b b b b b # a single digit is always a backref -e 5 - {a\7b} ESUBREG +expectError 15.5 - {a\7b} ESUBREG # otherwise it's a backref only if within range (barf!) -m 6 MP "a\\10b" "a\bb" "a\bb" -m 7 MP {a\101b} aAb aAb -m 8 RP {a(b)(b)(b)(b)(b)(b)(b)(b)(b)(b)\10c} abbbbbbbbbbbc \ - abbbbbbbbbbbc b b b b b b b \ - b b b +expectMatch 15.6 MP "a\\10b" "a\bb" "a\bb" +expectMatch 15.7 MP {a\101b} aAb aAb +expectMatch 15.8 RP {a(b)(b)(b)(b)(b)(b)(b)(b)(b)(b)\10c} \ + "abbbbbbbbbbbc" abbbbbbbbbbbc b b b b b b b b b b # but we're fussy about border cases -- guys who want octal should use the zero -e 9 - {a((((((((((b\10))))))))))c} ESUBREG +expectError 15.9 - {a((((((((((b\10))))))))))c} ESUBREG # BREs don't have octal, EREs don't have backrefs -m 10 MP "a\\12b" "a\nb" "a\nb" -e 11 b {a\12b} ESUBREG -m 12 eAS {a\12b} a12b a12b - +expectMatch 15.10 MP "a\\12b" "a\nb" "a\nb" +expectError 15.11 b {a\12b} ESUBREG +expectMatch 15.12 eAS {a\12b} a12b a12b doing 16 "expanded syntax" -m 1 xP "a b c" "abc" "abc" -m 2 xP "a b #oops\nc\td" "abcd" "abcd" -m 3 x "a\\ b\\\tc" "a b\tc" "a b\tc" -m 4 xP "a b\\#c" "ab#c" "ab#c" -m 5 xP "a b\[c d]e" "ab e" "ab e" -m 6 xP "a b\[c#d]e" "ab#e" "ab#e" -m 7 xP "a b\[c#d]e" "abde" "abde" -m 8 xSPB "ab{ d" "ab\{d" "ab\{d" -m 9 xPQ "ab{ 1 , 2 }c" "abc" "abc" - +expectMatch 16.1 xP "a b c" "abc" "abc" +expectMatch 16.2 xP "a b #oops\nc\td" "abcd" "abcd" +expectMatch 16.3 x "a\\ b\\\tc" "a b\tc" "a b\tc" +expectMatch 16.4 xP "a b\\#c" "ab#c" "ab#c" +expectMatch 16.5 xP "a b\[c d]e" "ab e" "ab e" +expectMatch 16.6 xP "a b\[c#d]e" "ab#e" "ab#e" +expectMatch 16.7 xP "a b\[c#d]e" "abde" "abde" +expectMatch 16.8 xSPB "ab{ d" "ab\{d" "ab\{d" +expectMatch 16.9 xPQ "ab{ 1 , 2 }c" "abc" "abc" doing 17 "misc syntax" -m 1 P a(?#comment)b ab ab - +expectMatch 17.1 P a(?#comment)b ab ab doing 18 "unmatchable REs" -f 1 I a^b ab - +expectNomatch 18.1 I a^b ab doing 19 "case independence" -m 1 &i ab Ab Ab -m 2 &i {a[bc]} aC aC -f 3 &i {a[^bc]} aB -m 4 &iM {a[b-d]} aC aC -f 5 &iM {a[^b-d]} aC - +expectMatch 19.1 &i ab Ab Ab +expectMatch 19.2 &i {a[bc]} aC aC +expectNomatch 19.3 &i {a[^bc]} aB +expectMatch 19.4 &iM {a[b-d]} aC aC +expectNomatch 19.5 &iM {a[^b-d]} aC doing 20 "directors and embedded options" -e 1 & ***? BADPAT -m 2 q ***? ***? ***? -m 3 &P ***=a*b a*b a*b -m 4 q ***=a*b ***=a*b ***=a*b -m 5 bLP {***:\w+} ab ab -m 6 eLP {***:\w+} ab ab -e 7 & ***:***=a*b BADRPT -m 8 &P ***:(?b)a+b a+b a+b -m 9 P (?b)a+b a+b a+b -e 10 e {(?b)\w+} BADRPT -m 11 bAS {(?b)\w+} (?b)w+ (?b)w+ -m 12 iP (?c)a a a -f 13 iP (?c)a A -m 14 APS {(?e)\W+} WW WW -m 15 P (?i)a+ Aa Aa -f 16 P "(?m)a.b" "a\nb" -m 17 P "(?m)^b" "a\nb" "b" -f 18 P "(?n)a.b" "a\nb" -m 19 P "(?n)^b" "a\nb" "b" -f 20 P "(?p)a.b" "a\nb" -f 21 P "(?p)^b" "a\nb" -m 22 P (?q)a+b a+b a+b -m 23 nP "(?s)a.b" "a\nb" "a\nb" -m 24 xP "(?t)a b" "a b" "a b" -m 25 P "(?w)a.b" "a\nb" "a\nb" -m 26 P "(?w)^b" "a\nb" "b" -m 27 P "(?x)a b" "ab" "ab" -e 28 - (?z)ab BADOPT -m 29 P (?ici)a+ Aa Aa -e 30 P (?i)(?q)a+ BADRPT -m 31 P (?q)(?i)a+ (?i)a+ (?i)a+ -m 32 P (?qe)a+ a a -m 33 xP "(?q)a b" "a b" "a b" -m 34 P "(?qx)a b" "a b" "a b" -m 35 P (?qi)ab Ab Ab - +expectError 20.1 & ***? BADPAT +expectMatch 20.2 q ***? ***? ***? +expectMatch 20.3 &P ***=a*b a*b a*b +expectMatch 20.4 q ***=a*b ***=a*b ***=a*b +expectMatch 20.5 bLP {***:\w+} ab ab +expectMatch 20.6 eLP {***:\w+} ab ab +expectError 20.7 & ***:***=a*b BADRPT +expectMatch 20.8 &P ***:(?b)a+b a+b a+b +expectMatch 20.9 P (?b)a+b a+b a+b +expectError 20.10 e {(?b)\w+} BADRPT +expectMatch 20.11 bAS {(?b)\w+} (?b)w+ (?b)w+ +expectMatch 20.12 iP (?c)a a a +expectNomatch 20.13 iP (?c)a A +expectMatch 20.14 APS {(?e)\W+} WW WW +expectMatch 20.15 P (?i)a+ Aa Aa +expectNomatch 20.16 P "(?m)a.b" "a\nb" +expectMatch 20.17 P "(?m)^b" "a\nb" "b" +expectNomatch 20.18 P "(?n)a.b" "a\nb" +expectMatch 20.19 P "(?n)^b" "a\nb" "b" +expectNomatch 20.20 P "(?p)a.b" "a\nb" +expectNomatch 20.21 P "(?p)^b" "a\nb" +expectMatch 20.22 P (?q)a+b a+b a+b +expectMatch 20.23 nP "(?s)a.b" "a\nb" "a\nb" +expectMatch 20.24 xP "(?t)a b" "a b" "a b" +expectMatch 20.25 P "(?w)a.b" "a\nb" "a\nb" +expectMatch 20.26 P "(?w)^b" "a\nb" "b" +expectMatch 20.27 P "(?x)a b" "ab" "ab" +expectError 20.28 - (?z)ab BADOPT +expectMatch 20.29 P (?ici)a+ Aa Aa +expectError 20.30 P (?i)(?q)a+ BADRPT +expectMatch 20.31 P (?q)(?i)a+ (?i)a+ (?i)a+ +expectMatch 20.32 P (?qe)a+ a a +expectMatch 20.33 xP "(?q)a b" "a b" "a b" +expectMatch 20.34 P "(?qx)a b" "a b" "a b" +expectMatch 20.35 P (?qi)ab Ab Ab doing 21 "capturing" -m 1 - a(b)c abc abc b -m 2 P a(?:b)c xabc abc -m 3 - a((b))c xabcy abc b b -m 4 P a(?:(b))c abcy abc b -m 5 P a((?:b))c abc abc b -m 6 P a(?:(?:b))c abc abc -i 7 Q "a(b){0}c" ac {0 1} {-1 -1} -m 8 - a(b)c(d)e abcde abcde b d -m 9 - (b)c(d)e bcde bcde b d -m 10 - a(b)(d)e abde abde b d -m 11 - a(b)c(d) abcd abcd b d -m 12 - (ab)(cd) xabcdy abcd ab cd -m 13 - a(b)?c xabcy abc b -i 14 - a(b)?c xacy {1 2} {-1 -1} -m 15 - a(b)?c(d)?e xabcdey abcde b d -i 16 - a(b)?c(d)?e xacdey {1 4} {-1 -1} {3 3} -i 17 - a(b)?c(d)?e xabcey {1 4} {2 2} {-1 -1} -i 18 - a(b)?c(d)?e xacey {1 3} {-1 -1} {-1 -1} -m 19 - a(b)*c xabcy abc b -i 20 - a(b)*c xabbbcy {1 5} {4 4} -i 21 - a(b)*c xacy {1 2} {-1 -1} -m 22 - a(b*)c xabbbcy abbbc bbb -m 23 - a(b*)c xacy ac "" -f 24 - a(b)+c xacy -m 25 - a(b)+c xabcy abc b -i 26 - a(b)+c xabbbcy {1 5} {4 4} -m 27 - a(b+)c xabbbcy abbbc bbb -i 28 Q "a(b){2,3}c" xabbbcy {1 5} {4 4} -i 29 Q "a(b){2,3}c" xabbcy {1 4} {3 3} -f 30 Q "a(b){2,3}c" xabcy -m 31 LP "\\y(\\w+)\\y" "-- abc-" "abc" "abc" -m 32 - a((b|c)d+)+ abacdbd acdbd bd b -m 33 N (.*).* abc abc abc -m 34 N (a*)* bc "" "" - +expectMatch 21.1 - a(b)c abc abc b +expectMatch 21.2 P a(?:b)c xabc abc +expectMatch 21.3 - a((b))c xabcy abc b b +expectMatch 21.4 P a(?:(b))c abcy abc b +expectMatch 21.5 P a((?:b))c abc abc b +expectMatch 21.6 P a(?:(?:b))c abc abc +expectIndices 21.7 Q "a(b){0}c" ac {0 1} {-1 -1} +expectMatch 21.8 - a(b)c(d)e abcde abcde b d +expectMatch 21.9 - (b)c(d)e bcde bcde b d +expectMatch 21.10 - a(b)(d)e abde abde b d +expectMatch 21.11 - a(b)c(d) abcd abcd b d +expectMatch 21.12 - (ab)(cd) xabcdy abcd ab cd +expectMatch 21.13 - a(b)?c xabcy abc b +expectIndices 21.14 - a(b)?c xacy {1 2} {-1 -1} +expectMatch 21.15 - a(b)?c(d)?e xabcdey abcde b d +expectIndices 21.16 - a(b)?c(d)?e xacdey {1 4} {-1 -1} {3 3} +expectIndices 21.17 - a(b)?c(d)?e xabcey {1 4} {2 2} {-1 -1} +expectIndices 21.18 - a(b)?c(d)?e xacey {1 3} {-1 -1} {-1 -1} +expectMatch 21.19 - a(b)*c xabcy abc b +expectIndices 21.20 - a(b)*c xabbbcy {1 5} {4 4} +expectIndices 21.21 - a(b)*c xacy {1 2} {-1 -1} +expectMatch 21.22 - a(b*)c xabbbcy abbbc bbb +expectMatch 21.23 - a(b*)c xacy ac "" +expectNomatch 21.24 - a(b)+c xacy +expectMatch 21.25 - a(b)+c xabcy abc b +expectIndices 21.26 - a(b)+c xabbbcy {1 5} {4 4} +expectMatch 21.27 - a(b+)c xabbbcy abbbc bbb +expectIndices 21.28 Q "a(b){2,3}c" xabbbcy {1 5} {4 4} +expectIndices 21.29 Q "a(b){2,3}c" xabbcy {1 4} {3 3} +expectNomatch 21.30 Q "a(b){2,3}c" xabcy +expectMatch 21.31 LP "\\y(\\w+)\\y" "-- abc-" "abc" "abc" +expectMatch 21.32 - a((b|c)d+)+ abacdbd acdbd bd b +expectMatch 21.33 N (.*).* abc abc abc +expectMatch 21.34 N (a*)* bc "" "" doing 22 "multicharacter collating elements" # again ugh -m 1 &+L {a[c]e} ace ace -f 2 &+IL {a[c]h} ach -m 3 &+L {a[[.ch.]]} ach ach -f 4 &+L {a[[.ch.]]} ace -m 5 &+L {a[c[.ch.]]} ac ac -m 6 &+L {a[c[.ch.]]} ace ac -m 7 &+L {a[c[.ch.]]} ache ach -f 8 &+L {a[^c]e} ace -m 9 &+L {a[^c]e} abe abe -m 10 &+L {a[^c]e} ache ache -f 11 &+L {a[^[.ch.]]} ach -m 12 &+L {a[^[.ch.]]} ace ac -m 13 &+L {a[^[.ch.]]} ac ac -m 14 &+L {a[^[.ch.]]} abe ab -f 15 &+L {a[^c[.ch.]]} ach -f 16 &+L {a[^c[.ch.]]} ace -f 17 &+L {a[^c[.ch.]]} ac -m 18 &+L {a[^c[.ch.]]} abe ab -m 19 &+L {a[^b]} ac ac -m 20 &+L {a[^b]} ace ac -m 21 &+L {a[^b]} ach ach -f 22 &+L {a[^b]} abe - +expectMatch 22.1 &+L {a[c]e} ace ace +expectNomatch 22.2 &+IL {a[c]h} ach +expectMatch 22.3 &+L {a[[.ch.]]} ach ach +expectNomatch 22.4 &+L {a[[.ch.]]} ace +expectMatch 22.5 &+L {a[c[.ch.]]} ac ac +expectMatch 22.6 &+L {a[c[.ch.]]} ace ac +expectMatch 22.7 &+L {a[c[.ch.]]} ache ach +expectNomatch 22.8 &+L {a[^c]e} ace +expectMatch 22.9 &+L {a[^c]e} abe abe +expectMatch 22.10 &+L {a[^c]e} ache ache +expectNomatch 22.11 &+L {a[^[.ch.]]} ach +expectMatch 22.12 &+L {a[^[.ch.]]} ace ac +expectMatch 22.13 &+L {a[^[.ch.]]} ac ac +expectMatch 22.14 &+L {a[^[.ch.]]} abe ab +expectNomatch 22.15 &+L {a[^c[.ch.]]} ach +expectNomatch 22.16 &+L {a[^c[.ch.]]} ace +expectNomatch 22.17 &+L {a[^c[.ch.]]} ac +expectMatch 22.18 &+L {a[^c[.ch.]]} abe ab +expectMatch 22.19 &+L {a[^b]} ac ac +expectMatch 22.20 &+L {a[^b]} ace ac +expectMatch 22.21 &+L {a[^b]} ach ach +expectNomatch 22.22 &+L {a[^b]} abe doing 23 "lookahead constraints" -m 1 HP a(?=b)b* ab ab -f 2 HP a(?=b)b* a -m 3 HP a(?=b)b*(?=c)c* abc abc -f 4 HP a(?=b)b*(?=c)c* ab -f 5 HP a(?!b)b* ab -m 6 HP a(?!b)b* a a -m 7 HP (?=b)b b b -f 8 HP (?=b)b a - +expectMatch 23.1 HP a(?=b)b* ab ab +expectNomatch 23.2 HP a(?=b)b* a +expectMatch 23.3 HP a(?=b)b*(?=c)c* abc abc +expectNomatch 23.4 HP a(?=b)b*(?=c)c* ab +expectNomatch 23.5 HP a(?!b)b* ab +expectMatch 23.6 HP a(?!b)b* a a +expectMatch 23.7 HP (?=b)b b b +expectNomatch 23.8 HP (?=b)b a doing 24 "non-greedy quantifiers" -m 1 PT ab+? abb ab -m 2 PT ab+?c abbc abbc -m 3 PT ab*? abb a -m 4 PT ab*?c abbc abbc -m 5 PT ab?? ab a -m 6 PT ab??c abc abc -m 7 PQT "ab{2,4}?" abbbb abb -m 8 PQT "ab{2,4}?c" abbbbc abbbbc -m 9 - 3z* 123zzzz456 3zzzz -m 10 PT 3z*? 123zzzz456 3 -m 11 - z*4 123zzzz456 zzzz4 -m 12 PT z*?4 123zzzz456 zzzz4 - +expectMatch 24.1 PT ab+? abb ab +expectMatch 24.2 PT ab+?c abbc abbc +expectMatch 24.3 PT ab*? abb a +expectMatch 24.4 PT ab*?c abbc abbc +expectMatch 24.5 PT ab?? ab a +expectMatch 24.6 PT ab??c abc abc +expectMatch 24.7 PQT "ab{2,4}?" abbbb abb +expectMatch 24.8 PQT "ab{2,4}?c" abbbbc abbbbc +expectMatch 24.9 - 3z* 123zzzz456 3zzzz +expectMatch 24.10 PT 3z*? 123zzzz456 3 +expectMatch 24.11 - z*4 123zzzz456 zzzz4 +expectMatch 24.12 PT z*?4 123zzzz456 zzzz4 doing 25 "mixed quantifiers" # this is very incomplete as yet # should include | -m 1 PNT {^(.*?)(a*)$} xyza xyza xyz a -m 2 PNT {^(.*?)(a*)$} xyzaa xyzaa xyz aa -m 3 PNT {^(.*?)(a*)$} xyz xyz xyz "" - +expectMatch 25.1 PNT {^(.*?)(a*)$} "xyza" xyza xyz a +expectMatch 25.2 PNT {^(.*?)(a*)$} "xyzaa" xyzaa xyz aa +expectMatch 25.3 PNT {^(.*?)(a*)$} "xyz" xyz xyz "" doing 26 "tricky cases" # attempts to trick the matcher into accepting a short match -m 1 - (week|wee)(night|knights) weeknights weeknights \ - wee knights -m 2 RP {a(bc*).*\1} abccbccb abccbccb b -m 3 - {a(b.[bc]*)+} abcbd abcbd bd - +expectMatch 26.1 - (week|wee)(night|knights) \ + "weeknights" weeknights wee knights +expectMatch 26.2 RP {a(bc*).*\1} abccbccb abccbccb b +expectMatch 26.3 - {a(b.[bc]*)+} abcbd abcbd bd doing 27 "implementation misc." # duplicate arcs are suppressed -m 1 P a(?:b|b)c abc abc +expectMatch 27.1 P a(?:b|b)c abc abc # make color/subcolor relationship go back and forth -m 2 & {[ab][ab][ab]} aba aba -m 3 & {[ab][ab][ab][ab][ab][ab][ab]} abababa abababa - +expectMatch 27.2 & {[ab][ab][ab]} aba aba +expectMatch 27.3 & {[ab][ab][ab][ab][ab][ab][ab]} \ + "abababa" abababa doing 28 "boundary busters etc." # color-descriptor allocation changes at 10 -m 1 & abcdefghijkl abcdefghijkl abcdefghijkl +expectMatch 28.1 & abcdefghijkl "abcdefghijkl" abcdefghijkl # so does arc allocation -m 2 P a(?:b|c|d|e|f|g|h|i|j|k|l|m)n agn agn +expectMatch 28.2 P a(?:b|c|d|e|f|g|h|i|j|k|l|m)n "agn" agn # subexpression tracking also at 10 -m 3 - a(((((((((((((b)))))))))))))c abc abc b b b b b b b b b b b b b +expectMatch 28.3 - a(((((((((((((b)))))))))))))c \ + "abc" abc b b b b b b b b b b b b b # state-set handling changes slightly at unsigned size (might be 64...) # (also stresses arc allocation) -m 4 Q "ab{1,100}c" abbc abbc -m 5 Q "ab{1,100}c" abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc \ +expectMatch 28.4 Q "ab{1,100}c" abbc abbc +expectMatch 28.5 Q "ab{1,100}c" \ + "abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc" \ abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc -m 6 Q "ab{1,100}c" \ - abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc \ +expectMatch 28.6 Q "ab{1,100}c" \ + "abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc"\ abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc # force small cache and bust it, several ways -m 7 LP {\w+abcdefgh} xyzabcdefgh xyzabcdefgh -m 8 %LP {\w+abcdefgh} xyzabcdefgh xyzabcdefgh -m 9 %LP {\w+abcdefghijklmnopqrst} xyzabcdefghijklmnopqrst \ - xyzabcdefghijklmnopqrst -i 10 %LP {\w+(abcdefgh)?} xyz {0 2} {-1 -1} -i 11 %LP {\w+(abcdefgh)?} xyzabcdefg {0 9} {-1 -1} -i 12 %LP {\w+(abcdefghijklmnopqrst)?} xyzabcdefghijklmnopqrs \ - {0 21} {-1 -1} - +expectMatch 28.7 LP {\w+abcdefgh} xyzabcdefgh xyzabcdefgh +expectMatch 28.8 %LP {\w+abcdefgh} xyzabcdefgh xyzabcdefgh +expectMatch 28.9 %LP {\w+abcdefghijklmnopqrst} \ + "xyzabcdefghijklmnopqrst" xyzabcdefghijklmnopqrst +expectIndices 28.10 %LP {\w+(abcdefgh)?} xyz {0 2} {-1 -1} +expectIndices 28.11 %LP {\w+(abcdefgh)?} xyzabcdefg {0 9} {-1 -1} +expectIndices 28.12 %LP {\w+(abcdefghijklmnopqrst)?} \ + "xyzabcdefghijklmnopqrs" {0 21} {-1 -1} doing 29 "incomplete matches" -p 1 t def abc {3 2} "" -p 2 t bcd abc {1 2} "" -p 3 t abc abab {0 3} "" -p 4 t abc abdab {3 4} "" -i 5 t abc abc {0 2} {0 2} -i 6 t abc xyabc {2 4} {2 4} -p 7 t abc+ xyab {2 3} "" -i 8 t abc+ xyabc {2 4} {2 4} -knownBug i 9 t abc+ xyabcd {2 4} {6 5} -i 10 t abc+ xyabcdd {2 4} {7 6} -p 11 tPT abc+? xyab {2 3} "" +expectPartial 29.1 t def abc {3 2} "" +expectPartial 29.2 t bcd abc {1 2} "" +expectPartial 29.3 t abc abab {0 3} "" +expectPartial 29.4 t abc abdab {3 4} "" +expectIndices 29.5 t abc abc {0 2} {0 2} +expectIndices 29.6 t abc xyabc {2 4} {2 4} +expectPartial 29.7 t abc+ xyab {2 3} "" +expectIndices 29.8 t abc+ xyabc {2 4} {2 4} +knownBug expectIndices 29.9 t abc+ xyabcd {2 4} {6 5} +expectIndices 29.10 t abc+ xyabcdd {2 4} {7 6} +expectPartial 29.11 tPT abc+? xyab {2 3} "" # the retain numbers in these two may look wrong, but they aren't -i 12 tPT abc+? xyabc {2 4} {5 4} -i 13 tPT abc+? xyabcc {2 4} {6 5} -i 14 tPT abc+? xyabcd {2 4} {6 5} -i 15 tPT abc+? xyabcdd {2 4} {7 6} -i 16 t abcd|bc xyabc {3 4} {2 4} -p 17 tn .*k "xx\nyyy" {3 5} "" +expectIndices 29.12 tPT abc+? xyabc {2 4} {5 4} +expectIndices 29.13 tPT abc+? xyabcc {2 4} {6 5} +expectIndices 29.14 tPT abc+? xyabcd {2 4} {6 5} +expectIndices 29.15 tPT abc+? xyabcdd {2 4} {7 6} +expectIndices 29.16 t abcd|bc xyabc {3 4} {2 4} +expectPartial 29.17 tn .*k "xx\nyyy" {3 5} "" doing 30 "misc. oddities and old bugs" -e 1 & *** BADRPT -m 2 N a?b* abb abb -m 3 N a?b* bb bb -m 4 & a*b aab aab -m 5 & ^a*b aaaab aaaab -m 6 &M {[0-6][1-2][0-3][0-6][1-6][0-6]} 010010 010010 +expectError 30.1 & *** BADRPT +expectMatch 30.2 N a?b* abb abb +expectMatch 30.3 N a?b* bb bb +expectMatch 30.4 & a*b aab aab +expectMatch 30.5 & ^a*b aaaab aaaab +expectMatch 30.6 &M {[0-6][1-2][0-3][0-6][1-6][0-6]} \ + "010010" 010010 # temporary REG_BOSONLY kludge -m 7 s abc abcd abc -f 8 s abc xabcd +expectMatch 30.7 s abc abcd abc +expectNomatch 30.8 s abc xabcd # back to normal stuff -m 9 HLP {(?n)^(?![t#])\S+} "tk\n\n#\n#\nit0" it0 +expectMatch 30.9 HLP {(?n)^(?![t#])\S+} \ + "tk\n\n#\n#\nit0" it0 -# flush any leftover complaints -doing 0 "flush" +# Now for tests *not* written by Henry Spencer + +namespace import -force ::tcltest::test # Tests resulting from bugs reported by users test reg-31.1 {[[:xdigit:]] behaves correctly when followed by [[:space:]]} { @@ -1000,15 +947,13 @@ test reg-32.1 {canmatch functionality -- at end} testregexp { set res [testregexp -xflags -- c $pat $line resvar] lappend res $resvar } {0 7} - test reg-32.2 {canmatch functionality -- at end} testregexp { set pat {s%$} set line "asd asd" # can only match after the end of the string - set res [testregexp -xflags -- c $pat $line resvar] + set res [testregexp -xflags -- c $pat $line resvar] lappend res $resvar } {0 7} - test reg-32.3 {canmatch functionality -- not last char} testregexp { set pat {[^d]%$} set line "asd asd" @@ -1016,7 +961,6 @@ test reg-32.3 {canmatch functionality -- not last char} testregexp { set res [testregexp -xflags -- c $pat $line resvar] lappend res $resvar } {0 7} - test reg-32.3.1 {canmatch functionality -- no match} testregexp { set pat {\Zx} set line "asd asd" @@ -1024,56 +968,49 @@ test reg-32.3.1 {canmatch functionality -- no match} testregexp { set res [testregexp -xflags -- c $pat $line resvar] lappend res $resvar } {0 -1} - -test reg-32.4 {canmatch functionality -- last char} {knownBug} { +test reg-32.4 {canmatch functionality -- last char} {knownBug testregexp} { set pat {.x} set line "asd asd" # can match the last char, if followed by x set res [testregexp -xflags -- c $pat $line resvar] lappend res $resvar } {0 6} - -test reg-32.4.1 {canmatch functionality -- last char} {knownBug} { +test reg-32.4.1 {canmatch functionality -- last char} {knownBug testregexp} { set pat {.x$} set line "asd asd" # can match the last char, if followed by x set res [testregexp -xflags -- c $pat $line resvar] lappend res $resvar } {0 6} - -test reg-32.5 {canmatch functionality -- last char} {knownBug} { +test reg-32.5 {canmatch functionality -- last char} {knownBug testregexp} { set pat {.[^d]x$} set line "asd asd" # can match the last char, if followed by not-d and x. set res [testregexp -xflags -- c $pat $line resvar] lappend res $resvar } {0 6} - -test reg-32.6 {canmatch functionality -- last char} {knownBug} { +test reg-32.6 {canmatch functionality -- last char} {knownBug testregexp} { set pat {[^a]%[^\r\n]*$} set line "asd asd" # can match at the final d, if '%' follows set res [testregexp -xflags -- c $pat $line resvar] lappend res $resvar } {0 6} - -test reg-32.7 {canmatch functionality -- last char} {knownBug} { +test reg-32.7 {canmatch functionality -- last char} {knownBug testregexp} { set pat {[^a]%$} set line "asd asd" # can match at the final d, if '%' follows set res [testregexp -xflags -- c $pat $line resvar] lappend res $resvar } {0 6} - -test reg-32.8 {canmatch functionality -- last char} {knownBug} { +test reg-32.8 {canmatch functionality -- last char} {knownBug testregexp} { set pat {[^x]%$} set line "asd asd" # can match at the final d, if '%' follows set res [testregexp -xflags -- c $pat $line resvar] lappend res $resvar } {0 6} - -test reg-32.9 {canmatch functionality -- more complex case} {knownBug} { +test reg-32.9 {canmatch functionality -- more complex case} {knownBug testregexp} { set pat {((\B\B|\Bh+line)[ \t]*|[^\B]%[^\r\n]*)$} set line "asd asd" # can match at the final d, if '%' follows @@ -1086,61 +1023,56 @@ test reg-32.9 {canmatch functionality -- more complex case} {knownBug} { test reg-33.1 {Bug 230589} { regexp {[ ]*(^|[^%])%V} "*%V2" m s } 1 - test reg-33.2 {Bug 504785} { regexp -inline {([^_.]*)([^.]*)\.(..)(.).*} bbcos_001_c01.q1la } {bbcos_001_c01.q1la bbcos _001_c01 q1 l} - test reg-33.3 {Bug 505048} { regexp {\A\s*[^<]*\s*<([^>]+)>} a<a> } 1 - test reg-33.4 {Bug 505048} { regexp {\A\s*([^b]*)b} ab } 1 - test reg-33.5 {Bug 505048} { regexp {\A\s*[^b]*(b)} ab } 1 - test reg-33.6 {Bug 505048} { regexp {\A(\s*)[^b]*(b)} ab } 1 - test reg-33.7 {Bug 505048} { regexp {\A\s*[^b]*b} ab } 1 - test reg-33.8 {Bug 505048} { regexp -inline {\A\s*[^b]*b} ab } ab - test reg-33.9 {Bug 505048} { regexp -indices -inline {\A\s*[^b]*b} ab } {{0 1}} - -test reg-33.10 {Bug 840258} { +test reg-33.10 {Bug 840258} -body { regsub {(^|\n)+\.*b} \n.b {} tmp -} 1 - -test reg-33.11 {Bug 840258} { +} -cleanup { + unset tmp +} -result 1 +test reg-33.11 {Bug 840258} -body { regsub {(^|[\n\r]+)\.*\?<.*?(\n|\r)+} \ - "TQ\r\n.?<5000267>Test already stopped\r\n" {} tmp -} 1 - + "TQ\r\n.?<5000267>Test already stopped\r\n" {} tmp +} -cleanup { + unset tmp +} -result 1 test reg-33.12 {Bug 1810264 - bad read} { regexp {\3161573148} {\3161573148} } 0 test reg-33.13 {Bug 1810264 - infinite loop} { regexp {($|^)*} {x} } 1 -test reg-33.14 {Bug 1810264 - super-expensive expression} { - set start [clock seconds] - regexp {(x{100}){100}$y} {x} - set time [expr {[clock seconds] - $start}] - expr {$time < 5 ? "ok" : "Complex RE took $time seconds - bad!"} -} ok - +# Some environments have small default stack sizes. [Bug 1905562] +test reg-33.14 {Bug 1810264 - super-expensive expression} nonPortable { + regexp {(x{200}){200}$y} {x} +} 0 + # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/regexp.test b/tests/regexp.test index 70ee47e..b20349f 100644 --- a/tests/regexp.test +++ b/tests/regexp.test @@ -16,6 +16,8 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } +testConstraint exec [llength [info commands exec]] + catch {unset foo} test regexp-1.1 {basic regexp operation} { regexp ab*c abbbc @@ -42,6 +44,31 @@ test regexp-1.7 {regexp utf compliance} { list [string compare $foo $bar] [regexp 4 $bar] } {0 0} +test regexp-1.8 {regexp ***= metasyntax} { + regexp -- "***=o" "aeiou" +} 1 +test regexp-1.9 {regexp ***= metasyntax} { + set string "aeiou" + regexp -- "***=o" $string +} 1 +test regexp-1.10 {regexp ***= metasyntax} { + set string "aeiou" + set re "***=o" + regexp -- $re $string +} 1 +test regexp-1.11 {regexp ***= metasyntax} { + regexp -- "***=y" "aeiou" +} 0 +test regexp-1.12 {regexp ***= metasyntax} { + set string "aeiou" + regexp -- "***=y" $string +} 0 +test regexp-1.13 {regexp ***= metasyntax} { + set string "aeiou" + set re "***=y" + regexp -- $re $string +} 0 + test regexp-2.1 {getting substrings back from regexp} { set foo {} list [regexp ab*c abbbbc foo] $foo @@ -218,7 +245,7 @@ test regexp-6.8 {regexp errors} { } {1 {couldn't set variable "f1(f2)"}} test regexp-6.9 {regexp errors, -start bad int check} { list [catch {regexp -start bogus {^$} {}} msg] $msg -} {1 {expected integer but got "bogus"}} +} {1 {bad index "bogus": must be integer?[+-]integer? or end?[+-]integer?}} test regexp-7.1 {basic regsub operation} { list [regsub aa+ xaxaaaxaa 111&222 foo] $foo @@ -375,7 +402,7 @@ test regexp-11.7 {regsub errors} { } {1 {couldn't set variable "f1(f2)"}} test regexp-11.8 {regsub errors, -start bad int check} { list [catch {regsub -start bogus pattern string rep var} msg] $msg -} {1 {expected integer but got "bogus"}} +} {1 {bad index "bogus": must be integer?[+-]integer? or end?[+-]integer?}} test regexp-11.9 {regsub without final variable name returns value} { regsub b abaca X } {aXaca} @@ -430,8 +457,6 @@ test regexp-14.2 {CompileRegexp: regexp cache, different flags} { append x *a regexp -nocase $x bbba } 1 - -testConstraint exec [llength [info commands exec]] test regexp-14.3 {CompileRegexp: regexp cache, empty regexp and empty cache} -constraints { exec } -setup { @@ -465,6 +490,20 @@ test regexp-15.5 {regexp -start, over end of string} { test regexp-15.6 {regexp -start, loss of ^$ behavior} { list [regexp -start 2 {^$} {}] } {0} +test regexp-15.7 {regexp -start, double option} { + regexp -start 2 -start 0 a abc +} 1 +test regexp-15.8 {regexp -start, double option} { + regexp -start 0 -start 2 a abc +} 0 +test regexp-15.9 {regexp -start, end relative index} { + catch {unset x} + list [regexp -start end {\d} 1abc2de3 x] [info exists x] +} {0 0} +test regexp-15.10 {regexp -start, end relative index} { + catch {unset x} + list [regexp -start end-1 {\d} 1abc2de3 x] [info exists x] $x +} {1 1 3} test regexp-16.1 {regsub -start} { catch {unset x} @@ -483,6 +522,18 @@ test regexp-16.4 {regsub -start, \A behavior} { lappend out [regsub -start 0 -all {\A(\w)} {abcde} {/\1} x] $x lappend out [regsub -start 2 -all {\A(\w)} {abcde} {/\1} x] $x } {5 /a/b/c/d/e 3 ab/c/d/e} +test regexp-16.5 {regsub -start, double option} { + list [regsub -start 2 -start 0 a abc c x] $x +} {1 cbc} +test regexp-16.6 {regsub -start, double option} { + list [regsub -start 0 -start 2 a abc c x] $x +} {0 abc} +test regexp-16.7 {regexp -start, end relative index} { + list [regsub -start end a aaa b x] $x +} {0 aaa} +test regexp-16.8 {regexp -start, end relative index} { + list [regsub -start end-1 a aaa b x] $x +} {1 aab} test regexp-17.1 {regexp -inline} { regexp -inline b ababa @@ -569,7 +620,7 @@ test regexp-20.1 {regsub shared object shimmering} { set c abcdefghijklmnopqurstuvwxyz0123456789 regsub $a $c $b d list $d [string length $d] [string bytelength $d] -} [list abcdefghijklmnopqurstuvwxyz0123456789 37 37] +} {abcdefghijklmnopqurstuvwxyz0123456789 37 37} test regexp-20.2 {regsub shared object shimmering with -about} { eval regexp -about abc } {0 {}} @@ -577,60 +628,291 @@ test regexp-20.2 {regsub shared object shimmering with -about} { test regexp-21.1 {regsub works with empty string} { regsub -- ^ {} foo } {foo} - test regexp-21.2 {regsub works with empty string} { regsub -- \$ {} foo } {foo} - test regexp-21.3 {regsub works with empty string offset} { regsub -start 0 -- ^ {} foo } {foo} - test regexp-21.4 {regsub works with empty string offset} { regsub -start 0 -- \$ {} foo } {foo} - test regexp-21.5 {regsub works with empty string offset} { regsub -start 3 -- \$ {123} foo } {123foo} - test regexp-21.6 {regexp works with empty string} { regexp -- ^ {} } {1} - test regexp-21.7 {regexp works with empty string} { regexp -start 0 -- ^ {} } {1} - test regexp-21.8 {regexp works with empty string offset} { regexp -start 3 -- ^ {123} } {0} - test regexp-21.9 {regexp works with empty string offset} { regexp -start 3 -- \$ {123} } {1} - test regexp-21.10 {multiple matches handle newlines} { regsub -all -lineanchor -- {^#[^\n]*\n} "#one\n#two\n#three\n" foo\n } "foo\nfoo\nfoo\n" - test regexp-21.11 {multiple matches handle newlines} { regsub -all -line -- ^ "a\nb\nc" \# } "\#a\n\#b\n\#c" - test regexp-21.12 {multiple matches handle newlines} { regsub -all -line -- ^ "\n\n" \# } "\#\n\#\n\#" - test regexp-21.13 {multiple matches handle newlines} { regexp -all -inline -indices -line -- ^ "a\nb\nc" } {{0 -1} {2 1} {4 3}} - test regexp-22.1 {Bug 1810038} { regexp ($|^X)* {} } 1 +test regexp-22.2 {regexp compile and backrefs, Bug 1857126} { + regexp -- {([bc])\1} bb +} 1 +test regexp-23.1 {regexp -all and -line} { + set string "" + list \ + [regexp -all -inline -indices -line -- {^} $string] \ + [regexp -all -inline -indices -line -- {^$} $string] \ + [regexp -all -inline -indices -line -- {$} $string] +} {{{0 -1}} {{0 -1}} {{0 -1}}} +test regexp-23.2 {regexp -all and -line} { + set string "\n" + list \ + [regexp -all -inline -indices -line -- {^} $string] \ + [regexp -all -inline -indices -line -- {^$} $string] \ + [regexp -all -inline -indices -line -- {$} $string] +} {{{0 -1}} {{0 -1}} {{0 -1}}} +test regexp-23.3 {regexp -all and -line} { + set string "\n\n" + list \ + [regexp -all -inline -indices -line -- {^} $string] \ + [regexp -all -inline -indices -line -- {^$} $string] \ + [regexp -all -inline -indices -line -- {$} $string] +} {{{0 -1} {1 0}} {{0 -1} {1 0}} {{0 -1} {1 0}}} +test regexp-23.4 {regexp -all and -line} { + set string "a" + list \ + [regexp -all -inline -indices -line -- {^} $string] \ + [regexp -all -inline -indices -line -- {^.*$} $string] \ + [regexp -all -inline -indices -line -- {$} $string] +} {{{0 -1}} {{0 0}} {{1 0}}} +test regexp-23.5 {regexp -all and -line} {knownBug} { + set string "a\n" + list \ + [regexp -all -inline -indices -line -- {^} $string] \ + [regexp -all -inline -indices -line -- {^.*$} $string] \ + [regexp -all -inline -indices -line -- {$} $string] +} {{{0 -1} {2 1}} {{0 0} {2 1}} {{1 0} {2 1}}} +test regexp-23.6 {regexp -all and -line} { + set string "\na" + list \ + [regexp -all -inline -indices -line -- {^} $string] \ + [regexp -all -inline -indices -line -- {^.*$} $string] \ + [regexp -all -inline -indices -line -- {$} $string] +} {{{0 -1} {1 0}} {{0 -1} {1 1}} {{0 -1} {2 1}}} +test regexp-23.7 {regexp -all and -line} {knownBug} { + set string "ab\n" + list \ + [regexp -all -inline -indices -line -- {^} $string] \ + [regexp -all -inline -indices -line -- {^.*$} $string] \ + [regexp -all -inline -indices -line -- {$} $string] +} {{{0 -1} {3 2}} {{0 1} {3 2}} {{2 1} {3 2}}} +test regexp-23.8 {regexp -all and -line} { + set string "a\nb" + list \ + [regexp -all -inline -indices -line -- {^} $string] \ + [regexp -all -inline -indices -line -- {^.*$} $string] \ + [regexp -all -inline -indices -line -- {$} $string] +} {{{0 -1} {2 1}} {{0 0} {2 2}} {{1 0} {3 2}}} +test regexp-23.9 {regexp -all and -line} {knownBug} { + set string "a\nb\n" + list \ + [regexp -all -inline -indices -line -- {^} $string] \ + [regexp -all -inline -indices -line -- {^.*$} $string] \ + [regexp -all -inline -indices -line -- {$} $string] +} {{{0 -1} {2 1} {4 3}} {{0 0} {2 2} {4 3}} {{1 0} {3 2} {4 3}}} +test regexp-23.10 {regexp -all and -line} { + set string "a\nb\nc" + list \ + [regexp -all -inline -indices -line -- {^} $string] \ + [regexp -all -inline -indices -line -- {^.*$} $string] \ + [regexp -all -inline -indices -line -- {$} $string] +} {{{0 -1} {2 1} {4 3}} {{0 0} {2 2} {4 4}} {{1 0} {3 2} {5 4}}} +test regexp-23.11 {regexp -all and -line} { + regexp -all -inline -indices -line -- {b} "abb\nb" +} {{1 1} {2 2} {4 4}} + +test regexp-24.1 {regsub -all and -line} { + foreach {v1 v2 v3} {{} {} {}} {} + set string "" + list \ + [regsub -line -all {^} $string {<&>} v1] $v1 \ + [regsub -line -all {^$} $string {<&>} v2] $v2 \ + [regsub -line -all {$} $string {<&>} v3] $v3 +} {1 <> 1 <> 1 <>} +test regexp-24.2 {regsub -all and -line} { + foreach {v1 v2 v3} {{} {} {}} {} + set string "\n" + list \ + [regsub -line -all {^} $string {<&>} v1] $v1 \ + [regsub -line -all {^$} $string {<&>} v2] $v2 \ + [regsub -line -all {$} $string {<&>} v3] $v3 +} "2 {<>\n<>} 2 {<>\n<>} 2 {<>\n<>}" +test regexp-24.3 {regsub -all and -line} { + foreach {v1 v2 v3} {{} {} {}} {} + set string "\n\n" + list \ + [regsub -line -all {^} $string {<&>} v1] $v1 \ + [regsub -line -all {^$} $string {<&>} v2] $v2 \ + [regsub -line -all {$} $string {<&>} v3] $v3 +} "3 {<>\n<>\n<>} 3 {<>\n<>\n<>} 3 {<>\n<>\n<>}" +test regexp-24.4 {regsub -all and -line} { + foreach {v1 v2 v3} {{} {} {}} {} + set string "a" + list \ + [regsub -line -all {^} $string {<&>} v1] $v1 \ + [regsub -line -all {^.*$} $string {<&>} v2] $v2 \ + [regsub -line -all {$} $string {<&>} v3] $v3 +} {1 <>a 1 <a> 1 a<>} +test regexp-24.5 {regsub -all and -line} { + foreach {v1 v2 v3} {{} {} {}} {} + set string "a\n" + list \ + [regsub -line -all {^} $string {<&>} v1] $v1 \ + [regsub -line -all {^.*$} $string {<&>} v2] $v2 \ + [regsub -line -all {$} $string {<&>} v3] $v3 +} "2 {<>a\n<>} 2 {<a>\n<>} 2 {a<>\n<>}" +test regexp-24.6 {regsub -all and -line} { + foreach {v1 v2 v3} {{} {} {}} {} + set string "\na" + list \ + [regsub -line -all {^} $string {<&>} v1] $v1 \ + [regsub -line -all {^.*$} $string {<&>} v2] $v2 \ + [regsub -line -all {$} $string {<&>} v3] $v3 +} "2 {<>\n<>a} 2 {<>\n<a>} 2 {<>\na<>}" +test regexp-24.7 {regsub -all and -line} { + foreach {v1 v2 v3} {{} {} {}} {} + set string "ab\n" + list \ + [regsub -line -all {^} $string {<&>} v1] $v1 \ + [regsub -line -all {^.*$} $string {<&>} v2] $v2 \ + [regsub -line -all {$} $string {<&>} v3] $v3 +} "2 {<>ab\n<>} 2 {<ab>\n<>} 2 {ab<>\n<>}" +test regexp-24.8 {regsub -all and -line} { + foreach {v1 v2 v3} {{} {} {}} {} + set string "a\nb" + list \ + [regsub -line -all {^} $string {<&>} v1] $v1 \ + [regsub -line -all {^.*$} $string {<&>} v2] $v2 \ + [regsub -line -all {$} $string {<&>} v3] $v3 +} "2 {<>a\n<>b} 2 {<a>\n<b>} 2 {a<>\nb<>}" +test regexp-24.9 {regsub -all and -line} { + foreach {v1 v2 v3} {{} {} {}} {} + set string "a\nb\n" + list \ + [regsub -line -all {^} $string {<&>} v1] $v1 \ + [regsub -line -all {^.*$} $string {<&>} v2] $v2 \ + [regsub -line -all {$} $string {<&>} v3] $v3 +} "3 {<>a\n<>b\n<>} 3 {<a>\n<b>\n<>} 3 {a<>\nb<>\n<>}" +test regexp-24.10 {regsub -all and -line} { + foreach {v1 v2 v3} {{} {} {}} {} + set string "a\nb\nc" + list \ + [regsub -line -all {^} $string {<&>} v1] $v1 \ + [regsub -line -all {^.*$} $string {<&>} v2] $v2 \ + [regsub -line -all {$} $string {<&>} v3] $v3 +} "3 {<>a\n<>b\n<>c} 3 {<a>\n<b>\n<c>} 3 {a<>\nb<>\nc<>}" +test regexp-24.11 {regsub -all and -line} { + regsub -line -all {b} "abb\nb" {<&>} +} "a<b><b>\n<b>" + +test regexp-25.1 {regexp without -line option} { + set foo "" + list [regexp {a.*b} "dabc\naxyb\n" foo] $foo +} "1 {abc\naxyb}" +test regexp-25.2 {regexp without -line option} { + set foo "" + list [regexp {^a.*b$} "dabc\naxyb\n" foo] $foo +} {0 {}} +test regexp-25.3 {regexp with -line option} { + set foo "" + list [regexp -line {^a.*b$} "dabc\naxyb\n" foo] $foo +} {1 axyb} +test regexp-25.4 {regexp with -line option} { + set foo "" + list [regexp -line {^a.*b$} "dabc\naxyb\nxb" foo] $foo +} {1 axyb} +test regexp-25.5 {regexp without -line option} { + set foo "" + list [regexp {^a.*b$} "dabc\naxyb\nxb" foo] $foo +} {0 {}} +test regexp-25.6 {regexp without -line option} { + set foo "" + list [regexp {a.*b$} "dabc\naxyb\nxb" foo] $foo +} "1 {abc\naxyb\nxb}" +test regexp-25.7 {regexp with -lineanchor option} { + set foo "" + list [regexp -lineanchor {^a.*b$} "dabc\naxyb\nxb" foo] $foo +} "1 {axyb\nxb}" +test regexp-25.8 {regexp with -lineanchor and -linestop option} { + set foo "" + list [regexp -lineanchor -linestop {^a.*b$} "dabc\naxyb\nxb" foo] $foo +} {1 axyb} +test regexp-25.9 {regexp with -linestop option} { + set foo "" + list [regexp -linestop {a.*b} "ab\naxyb\nxb" foo] $foo +} {1 ab} + +test regexp-26.1 {matches start of line 1 time} { + regexp -all -inline -- {^a+} "aab\naaa" +} {aa} +test regexp-26.2 {matches start of line(s) 2 times} { + regexp -all -inline -line -- {^a+} "aab\naaa" +} {aa aaa} +test regexp-26.3 {effect of -line -all and -start} { + list \ + [regexp -all -inline -line -start 0 -- {^a+} "aab\naaa"] \ + [regexp -all -inline -line -start 1 -- {^a+} "aab\naaa"] \ + [regexp -all -inline -line -start 3 -- {^a+} "aab\naaa"] \ + [regexp -all -inline -line -start 4 -- {^a+} "aab\naaa"] \ +} {{aa aaa} aaa aaa aaa} +test regexp-26.5 {match length 0, match length 1} { + regexp -all -inline -line -- {^b*} "a\nb" +} {{} b} +test regexp-26.6 {non reporting capture group} { + regexp -all -inline -line -- {^(?:a+|b)} "aab\naaa" +} {aa aaa} +test regexp-26.7 {Tcl bug 2826551: -line sensitive regexp and -start} { + set match1 {} + set match2 {} + list \ + [regexp -start 0 -indices -line {^a} "\nab" match1] $match1 \ + [regexp -start 1 -indices -line {^a} "\nab" match2] $match2 +} {1 {1 1} 1 {1 1}} +test regexp-26.8 {Tcl bug 2826551: diff regexp with -line option} { + set data "@1\n2\n+3\n@4\n-5\n+6\n7\n@8\n9\n" + regexp -all -inline -line {^@.*\n(?:[^@].*\n?)*} $data +} "{@1\n2\n+3\n} {@4\n-5\n+6\n7\n} {@8\n9\n}" +test regexp-26.9 {Tcl bug 2826551: diff regexp with embedded -line option} { + set data "@1\n2\n+3\n@4\n-5\n+6\n7\n@8\n9\n" + regexp -all -inline {(?n)^@.*\n(?:[^@].*\n?)*} $data +} "{@1\n2\n+3\n} {@4\n-5\n+6\n7\n} {@8\n9\n}" +test regexp-26.10 {regexp with -line option} { + regexp -all -inline -line -- {a*} "a\n" +} {a {}} +test regexp-26.11 {regexp without -line option} { + regexp -all -inline -- {a*} "a\n" +} {a {}} +test regexp-26.12 {regexp with -line option} { + regexp -all -inline -line -- {a*} "b\n" +} {{} {}} +test regexp-26.13 {regexp without -line option} { + regexp -all -inline -- {a*} "b\n" +} {{} {}} # cleanup ::tcltest::cleanupTests diff --git a/tests/regexpComp.test b/tests/regexpComp.test index c8ad004..e927ca2 100644 --- a/tests/regexpComp.test +++ b/tests/regexpComp.test @@ -41,7 +41,7 @@ test regexpComp-1.2 {basic regexp operation} { } } 1 test regexpComp-1.3 {basic regexp operation} { - evalInProc { + evalInProc { regexp ab*c ab } } 0 @@ -67,6 +67,64 @@ test regexpComp-1.7 {regexp utf compliance} { } } {0 0} +test regexpComp-1.8 {regexp ***= metasyntax} { + evalInProc { + regexp -- "***=o" "aeiou" + } +} 1 +test regexpComp-1.9 {regexp ***= metasyntax} { + evalInProc { + set string "aeiou" + regexp -- "***=o" $string + } +} 1 +test regexpComp-1.10 {regexp ***= metasyntax} { + evalInProc { + set string "aeiou" + set re "***=o" + regexp -- $re $string + } +} 1 +test regexpComp-1.11 {regexp ***= metasyntax} { + evalInProc { + regexp -- "***=y" "aeiou" + } +} 0 +test regexpComp-1.12 {regexp ***= metasyntax} { + evalInProc { + set string "aeiou" + regexp -- "***=y" $string + } +} 0 +test regexpComp-1.13 {regexp ***= metasyntax} { + evalInProc { + set string "aeiou" + set re "***=y" + regexp -- $re $string + } +} 0 +test regexpComp-1.14 {regexp ***= metasyntax} { + evalInProc { + set string "aeiou" + set re "***=e*o" + regexp -- $re $string + } +} 0 +test regexpComp-1.15 {regexp ***= metasyntax} { + evalInProc { + set string "ae*ou" + set re "***=e*o" + regexp -- $re $string + } +} 1 +test regexpComp-1.16 {regexp ***= metasyntax} { + evalInProc { + set string {ae*[o]?ua} + set re {***=e*[o]?u} + regexp -- $re $string + } +} 1 + test regexpComp-2.1 {getting substrings back from regexp} { evalInProc { set foo {} @@ -299,7 +357,7 @@ test regexpComp-6.9 {regexp errors, -start bad int check} { evalInProc { list [catch {regexp -start bogus {^$} {}} msg] $msg } -} {1 {expected integer but got "bogus"}} +} {1 {bad index "bogus": must be integer?[+-]integer? or end?[+-]integer?}} test regexpComp-7.1 {basic regsub operation} { evalInProc { @@ -540,7 +598,7 @@ test regexpComp-11.8 {regsub errors, -start bad int check} { evalInProc { list [catch {regsub -start bogus pattern string rep var} msg] $msg } -} {1 {expected integer but got "bogus"}} +} {1 {bad index "bogus": must be integer?[+-]integer? or end?[+-]integer?}} # This test crashes on the Mac unless you increase the Stack Space to about 1 # Meg. This is probably bigger than most users want... @@ -800,6 +858,18 @@ test regexpComp-21.11 {regexp command compiling tests} { } } {0 {}} +test regexpComp-22.0.1 {Bug 1810038} { + evalInProc { + regexp ($|^X)* {} + } +} 1 + +test regexpComp-22.0.2 {regexp compile and backrefs, Bug 1857126} { + evalInProc { + regexp -- {([bc])\1} bb + } +} 1 + set i 0 foreach {str exp result} { foo ^foo 1 @@ -820,6 +890,98 @@ foreach {str exp result} { [subst {evalInProc {set a "$str"; regexp {$exp} \$a}}] $result } +set i 0 +foreach {str exp result} { + foo ^foo 1 + foobar ^foobar$ 1 + foobar bar$ 1 + foobar ^$ 0 + "" ^$ 1 + anything $ 1 + anything ^.*$ 1 + anything ^.*a$ 0 + anything ^.*a.*$ 1 + anything ^.*.*$ 1 + anything ^.*..*$ 1 + anything ^.*b$ 0 + anything ^a.*$ 1 +} { + test regexpComp-23.[incr i] {regexp command compiling tests INST_REGEXP} \ + [subst {evalInProc {set a "$str"; set re "$exp"; regexp \$re \$a}}] $result +} + +test regexpComp-24.1 {regexp command compiling tests} { + evalInProc { + set re foo + regexp -nocase $re bar + } +} 0 +test regexpComp-24.2 {regexp command compiling tests} { + evalInProc { + set re {^foo$} + regexp $re dogfood + } +} 0 +test regexpComp-24.3 {regexp command compiling tests} { + evalInProc { + set a foo + set re {^foo$} + regexp $re $a + } +} 1 +test regexpComp-24.4 {regexp command compiling tests} { + evalInProc { + set re foo + regexp $re dogfood + } +} 1 +test regexpComp-24.5 {regexp command compiling tests} { + evalInProc { + set re FOO + regexp -nocase $re dogfod + } +} 0 +test regexpComp-24.6 {regexp command compiling tests} { + evalInProc { + set re foo + regexp -n $re dogfoOd + } +} 1 +test regexpComp-24.7 {regexp command compiling tests} { + evalInProc { + set re FoO + regexp -no -- $re dogfood + } +} 1 +test regexpComp-24.8 {regexp command compiling tests} { + evalInProc { + set re foo + regexp -- $re dogfod + } +} 0 +test regexpComp-24.9 {regexp command compiling tests} { + evalInProc { + set re "(" + list [catch {regexp -- $re dogfod} msg] $msg + } +} {1 {couldn't compile regular expression pattern: parentheses () not balanced}} +test regexpComp-24.10 {regexp command compiling tests} { + # Bug 1902436 - last * escaped + evalInProc { + set text {this is *bold* !} + set re {\*bold\*} + regexp -- $re $text + } +} 1 +test regexpComp-24.11 {regexp command compiling tests} { + # Bug 1902436 - last * escaped + evalInProc { + set text {this is *bold* !} + set re {\*bold\*.*!} + regexp -- $re $text + } +} 1 + # cleanup ::tcltest::cleanupTests return diff --git a/tests/registry.test b/tests/registry.test index 85b4f42..cbca4fd 100644 --- a/tests/registry.test +++ b/tests/registry.test @@ -15,137 +15,135 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -if {$tcl_platform(platform) == "windows"} { - if [catch { - set lib [lindex [glob -directory [file join [pwd] [file dirname \ - [info nameofexecutable]]] tclreg*.dll] 0] - load $lib registry - }] { - puts "Unable to find the registry package. Skipping registry tests." - return +testConstraint reg 0 +if {[testConstraint win]} { + if {![catch { + ::tcltest::loadTestedCommands + package require registry + }]} { + testConstraint reg 1 } } # determine the current locale -testConstraint english [expr {[llength [info commands testlocale]] - && [string equal [testlocale all ""] "English_United States.1252"] +testConstraint english [expr { + [llength [info commands testlocale]] + && [string match "English*" [testlocale all ""]] }] -set hostname [info hostname] - -test registry-1.1 {argument parsing for registry command} {pcOnly} { +test registry-1.1 {argument parsing for registry command} {win reg} { list [catch {registry} msg] $msg } {1 {wrong # args: should be "registry option ?arg arg ...?"}} -test registry-1.2 {argument parsing for registry command} {pcOnly} { +test registry-1.2 {argument parsing for registry command} {win reg} { list [catch {registry foo} msg] $msg } {1 {bad option "foo": must be broadcast, delete, get, keys, set, type, or values}} -test registry-1.3 {argument parsing for registry command} {pcOnly} { +test registry-1.3 {argument parsing for registry command} {win reg} { list [catch {registry d} msg] $msg } {1 {wrong # args: should be "registry delete keyName ?valueName?"}} -test registry-1.4 {argument parsing for registry command} {pcOnly} { +test registry-1.4 {argument parsing for registry command} {win reg} { list [catch {registry delete} msg] $msg } {1 {wrong # args: should be "registry delete keyName ?valueName?"}} -test registry-1.5 {argument parsing for registry command} {pcOnly} { +test registry-1.5 {argument parsing for registry command} {win reg} { list [catch {registry delete foo bar baz} msg] $msg } {1 {wrong # args: should be "registry delete keyName ?valueName?"}} -test registry-1.6 {argument parsing for registry command} {pcOnly} { +test registry-1.6 {argument parsing for registry command} {win reg} { list [catch {registry g} msg] $msg } {1 {wrong # args: should be "registry get keyName valueName"}} -test registry-1.7 {argument parsing for registry command} {pcOnly} { +test registry-1.7 {argument parsing for registry command} {win reg} { list [catch {registry get} msg] $msg } {1 {wrong # args: should be "registry get keyName valueName"}} -test registry-1.8 {argument parsing for registry command} {pcOnly} { +test registry-1.8 {argument parsing for registry command} {win reg} { list [catch {registry get foo} msg] $msg } {1 {wrong # args: should be "registry get keyName valueName"}} -test registry-1.9 {argument parsing for registry command} {pcOnly} { +test registry-1.9 {argument parsing for registry command} {win reg} { list [catch {registry get foo bar baz} msg] $msg } {1 {wrong # args: should be "registry get keyName valueName"}} -test registry-1.10 {argument parsing for registry command} {pcOnly} { +test registry-1.10 {argument parsing for registry command} {win reg} { list [catch {registry k} msg] $msg } {1 {wrong # args: should be "registry keys keyName ?pattern?"}} -test registry-1.11 {argument parsing for registry command} {pcOnly} { +test registry-1.11 {argument parsing for registry command} {win reg} { list [catch {registry keys} msg] $msg } {1 {wrong # args: should be "registry keys keyName ?pattern?"}} -test registry-1.12 {argument parsing for registry command} {pcOnly} { +test registry-1.12 {argument parsing for registry command} {win reg} { list [catch {registry keys foo bar baz} msg] $msg } {1 {wrong # args: should be "registry keys keyName ?pattern?"}} -test registry-1.13 {argument parsing for registry command} {pcOnly} { +test registry-1.13 {argument parsing for registry command} {win reg} { list [catch {registry s} msg] $msg } {1 {wrong # args: should be "registry set keyName ?valueName data ?type??"}} -test registry-1.14 {argument parsing for registry command} {pcOnly} { +test registry-1.14 {argument parsing for registry command} {win reg} { list [catch {registry set} msg] $msg } {1 {wrong # args: should be "registry set keyName ?valueName data ?type??"}} -test registry-1.15 {argument parsing for registry command} {pcOnly} { +test registry-1.15 {argument parsing for registry command} {win reg} { list [catch {registry set foo bar} msg] $msg } {1 {wrong # args: should be "registry set keyName ?valueName data ?type??"}} -test registry-1.16 {argument parsing for registry command} {pcOnly} { +test registry-1.16 {argument parsing for registry command} {win reg} { list [catch {registry set foo bar baz blat gorp} msg] $msg } {1 {wrong # args: should be "registry set keyName ?valueName data ?type??"}} -test registry-1.17 {argument parsing for registry command} {pcOnly} { +test registry-1.17 {argument parsing for registry command} {win reg} { list [catch {registry t} msg] $msg } {1 {wrong # args: should be "registry type keyName valueName"}} -test registry-1.18 {argument parsing for registry command} {pcOnly} { +test registry-1.18 {argument parsing for registry command} {win reg} { list [catch {registry type} msg] $msg } {1 {wrong # args: should be "registry type keyName valueName"}} -test registry-1.19 {argument parsing for registry command} {pcOnly} { +test registry-1.19 {argument parsing for registry command} {win reg} { list [catch {registry type foo} msg] $msg } {1 {wrong # args: should be "registry type keyName valueName"}} -test registry-1.20 {argument parsing for registry command} {pcOnly} { +test registry-1.20 {argument parsing for registry command} {win reg} { list [catch {registry type foo bar baz} msg] $msg } {1 {wrong # args: should be "registry type keyName valueName"}} -test registry-1.21 {argument parsing for registry command} {pcOnly} { +test registry-1.21 {argument parsing for registry command} {win reg} { list [catch {registry v} msg] $msg } {1 {wrong # args: should be "registry values keyName ?pattern?"}} -test registry-1.22 {argument parsing for registry command} {pcOnly} { +test registry-1.22 {argument parsing for registry command} {win reg} { list [catch {registry values} msg] $msg } {1 {wrong # args: should be "registry values keyName ?pattern?"}} -test registry-1.23 {argument parsing for registry command} {pcOnly} { +test registry-1.23 {argument parsing for registry command} {win reg} { list [catch {registry values foo bar baz} msg] $msg } {1 {wrong # args: should be "registry values keyName ?pattern?"}} -test registry-2.1 {DeleteKey: bad key} {pcOnly} { +test registry-2.1 {DeleteKey: bad key} {win reg} { list [catch {registry delete foo} msg] $msg } {1 {bad root name "foo": must be HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, HKEY_PERFORMANCE_DATA, or HKEY_DYN_DATA}} -test registry-2.2 {DeleteKey: bad key} {pcOnly} { - list [catch {registry delete HKEY_CLASSES_ROOT} msg] $msg +test registry-2.2 {DeleteKey: bad key} {win reg} { + list [catch {registry delete HKEY_CURRENT_USER} msg] $msg } {1 {bad key: cannot delete root keys}} -test registry-2.3 {DeleteKey: bad key} {pcOnly} { - list [catch {registry delete HKEY_CLASSES_ROOT\\} msg] $msg +test registry-2.3 {DeleteKey: bad key} {win reg} { + list [catch {registry delete HKEY_CURRENT_USER\\} msg] $msg } {1 {bad key: cannot delete root keys}} -test registry-2.4 {DeleteKey: subkey at root level} {pcOnly} { +test registry-2.4 {DeleteKey: subkey at root level} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar registry delete HKEY_CURRENT_USER\\TclFoobar registry keys HKEY_CURRENT_USER TclFoobar } {} -test registry-2.5 {DeleteKey: subkey below root level} {pcOnly} { +test registry-2.5 {DeleteKey: subkey below root level} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar\\test registry delete HKEY_CURRENT_USER\\TclFoobar\\test set result [registry keys HKEY_CURRENT_USER TclFoobar\\test] registry delete HKEY_CURRENT_USER\\TclFoobar set result } {} -test registry-2.6 {DeleteKey: recursive delete} {pcOnly} { +test registry-2.6 {DeleteKey: recursive delete} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar\\test1 registry set HKEY_CURRENT_USER\\TclFoobar\\test2\\test3 registry delete HKEY_CURRENT_USER\\TclFoobar set result [registry keys HKEY_CURRENT_USER TclFoobar] set result } {} -test registry-2.7 {DeleteKey: trailing backslashes} {pcOnly english} { +test registry-2.7 {DeleteKey: trailing backslashes} {win reg english} { registry set HKEY_CURRENT_USER\\TclFoobar\\baz list [catch {registry delete HKEY_CURRENT_USER\\TclFoobar\\} msg] $msg } {1 {unable to delete key: The configuration registry key is invalid.}} -test registry-2.8 {DeleteKey: failure} {pcOnly} { +test registry-2.8 {DeleteKey: failure} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry delete HKEY_CURRENT_USER\\TclFoobar } {} -test registry-2.9 {DeleteKey: unicode} {pcOnly} { +test registry-2.9 {DeleteKey: unicode} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar\\test\u00c7bar\\a registry set HKEY_CURRENT_USER\\TclFoobar\\test\u00c7bar\\b @@ -155,7 +153,7 @@ test registry-2.9 {DeleteKey: unicode} {pcOnly} { set result } {} -test registry-3.1 {DeleteValue} {pcOnly} { +test registry-3.1 {DeleteValue} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar\\baz test1 blort registry set HKEY_CURRENT_USER\\TclFoobar\\baz test2 blat @@ -164,18 +162,18 @@ test registry-3.1 {DeleteValue} {pcOnly} { registry delete HKEY_CURRENT_USER\\TclFoobar set result } test2 -test registry-3.2 {DeleteValue: bad key} {pcOnly english} { +test registry-3.2 {DeleteValue: bad key} {win reg english} { registry delete HKEY_CURRENT_USER\\TclFoobar list [catch {registry delete HKEY_CURRENT_USER\\TclFoobar test} msg] $msg } {1 {unable to open key: The system cannot find the file specified.}} -test registry-3.3 {DeleteValue: bad value} {pcOnly english} { +test registry-3.3 {DeleteValue: bad value} {win reg english} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar\\baz test2 blort set result [list [catch {registry delete HKEY_CURRENT_USER\\TclFoobar test1} msg] $msg] registry delete HKEY_CURRENT_USER\\TclFoobar set result } {1 {unable to delete value "test1" from key "HKEY_CURRENT_USER\TclFoobar": The system cannot find the file specified.}} -test registry-3.4 {DeleteValue: Unicode} {pcOnly} { +test registry-3.4 {DeleteValue: Unicode} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar\\\u00c7baz \u00c7test1 blort registry set HKEY_CURRENT_USER\\TclFoobar\\\u00c7baz test2 blat @@ -185,31 +183,32 @@ test registry-3.4 {DeleteValue: Unicode} {pcOnly} { set result } test2 -test registry-4.1 {GetKeyNames: bad key} {pcOnly english} { +test registry-4.1 {GetKeyNames: bad key} {win reg english} { registry delete HKEY_CURRENT_USER\\TclFoobar list [catch {registry keys HKEY_CURRENT_USER\\TclFoobar} msg] $msg } {1 {unable to open key: The system cannot find the file specified.}} -test registry-4.2 {GetKeyNames} {pcOnly} { +test registry-4.2 {GetKeyNames} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar\\baz set result [registry keys HKEY_CURRENT_USER\\TclFoobar] registry delete HKEY_CURRENT_USER\\TclFoobar set result } {baz} -test registry-4.3 {GetKeyNames: remote key} {pcOnly nonPortable english} { +test registry-4.3 {GetKeyNames: remote key} {win reg nonPortable english} { + set hostname [info hostname] registry set \\\\$hostname\\HKEY_CURRENT_USER\\TclFoobar\\baz set result [registry keys \\\\gaspode\\HKEY_CURRENT_USER\\TclFoobar] registry delete \\\\$hostname\\HKEY_CURRENT_USER\\TclFoobar set result } {baz} -test registry-4.4 {GetKeyNames: empty key} {pcOnly} { +test registry-4.4 {GetKeyNames: empty key} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar set result [registry keys HKEY_CURRENT_USER\\TclFoobar] registry delete HKEY_CURRENT_USER\\TclFoobar set result } {} -test registry-4.5 {GetKeyNames: patterns} {pcOnly} { +test registry-4.5 {GetKeyNames: patterns} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar\\baz registry set HKEY_CURRENT_USER\\TclFoobar\\blat @@ -218,7 +217,7 @@ test registry-4.5 {GetKeyNames: patterns} {pcOnly} { registry delete HKEY_CURRENT_USER\\TclFoobar set result } {baz blat} -test registry-4.6 {GetKeyNames: names with spaces} {pcOnly} { +test registry-4.6 {GetKeyNames: names with spaces} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar\\baz\ bar registry set HKEY_CURRENT_USER\\TclFoobar\\blat @@ -227,7 +226,7 @@ test registry-4.6 {GetKeyNames: names with spaces} {pcOnly} { registry delete HKEY_CURRENT_USER\\TclFoobar set result } {{baz bar} blat} -test registry-4.7 {GetKeyNames: Unicode} {pcOnly english} { +test registry-4.7 {GetKeyNames: Unicode} {win reg english} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar\\baz\u00c7bar registry set HKEY_CURRENT_USER\\TclFoobar\\blat @@ -236,7 +235,7 @@ test registry-4.7 {GetKeyNames: Unicode} {pcOnly english} { registry delete HKEY_CURRENT_USER\\TclFoobar set result } "baz\u00c7bar blat" -test registry-4.8 {GetKeyNames: Unicode} {pcOnly} { +test registry-4.8 {GetKeyNames: Unicode} {win reg nt} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar\\baz\u30b7bar registry set HKEY_CURRENT_USER\\TclFoobar\\blat @@ -245,232 +244,238 @@ test registry-4.8 {GetKeyNames: Unicode} {pcOnly} { registry delete HKEY_CURRENT_USER\\TclFoobar set result } "baz\u30b7bar blat" -test registry-4.9 {GetKeyNames: very long key [Bug 1682211]} \ - -constraints {pcOnly} \ +test registry-4.9 {GetKeyNames: very long key [Bug 1682211]} {*}{ + -constraints {win reg} -setup { registry set HKEY_CURRENT_USER\\TclFoobar\\a registry set HKEY_CURRENT_USER\\TclFoobar\\b[string repeat x 254] registry set HKEY_CURRENT_USER\\TclFoobar\\c - } \ + } -body { lsort [registry keys HKEY_CURRENT_USER\\TclFoobar] - } \ + } -cleanup { registry delete HKEY_CURRENT_USER\\TclFoobar - } \ + }} \ -result [list a b[string repeat x 254] c] -test registry-5.1 {GetType} {pcOnly english} { +test registry-5.1 {GetType} {win reg english} { registry delete HKEY_CURRENT_USER\\TclFoobar list [catch {registry type HKEY_CURRENT_USER\\TclFoobar val1} msg] $msg } {1 {unable to open key: The system cannot find the file specified.}} -test registry-5.2 {GetType} {pcOnly english} { +test registry-5.2 {GetType} {win reg english} { registry set HKEY_CURRENT_USER\\TclFoobar list [catch {registry type HKEY_CURRENT_USER\\TclFoobar val1} msg] $msg } {1 {unable to get type of value "val1" from key "HKEY_CURRENT_USER\TclFoobar": The system cannot find the file specified.}} -test registry-5.3 {GetType} {pcOnly} { +test registry-5.3 {GetType} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar none set result [registry type HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } none -test registry-5.4 {GetType} {pcOnly} { +test registry-5.4 {GetType} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar set result [registry type HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } sz -test registry-5.5 {GetType} {pcOnly} { +test registry-5.5 {GetType} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar sz set result [registry type HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } sz -test registry-5.6 {GetType} {pcOnly} { +test registry-5.6 {GetType} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar expand_sz set result [registry type HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } expand_sz -test registry-5.7 {GetType} {pcOnly} { +test registry-5.7 {GetType} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 1 binary set result [registry type HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } binary -test registry-5.8 {GetType} {pcOnly} { +test registry-5.8 {GetType} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 1 dword set result [registry type HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } dword -test registry-5.9 {GetType} {pcOnly} { +test registry-5.9 {GetType} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 1 dword_big_endian set result [registry type HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } dword_big_endian -test registry-5.10 {GetType} {pcOnly} { +test registry-5.10 {GetType} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 1 link set result [registry type HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } link -test registry-5.11 {GetType} {pcOnly} { +test registry-5.11 {GetType} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar multi_sz set result [registry type HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } multi_sz -test registry-5.12 {GetType} {pcOnly} { +test registry-5.12 {GetType} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 1 resource_list set result [registry type HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } resource_list -test registry-5.13 {GetType: unknown types} {pcOnly} { +test registry-5.13 {GetType: unknown types} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 1 24 set result [registry type HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } 24 -test registry-5.14 {GetType: Unicode} {pcOnly} { +test registry-5.14 {GetType: Unicode} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar va\u00c7l1 1 24 set result [registry type HKEY_CURRENT_USER\\TclFoobar va\u00c7l1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } 24 -test registry-6.1 {GetValue} {pcOnly english} { +test registry-6.1 {GetValue} {win reg english} { registry delete HKEY_CURRENT_USER\\TclFoobar list [catch {registry get HKEY_CURRENT_USER\\TclFoobar val1} msg] $msg } {1 {unable to open key: The system cannot find the file specified.}} -test registry-6.2 {GetValue} {pcOnly english} { +test registry-6.2 {GetValue} {win reg english} { registry set HKEY_CURRENT_USER\\TclFoobar list [catch {registry get HKEY_CURRENT_USER\\TclFoobar val1} msg] $msg } {1 {unable to get value "val1" from key "HKEY_CURRENT_USER\TclFoobar": The system cannot find the file specified.}} -test registry-6.3 {GetValue} {pcOnly} { +test registry-6.3 {GetValue} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar none set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } foobar -test registry-6.4 {GetValue} {pcOnly} { +test registry-6.4 {GetValue} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } foobar -test registry-6.5 {GetValue} {pcOnly} { +test registry-6.5 {GetValue} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar sz set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } foobar -test registry-6.6 {GetValue} {pcOnly} { +test registry-6.6 {GetValue} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar expand_sz set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } foobar -test registry-6.7 {GetValue} {pcOnly} { +test registry-6.7 {GetValue} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 1 binary set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } 1 -test registry-6.8 {GetValue} {pcOnly} { +test registry-6.8 {GetValue} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 0x20 dword set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } 32 -test registry-6.9 {GetValue} {pcOnly} { +test registry-6.9 {GetValue} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 0x20 dword_big_endian set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } 32 -test registry-6.10 {GetValue} {pcOnly} { +test registry-6.10 {GetValue} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 1 link set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } 1 -test registry-6.11 {GetValue} {pcOnly} { +test registry-6.11 {GetValue} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 foobar multi_sz set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } foobar -test registry-6.12 {GetValue} {pcOnly} { +test registry-6.12 {GetValue} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 {foo\ bar baz} multi_sz set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } {{foo bar} baz} -test registry-6.13 {GetValue} {pcOnly} { +test registry-6.13 {GetValue} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 {} multi_sz set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } {} test registry-6.14 {GetValue: truncation of multivalues with null elements} \ - {pcOnly} { + {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 {a {} b} multi_sz set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } a -test registry-6.15 {GetValue} {pcOnly} { +test registry-6.15 {GetValue} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 1 resource_list set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } 1 -test registry-6.16 {GetValue: unknown types} {pcOnly} { +test registry-6.16 {GetValue: unknown types} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 1 24 set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } 1 -test registry-6.17 {GetValue: Unicode value names} {pcOnly} { +test registry-6.17 {GetValue: Unicode value names} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val\u00c71 foobar multi_sz set result [registry get HKEY_CURRENT_USER\\TclFoobar val\u00c71] registry delete HKEY_CURRENT_USER\\TclFoobar set result } foobar -test registry-6.18 {GetValue: values with Unicode strings} {pcOnly} { +test registry-6.18 {GetValue: values with Unicode strings} {win reg nt} { registry set HKEY_CURRENT_USER\\TclFoobar val1 {foo ba\u30b7r baz} multi_sz set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } "foo ba\u30b7r baz" -test registry-6.19 {GetValue: values with Unicode strings} {pcOnly english} { +test registry-6.19 {GetValue: values with Unicode strings} {win reg english} { registry set HKEY_CURRENT_USER\\TclFoobar val1 {foo ba\u00c7r baz} multi_sz set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } "foo ba\u00c7r baz" -test registry-6.20 {GetValue: values with Unicode strings with embedded nulls} {pcOnly} { +test registry-6.20 {GetValue: values with Unicode strings with embedded nulls} {win reg} { registry set HKEY_CURRENT_USER\\TclFoobar val1 {foo ba\u0000r baz} multi_sz set result [registry get HKEY_CURRENT_USER\\TclFoobar val1] registry delete HKEY_CURRENT_USER\\TclFoobar set result } "foo ba r baz" +test registry-6.21 {GetValue: very long value names and values} {pcOnly reg} { + registry set HKEY_CURRENT_USER\\TclFoobar [string repeat k 199] [string repeat x 199] multi_sz + set result [registry get HKEY_CURRENT_USER\\TclFoobar [string repeat k 199]] + registry delete HKEY_CURRENT_USER\\TclFoobar + set result +} [string repeat x 199] -test registry-7.1 {GetValueNames: bad key} {pcOnly english} { +test registry-7.1 {GetValueNames: bad key} {win reg english} { registry delete HKEY_CURRENT_USER\\TclFoobar list [catch {registry values HKEY_CURRENT_USER\\TclFoobar} msg] $msg } {1 {unable to open key: The system cannot find the file specified.}} -test registry-7.2 {GetValueNames} {pcOnly} { +test registry-7.2 {GetValueNames} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar baz foobar set result [registry values HKEY_CURRENT_USER\\TclFoobar] registry delete HKEY_CURRENT_USER\\TclFoobar set result } baz -test registry-7.3 {GetValueNames} {pcOnly} { +test registry-7.3 {GetValueNames} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar baz foobar1 registry set HKEY_CURRENT_USER\\TclFoobar blat foobar2 @@ -479,20 +484,21 @@ test registry-7.3 {GetValueNames} {pcOnly} { registry delete HKEY_CURRENT_USER\\TclFoobar set result } {{} baz blat} -test registry-7.4 {GetValueNames: remote key} {pcOnly nonPortable english} { +test registry-7.4 {GetValueNames: remote key} {win reg nonPortable english} { + set hostname [info hostname] registry set \\\\$hostname\\HKEY_CURRENT_USER\\TclFoobar baz blat set result [registry values \\\\$hostname\\HKEY_CURRENT_USER\\TclFoobar] registry delete \\\\$hostname\\HKEY_CURRENT_USER\\TclFoobar set result } baz -test registry-7.5 {GetValueNames: empty key} {pcOnly} { +test registry-7.5 {GetValueNames: empty key} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar set result [registry values HKEY_CURRENT_USER\\TclFoobar] registry delete HKEY_CURRENT_USER\\TclFoobar set result } {} -test registry-7.6 {GetValueNames: patterns} {pcOnly} { +test registry-7.6 {GetValueNames: patterns} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar baz foobar1 registry set HKEY_CURRENT_USER\\TclFoobar blat foobar2 @@ -501,7 +507,7 @@ test registry-7.6 {GetValueNames: patterns} {pcOnly} { registry delete HKEY_CURRENT_USER\\TclFoobar set result } {baz blat} -test registry-7.7 {GetValueNames: names with spaces} {pcOnly} { +test registry-7.7 {GetValueNames: names with spaces} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar baz\ bar foobar1 registry set HKEY_CURRENT_USER\\TclFoobar blat foobar2 @@ -511,52 +517,52 @@ test registry-7.7 {GetValueNames: names with spaces} {pcOnly} { set result } {{baz bar} blat} -test registry-8.1 {OpenSubKey} {pcOnly nonPortable english} { +test registry-8.1 {OpenSubKey} {win reg nonPortable english} { # This test will only succeed if the current user does not have registry # access on the specified machine. list [catch {registry keys {\\mom\HKEY_LOCAL_MACHINE}} msg] $msg } {1 {unable to open key: Access is denied.}} -test registry-8.2 {OpenSubKey} {pcOnly} { +test registry-8.2 {OpenSubKey} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar set result [registry keys HKEY_CURRENT_USER TclFoobar] registry delete HKEY_CURRENT_USER\\TclFoobar set result } TclFoobar -test registry-8.3 {OpenSubKey} {pcOnly english} { +test registry-8.3 {OpenSubKey} {win reg english} { registry delete HKEY_CURRENT_USER\\TclFoobar list [catch {registry keys HKEY_CURRENT_USER\\TclFoobar} msg] $msg } {1 {unable to open key: The system cannot find the file specified.}} -test registry-9.1 {ParseKeyName: bad keys} {pcOnly} { +test registry-9.1 {ParseKeyName: bad keys} {win reg} { list [catch {registry values \\} msg] $msg } "1 {bad key \"\\\": must start with a valid root}" -test registry-9.2 {ParseKeyName: bad keys} {pcOnly} { +test registry-9.2 {ParseKeyName: bad keys} {win reg} { list [catch {registry values \\foobar} msg] $msg } {1 {bad key "\foobar": must start with a valid root}} -test registry-9.3 {ParseKeyName: bad keys} {pcOnly} { +test registry-9.3 {ParseKeyName: bad keys} {win reg} { list [catch {registry values \\\\} msg] $msg } {1 {bad root name "": must be HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, HKEY_PERFORMANCE_DATA, or HKEY_DYN_DATA}} -test registry-9.4 {ParseKeyName: bad keys} {pcOnly} { +test registry-9.4 {ParseKeyName: bad keys} {win reg} { list [catch {registry values \\\\\\} msg] $msg } {1 {bad root name "": must be HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, HKEY_PERFORMANCE_DATA, or HKEY_DYN_DATA}} -test registry-9.5 {ParseKeyName: bad keys} {pcOnly english} { - list [catch {registry values \\\\\\HKEY_CLASSES_ROOT} msg] $msg +test registry-9.5 {ParseKeyName: bad keys} {win reg english nt} { + list [catch {registry values \\\\\\HKEY_CURRENT_USER} msg] $msg } {1 {unable to open key: The network address is invalid.}} -test registry-9.6 {ParseKeyName: bad keys} {pcOnly} { +test registry-9.6 {ParseKeyName: bad keys} {win reg} { list [catch {registry values \\\\gaspode} msg] $msg } {1 {bad root name "": must be HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, HKEY_PERFORMANCE_DATA, or HKEY_DYN_DATA}} -test registry-9.7 {ParseKeyName: bad keys} {pcOnly} { +test registry-9.7 {ParseKeyName: bad keys} {win reg} { list [catch {registry values foobar} msg] $msg } {1 {bad root name "foobar": must be HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, HKEY_PERFORMANCE_DATA, or HKEY_DYN_DATA}} -test registry-9.8 {ParseKeyName: null keys} {pcOnly} { +test registry-9.8 {ParseKeyName: null keys} {win reg} { list [catch {registry delete HKEY_CURRENT_USER\\} msg] $msg } {1 {bad key: cannot delete root keys}} -test registry-9.9 {ParseKeyName: null keys} {pcOnly english} { +test registry-9.9 {ParseKeyName: null keys} {win reg english} { list [catch {registry keys HKEY_CURRENT_USER\\TclFoobar\\baz} msg] $msg } {1 {unable to open key: The system cannot find the file specified.}} -test registry-10.1 {RecursiveDeleteKey} {pcOnly} { +test registry-10.1 {RecursiveDeleteKey} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar\\test1 registry set HKEY_CURRENT_USER\\TclFoobar\\test2\\test3 @@ -564,7 +570,7 @@ test registry-10.1 {RecursiveDeleteKey} {pcOnly} { set result [registry keys HKEY_CURRENT_USER TclFoobar] set result } {} -test registry-10.2 {RecursiveDeleteKey} {pcOnly} { +test registry-10.2 {RecursiveDeleteKey} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar\\test1 registry set HKEY_CURRENT_USER\\TclFoobar\\test2\\test3 @@ -573,41 +579,40 @@ test registry-10.2 {RecursiveDeleteKey} {pcOnly} { set result } {} -test registry-11.1 {SetValue: recursive creation} {pcOnly} { +test registry-11.1 {SetValue: recursive creation} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar\\baz blat foobar set result [registry get HKEY_CURRENT_USER\\TclFoobar\\baz blat] } foobar -test registry-11.2 {SetValue: modification} {pcOnly} { +test registry-11.2 {SetValue: modification} {win reg} { registry delete HKEY_CURRENT_USER\\TclFoobar registry set HKEY_CURRENT_USER\\TclFoobar\\baz blat foobar registry set HKEY_CURRENT_USER\\TclFoobar\\baz blat frob set result [registry get HKEY_CURRENT_USER\\TclFoobar\\baz blat] } frob -test registry-11.3 {SetValue: failure} {pcOnly nonPortable english} { +test registry-11.3 {SetValue: failure} {win reg nonPortable english} { # This test will only succeed if the current user does not have registry # access on the specified machine. list [catch {registry set {\\mom\HKEY_CURRENT_USER\TclFoobar} bar foobar} msg] $msg } {1 {unable to open key: Access is denied.}} -test registry-12.1 {BroadcastValue} {pcOnly} { +test registry-12.1 {BroadcastValue} {win reg} { list [catch {registry broadcast} msg] $msg } {1 {wrong # args: should be "registry broadcast keyName ?-timeout millisecs?"}} -test registry-12.2 {BroadcastValue} {pcOnly} { +test registry-12.2 {BroadcastValue} {win reg} { list [catch {registry broadcast "" -time} msg] $msg } {1 {wrong # args: should be "registry broadcast keyName ?-timeout millisecs?"}} -test registry-12.3 {BroadcastValue} {pcOnly} { +test registry-12.3 {BroadcastValue} {win reg} { list [catch {registry broadcast "" - 500} msg] $msg } {1 {wrong # args: should be "registry broadcast keyName ?-timeout millisecs?"}} -test registry-12.4 {BroadcastValue} {pcOnly} { +test registry-12.4 {BroadcastValue} {win reg} { list [catch {registry broadcast {Environment}} msg] $msg } {0 {1 0}} -test registry-12.5 {BroadcastValue} {pcOnly} { +test registry-12.5 {BroadcastValue} {win reg} { list [catch {registry b {}} msg] $msg } {0 {1 0}} # cleanup -unset hostname ::tcltest::cleanupTests return diff --git a/tests/rename.test b/tests/rename.test index aa5f900..bd14578 100644 --- a/tests/rename.test +++ b/tests/rename.test @@ -16,6 +16,8 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } +testConstraint testdel [llength [info commands testdel]] + # Must eliminate the "unknown" command while the test is running, # especially if the test is being run in a program with its # own special-purpose unknown command. @@ -75,65 +77,63 @@ catch {rename unknown {}} catch {rename unknown.old unknown} catch {rename bar {}} -if {[info command testdel] == "testdel"} { - test rename-4.1 {reentrancy issues with command deletion and renaming} { - set x {} - testdel {} foo {lappend x deleted; rename bar {}; lappend x [info command bar]} - rename foo bar - lappend x | - rename bar {} - set x - } {| deleted {}} - test rename-4.2 {reentrancy issues with command deletion and renaming} { - set x {} - testdel {} foo {lappend x deleted; rename foo bar} - rename foo {} - set x - } {deleted} - test rename-4.3 {reentrancy issues with command deletion and renaming} { - set x {} - testdel {} foo {lappend x deleted; testdel {} foo {lappend x deleted2}} - rename foo {} - lappend x | - rename foo {} - set x - } {deleted | deleted2} - test rename-4.4 {reentrancy issues with command deletion and renaming} { - set x {} - testdel {} foo {lappend x deleted; rename foo bar} - rename foo {} - lappend x | [info command bar] - } {deleted | {}} - test rename-4.5 {reentrancy issues with command deletion and renaming} { - set env(value) before - interp create foo - testdel foo cmd {set env(value) deleted} +test rename-4.1 {reentrancy issues with command deletion and renaming} testdel { + set x {} + testdel {} foo {lappend x deleted; rename bar {}; lappend x [info command bar]} + rename foo bar + lappend x | + rename bar {} + set x +} {| deleted {}} +test rename-4.2 {reentrancy issues with command deletion and renaming} testdel { + set x {} + testdel {} foo {lappend x deleted; rename foo bar} + rename foo {} + set x +} {deleted} +test rename-4.3 {reentrancy issues with command deletion and renaming} testdel { + set x {} + testdel {} foo {lappend x deleted; testdel {} foo {lappend x deleted2}} + rename foo {} + lappend x | + rename foo {} + set x +} {deleted | deleted2} +test rename-4.4 {reentrancy issues with command deletion and renaming} testdel { + set x {} + testdel {} foo {lappend x deleted; rename foo bar} + rename foo {} + lappend x | [info command bar] +} {deleted | {}} +test rename-4.5 {reentrancy issues with command deletion and renaming} testdel { + set env(value) before + interp create foo + testdel foo cmd {set env(value) deleted} + interp delete foo + set env(value) +} {deleted} +test rename-4.6 {reentrancy issues with command deletion and renaming} testdel { + proc kill args { + interp delete foo + } + set env(value) before + interp create foo + foo alias kill kill + testdel foo cmd {set env(value) deleted; kill} + list [catch {foo eval {rename cmd {}}} msg] $msg $env(value) +} {0 {} deleted} +test rename-4.7 {reentrancy issues with command deletion and renaming} testdel { + proc kill args { interp delete foo - set env(value) - } {deleted} - test rename-4.6 {reentrancy issues with command deletion and renaming} { - proc kill args { - interp delete foo - } - set env(value) before - interp create foo - foo alias kill kill - testdel foo cmd {set env(value) deleted; kill} - list [catch {foo eval {rename cmd {}}} msg] $msg $env(value) - } {0 {} deleted} - test rename-4.7 {reentrancy issues with command deletion and renaming} { - proc kill args { - interp delete foo - } - set env(value) before - interp create foo - foo alias kill kill - testdel foo cmd {set env(value) deleted; kill} - list [catch {interp delete foo} msg] $msg $env(value) - } {0 {} deleted} - if {[info exists env(value)]} { - unset env(value) } + set env(value) before + interp create foo + foo alias kill kill + testdel foo cmd {set env(value) deleted; kill} + list [catch {interp delete foo} msg] $msg $env(value) +} {0 {} deleted} +if {[info exists env(value)]} { + unset env(value) } # Save the unknown procedure which is modified by the following test. @@ -158,7 +158,7 @@ catch {rename unknown.old unknown} test rename-6.1 {old code invalidated (epoch incremented) when cmd with compile proc is renamed } { - proc x {} { + proc x {} { set a 123 set b [incr a] } @@ -166,6 +166,8 @@ test rename-6.1 {old code invalidated (epoch incremented) when cmd with compile rename incr incr.old proc incr {} {puts "new incr called!"} catch {x} msg + rename incr {} + rename incr.old incr set msg } {wrong # args: should be "incr"} diff --git a/tests/result.test b/tests/result.test index 0e61575..3ee803e 100644 --- a/tests/result.test +++ b/tests/result.test @@ -17,8 +17,10 @@ if {[lsearch [namespace children] ::tcltest] == -1} { # Some tests require the testsaveresult command -::tcltest::testConstraint testsaveresult \ - [expr {[info commands testsaveresult] != {}}] +testConstraint testsaveresult [llength [info commands testsaveresult]] +testConstraint testsetobjerrorcode [llength [info commands testsetobjerrorcode]] +testConstraint testseterrorcode [llength [info commands testseterrorcode]] +testConstraint testreturn [llength [info commands testreturn]] test result-1.1 {Tcl_SaveInterpResult} {testsaveresult} { testsaveresult small {set x 42} 0 @@ -63,9 +65,6 @@ test result-3.2 {Tcl_DiscardInterpResult} {testsaveresult} { testsaveresult free {set x 42} 1 } {42} -::tcltest::testConstraint testsetobjerrorcode \ - [expr {[info commands testsetobjerrorcode] != {}}] - test result-4.1 {Tcl_SetObjErrorCode - one arg} {testsetobjerrorcode} { catch {testsetobjerrorcode 1} list [set errorCode] @@ -87,9 +86,6 @@ test result-4.5 {Tcl_SetObjErrorCode - five args} {testsetobjerrorcode} { list [set errorCode] } {{1 2 3 4 5}} -::tcltest::testConstraint testseterrorcode \ - [expr {[info commands testseterrorcode] != {}}] - test result-5.1 {Tcl_SetErrorCode - one arg} testseterrorcode { catch {testseterrorcode 1} set errorCode @@ -107,6 +103,18 @@ test result-5.4 {Tcl_SetErrorCode - two args, list quoting} testseterrorcode { set errorCode } {{a b} c} +test result-6.0 {Bug 1209759} -constraints testreturn -body { + # Might panic if bug is not fixed. + proc foo {} {testreturn} + foo +} -returnCodes ok -result {} +test result-6.1 {Bug 1209759} -constraints testreturn -body { + # Might panic if bug is not fixed. + proc foo {} {catch {return -level 2}; testreturn} + foo +} -cleanup { + rename foo {} +} -returnCodes ok -result {} test result-6.2 {Bug 1649062} -setup { proc foo {} { if {[catch { @@ -122,19 +130,10 @@ test result-6.2 {Bug 1649062} -setup { } -cleanup { rename foo {} } -result {foo {} {}} - +test result-6.3 {Bug 2383005} { + catch {return -code error -errorcode {{}a} eek} m + set m +} {bad -errorcode value: expected a list but got "{}a"} # cleanup -::tcltest::cleanupTests +cleanupTests return - - - - - - - - - - - - diff --git a/tests/safe.test b/tests/safe.test index a3def0a..8879518 100644 --- a/tests/safe.test +++ b/tests/safe.test @@ -10,13 +10,15 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. +package require Tcl 8.5 + if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } foreach i [interp slaves] { - interp delete $i + interp delete $i } set saveAutoPath $::auto_path @@ -28,12 +30,11 @@ set ::auto_path [info library] catch {safe::interpConfigure} proc equiv {x} {return $x} - + test safe-1.1 {safe::interpConfigure syntax} { list [catch {safe::interpConfigure} msg] $msg; } {1 {no value given for parameter "slave" (use -help for full usage) : slave name () name of the slave}} - test safe-1.2 {safe::interpCreate syntax} { list [catch {safe::interpCreate -help} msg] $msg; } {1 {Usage information: @@ -47,15 +48,15 @@ test safe-1.2 {safe::interpCreate syntax} { -nestedLoadOk boolflag (false) allow nested loading -nested boolean (false) nested loading -deleteHook script () delete hook}} - test safe-1.3 {safe::interpInit syntax} { list [catch {safe::interpInit -noStatics} msg] $msg; } {1 {bad value "-noStatics" for parameter slave name () name of the slave}} -test safe-2.1 {creating interpreters, should have no aliases} { - interp aliases +test safe-2.1 {creating interpreters, should have no aliases} emptyTest { + # Disabled this test. It tests nothing sensible. [Bug 999612] + # interp aliases } "" test safe-2.2 {creating interpreters, should have no aliases} { catch {safe::interpDelete a} @@ -64,13 +65,13 @@ test safe-2.2 {creating interpreters, should have no aliases} { safe::interpDelete a set l } "" -test safe-2.3 {creating safe interpreters, should have no aliases} { +test safe-2.3 {creating safe interpreters, should have no unexpected aliases} { catch {safe::interpDelete a} interp create a -safe set l [a aliases] interp delete a - set l -} "" + lsort $l +} {::tcl::mathfunc::max ::tcl::mathfunc::min clock} test safe-3.1 {calling safe::interpInit is safe} { catch {safe::interpDelete a} @@ -86,7 +87,7 @@ test safe-3.2 {calling safe::interpCreate on trusted interp} { set l [lsort [a aliases]] safe::interpDelete a set l -} {encoding exit file load source} +} {::tcl::info::nameofexecutable clock encoding exit file glob load source} test safe-3.3 {calling safe::interpCreate on trusted interp} { catch {safe::interpDelete a} safe::interpCreate a @@ -114,25 +115,6 @@ test safe-4.2 {safe::interpDelete, indirectly} { a alias exit safe::interpDelete a a eval exit } "" -test safe-4.3 {safe::interpDelete, state array (not a public api)} { - catch {safe::interpDelete a} - namespace eval safe {set [InterpStateName a](foo) 33} - # not an error anymore to call it if interp is already - # deleted, to make trhings smooth if it's called twice... - catch {safe::interpDelete a} m1 - catch {namespace eval safe {set [InterpStateName a](foo)}} m2 - list $m1 $m2 -} "{}\ - {can't read \"[safe::InterpStateName a](foo)\": no such variable}" - - -test safe-4.4 {safe::interpDelete, state array, indirectly (not a public api)} { - catch {safe::interpDelete a} - safe::interpCreate a - namespace eval safe {set [InterpStateName a](foo) 33} - a eval exit - catch {namespace eval safe {set [InterpStateName a](foo)}} msg -} 1 test safe-4.5 {safe::interpDelete} { catch {safe::interpDelete a} @@ -158,43 +140,33 @@ test safe-5.1 {test auto-loading in safe interpreters} { } {0 -1} # test safe interps 'information leak' -proc SI {} { - global I - set I [interp create -safe]; -} -proc DI {} { - global I; - interp delete $I; +proc SafeEval {script} { + # Helper procedure that ensures the safe interp is cleaned up even if + # there is a failure in the script. + set SafeInterp [interp create -safe] + catch {$SafeInterp eval $script} msg opts + interp delete $SafeInterp + return -options $opts $msg } + test safe-6.1 {test safe interpreters knowledge of the world} { - SI; set r [lsort [$I eval {info globals}]]; DI; set r + lsort [SafeEval {info globals}] } {tcl_interactive tcl_patchLevel tcl_platform tcl_version} test safe-6.2 {test safe interpreters knowledge of the world} { - SI; set r [$I eval {info script}]; DI; set r + SafeEval {info script} } {} test safe-6.3 {test safe interpreters knowledge of the world} { - SI - set r [lsort [$I eval {array names tcl_platform}]] - DI + set r [lsort [SafeEval {array names tcl_platform}]] # If running a windows-debug shell, remove the "debug" element from r. - if {$tcl_platform(platform) == "windows" && \ - [lsearch $r "debug"] != -1} { + if {[testConstraint win] && ("debug" in $r)} { set r [lreplace $r 1 1] } set threaded [lsearch $r "threaded"] if {$threaded != -1} { set r [lreplace $r $threaded $threaded] } - set tip [lsearch $r "tip,268"] - if {$tip != -1} { - set r [lreplace $r $tip $tip] - } - set tip [lsearch $r "tip,280"] - if {$tip != -1} { - set r [lreplace $r $tip $tip] - } set r -} {byteOrder platform wordSize} +} {byteOrder platform pointerSize wordSize} # more test should be added to check that hostname, nameofexecutable, # aren't leaking infos, but they still do... @@ -211,8 +183,7 @@ test safe-7.1 {tests that everything works at high level} { safe::interpDelete $i set v } 1.0 - -test safe-7.2 {tests specific path and interpFind/AddToAccessPath} { +test safe-7.2 {tests specific path and interpFind/AddToAccessPath} -body { set i [safe::interpCreate -nostat -nested 1 -accessPath [list [info library]]]; # should not add anything (p0) set token1 [safe::interpAddToAccessPath $i [info library]] @@ -224,7 +195,7 @@ test safe-7.2 {tests specific path and interpFind/AddToAccessPath} { [catch {interp eval $i {package require http 1}} msg] $msg \ [safe::interpConfigure $i]\ [safe::interpDelete $i] -} "{\$p(:0:)} {\$p(:1:)} 1 {can't find package http 1} {-accessPath {[list $tcl_library /dummy/unixlike/test/path]} -statics 0 -nested 1 -deleteHook {}} {}" +} -match glob -result "{\$p(:0:)} {\$p(:*:)} 1 {can't find package http 1} {-accessPath {[list $tcl_library */dummy/unixlike/test/path]} -statics 0 -nested 1 -deleteHook {}} {}" # test source control on file name @@ -235,9 +206,7 @@ test safe-8.1 {safe source control on file} { list [catch {$i eval {source}} msg] \ $msg \ [safe::interpDelete $i] ; -} {1 {wrong # args: should be "source fileName"} {}} - -# test source control on file name +} {1 {wrong # args: should be "source ?-encoding E? fileName"} {}} test safe-8.2 {safe source control on file} { set i "a"; catch {safe::interpDelete $i} @@ -245,8 +214,7 @@ test safe-8.2 {safe source control on file} { list [catch {$i eval {source}} msg] \ $msg \ [safe::interpDelete $i] ; -} {1 {wrong # args: should be "source fileName"} {}} - +} {1 {wrong # args: should be "source ?-encoding E? fileName"} {}} test safe-8.3 {safe source control on file} { set i "a"; catch {safe::interpDelete $i} @@ -261,8 +229,6 @@ test safe-8.3 {safe source control on file} { [safe::setLogCmd $prevlog; unset log] \ [safe::interpDelete $i] ; } {1 {permission denied} {{ERROR for slave a : ".": is a directory}} {} {}} - - test safe-8.4 {safe source control on file} { set i "a"; catch {safe::interpDelete $i} @@ -277,8 +243,6 @@ test safe-8.4 {safe source control on file} { [safe::setLogCmd $prevlog; unset log] \ [safe::interpDelete $i] ; } {1 {permission denied} {{ERROR for slave a : "/abc/def": not in access_path}} {} {}} - - test safe-8.5 {safe source control on file} { # This tested filename == *.tcl or tclIndex, but that restriction # was removed in 8.4a4 - hobbs @@ -295,8 +259,6 @@ test safe-8.5 {safe source control on file} { [safe::setLogCmd $prevlog; unset log] \ [safe::interpDelete $i] ; } [list 1 {no such file or directory} [list "ERROR for slave a : [file join [info library] blah]:no such file or directory"] {} {}] - - test safe-8.6 {safe source control on file} { set i "a"; catch {safe::interpDelete $i} @@ -311,8 +273,6 @@ test safe-8.6 {safe source control on file} { [safe::setLogCmd $prevlog; unset log] \ [safe::interpDelete $i] ; } [list 1 {no such file or directory} [list "ERROR for slave a : [file join [info library] blah.tcl]:no such file or directory"] {} {}] - - test safe-8.7 {safe source control on file} { # This tested length of filename, but that restriction # was removed in 8.4a4 - hobbs @@ -330,7 +290,6 @@ test safe-8.7 {safe source control on file} { [safe::setLogCmd $prevlog; unset log] \ [safe::interpDelete $i] ; } [list 1 {no such file or directory} [list "ERROR for slave a : [file join [info library] xxxxxxxxxxx.tcl]:no such file or directory"] {} {}] - test safe-8.8 {safe source forbids -rsrc} { set i "a"; catch {safe::interpDelete $i} @@ -338,8 +297,32 @@ test safe-8.8 {safe source forbids -rsrc} { list [catch {$i eval {source -rsrc Init}} msg] \ $msg \ [safe::interpDelete $i] ; -} {1 {wrong # args: should be "source fileName"} {}} - +} {1 {wrong # args: should be "source ?-encoding E? fileName"} {}} +test safe-8.9 {safe source and return} -setup { + set returnScript [makeFile {return "ok"} return.tcl] + catch {safe::interpDelete $i} +} -body { + safe::interpCreate $i + set token [safe::interpAddToAccessPath $i [file dirname $returnScript]] + $i eval [list source $token/[file tail $returnScript]] +} -cleanup { + catch {safe::interpDelete $i} + removeFile $returnScript +} -result ok +test safe-8.10 {safe source and return} -setup { + set returnScript [makeFile {return -level 2 "ok"} return.tcl] + catch {safe::interpDelete $i} +} -body { + safe::interpCreate $i + set token [safe::interpAddToAccessPath $i [file dirname $returnScript]] + $i eval [list apply {filename { + source $filename + error boom + }} $token/[file tail $returnScript]] +} -cleanup { + catch {safe::interpDelete $i} + removeFile $returnScript +} -result ok test safe-9.1 {safe interps' deleteHook} { set i "a"; @@ -355,7 +338,6 @@ test safe-9.1 {safe interps' deleteHook} { safe::interpCreate $i -deleteHook "testDelHook arg1 arg2"; list [interp eval $i exit] $res } {{} {arg1 arg2 a}} - test safe-9.2 {safe interps' error in deleteHook} { set i "a"; catch {safe::interpDelete $i} @@ -378,22 +360,18 @@ test safe-9.2 {safe interps' error in deleteHook} { $log \ [safe::setLogCmd $prevlog; unset log]; } {{} {arg1 arg2 a} {{NOTICE for slave a : About to delete} {ERROR for slave a : Delete hook error (being catched)} {NOTICE for slave a : Deleted}} {}} - - test safe-9.3 {dual specification of statics} { list [catch {safe::interpCreate -stat true -nostat} msg] $msg } {1 {conflicting values given for -statics and -noStatics}} - test safe-9.4 {dual specification of statics} { # no error shall occur safe::interpDelete [safe::interpCreate -stat false -nostat] } {} - test safe-9.5 {dual specification of nested} { list [catch {safe::interpCreate -nested 0 -nestedload} msg] $msg } {1 {conflicting values given for -nested and -nestedLoadOk}} -test safe-9.6 {interpConfigure widget like behaviour} { +test safe-9.6 {interpConfigure widget like behaviour} -body { # this test shall work, don't try to "fix it" unless # you *really* know what you are doing (ie you are me :p) -- dl list [set i [safe::interpCreate \ @@ -410,47 +388,40 @@ test safe-9.6 {interpConfigure widget like behaviour} { safe::interpConfigure $i]\ [safe::interpConfigure $i -deleteHook toto -nosta -nested 0; safe::interpConfigure $i] -} {{-accessPath /foo/bar -statics 0 -nested 1 -deleteHook {foo bar}} {-accessPath /foo/bar} {-nested 1} {-statics 0} {-deleteHook {foo bar}} {-accessPath /blah -statics 1 -nested 1 -deleteHook {foo bar}} {-accessPath /blah -statics 0 -nested 0 -deleteHook toto}} - +} -match glob -result {{-accessPath * -statics 0 -nested 1 -deleteHook {foo bar}} {-accessPath *} {-nested 1} {-statics 0} {-deleteHook {foo bar}} {-accessPath * -statics 1 -nested 1 -deleteHook {foo bar}} {-accessPath * -statics 0 -nested 0 -deleteHook toto}} # testing that nested and statics do what is advertised # (we use a static package : Tcltest) if {[catch {package require Tcltest} msg]} { - puts "This application hasn't been compiled with Tcltest" - puts "skipping remining safe test that relies on it." + testConstraint TcltestPackage 0 } else { - + testConstraint TcltestPackage 1 # we use the Tcltest package , which has no Safe_Init +} -test safe-10.1 {testing statics loading} { +test safe-10.1 {testing statics loading} TcltestPackage { set i [safe::interpCreate] list \ [catch {interp eval $i {load {} Tcltest}} msg] \ $msg \ [safe::interpDelete $i]; } {1 {can't use package in a safe interpreter: no Tcltest_SafeInit procedure} {}} - -test safe-10.2 {testing statics loading / -nostatics} { +test safe-10.2 {testing statics loading / -nostatics} TcltestPackage { set i [safe::interpCreate -nostatics] list \ [catch {interp eval $i {load {} Tcltest}} msg] \ $msg \ [safe::interpDelete $i]; } {1 {permission denied (static package)} {}} - - - -test safe-10.3 {testing nested statics loading / no nested by default} { +test safe-10.3 {testing nested statics loading / no nested by default} TcltestPackage { set i [safe::interpCreate] list \ [catch {interp eval $i {interp create x; load {} Tcltest x}} msg] \ $msg \ [safe::interpDelete $i]; } {1 {permission denied (nested load)} {}} - - -test safe-10.4 {testing nested statics loading / -nestedloadok} { +test safe-10.4 {testing nested statics loading / -nestedloadok} TcltestPackage { set i [safe::interpCreate -nestedloadok] list \ [catch {interp eval $i {interp create x; load {} Tcltest x}} msg] \ @@ -458,17 +429,13 @@ test safe-10.4 {testing nested statics loading / -nestedloadok} { [safe::interpDelete $i]; } {1 {can't use package in a safe interpreter: no Tcltest_SafeInit procedure} {}} - -} - test safe-11.1 {testing safe encoding} { set i [safe::interpCreate] list \ [catch {interp eval $i encoding} msg] \ $msg \ [safe::interpDelete $i]; -} {1 {wrong # args: should be "encoding option ?arg ...?"} {}} - +} {1 {wrong # args: should be "encoding option ..."} {}} test safe-11.2 {testing safe encoding} { set i [safe::interpCreate] list \ @@ -476,7 +443,6 @@ test safe-11.2 {testing safe encoding} { $msg \ [safe::interpDelete $i]; } {1 {wrong # args: should be "encoding system"} {}} - test safe-11.3 {testing safe encoding} { set i [safe::interpCreate] set result [catch { @@ -484,7 +450,6 @@ test safe-11.3 {testing safe encoding} { } msg] list $result $msg [safe::interpDelete $i] } {0 1 {}} - test safe-11.4 {testing safe encoding} { set i [safe::interpCreate] set result [catch { @@ -492,7 +457,6 @@ test safe-11.4 {testing safe encoding} { } msg] list $result $msg [safe::interpDelete $i] } {0 1 {}} - test safe-11.5 {testing safe encoding} { set i [safe::interpCreate] list \ @@ -500,8 +464,6 @@ test safe-11.5 {testing safe encoding} { $msg \ [safe::interpDelete $i]; } {0 foobar {}} - - test safe-11.6 {testing safe encoding} { set i [safe::interpCreate] list \ @@ -509,7 +471,6 @@ test safe-11.6 {testing safe encoding} { $msg \ [safe::interpDelete $i]; } {0 foobar {}} - test safe-11.7 {testing safe encoding} { set i [safe::interpCreate] list \ @@ -517,8 +478,6 @@ test safe-11.7 {testing safe encoding} { $msg \ [safe::interpDelete $i]; } {1 {wrong # args: should be "encoding convertfrom ?encoding? data"} {}} - - test safe-11.8 {testing safe encoding} { set i [safe::interpCreate] list \ @@ -527,7 +486,271 @@ test safe-11.8 {testing safe encoding} { [safe::interpDelete $i]; } {1 {wrong # args: should be "encoding convertto ?encoding? data"} {}} +test safe-12.1 {glob is restricted [Bug 2906841]} -setup { + set i [safe::interpCreate] +} -body { + $i eval glob ../* +} -returnCodes error -cleanup { + safe::interpDelete $i +} -result "permission denied" +test safe-12.2 {glob is restricted [Bug 2906841]} -setup { + set i [safe::interpCreate] +} -body { + $i eval glob -directory .. * +} -returnCodes error -cleanup { + safe::interpDelete $i +} -result "permission denied" +test safe-12.3 {glob is restricted [Bug 2906841]} -setup { + set i [safe::interpCreate] +} -body { + $i eval glob -join .. * +} -returnCodes error -cleanup { + safe::interpDelete $i +} -result "permission denied" +test safe-12.4 {glob is restricted [Bug 2906841]} -setup { + set i [safe::interpCreate] +} -body { + $i eval glob -nocomplain ../* +} -cleanup { + safe::interpDelete $i +} -result {} +test safe-12.5 {glob is restricted [Bug 2906841]} -setup { + set i [safe::interpCreate] +} -body { + $i eval glob -directory .. -nocomplain * +} -cleanup { + safe::interpDelete $i +} -result {} +test safe-12.6 {glob is restricted [Bug 2906841]} -setup { + set i [safe::interpCreate] +} -body { + $i eval glob -nocomplain -join .. * +} -cleanup { + safe::interpDelete $i +} -result {} +proc mkfile {filename} { + close [open $filename w] +} +#### New tests for Safe base glob, with patches @ Bug 2964715 +test safe-13.1 {glob is restricted [Bug 2964715]} -setup { + set i [safe::interpCreate] +} -body { + $i eval glob * +} -returnCodes error -cleanup { + safe::interpDelete $i +} -result {permission denied} +test safe-13.2 {mimic the valid glob call by ::tcl::tm::UnknownHandler [Bug 2964715]} -setup { + set i [safe::interpCreate] + set testdir [file join [temporaryDirectory] deletethisdir] + set testdir2 [file join $testdir deletemetoo] + set testfile [file join $testdir2 deleteme.tm] + file mkdir $testdir2 + mkfile $testfile +} -body { + ::safe::interpAddToAccessPath $i $testdir2 + set result [$i eval glob -nocomplain -directory $testdir2 *.tm] + if {$result eq [list $testfile]} { + return "glob match" + } else { + return "no match: $result" + } +} -cleanup { + safe::interpDelete $i + file delete -force $testdir +} -result {glob match} +test safe-13.3 {cf 13.2 but test glob failure when -directory is outside access path [Bug 2964715]} -setup { + set i [safe::interpCreate] + set testdir [file join [temporaryDirectory] deletethisdir] + set testdir2 [file join $testdir deletemetoo] + set testfile [file join $testdir2 deleteme.tm] + file mkdir $testdir2 + mkfile $testfile +} -body { + $i eval glob -directory $testdir2 *.tm +} -returnCodes error -cleanup { + safe::interpDelete $i + file delete -force $testdir +} -result {permission denied} +test safe-13.4 {another valid glob call [Bug 2964715]} -setup { + set i [safe::interpCreate] + set testdir [file join [temporaryDirectory] deletethisdir] + set testdir2 [file join $testdir deletemetoo] + set testfile [file join $testdir2 deleteme.tm] + file mkdir $testdir2 + mkfile $testfile +} -body { + ::safe::interpAddToAccessPath $i $testdir + ::safe::interpAddToAccessPath $i $testdir2 + set result [$i eval \ + glob -nocomplain -directory $testdir [file join deletemetoo *.tm]] + if {$result eq [list $testfile]} { + return "glob match" + } else { + return "no match: $result" + } +} -cleanup { + safe::interpDelete $i + file delete -force $testdir +} -result {glob match} +test safe-13.5 {as 13.4 but test glob failure when -directory is outside access path [Bug 2964715]} -setup { + set i [safe::interpCreate] + set testdir [file join [temporaryDirectory] deletethisdir] + set testdir2 [file join $testdir deletemetoo] + set testfile [file join $testdir2 deleteme.tm] + file mkdir $testdir2 + mkfile $testfile +} -body { + ::safe::interpAddToAccessPath $i $testdir2 + $i eval \ + glob -directory $testdir [file join deletemetoo *.tm] +} -returnCodes error -cleanup { + safe::interpDelete $i + file delete -force $testdir +} -result {permission denied} +test safe-13.6 {as 13.4 but test silent failure when result is outside access_path [Bug 2964715]} -setup { + set i [safe::interpCreate] + set testdir [file join [temporaryDirectory] deletethisdir] + set testdir2 [file join $testdir deletemetoo] + set testfile [file join $testdir2 deleteme.tm] + file mkdir $testdir2 + mkfile $testfile +} -body { + ::safe::interpAddToAccessPath $i $testdir + $i eval \ + glob -nocomplain -directory $testdir [file join deletemetoo *.tm] +} -cleanup { + safe::interpDelete $i + file delete -force $testdir +} -result {} +test safe-13.7 {mimic the glob call by tclPkgUnknown which gives a deliberate error in a safe interpreter [Bug 2964715]} -setup { + set i [safe::interpCreate] + set testdir [file join [temporaryDirectory] deletethisdir] + set testdir2 [file join $testdir deletemetoo] + set testfile [file join $testdir2 pkgIndex.tcl] + file mkdir $testdir2 + mkfile $testfile +} -body { + set safeTD [::safe::interpAddToAccessPath $i $testdir] + ::safe::interpAddToAccessPath $i $testdir2 + string map [list $safeTD EXPECTED] [$i eval [list \ + glob -directory $safeTD -join * pkgIndex.tcl]] +} -cleanup { + safe::interpDelete $i + file delete -force $testdir +} -result {{EXPECTED/deletemetoo/pkgIndex.tcl}} +# Note the extra {} around the result above; that's *expected* because of the +# format of virtual path roots. +test safe-13.8 {mimic the glob call by tclPkgUnknown without the deliberate error that is specific to pkgIndex.tcl [Bug 2964715]} -setup { + set i [safe::interpCreate] + set testdir [file join [temporaryDirectory] deletethisdir] + set testdir2 [file join $testdir deletemetoo] + set testfile [file join $testdir2 notIndex.tcl] + file mkdir $testdir2 + mkfile $testfile +} -body { + set safeTD [::safe::interpAddToAccessPath $i $testdir] + ::safe::interpAddToAccessPath $i $testdir2 + $i eval [list glob -directory $safeTD -join -nocomplain * notIndex.tcl] +} -cleanup { + safe::interpDelete $i + file delete -force $testdir +} -result {} +test safe-13.9 {as 13.8 but test glob failure when -directory is outside access path [Bug 2964715]} -setup { + set i [safe::interpCreate] + set testdir [file join [temporaryDirectory] deletethisdir] + set testdir2 [file join $testdir deletemetoo] + set testfile [file join $testdir2 notIndex.tcl] + file mkdir $testdir2 + mkfile $testfile +} -body { + ::safe::interpAddToAccessPath $i $testdir2 + set result [$i eval \ + glob -directory $testdir -join -nocomplain * notIndex.tcl] + if {$result eq [list $testfile]} { + return {glob match} + } else { + return "no match: $result" + } +} -cleanup { + safe::interpDelete $i + file delete -force $testdir +} -result {no match: } +test safe-13.10 {as 13.8 but test silent failure when result is outside access_path [Bug 2964715]} -setup { + set i [safe::interpCreate] + set testdir [file join [temporaryDirectory] deletethisdir] + set testdir2 [file join $testdir deletemetoo] + set testfile [file join $testdir2 notIndex.tcl] + file mkdir $testdir2 + mkfile $testfile +} -body { + ::safe::interpAddToAccessPath $i $testdir + $i eval glob -directory $testdir -join -nocomplain * notIndex.tcl +} -cleanup { + safe::interpDelete $i + file delete -force $testdir +} -result {} +rename mkfile {} + +#### Test for the module path +test safe-14.1 {Check that module path is the same as in the master interpreter [Bug 2964715]} -setup { + set i [safe::interpCreate] +} -body { + set tm {} + foreach token [$i eval ::tcl::tm::path list] { + lappend tm [dict get [set ::safe::S${i}(access_path,map)] $token] + } + return $tm +} -cleanup { + safe::interpDelete $i +} -result [::tcl::tm::path list] + +### ~ should have no special meaning in paths in safe interpreters +test safe-15.1 {Bug 2913625: defang ~ in paths} -setup { + set savedHOME $env(HOME) + set env(HOME) /foo/bar + set i [safe::interpCreate] +} -constraints knownBug -body { + $i eval { + set d [format %c 126] + list [file dirname $d] [file tail $d] \ + [file join [file dirname $d] [file tail $d]] + } +} -cleanup { + safe::interpDelete $i + set env(HOME) $savedHOME +} -result {~} +test safe-15.2 {Bug 2913625: defang ~user in paths} -setup { + set i [safe::interpCreate] + set user $tcl_platform(user) +} -constraints knownBug -body { + string map [list $user USER] [$i eval \ + "file join \[file dirname ~$user\] \[file tail ~$user\]"] +} -cleanup { + safe::interpDelete $i +} -result {~USER} +test safe-15.3 {Bug 2913625: defang ~ in globs} -setup { + set savedHOME $env(HOME) + set env(HOME) / + set i [safe::interpCreate] +} -constraints knownBug -body { + $i expose glob realglob + $i eval {realglob -nocomplain [join {~ / *} ""]} +} -cleanup { + safe::interpDelete $i + set env(HOME) $savedHOME +} -result {~} +test safe-15.4 {Bug 2913625: defang ~user in globs} -setup { + set i [safe::interpCreate] + set user $tcl_platform(user) +} -constraints knownBug -body { + $i expose glob realglob + string map [list $user USER] [$i eval [list\ + realglob -directory ~$user *]] +} -cleanup { + safe::interpDelete $i +} -result {~USER} + set ::auto_path $saveAutoPath # cleanup ::tcltest::cleanupTests diff --git a/tests/scan.test b/tests/scan.test index 0a70b0f..34351e0 100644 --- a/tests/scan.test +++ b/tests/scan.test @@ -16,7 +16,8 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -::tcltest::testConstraint 64bitInts [expr {0x80000000 > 0}] +testConstraint wideIs64bit \ + [expr {(wide(0x80000000) > 0) && (wide(0x8000000000000000) < 0)}] test scan-1.1 {BuildCharSet, CharInSet} { list [scan foo {%[^o]} x] $x @@ -338,9 +339,10 @@ test scan-4.61 {Tcl_ScanObjCmd, set errors} { # procedure that returns the range of integers proc int_range {} { - for { set MIN_INT 1 } { $MIN_INT > 0 } {} { + for { set MIN_INT 1 } { int($MIN_INT) > 0 } {} { set MIN_INT [expr { $MIN_INT << 1 }] } + set MIN_INT [expr {int($MIN_INT)}] set MAX_INT [expr { ~ $MIN_INT }] return [list $MIN_INT $MAX_INT] } @@ -415,7 +417,7 @@ test scan-5.11 {integer scanning} {nonPortable} { list [scan "4294967280 4294967280" "%u %d" a b] $a \ [expr {$b == -16 || $b == 0x7fffffff}] } {2 4294967280 1} -test scan-5.12 {integer scanning} {64bitInts} { +test scan-5.12 {integer scanning} {wideIs64bit} { set a {}; set b {}; set c {} list [scan "7810179016327718216,6c63546f6c6c6548,661432506755433062510" \ %ld,%lx,%lo a b c] $a $b $c @@ -425,6 +427,10 @@ test scan-5.13 {integer scanning and overflow} { scan {300000000 3000000000 30000000000} {%ld %ld %ld} } {300000000 3000000000 30000000000} +test scan-5.14 {integer scanning} { + scan 0xff %u +} 0 + test scan-6.1 {floating-point scanning} { set a {}; set b {}; set c {}; set d {} list [scan "2.1 -3.0e8 .99962 a" "%f%g%e%f" a b c d] $a $b $c $d @@ -449,10 +455,10 @@ test scan-6.5 {floating-point scanning} { set a {}; set b {}; set c {}; set d {} list [scan "4.6 99999.7 876.43e-1 118" "%f %f %f %e" a b c d] $a $b $c $d } {4 4.6 99999.7 87.643 118.0} -test scan-6.6 {floating-point scanning} {eformat} { +test scan-6.6 {floating-point scanning} { set a {}; set b {}; set c {}; set d {} list [scan "1.2345 697.0e-3 124 .00005" "%f %e %f %e" a b c d] $a $b $c $d -} {4 1.2345 0.697 124.0 5e-05} +} {4 1.2345 0.697 124.0 5e-5} test scan-6.7 {floating-point scanning} { set a {}; set b {}; set c {}; set d {} list [scan "4.6abc" "%f %f %f %f" a b c d] $a $b $c $d @@ -602,6 +608,12 @@ test scan-10.5 {miscellaneous tests} { set arr(2) {} list [catch {scan ab%c14 ab%%c%d arr(2)} msg] $msg $arr(2) } {0 1 14} +test scan-10.6 {miscellaneous tests} { + scan 5a {%i%[a]} +} {5 a} +test scan-10.7 {miscellaneous tests} { + scan {5 a} {%i%[a]} +} {5 {}} test scan-11.1 {alignment in results array (TCL_ALIGN)} { scan "123 13.6" "%s %f" a b @@ -676,6 +688,82 @@ test scan-13.8 {Tcl_ScanObjCmd, inline XPG case lots of arguments} { list [llength $msg] [lindex $msg 99] [lindex $msg 4] [lindex $msg 199] } {200 10 20 30} +# Big test for correct ordering of data in [expr] + +proc testIEEE {} { + variable ieeeValues + binary scan [binary format dd -1.0 1.0] c* c + switch -exact -- $c { + {0 0 0 0 0 0 -16 -65 0 0 0 0 0 0 -16 63} { + # little endian + binary scan \x00\x00\x00\x00\x00\x00\xf0\xff d \ + ieeeValues(-Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf0\xbf d \ + ieeeValues(-Normal) + binary scan \x00\x00\x00\x00\x00\x00\x08\x80 d \ + ieeeValues(-Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\x00\x80 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x00\x00\x00\x00\x00\x08\x00 d \ + ieeeValues(+Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x3f d \ + ieeeValues(+Normal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x7f d \ + ieeeValues(+Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf8\x7f d \ + ieeeValues(NaN) + set ieeeValues(littleEndian) 1 + return 1 + } + {-65 -16 0 0 0 0 0 0 63 -16 0 0 0 0 0 0} { + binary scan \xff\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Infinity) + binary scan \xbf\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Normal) + binary scan \x80\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Subnormal) + binary scan \x80\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Subnormal) + binary scan \x3f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Normal) + binary scan \x7f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Infinity) + binary scan \x7f\xf8\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(NaN) + set ieeeValues(littleEndian) 0 + return 1 + } + default { + return 0 + } + } +} + +testConstraint ieeeFloatingPoint [testIEEE] + +# scan infinities - not working + +test scan-14.1 {infinity} { + scan Inf %g d + set d +} Inf +test scan-14.2 {infinity} { + scan -Inf %g d + set d +} -Inf + +# TODO - also need to scan NaN's + # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/security.test b/tests/security.test index 26e7ec8..4a73160 100644 --- a/tests/security.test +++ b/tests/security.test @@ -18,7 +18,7 @@ if {[lsearch [namespace children] ::tcltest] == -1} { # If this proc becomes invoked, then there is a bug proc BUG {args} { - set ::BUG 1 + set ::BUG 1 } # Check and Clear the bug flag (to do before each test) @@ -31,7 +31,7 @@ proc CB {} { } -test sec-1.1 {tcl_endOfPreviousWord} { +test security-1.1 {tcl_endOfPreviousWord} { catch {tcl_startOfPreviousWord x {[BUG]}} CB } 0 @@ -39,14 +39,3 @@ test sec-1.1 {tcl_endOfPreviousWord} { # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - diff --git a/tests/set-old.test b/tests/set-old.test index 29e0002..2ef4019 100644 --- a/tests/set-old.test +++ b/tests/set-old.test @@ -548,7 +548,7 @@ test set-old-8.38.6 {array command, set with non-existent namespace} { } {1 {can't set "bogusnamespace::var": parent namespace doesn't exist}} test set-old-8.38.7 {array command, set with non-existent namespace} { list [catch {array set bogusnamespace::var(0) {a b}} msg] $msg -} {1 {can't set "bogusnamespace::var(0)": variable isn't array}} +} {1 {can't set "bogusnamespace::var(0)": parent namespace doesn't exist}} test set-old-8.39 {array command, size option} { catch {unset a} array size a diff --git a/tests/set.test b/tests/set.test index 8bfa9d2..9e0ddc0 100644 --- a/tests/set.test +++ b/tests/set.test @@ -11,10 +11,12 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } +testConstraint testset2 [llength [info commands testset2]] + catch {unset x} catch {unset i} @@ -188,9 +190,9 @@ test set-1.22 {TclCompileSetCmd: doing assignment, large int} { } 200000 test set-1.23 {TclCompileSetCmd: doing assignment, formatted int != int} { set i 25 - set i 000012345 ;# an octal literal == 5349 decimal + set i 0o00012345 ;# an octal literal == 5349 decimal list $i [incr i] -} {000012345 5350} +} {0o00012345 5350} test set-1.24 {TclCompileSetCmd: too many arguments} { set i 10 @@ -231,7 +233,8 @@ test set-1.26 {TclCompileSetCmd: various array constructs} { {b c} foo 51}]; # " just a matching end quote test set-2.1 {set command: runtime error, bad variable name} { - list [catch {set {"foo}} msg] $msg $errorInfo + unset -nocomplain {"foo} + list [catch {set {"foo}} msg] $msg $::errorInfo } {1 {can't read ""foo": no such variable} {can't read ""foo": no such variable while executing "set {"foo}"}} @@ -245,13 +248,14 @@ test set-2.3 {set command: runtime error, errors in reading variables} { set a(6) 44 list [catch {set a(18)} msg] $msg } {1 {can't read "a(18)": no such element in array}} -test set-2.4 {set command: runtime error, readonly variable} { +test set-2.4 {set command: runtime error, readonly variable} -body { proc readonly args {error "variable is read-only"} set x 123 trace var x w readonly - list [catch {set x 1} msg] $msg $errorInfo -} {1 {can't set "x": variable is read-only} {can't set "x": variable is read-only + list [catch {set x 1} msg] $msg $::errorInfo +} -match glob -result {1 {can't set "x": variable is read-only} {*variable is read-only while executing +* "set x 1"}} test set-2.5 {set command: runtime error, basic array operations} { list [catch {set a(other)} msg] $msg @@ -461,9 +465,9 @@ test set-3.22 {uncompiled set command: doing assignment, large int} { test set-3.23 {uncompiled set command: doing assignment, formatted int != int} { set z set $z i 25 - $z i 000012345 ;# an octal literal == 5349 decimal + $z i 0o00012345 ;# an octal literal == 5349 decimal list $i [incr i] -} {000012345 5350} +} {0o00012345 5350} test set-3.24 {uncompiled set command: too many arguments} { set z set @@ -473,8 +477,9 @@ test set-3.24 {uncompiled set command: too many arguments} { } {wrong # args: should be "set varName ?newValue?"} test set-4.1 {uncompiled set command: runtime error, bad variable name} { + unset -nocomplain {"foo} set z set - list [catch {$z {"foo}} msg] $msg $errorInfo + list [catch {$z {"foo}} msg] $msg $::errorInfo } {1 {can't read ""foo": no such variable} {can't read ""foo": no such variable while executing "$z {"foo}"}} @@ -490,14 +495,15 @@ test set-4.3 {uncompiled set command: runtime error, errors in reading variables $z a(6) 44 list [catch {$z a(18)} msg] $msg } {1 {can't read "a(18)": no such element in array}} -test set-4.4 {uncompiled set command: runtime error, readonly variable} { +test set-4.4 {uncompiled set command: runtime error, readonly variable} -body { set z set proc readonly args {error "variable is read-only"} $z x 123 trace var x w readonly - list [catch {$z x 1} msg] $msg $errorInfo -} {1 {can't set "x": variable is read-only} {can't set "x": variable is read-only + list [catch {$z x 1} msg] $msg $::errorInfo +} -match glob -result {1 {can't set "x": variable is read-only} {*variable is read-only while executing +* "$z x 1"}} test set-4.5 {uncompiled set command: runtime error, basic array operations} { set z set @@ -508,6 +514,13 @@ test set-4.6 {set command: runtime error, basic array operations} { list [catch {$z a} msg] $msg } {1 {can't read "a": variable is array}} +test set-5.1 {error on malformed array name} testset2 { + unset -nocomplain z + catch {testset2 z(a) b} msg + catch {testset2 z(b) a} msg1 + list $msg $msg1 +} {{can't read "z(a)(b)": variable isn't array} {can't read "z(b)(a)": variable isn't array}} + # cleanup catch {unset a} catch {unset b} diff --git a/tests/socket.test b/tests/socket.test index 448e7d2..0ae5abd 100644 --- a/tests/socket.test +++ b/tests/socket.test @@ -12,46 +12,46 @@ # Running socket tests with a remote server: # ------------------------------------------ -# +# # Some tests in socket.test depend on the existence of a remote server to # which they connect. The remote server must be an instance of tcltest and it # must run the script found in the file "remote.tcl" in this directory. You # can start the remote server on any machine reachable from the machine on # which you want to run the socket tests, by issuing: -# +# # tcltest remote.tcl -port 2048 # Or choose another port number. -# +# # If the machine you are running the remote server on has several IP # interfaces, you can choose which interface the server listens on for # connections by specifying the -address command line flag, so: -# +# # tcltest remote.tcl -address your.machine.com -# +# # These options can also be set by environment variables. On Unix, you can # type these commands to the shell from which the remote server is started: -# +# # shell% setenv serverPort 2048 # shell% setenv serverAddress your.machine.com -# +# # and subsequently you can start the remote server with: -# +# # tcltest remote.tcl -# +# # to have it listen on port 2048 on the interface your.machine.com. -# +# # When the server starts, it prints out a detailed message containing its # configuration information, and it will block until killed with a Ctrl-C. # Once the remote server exists, you can run the tests in socket.test with # the server by setting two Tcl variables: -# +# # % set remoteServerIP <name or address of machine on which server runs> # % set remoteServerPort 2048 -# +# # These variables are also settable from the environment. On Unix, you can: -# +# # shell% setenv remoteServerIP machine.where.server.runs # shell% senetv remoteServerPort 2048 -# +# # The preamble of the socket.test file checks to see if the variables are set # either in Tcl or in the environment; if they are, it attempts to connect to # the server. If the connection is successful, the tests using the remote @@ -109,45 +109,43 @@ set remoteProcChan "" set commandSocket "" if {$doTestsWithRemoteServer} { catch {close $commandSocket} - if {[catch {set commandSocket [socket $remoteServerIP \ - $remoteServerPort]}] != 0} { - if {[info commands exec] == ""} { - set noRemoteTestReason "can't exec" - set doTestsWithRemoteServer 0 - } else { - set remoteServerIP 127.0.0.1 - # Be *extra* careful in case this file is sourced from - # a directory other than the current one... - set remoteFile [file join [pwd] [file dirname [info script]] \ - remote.tcl] - if {[catch {set remoteProcChan \ - [open "|[list [interpreter] $remoteFile \ - -serverIsSilent \ - -port $remoteServerPort \ - -address $remoteServerIP]" \ - w+]} \ - msg] == 0} { - after 1000 - if {[catch {set commandSocket [socket $remoteServerIP \ - $remoteServerPort]} msg] == 0} { - fconfigure $commandSocket -translation crlf -buffering line - } else { - set noRemoteTestReason $msg - set doTestsWithRemoteServer 0 - } + if {![catch { + set commandSocket [socket $remoteServerIP $remoteServerPort] + }]} then { + fconfigure $commandSocket -translation crlf -buffering line + } elseif {![testConstraint exec]} { + set noRemoteTestReason "can't exec" + set doTestsWithRemoteServer 0 + } else { + set remoteServerIP 127.0.0.1 + # Be *extra* careful in case this file is sourced from + # a directory other than the current one... + set remoteFile [file join [pwd] [file dirname [info script]] \ + remote.tcl] + if {![catch { + set remoteProcChan [open "|[list \ + [interpreter] $remoteFile -serverIsSilent \ + -port $remoteServerPort -address $remoteServerIP]" w+] + } msg]} then { + after 1000 + if {[catch { + set commandSocket [socket $remoteServerIP $remoteServerPort] + } msg] == 0} then { + fconfigure $commandSocket -translation crlf -buffering line } else { - set noRemoteTestReason "$msg [interpreter]" + set noRemoteTestReason $msg set doTestsWithRemoteServer 0 } + } else { + set noRemoteTestReason "$msg [interpreter]" + set doTestsWithRemoteServer 0 } - } else { - fconfigure $commandSocket -translation crlf -buffering line } } # Some tests are run only if we are doing testing against a remote server. -set ::tcltest::testConstraints(doTestsWithRemoteServer) $doTestsWithRemoteServer -if {$doTestsWithRemoteServer == 0} { +testConstraint doTestsWithRemoteServer $doTestsWithRemoteServer +if {!$doTestsWithRemoteServer} { if {[string first s $::tcltest::verbose] != -1} { puts "Skipping tests with remote server. See tests/socket.test for" puts "information on how to run remote server." @@ -160,14 +158,13 @@ if {$doTestsWithRemoteServer == 0} { # remote server. # -if {$doTestsWithRemoteServer == 1} { +if {[testConstraint doTestsWithRemoteServer]} { proc sendCommand {c} { global commandSocket if {[eof $commandSocket]} { error "remote server disappeared" } - if {[catch {puts $commandSocket $c} msg]} { error "remote server disappaered: $msg" } @@ -199,17 +196,13 @@ test socket-1.1 {arg parsing for socket command} {socket} { } {1 {no argument given for -server option}} test socket-1.2 {arg parsing for socket command} {socket} { list [catch {socket -server foo} msg] $msg -} {1 {wrong # args: should be either: -socket ?-myaddr addr? ?-myport myport? ?-async? host port -socket -server command ?-myaddr addr? port}} +} {1 {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}} test socket-1.3 {arg parsing for socket command} {socket} { list [catch {socket -myaddr} msg] $msg } {1 {no argument given for -myaddr option}} test socket-1.4 {arg parsing for socket command} {socket} { list [catch {socket -myaddr 127.0.0.1} msg] $msg -} {1 {wrong # args: should be either: -socket ?-myaddr addr? ?-myport myport? ?-async? host port -socket -server command ?-myaddr addr? port}} +} {1 {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}} test socket-1.5 {arg parsing for socket command} {socket} { list [catch {socket -myport} msg] $msg } {1 {no argument given for -myport option}} @@ -218,25 +211,19 @@ test socket-1.6 {arg parsing for socket command} {socket} { } {1 {expected integer but got "xxxx"}} test socket-1.7 {arg parsing for socket command} {socket} { list [catch {socket -myport 2522} msg] $msg -} {1 {wrong # args: should be either: -socket ?-myaddr addr? ?-myport myport? ?-async? host port -socket -server command ?-myaddr addr? port}} +} {1 {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}} test socket-1.8 {arg parsing for socket command} {socket} { list [catch {socket -froboz} msg] $msg } {1 {bad option "-froboz": must be -async, -myaddr, -myport, or -server}} test socket-1.9 {arg parsing for socket command} {socket} { list [catch {socket -server foo -myport 2521 3333} msg] $msg -} {1 {Option -myport is not valid for servers}} +} {1 {option -myport is not valid for servers}} test socket-1.10 {arg parsing for socket command} {socket} { list [catch {socket host 2528 -junk} msg] $msg -} {1 {wrong # args: should be either: -socket ?-myaddr addr? ?-myport myport? ?-async? host port -socket -server command ?-myaddr addr? port}} +} {1 {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}} test socket-1.11 {arg parsing for socket command} {socket} { list [catch {socket -server callback 2520 --} msg] $msg -} {1 {wrong # args: should be either: -socket ?-myaddr addr? ?-myport myport? ?-async? host port -socket -server command ?-myaddr addr? port}} +} {1 {wrong # args: should be "socket ?-myaddr addr? ?-myport myport? ?-async? host port" or "socket -server command ?-myaddr addr? port"}} test socket-1.12 {arg parsing for socket command} {socket} { list [catch {socket foo badport} msg] $msg } {1 {expected integer but got "badport"}} @@ -284,7 +271,7 @@ test socket-2.1 {tcp connection} {socket stdio} { if [info exists port] { incr port -} else { +} else { set port [expr 2048 + [pid]%1024] } test socket-2.2 {tcp connection with client port specified} {socket stdio} { @@ -486,7 +473,7 @@ test socket-2.8 {echo server, loop 50 times, single connection} -constraints {so global x close $s set x done - } else { + } else { incr i puts $s $l } @@ -592,7 +579,7 @@ test socket-3.1 {socket conflict} {socket stdio} { file delete $path(script) set f [open $path(script) w] puts $f { - set f [socket -server accept 0] + set f [socket -server accept -myaddr 127.0.0.1 0] puts ready puts [lindex [fconfigure $f -sockname] 2] gets stdin @@ -602,7 +589,7 @@ test socket-3.1 {socket conflict} {socket stdio} { set f [open "|[list [interpreter] $path(script)]" r+] gets $f gets $f listen - set x [list [catch {socket -server accept $listen} msg] \ + set x [list [catch {socket -server accept -myaddr 127.0.0.1 $listen} msg] \ $msg] puts $f bye close $f @@ -616,7 +603,7 @@ test socket-3.2 {server with several clients} {socket stdio} { set t2 [after 31000 "set x timed_out"] set t3 [after 32000 "set x timed_out"] set counter 0 - set s [socket -server accept 0] + set s [socket -server accept -myaddr 127.0.0.1 0] proc accept {s a p} { fileevent $s readable [list echo $s] fconfigure $s -buffering line @@ -707,7 +694,7 @@ test socket-4.1 {server with several clients} {socket stdio} { set t1 [after 30000 "set x timed_out"] set t2 [after 31000 "set x timed_out"] set t3 [after 32000 "set x timed_out"] - set s [socket -server accept 0] + set s [socket -server accept -myaddr 127.0.0.1 0] set listen [lindex [fconfigure $s -sockname] 2] puts $p1 $listen puts $p2 $listen @@ -733,7 +720,7 @@ test socket-4.1 {server with several clients} {socket stdio} { } {{p1 bye done} {p2 bye done} {p3 bye done}} test socket-4.2 {byte order problems, socket numbers, htons} {socket} { set x ok - if {[catch {socket -server dodo 0x3000} msg]} { + if {[catch {socket -server dodo -myaddr 127.0.0.1 0x3000} msg]} { set x $msg } else { close $msg @@ -742,7 +729,7 @@ test socket-4.2 {byte order problems, socket numbers, htons} {socket} { } ok test socket-5.1 {byte order problems, socket numbers, htons} \ - {socket unixOnly notRoot} { + {socket unix notRoot} { set x {couldn't open socket: not owner} if {![catch {socket -server dodo 0x1} msg]} { set x {htons problem, should be disallowed, are you running as SU?} @@ -759,7 +746,7 @@ test socket-5.2 {byte order problems, socket numbers, htons} {socket} { set x } {couldn't open socket: port number too high} test socket-5.3 {byte order problems, socket numbers, htons} \ - {socket unixOnly notRoot} { + {socket unix notRoot} { set x {couldn't open socket: not owner} if {![catch {socket -server dodo 21} msg]} { set x {htons problem, should be disallowed, are you running as SU?} @@ -768,8 +755,14 @@ test socket-5.3 {byte order problems, socket numbers, htons} \ set x } {couldn't open socket: not owner} -test socket-6.1 {accept callback error} {socket stdio} { +test socket-6.1 {accept callback error} -constraints {socket stdio} -setup { + proc myHandler {msg options} { + variable x $msg + } + set handler [interp bgerror {}] + interp bgerror {} [namespace which myHandler] file delete $path(script) +} -body { set f [open $path(script) w] puts $f { gets stdin port @@ -777,21 +770,18 @@ test socket-6.1 {accept callback error} {socket stdio} { } close $f set f [open "|[list [interpreter] $path(script)]" r+] - proc bgerror args { - global x - set x $args - } proc accept {s a p} {expr 10 / 0} - set s [socket -server accept 0] + set s [socket -server accept -myaddr 127.0.0.1 0] puts $f [lindex [fconfigure $s -sockname] 2] close $f set timer [after 10000 "set x timed_out"] vwait x after cancel $timer close $s - rename bgerror {} set x -} {{divide by zero}} +} -cleanup { + interp bgerror {} $handler +} -result {divide by zero} test socket-7.1 {testing socket specific options} {socket stdio} { file delete $path(script) @@ -849,21 +839,21 @@ test socket-7.2 {testing socket specific options} {socket stdio} { [expr {[lindex $p 2] == $listen}] } {3 1 0} test socket-7.3 {testing socket specific options} {socket} { - set s [socket -server accept 0] + set s [socket -server accept -myaddr 127.0.0.1 0] set l [fconfigure $s] close $s update llength $l } 14 test socket-7.4 {testing socket specific options} {socket} { - set s [socket -server accept 0] + set s [socket -server accept -myaddr 127.0.0.1 0] proc accept {s a p} { global x set x [fconfigure $s -sockname] close $s } set listen [lindex [fconfigure $s -sockname] 2] - set s1 [socket [info hostname] $listen] + set s1 [socket 127.0.0.1 $listen] set timer [after 10000 "set x timed_out"] vwait x after cancel $timer @@ -905,14 +895,14 @@ test socket-8.1 {testing -async flag on sockets} {socket} { # problem, please email jyl@eng.sun.com. We have not observed this # failure on Solaris 2.5, so another option (instead of installing # these patches) is to upgrade to Solaris 2.5. - set s [socket -server accept 0] + set s [socket -server accept -myaddr 127.0.0.1 0] proc accept {s a p} { global x puts $s bye close $s set x done } - set s1 [socket -async [info hostname] [lindex [fconfigure $s -sockname] 2]] + set s1 [socket -async 127.0.0.1 [lindex [fconfigure $s -sockname] 2]] vwait x set z [gets $s1] close $s @@ -942,8 +932,8 @@ test socket-9.1 {testing spurious events} {socket} { fconfigure $s -buffering none -blocking off fileevent $s readable [list readlittle $s] } - set s [socket -server accept 0] - set c [socket [info hostname] [lindex [fconfigure $s -sockname] 2]] + set s [socket -server accept -myaddr 127.0.0.1 0] + set c [socket 127.0.0.1 [lindex [fconfigure $s -sockname] 2]] puts -nonewline $c 01234567890123456789012345678901234567890123456789 close $c set timer [after 10000 "set done timed_out"] @@ -959,7 +949,7 @@ test socket-9.2 {testing async write, fileevents, flush on close} {socket} { for {set i 0} {$i < 16} {incr i} { set secondblock "b$secondblock$secondblock" } - set l [socket -server accept 0] + set l [socket -server accept -myaddr 127.0.0.1 0] proc accept {s a p} { fconfigure $s -blocking 0 -translation lf -buffersize 16384 \ -buffering line @@ -980,7 +970,7 @@ test socket-9.2 {testing async write, fileevents, flush on close} {socket} { puts -nonewline $s $secondblock close $s } - set s [socket [info hostname] [lindex [fconfigure $l -sockname] 2]] + set s [socket 127.0.0.1 [lindex [fconfigure $l -sockname] 2]] fconfigure $s -blocking 0 -trans lf -buffering line set count 0 puts $s hello @@ -1019,7 +1009,7 @@ test socket-9.3 {testing EOF stickyness} {socket} { set done true set count {timer went off, eof is not sticky} close $c - } + } set count 0 set done false proc write_then_close {s} { @@ -1030,8 +1020,8 @@ test socket-9.3 {testing EOF stickyness} {socket} { fconfigure $s -buffering line -translation lf fileevent $s writable "write_then_close $s" } - set s [socket -server accept 0] - set c [socket [info hostname] [lindex [fconfigure $s -sockname] 2]] + set s [socket -server accept -myaddr 127.0.0.1 0] + set c [socket 127.0.0.1 [lindex [fconfigure $s -sockname] 2]] fconfigure $c -blocking off -buffering line -translation lf fileevent $c readable "count_to_eof $c" set timer [after 1000 timerproc] @@ -1042,17 +1032,26 @@ test socket-9.3 {testing EOF stickyness} {socket} { removeFile script -test socket-10.1 {testing socket accept callback error handling} {socket} { - set goterror 0 - proc bgerror args {global goterror; set goterror 1} - set s [socket -server accept 0] +test socket-10.1 {testing socket accept callback error handling} -constraints { + socket +} -setup { + variable goterror 0 + proc myHandler {msg options} { + variable goterror 1 + } + set handler [interp bgerror {}] + interp bgerror {} [namespace which myHandler] +} -body { + set s [socket -server accept -myaddr 127.0.0.1 0] proc accept {s a p} {close $s; error} set c [socket 127.0.0.1 [lindex [fconfigure $s -sockname] 2]] vwait goterror close $s close $c set goterror -} 1 +} -cleanup { + interp bgerror {} $handler +} -result 1 test socket-11.1 {tcp connection} {socket doTestsWithRemoteServer} { sendCommand { @@ -1155,8 +1154,8 @@ test socket-11.5 {remote echo, 50 lines} {socket doTestsWithRemoteServer} { set cnt } 50 test socket-11.6 {socket conflict} {socket doTestsWithRemoteServer} { - set s1 [socket -server accept 2836] - if {[catch {set s2 [socket -server accept 2836]} msg]} { + set s1 [socket -server accept -myaddr 127.0.0.1 2836] + if {[catch {set s2 [socket -server accept -myaddr 127.0.0.1 2836]} msg]} { set result [list 1 $msg] } else { set result [list 0 [lindex [fconfigure $s2 -sockname] 2]] @@ -1200,7 +1199,7 @@ test socket-11.7 {server with several clients} {socket doTestsWithRemoteServer} close $s3 sendCommand {close $socket10_9_test_server} set i -} 100 +} 100 test socket-11.8 {client with several servers} {socket doTestsWithRemoteServer} { sendCommand { set s1 [socket -server "accept 4003" 4003] @@ -1227,13 +1226,17 @@ test socket-11.8 {client with several servers} {socket doTestsWithRemoteServer} } set l } {4003 {} 1 4004 {} 1 4005 {} 1} -test socket-11.9 {accept callback error} {socket doTestsWithRemoteServer} { +test socket-11.9 {accept callback error} -constraints { + socket doTestsWithRemoteServer +} -setup { + proc myHandler {msg options} { + variable x $msg + } + set handler [interp bgerror {}] + interp bgerror {} [namespace which myHandler] +} -body { set s [socket -server accept 2836] proc accept {s a p} {expr 10 / 0} - proc bgerror args { - global x - set x $args - } if {[catch {sendCommand { set peername [fconfigure $callerSocket -peername] set s [socket [lindex $peername 0] 2836] @@ -1246,9 +1249,10 @@ test socket-11.9 {accept callback error} {socket doTestsWithRemoteServer} { vwait x after cancel $timer close $s - rename bgerror {} set x -} {{divide by zero}} +} -cleanup { + interp bgerror {} $handler +} -result {divide by zero} test socket-11.10 {testing socket specific options} {socket doTestsWithRemoteServer} { sendCommand { set socket10_12_test_server [socket -server accept 2836] @@ -1302,7 +1306,6 @@ test socket-11.11 {testing spurious events} {socket doTestsWithRemoteServer} { sendCommand {close $socket10_13_test_server} list $spurious $len $done } {0 2690 1} - test socket-11.12 {testing EOF stickyness} {socket doTestsWithRemoteServer} { set counter 0 set done 0 @@ -1336,7 +1339,6 @@ test socket-11.12 {testing EOF stickyness} {socket doTestsWithRemoteServer} { sendCommand {close $socket10_14_test_server} set done } {EOF is sticky} - test socket-11.13 {testing async write, async flush, async close} \ {socket doTestsWithRemoteServer} { proc readit {s} { @@ -1415,7 +1417,7 @@ test socket-12.1 {testing inheritance of server sockets} {socket stdio exec} { set f [open $path(script2) w] puts $f [list set tcltest [interpreter]] puts -nonewline $f { - set f [socket -server accept 0] + set f [socket -server accept -myaddr 127.0.0.1 0] puts [lindex [fconfigure $f -sockname] 2] proc accept { file addr port } { close $file @@ -1428,7 +1430,7 @@ test socket-12.1 {testing inheritance of server sockets} {socket stdio exec} { vwait forever } close $f - + # Launch script2 and wait 5 seconds ### exec [interpreter] script2 & @@ -1485,7 +1487,7 @@ test socket-12.2 {testing inheritance of client sockets} {socket stdio exec} { # Create the server socket - set server [socket -server accept 0] + set server [socket -server accept -myaddr 127.0.0.1 0] proc accept { file host port } { # When the client connects, establish the read handler global server @@ -1551,7 +1553,7 @@ test socket-12.3 {testing inheritance of accepted sockets} {socket stdio exec} { set f [open $path(script2) w] puts $f [list set tcltest [interpreter]] puts -nonewline $f { - set server [socket -server accept 0] + set server [socket -server accept -myaddr 127.0.0.1 0] puts stdout [lindex [fconfigure $server -sockname] 2] proc accept { file host port } } puts $f \{ @@ -1563,7 +1565,7 @@ test socket-12.3 {testing inheritance of accepted sockets} {socket stdio exec} { puts $f { after 1000 exit } - puts $f \} + puts $f \} puts $f { vwait forever } @@ -1612,7 +1614,7 @@ test socket-12.3 {testing inheritance of accepted sockets} {socket stdio exec} { } return } - + vwait x close $p @@ -1620,37 +1622,33 @@ test socket-12.3 {testing inheritance of accepted sockets} {socket stdio exec} { } {accepted socket was not inherited} test socket-13.1 {Testing use of shared socket between two threads} \ - -constraints {socket testthread} -setup { - + -constraints {socket testthread} -setup { threadReap - set path(script) [makeFile { - set f [socket -server accept 0] - set listen [lindex [fconfigure $f -sockname] 2] - proc accept {s a p} { + set f [socket -server accept -myaddr 127.0.0.1 0] + set listen [lindex [fconfigure $f -sockname] 2] + proc accept {s a p} { fileevent $s readable [list echo $s] fconfigure $s -buffering line } - proc echo {s} { - global i + proc echo {s} { + global i set l [gets $s] if {[eof $s]} { global x close $s set x done - } else { - incr i + } else { + incr i puts $s $l } - } - set i 0 - vwait x - close $f - - # thread cleans itself up. - testthread exit + } + set i 0 + vwait x + close $f + # thread cleans itself up. + testthread exit } script] - } -body { # create a thread set serverthread [testthread create [list source $path(script) ] ] @@ -1663,8 +1661,8 @@ test socket-13.1 {Testing use of shared socket between two threads} \ fconfigure $s -buffering line catch { - puts $s "hello" - gets $s result + puts $s "hello" + gets $s result } close $s update diff --git a/tests/source.test b/tests/source.test index db12707..641838c 100644 --- a/tests/source.test +++ b/tests/source.test @@ -18,12 +18,7 @@ if {[catch {package require tcltest 2.1}]} { } namespace eval ::tcl::test::source { - namespace import ::tcltest::test - namespace import ::tcltest::testConstraint - namespace import ::tcltest::cleanupTests - namespace import ::tcltest::makeFile - namespace import ::tcltest::removeFile - namespace import ::tcltest::customMatch + namespace import ::tcltest::* test source-1.1 {source command} -setup { set x "old x value" @@ -40,7 +35,6 @@ test source-1.1 {source command} -setup { } -cleanup { removeFile source.file } -result {22 33 44} - test source-1.2 {source command} -setup { set sourcefile [makeFile {list result} source.file] } -body { @@ -48,7 +42,6 @@ test source-1.2 {source command} -setup { } -cleanup { removeFile source.file } -result result - test source-1.3 {source command} -setup { set sourcefile [makeFile {} source.file] set fd [open $sourcefile w] @@ -92,7 +85,6 @@ test source-2.3 {source error conditions} -setup { (file "*source.file" line 3) invoked from within "source $sourcefile"}] - test source-2.4 {source error conditions} -setup { set sourcefile [makeFile {break} source.file] } -body { @@ -100,7 +92,6 @@ test source-2.4 {source error conditions} -setup { } -cleanup { removeFile source.file } -returnCodes break - test source-2.5 {source error conditions} -setup { set sourcefile [makeFile {continue} source.file] } -body { @@ -108,7 +99,6 @@ test source-2.5 {source error conditions} -setup { } -cleanup { removeFile source.file } -returnCodes continue - test source-2.6 {source error conditions} -setup { set sourcefile [makeFile {} _non_existent_] removeFile _non_existent_ @@ -117,21 +107,18 @@ test source-2.6 {source error conditions} -setup { } -match listGlob -result [list 1 \ {couldn't read file "*_non_existent_": no such file or directory} \ {POSIX ENOENT {no such file or directory}}] - test source-2.7 {utf-8 with BOM} -setup { set sourcefile [makeFile {} source.file] - set saveencoding [encoding system] } -body { - encoding system utf-8 set out [open $sourcefile w] + fconfigure $out -encoding utf-8 puts $out "\ufeffset y new-y" close $out set y old-y - source $sourcefile + source -encoding utf-8 $sourcefile return $y } -cleanup { removeFile $sourcefile - encoding system $saveencoding } -result {new-y} test source-3.1 {return in middle of source file} -setup { @@ -148,7 +135,6 @@ test source-3.1 {return in middle of source file} -setup { } -cleanup { removeFile source.file } -result {new-x old-y allDone} - test source-3.2 {return with special code etc.} -setup { set sourcefile [makeFile { set x new-x @@ -160,7 +146,6 @@ test source-3.2 {return with special code etc.} -setup { } -cleanup { removeFile source.file } -returnCodes break -result {Silly result} - test source-3.3 {return with special code etc.} -setup { set sourcefile [makeFile { set x new-x @@ -174,7 +159,6 @@ test source-3.3 {return with special code etc.} -setup { } -result {1 {Simulated error} {Simulated error while executing "source $sourcefile"} NONE} - test source-3.4 {return with special code etc.} -setup { set sourcefile [makeFile { set x new-x @@ -188,7 +172,6 @@ test source-3.4 {return with special code etc.} -setup { } -result {1 {} {Simulated errorInfo stuff invoked from within "source $sourcefile"} NONE} - test source-3.5 {return with special code etc.} -setup { set sourcefile [makeFile { set x new-x @@ -215,7 +198,6 @@ test source-6.1 {source is binary ok} -setup { } -cleanup { removeFile source.file } -result 5 - test source-6.2 {source skips everything after Ctrl-Z: Bug 2040} -setup { set sourcefile [makeFile "set x ab\32c" source.file] } -body { @@ -226,6 +208,78 @@ test source-6.2 {source skips everything after Ctrl-Z: Bug 2040} -setup { removeFile source.file } -result 2 +test source-7.1 {source -encoding test} -setup { + set sourcefile [makeFile {} source.file] + file delete $sourcefile + set f [open $sourcefile w] + fconfigure $f -encoding utf-8 + puts $f "set symbol(square-root) \u221A; set x correct" + close $f +} -body { + set x unset + source -encoding utf-8 $sourcefile + set x +} -cleanup { + removeFile source.file +} -result correct +test source-7.2 {source -encoding test} -setup { + # This tests for bad interactions between [source -encoding] + # and use of the Control-Z character (\u001A) as a cross-platform + # EOF character by [source]. Here we write out and the [source] a + # file that contains the byte \x1A, although not the character \u001A in + # the indicated encoding. + set sourcefile [makeFile {} source.file] + file delete $sourcefile + set f [open $sourcefile w] + fconfigure $f -encoding unicode + puts $f "set symbol(square-root) \u221A; set x correct" + close $f +} -body { + set x unset + source -encoding unicode $sourcefile + set x +} -cleanup { + removeFile source.file +} -result correct +test source-7.3 {source -encoding: syntax} -body { + # Have to spell out the -encoding option + source -e utf-8 no_file +} -returnCodes 1 -match glob -result {bad option*} +test source-7.4 {source -encoding: syntax} -setup { + set sourcefile [makeFile {} source.file] +} -body { + source -encoding no-such-encoding $sourcefile +} -cleanup { + removeFile source.file +} -returnCodes 1 -match glob -result {unknown encoding*} +test source-7.5 {source -encoding: correct operation} -setup { + set sourcefile [makeFile {} source.file] + file delete $sourcefile + set f [open $sourcefile w] + fconfigure $f -encoding utf-8 + puts $f "proc \u20ac {} {return foo}" + close $f +} -body { + source -encoding utf-8 $sourcefile + \u20ac +} -cleanup { + removeFile source.file + rename \u20ac {} +} -result foo +test source-7.6 {source -encoding: mismatch encoding error} -setup { + set sourcefile [makeFile {} source.file] + file delete $sourcefile + set f [open $sourcefile w] + fconfigure $f -encoding utf-8 + puts $f "proc \u20ac {} {return foo}" + close $f +} -body { + source -encoding ascii $sourcefile + \u20ac +} -cleanup { + removeFile source.file +} -returnCodes error -match glob -result {invalid command name*} + cleanupTests } namespace delete ::tcl::test::source diff --git a/tests/split.test b/tests/split.test index 5e168dd..f18f333 100644 --- a/tests/split.test +++ b/tests/split.test @@ -82,15 +82,3 @@ test split-2.2 {split errors} { catch {rename foo {}} ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/stack.test b/tests/stack.test index e029bbd..96bcb98 100644 --- a/tests/stack.test +++ b/tests/stack.test @@ -21,46 +21,60 @@ if {[lsearch [namespace children] ::tcltest] == -1} { # This doesn't catch all cases, for example threads of lower stacksize # can still squeak through. A core check is really needed. -- JH -if {[string equal $::tcl_platform(platform) "unix"]} { +testConstraint minStack2034 1 +if {[testConstraint unix]} { set stackSize [exec /bin/sh -c "ulimit -s"] - if {[string is integer $stackSize] && ($stackSize < 2400)} { + if {[string is integer $stackSize] && ($stackSize < 2034)} { puts stderr "WARNING: the default application stacksize of $stackSize\ may cause Tcl to\ncrash due to stack overflow before the\ - recursion limit is reached.\nA minimum stacksize of 2400\ + recursion limit is reached.\nA minimum stacksize of 2034\ kbytes is recommended.\nSkipping infinite recursion test." - ::tcltest::testConstraint minStack2400 0 - } else { - ::tcltest::testConstraint minStack2400 1 + testConstraint minStack2034 0 } -} else { - ::tcltest::testConstraint minStack2400 1 } -test stack-1.1 {maxNestingDepth reached on infinite recursion} {minStack2400} { - proc recurse {} { return [recurse] } - catch {recurse} rv - rename recurse {} - set rv -} {too many nested evaluations (infinite loop?)} +# +# Custom match to detect a stack overflow independently of the mechanism that +# triggered the error. +# -test stack-2.1 {maxNestingDepth reached on infinite recursion} {minStack2400} { - # do this in a slave to not mess with parent - set slave stack-2.1 - interp create $slave - $slave eval { interp alias {} unknown {} notaknownproc } - set msg [$slave eval { catch {foo} msg ; set msg }] - interp delete $slave - set msg -} {too many nested evaluations (infinite loop?)} +customMatch stackOverflow StackOverflow +proc StackOverflow {- res} { + set msgList [list \ + "too many nested evaluations (infinite loop?)"\ + "out of stack space (infinite loop?)"] + expr {$res in $msgList} +} -# Make sure that there is enough stack to run regexp even if we're -# close to the recursion limit. [Bug 947070] +test stack-1.1 {maxNestingDepth reached on infinite recursion} -constraints { + minStack2034 +} -body { + # do this in a sub process in case it segfaults + exec [interpreter] << { + proc recurse {} { recurse } + catch { recurse } rv + puts $rv + } +} -match stackOverflow -test stack-3.1 {enough room for regexp near recursion limit} \ - -constraints { win } \ - -setup { - set ::limit [interp recursionlimit {} 10000] - set ::depth 0 +test stack-2.1 {maxNestingDepth reached on infinite recursion} -constraints { + minStack2034 +} -body { + # do this in a sub process in case it segfaults + exec [interpreter] << { + interp alias {} unknown {} notaknownproc + catch { unknown } msg + puts $msg + } +} -match stackOverflow + +# Make sure that there is enough stack to run regexp even if we're +# close to the recursion limit. [Bug 947070] [Patch 746378] +test stack-3.1 {enough room for regexp near recursion limit} -body { + # do this in a sub process in case it segfaults + exec [interpreter] << { + interp recursionlimit {} 10000 + set depth 0 proc a { max } { if { [info level] < $max } { set ::depth [info level] @@ -69,15 +83,11 @@ test stack-3.1 {enough room for regexp near recursion limit} \ regexp {^ ?} x } } - list [catch { a 10001 }] - incr depth -3 + catch { a 10001 } set depth2 $depth - } -body { - list [catch { a $::depth } result] \ - $result [expr { $::depth2 - $::depth }] - } -cleanup { - interp recursionlimit {} $::limit - } -result {0 1 1} + puts [list [a $depth] [expr { $depth2 - $depth }]] + } +} -result {1 1} # cleanup ::tcltest::cleanupTests diff --git a/tests/string.test b/tests/string.test index 555e5ce..c3cfc3c 100644 --- a/tests/string.test +++ b/tests/string.test @@ -19,17 +19,15 @@ if {[lsearch [namespace children] ::tcltest] == -1} { # Some tests require the testobj command -set ::tcltest::testConstraints(testobj) \ - [expr {[info commands testobj] != {}}] -set ::tcltest::testConstraints(testindexobj) \ - [expr {[info commands testindexobj] != {}}] +testConstraint testobj [expr {[info commands testobj] != {}}] +testConstraint testindexobj [expr {[info commands testindexobj] != {}}] test string-1.1 {error conditions} { list [catch {string gorp a b} msg] $msg -} {1 {bad option "gorp": must be bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, tolower, toupper, totitle, trim, trimleft, trimright, wordend, or wordstart}} +} {1 {unknown or ambiguous subcommand "gorp": must be bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, reverse, tolower, totitle, toupper, trim, trimleft, trimright, wordend, or wordstart}} test string-1.2 {error conditions} { list [catch {string} msg] $msg -} {1 {wrong # args: should be "string option arg ?arg ...?"}} +} {1 {wrong # args: should be "string subcommand ?argument ...?"}} test string-2.1 {string compare, too few args} { list [catch {string compare a} msg] $msg @@ -173,13 +171,13 @@ test string-3.8 {string equal with length, unequal strings} { test string-4.1 {string first, too few args} { list [catch {string first a} msg] $msg -} {1 {wrong # args: should be "string first subString string ?startIndex?"}} +} {1 {wrong # args: should be "string first needleString haystackString ?startIndex?"}} test string-4.2 {string first, bad args} { list [catch {string first a b c} msg] $msg -} {1 {bad index "c": must be integer or end?-integer?}} +} {1 {bad index "c": must be integer?[+-]integer? or end?[+-]integer?}} test string-4.3 {string first, too many args} { list [catch {string first a b 5 d} msg] $msg -} {1 {wrong # args: should be "string first subString string ?startIndex?"}} +} {1 {wrong # args: should be "string first needleString haystackString ?startIndex?"}} test string-4.4 {string first} { string first bq abcdefgbcefgbqrs } 12 @@ -241,7 +239,7 @@ test string-5.6 {string index} { } {0 {}} test string-5.7 {string index} { list [catch {string index a xyz} msg] $msg -} {1 {bad index "xyz": must be integer or end?-integer?}} +} {1 {bad index "xyz": must be integer?[+-]integer? or end?[+-]integer?}} test string-5.8 {string index} { string index abc end } c @@ -274,12 +272,12 @@ test string-5.16 {string index, bytearray object with string obj shimmering} { binary scan $str H* dump string compare [string index $str 10] \x00 } 0 -test string-5.17 {string index, bad integer} { - list [catch {string index "abc" 08} msg] $msg -} {1 {bad index "08": must be integer or end?-integer? (looks like invalid octal number)}} -test string-5.18 {string index, bad integer} { - list [catch {string index "abc" end-00289} msg] $msg -} {1 {bad index "end-00289": must be integer or end?-integer? (looks like invalid octal number)}} +test string-5.17 {string index, bad integer} -body { + list [catch {string index "abc" 0o8} msg] $msg +} -match glob -result {1 {*invalid octal number*}} +test string-5.18 {string index, bad integer} -body { + list [catch {string index "abc" end-0o0289} msg] $msg +} -match glob -result {1 {*invalid octal number*}} test string-5.19 {string index, bytearray object out of bounds} { string index [binary format I* {0x50515253 0x52}] -1 } {} @@ -293,7 +291,7 @@ proc largest_int {} { # so we can test for overflow properly below on >32 bit systems set int 1 set exp 7; # assume we get at least 8 bits - while {$int > 0} { set int [expr {wide(1) << [incr exp]}] } + while {wide($int) > 0} { set int [expr {wide(1) << [incr exp]}] } return [expr {$int-1}] } @@ -311,10 +309,10 @@ test string-6.4 {string is, too many args} { } {1 {wrong # args: should be "string is class ?-strict? ?-failindex var? str"}} test string-6.5 {string is, class check} { list [catch {string is bogus str} msg] $msg -} {1 {bad class "bogus": must be alnum, alpha, ascii, control, boolean, digit, double, false, graph, integer, lower, print, punct, space, true, upper, wordchar, or xdigit}} +} {1 {bad class "bogus": must be alnum, alpha, ascii, control, boolean, digit, double, false, graph, integer, list, lower, print, punct, space, true, upper, wideinteger, wordchar, or xdigit}} test string-6.6 {string is, ambiguous class} { list [catch {string is al str} msg] $msg -} {1 {ambiguous class "al": must be alnum, alpha, ascii, control, boolean, digit, double, false, graph, integer, lower, print, punct, space, true, upper, wordchar, or xdigit}} +} {1 {ambiguous class "al": must be alnum, alpha, ascii, control, boolean, digit, double, false, graph, integer, list, lower, print, punct, space, true, upper, wideinteger, wordchar, or xdigit}} test string-6.7 {string is alpha, all ok} { string is alpha -strict -failindex var abc } 1 @@ -338,7 +336,7 @@ test string-6.13 {string is alnum, false} { list [string is alnum -failindex var abc1.23] $var } {0 4} test string-6.14 {string is alnum, unicode} { - string is alnum abcü + string is alnum abc\u00fc } 1 test string-6.15 {string is alpha, true} { string is alpha abc @@ -350,11 +348,11 @@ test string-6.17 {string is alpha, unicode} { string is alpha abc\374 } 1 test string-6.18 {string is ascii, true} { - string is ascii abc\u007Fend + string is ascii abc\u007Fend\u0000 } 1 test string-6.19 {string is ascii, false} { - list [string is ascii -fail var abcdef\u0080more] $var -} {0 6} + list [string is ascii -fail var abc\u0000def\u0080more] $var +} {0 7} test string-6.20 {string is boolean, true} { string is boolean true } 1 @@ -371,7 +369,7 @@ test string-6.24 {string is digit, true} { string is digit 0123456789 } 1 test string-6.25 {string is digit, false} { - list [string is digit -fail var 0123Ü567] $var + list [string is digit -fail var 0123\u00dc567] $var } {0 4} test string-6.26 {string is digit, false} { list [string is digit -fail var +123567] $var @@ -408,16 +406,18 @@ test string-6.36 {string is double, false} { } {0 0} test string-6.37 {string is double, false on int overflow} { # Make it the largest int recognizable, with one more digit for overflow + # Since bignums arrived in Tcl 8.5, the sense of this test changed. + # Now integer values that exceed native limits become bignums, and + # bignums can convert to doubles without error. list [string is double -fail var [largest_int]0] $var -} {0 -1} -test string-6.38 {string is double, false on underflow} { - catch {unset var} - list [string is double -fail var 123e-9999] $var -} {0 -1} -test string-6.39 {string is double, false} {nonPortable} { +} {1 0} +# string-6.38 removed, underflow on input is no longer an error. +test string-6.39 {string is double, false} { # This test is non-portable because IRIX thinks # that .e1 is a valid double - this is really a bug # on IRIX as .e1 should NOT be a valid double + # + # Portable now. Tcl 8.5 does its own double parsing. list [string is double -fail var .e1] $var } {0 0} @@ -478,8 +478,11 @@ test string-6.57 {string is integer, false} { list [string is integer -fail var " "] $var } {0 0} test string-6.58 {string is integer, false on bad octal} { - list [string is integer -fail var 036963] $var -} {0 3} + list [string is integer -fail var 0o36963] $var +} {0 4} +test string-6.58.1 {string is integer, false on bad octal} { + list [string is integer -fail var 0o36963] $var +} {0 4} test string-6.59 {string is integer, false on bad hex} { list [string is integer -fail var 0X345XYZ] $var } {0 5} @@ -487,7 +490,7 @@ test string-6.60 {string is lower, true} { string is lower abc } 1 test string-6.61 {string is lower, unicode true} { - string is lower abcüue + string is lower abc\u00fcue } 1 test string-6.62 {string is lower, false} { list [string is lower -fail var aBc] $var @@ -496,7 +499,7 @@ test string-6.63 {string is lower, false} { list [string is lower -fail var abc1] $var } {0 3} test string-6.64 {string is lower, unicode false} { - list [string is lower -fail var abÜUE] $var + list [string is lower -fail var ab\u00dcUE] $var } {0 2} test string-6.65 {string is space, true} { string is space " \t\n\v\f" @@ -534,7 +537,7 @@ test string-6.75 {string is upper, true} { string is upper ABC } 1 test string-6.76 {string is upper, unicode true} { - string is upper ABCÜUE + string is upper ABC\u00dcUE } 1 test string-6.77 {string is upper, false} { list [string is upper -fail var AbC] $var @@ -543,13 +546,13 @@ test string-6.78 {string is upper, false} { list [string is upper -fail var AB2C] $var } {0 2} test string-6.79 {string is upper, unicode false} { - list [string is upper -fail var ABCüue] $var + list [string is upper -fail var ABC\u00fcue] $var } {0 3} test string-6.80 {string is wordchar, true} { string is wordchar abc_123 } 1 test string-6.81 {string is wordchar, unicode true} { - string is wordchar abcüabÜAB\u5001 + string is wordchar abc\u00fcab\u00dcAB\u5001 } 1 test string-6.82 {string is wordchar, false} { list [string is wordchar -fail var abcd.ef] $var @@ -614,18 +617,74 @@ test string-6.94 {string is integer, 32-bit overflow} { set x 0x100000000 list [string is integer -failindex var [expr {$x}]] $var } {0 -1} +test string-6.95 {string is wideinteger, true} { + string is wideinteger +1234567890 +} 1 +test string-6.96 {string is wideinteger, true on type} { + string is wideinteger [expr wide(50.0)] +} 1 +test string-6.97 {string is wideinteger, true} { + string is wideinteger [list -10] +} 1 +test string-6.98 {string is wideinteger, true as hex} { + string is wideinteger 0xabcdef +} 1 +test string-6.99 {string is wideinteger, true as octal} { + string is wideinteger 0123456 +} 1 +test string-6.100 {string is wideinteger, true with whitespace} { + string is wideinteger " \n1234\v" +} 1 +test string-6.101 {string is wideinteger, false} { + list [string is wideinteger -fail var 123abc] $var +} {0 3} +test string-6.102 {string is wideinteger, false on overflow} { + list [string is wideinteger -fail var +[largest_int]0] $var +} {0 -1} +test string-6.103 {string is wideinteger, false} { + list [string is wideinteger -fail var [expr double(1)]] $var +} {0 1} +test string-6.104 {string is wideinteger, false} { + list [string is wideinteger -fail var " "] $var +} {0 0} +test string-6.105 {string is wideinteger, false on bad octal} { + list [string is wideinteger -fail var 0o36963] $var +} {0 4} +test string-6.105.1 {string is wideinteger, false on bad octal} { + list [string is wideinteger -fail var 0o36963] $var +} {0 4} +test string-6.106 {string is wideinteger, false on bad hex} { + list [string is wideinteger -fail var 0X345XYZ] $var +} {0 5} +test string-6.107 {string is integer, bad integers} { + # SF bug #634856 + set result "" + set numbers [list 1 +1 ++1 +-1 -+1 -1 --1 "- +1"] + foreach num $numbers { + lappend result [string is wideinteger -strict $num] + } + set result +} {1 1 0 0 0 1 0 0} +test string-6.108 {string is double, Bug 1382287} { + set x 2turtledoves + string is double $x + string is double $x +} 0 +test string-6.109 {string is double, Bug 1360532} { + string is double 1\u00a0 +} 0 catch {rename largest_int {}} test string-7.1 {string last, too few args} { list [catch {string last a} msg] $msg -} {1 {wrong # args: should be "string last subString string ?startIndex?"}} +} {1 {wrong # args: should be "string last needleString haystackString ?startIndex?"}} test string-7.2 {string last, bad args} { list [catch {string last a b c} msg] $msg -} {1 {bad index "c": must be integer or end?-integer?}} +} {1 {bad index "c": must be integer?[+-]integer? or end?[+-]integer?}} test string-7.3 {string last, too many args} { list [catch {string last a b c d} msg] $msg -} {1 {wrong # args: should be "string last subString string ?startIndex?"}} +} {1 {wrong # args: should be "string last needleString haystackString ?startIndex?"}} test string-7.4 {string last} { string la xxx xxxx123xx345x678 } 1 @@ -760,10 +819,10 @@ test string-10.18 {string map, empty argument} { test string-10.19 {string map, empty arguments} { string map -nocase {{} abc f bar {} def} foo } baroo -test string-10.20 {string map, nasty sharing crash from [Bug 1018562]} { - set a {a b} - string map $a $a -} {b b} +test string-10.20 {string map, dictionaries don't alter map ordering} { + set map {aa X a Y} + list [string map [dict create aa X a Y] aaa] [string map $map aaa] [dict size $map] [string map $map aaa] +} {XY XY 2 XY} test string-10.21 {string map, ABR checks} { string map {longstring foob} long } long @@ -794,6 +853,10 @@ test string-10.29 {string map, ABR checks} { test string-10.30 {string map, ABR checks} { string map {lon foob longstring bar} longlon } foobgfoob +test string-10.31 {string map, nasty sharing crash from [Bug 1018562]} { + set a {a b} + string map $a $a +} {b b} test string-11.1 {string match, too few args} { list [catch {string match a} msg] $msg @@ -822,9 +885,54 @@ test string-11.8 {string match} { test string-11.9 {string match} { string match *3*6*9 0123456789 } 1 +test string-11.9.1 {string match} { + string match *3*6*89 0123456789 +} 1 +test string-11.9.2 {string match} { + string match *3*456*89 0123456789 +} 1 +test string-11.9.3 {string match} { + string match *3*6* 0123456789 +} 1 +test string-11.9.4 {string match} { + string match *3*56* 0123456789 +} 1 +test string-11.9.5 {string match} { + string match *3*456*** 0123456789 +} 1 +test string-11.9.6 {string match} { + string match **3*456** 0123456789 +} 1 +test string-11.9.7 {string match} { + string match *3***456* 0123456789 +} 1 +test string-11.9.8 {string match} { + string match *3***\[456]* 0123456789 +} 1 +test string-11.9.9 {string match} { + string match *3***\[4-6]* 0123456789 +} 1 +test string-11.9.10 {string match} { + string match *3***\[4-6] 0123456789 +} 0 +test string-11.9.11 {string match} { + string match *3***\[4-6] 0123456 +} 1 test string-11.10 {string match} { string match *3*6*9 01234567890 } 0 +test string-11.10.1 {string match} { + string match *3*6*89 01234567890 +} 0 +test string-11.10.2 {string match} { + string match *3*456*89 01234567890 +} 0 +test string-11.10.3 {string match} { + string match **3*456*89 01234567890 +} 0 +test string-11.10.4 {string match} { + string match *3*456***89 01234567890 +} 0 test string-11.11 {string match} { string match a?c abc } 1 @@ -915,6 +1023,21 @@ test string-11.38 {string match case, reverse range} { test string-11.39 {string match, *\ case} { string match {*\abc} abc } 1 +test string-11.39.1 {string match, *\ case} { + string match {*ab\c} abc +} 1 +test string-11.39.2 {string match, *\ case} { + string match {*ab\*} ab* +} 1 +test string-11.39.3 {string match, *\ case} { + string match {*ab\*} abc +} 0 +test string-11.39.4 {string match, *\ case} { + string match {*ab\\*} {ab\c} +} 1 +test string-11.39.5 {string match, *\ case} { + string match {*ab\\*} {ab\*} +} 1 test string-11.40 {string match, *special case} { string match {*[ab]} abc } 0 @@ -1003,7 +1126,7 @@ test string-12.5 {string range, last > length} { string range abcdefghijklmnop 7 1000 } {hijklmnop} test string-12.6 {string range} { - string range abcdefghijklmnop 10 e + string range abcdefghijklmnop 10 end } {klmnop} test string-12.7 {string range, last < first} { string range abcdefghijklmnop 10 9 @@ -1022,15 +1145,15 @@ test string-12.11 {string range} { } {abcdefghijklmnop} test string-12.12 {string range} { list [catch {string range abc abc 1} msg] $msg -} {1 {bad index "abc": must be integer or end?-integer?}} +} {1 {bad index "abc": must be integer?[+-]integer? or end?[+-]integer?}} test string-12.13 {string range} { list [catch {string range abc 1 eof} msg] $msg -} {1 {bad index "eof": must be integer or end?-integer?}} +} {1 {bad index "eof": must be integer?[+-]integer? or end?[+-]integer?}} test string-12.14 {string range} { string range abcdefghijklmnop end-1 end } {op} test string-12.15 {string range} { - string range abcdefghijklmnop e 1000 + string range abcdefghijklmnop end 1000 } {p} test string-12.16 {string range} { string range abcdefghijklmnop end end-1 @@ -1050,6 +1173,7 @@ test string-12.19 {string range, bytearray object} { test string-12.20 {string range, out of bounds indices} { string range \u00ff 0 1 } \u00ff +# Bug 1410553 test string-12.21 {string range, regenerates correct reps, bug 1410553} { set bytes "\x00 \x03 \x41" set rxBuffer {} @@ -1065,6 +1189,11 @@ test string-12.21 {string range, regenerates correct reps, bug 1410553} { binary scan $rxCRC "H*" rxCRC_hex list $input_hex $rxBuffer_hex $rxCRC_hex } {000341 000341 0341} +test string-12.22 {string range, shimmering binary/index} { + set s 0000000001 + binary scan $s a* x + string range $s $s end +} 000000001 test string-13.1 {string repeat} { list [catch {string repeat} msg] $msg @@ -1128,7 +1257,7 @@ test string-14.6 {string replace} { string replace abcdefghijklmnop 7 1000 } {abcdefg} test string-14.7 {string replace} { - string replace abcdefghijklmnop 10 e + string replace abcdefghijklmnop 10 end } {abcdefghij} test string-14.8 {string replace} { string replace abcdefghijklmnop 10 9 @@ -1147,15 +1276,15 @@ test string-14.12 {string replace} { } {} test string-14.13 {string replace} { list [catch {string replace abc abc 1} msg] $msg -} {1 {bad index "abc": must be integer or end?-integer?}} +} {1 {bad index "abc": must be integer?[+-]integer? or end?[+-]integer?}} test string-14.14 {string replace} { list [catch {string replace abc 1 eof} msg] $msg -} {1 {bad index "eof": must be integer or end?-integer?}} +} {1 {bad index "eof": must be integer?[+-]integer? or end?[+-]integer?}} test string-14.15 {string replace} { string replace abcdefghijklmnop end-10 end-2 NEW } {abcdeNEWop} test string-14.16 {string replace} { - string replace abcdefghijklmnop 0 e foo + string replace abcdefghijklmnop 0 end foo } {foo} test string-14.17 {string replace} { string replace abcdefghijklmnop end end-1 @@ -1166,7 +1295,7 @@ test string-15.1 {string tolower too few args} { } {1 {wrong # args: should be "string tolower string ?first? ?last?"}} test string-15.2 {string tolower bad args} { list [catch {string tolower a b} msg] $msg -} {1 {bad index "b": must be integer or end?-integer?}} +} {1 {bad index "b": must be integer?[+-]integer? or end?[+-]integer?}} test string-15.3 {string tolower too many args} { list [catch {string tolower ABC 1 end oops} msg] $msg } {1 {wrong # args: should be "string tolower string ?first? ?last?"}} @@ -1197,7 +1326,7 @@ test string-16.1 {string toupper} { } {1 {wrong # args: should be "string toupper string ?first? ?last?"}} test string-16.2 {string toupper} { list [catch {string toupper a b} msg] $msg -} {1 {bad index "b": must be integer or end?-integer?}} +} {1 {bad index "b": must be integer?[+-]integer? or end?[+-]integer?}} test string-16.3 {string toupper} { list [catch {string toupper a 1 end oops} msg] $msg } {1 {wrong # args: should be "string toupper string ?first? ?last?"}} @@ -1228,7 +1357,7 @@ test string-17.1 {string totitle} { } {1 {wrong # args: should be "string totitle string ?first? ?last?"}} test string-17.2 {string totitle} { list [catch {string totitle a b} msg] $msg -} {1 {bad index "b": must be integer or end?-integer?}} +} {1 {bad index "b": must be integer?[+-]integer? or end?[+-]integer?}} test string-17.3 {string totitle} { string totitle abCDEf } {Abcdef} @@ -1291,7 +1420,7 @@ test string-20.1 {string trimright errors} { } {1 {wrong # args: should be "string trimright string ?chars?"}} test string-20.2 {string trimright errors} { list [catch {string trimg a} msg] $msg -} {1 {bad option "trimg": must be bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, tolower, toupper, totitle, trim, trimleft, trimright, wordend, or wordstart}} +} {1 {unknown or ambiguous subcommand "trimg": must be bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, reverse, tolower, totitle, toupper, trim, trimleft, trimright, wordend, or wordstart}} test string-20.3 {string trimright} { string trimright " XYZ " } { XYZ} @@ -1310,7 +1439,7 @@ test string-21.2 {string wordend} { } {1 {wrong # args: should be "string wordend string index"}} test string-21.3 {string wordend} { list [catch {string wordend a gorp} msg] $msg -} {1 {bad index "gorp": must be integer or end?-integer?}} +} {1 {bad index "gorp": must be integer?[+-]integer? or end?[+-]integer?}} test string-21.4 {string wordend} { string wordend abc. -1 } 3 @@ -1347,7 +1476,7 @@ test string-21.14 {string wordend, unicode} { test string-22.1 {string wordstart} { list [catch {string word a} msg] $msg -} {1 {ambiguous option "word": must be bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, tolower, toupper, totitle, trim, trimleft, trimright, wordend, or wordstart}} +} {1 {unknown or ambiguous subcommand "word": must be bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, reverse, tolower, totitle, toupper, trim, trimleft, trimright, wordend, or wordstart}} test string-22.2 {string wordstart} { list [catch {string wordstart a} msg] $msg } {1 {wrong # args: should be "string wordstart string index"}} @@ -1356,7 +1485,7 @@ test string-22.3 {string wordstart} { } {1 {wrong # args: should be "string wordstart string index"}} test string-22.4 {string wordstart} { list [catch {string wordstart a gorp} msg] $msg -} {1 {bad index "gorp": must be integer or end?-integer?}} +} {1 {bad index "gorp": must be integer?[+-]integer? or end?[+-]integer?}} test string-22.5 {string wordstart} { string wordstart "one two three_words" 400 } 8 @@ -1390,8 +1519,154 @@ test string-23.0 {string is boolean, Bug 1187123} testindexobj { catch {testindexobj $x foo bar soom} string is boolean $x } 0 +test string-23.1 {string is command with empty string} { + set s "" + list \ + [string is alnum $s] \ + [string is alpha $s] \ + [string is ascii $s] \ + [string is control $s] \ + [string is boolean $s] \ + [string is digit $s] \ + [string is double $s] \ + [string is false $s] \ + [string is graph $s] \ + [string is integer $s] \ + [string is lower $s] \ + [string is print $s] \ + [string is punct $s] \ + [string is space $s] \ + [string is true $s] \ + [string is upper $s] \ + [string is wordchar $s] \ + [string is xdigit $s] \ +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1} +test string-23.2 {string is command with empty string} { + set s "" + list \ + [string is alnum -strict $s] \ + [string is alpha -strict $s] \ + [string is ascii -strict $s] \ + [string is control -strict $s] \ + [string is boolean -strict $s] \ + [string is digit -strict $s] \ + [string is double -strict $s] \ + [string is false -strict $s] \ + [string is graph -strict $s] \ + [string is integer -strict $s] \ + [string is lower -strict $s] \ + [string is print -strict $s] \ + [string is punct -strict $s] \ + [string is space -strict $s] \ + [string is true -strict $s] \ + [string is upper -strict $s] \ + [string is wordchar -strict $s] \ + [string is xdigit -strict $s] \ + +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +test string-24.1 {string reverse command} -body { + string reverse +} -returnCodes error -result "wrong # args: should be \"string reverse string\"" +test string-24.2 {string reverse command} -body { + string reverse a b +} -returnCodes error -result "wrong # args: should be \"string reverse string\"" +test string-24.3 {string reverse command - shared string} { + set x abcde + string reverse $x +} edcba +test string-24.4 {string reverse command - unshared string} { + set x abc + set y de + string reverse $x$y +} edcba +test string-24.5 {string reverse command - shared unicode string} { + set x abcde\udead + string reverse $x +} \udeadedcba +test string-24.6 {string reverse command - unshared string} { + set x abc + set y de\udead + string reverse $x$y +} \udeadedcba +test string-24.7 {string reverse command - simple case} { + string reverse a +} a +test string-24.8 {string reverse command - simple case} { + string reverse \udead +} \udead +test string-24.9 {string reverse command - simple case} { + string reverse {} +} {} +test string-24.10 {string reverse command - corner case} { + set x \ubeef\udead + string reverse $x +} \udead\ubeef +test string-24.11 {string reverse command - corner case} { + set x \ubeef + set y \udead + string reverse $x$y +} \udead\ubeef +test string-24.12 {string reverse command - corner case} { + set x \ubeef + set y \udead + string is ascii [string reverse $x$y] +} 0 + +test string-25.1 {string is list} { + string is list {a b c} +} 1 +test string-25.2 {string is list} { + string is list "a \{b c" +} 0 +test string-25.3 {string is list} { + string is list {a {b c}d e} +} 0 +test string-25.4 {string is list} { + string is list {} +} 1 +test string-25.5 {string is list} { + string is list -strict {a b c} +} 1 +test string-25.6 {string is list} { + string is list -strict "a \{b c" +} 0 +test string-25.7 {string is list} { + string is list -strict {a {b c}d e} +} 0 +test string-25.8 {string is list} { + string is list -strict {} +} 1 +test string-25.9 {string is list} { + set x {} + list [string is list -failindex x {a b c}] $x +} {1 {}} +test string-25.10 {string is list} { + set x {} + list [string is list -failindex x "a \{b c"] $x +} {0 2} +test string-25.11 {string is list} { + set x {} + list [string is list -failindex x {a b {b c}d e}] $x +} {0 4} +test string-25.12 {string is list} { + set x {} + list [string is list -failindex x {}] $x +} {1 {}} +test string-25.13 {string is list} { + set x {} + list [string is list -failindex x { {b c}d e}] $x +} {0 2} +test string-25.14 {string is list} { + set x {} + list [string is list -failindex x "\uabcd {b c}d e"] $x +} {0 2} # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/stringComp.test b/tests/stringComp.test index 3c13581..2ce2010 100644 --- a/tests/stringComp.test +++ b/tests/stringComp.test @@ -22,17 +22,16 @@ if {[lsearch [namespace children] ::tcltest] == -1} { # Some tests require the testobj command -set ::tcltest::testConstraints(testobj) \ - [expr {[info commands testobj] != {}}] +testConstraint testobj [expr {[info commands testobj] != {}}] test stringComp-1.1 {error conditions} { proc foo {} {string gorp a b} list [catch {foo} msg] $msg -} {1 {bad option "gorp": must be bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, tolower, toupper, totitle, trim, trimleft, trimright, wordend, or wordstart}} +} {1 {unknown or ambiguous subcommand "gorp": must be bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, reverse, tolower, totitle, toupper, trim, trimleft, trimright, wordend, or wordstart}} test stringComp-1.2 {error conditions} { proc foo {} {string} list [catch {foo} msg] $msg -} {1 {wrong # args: should be "string option arg ?arg ...?"}} +} {1 {wrong # args: should be "string subcommand ?argument ...?"}} test stringComp-1.3 {error condition - undefined method during compile} { # We don't want this to complain about 'never' because it may never # be called, or string may get redefined. This must compile OK. @@ -221,15 +220,15 @@ test stringComp-3.8 {string equal with length, unequal strings} { test stringComp-4.1 {string first, too few args} { proc foo {} {string first a} list [catch {foo} msg] $msg -} {1 {wrong # args: should be "string first subString string ?startIndex?"}} +} {1 {wrong # args: should be "string first needleString haystackString ?startIndex?"}} test stringComp-4.2 {string first, bad args} { proc foo {} {string first a b c} list [catch {foo} msg] $msg -} {1 {bad index "c": must be integer or end?-integer?}} +} {1 {bad index "c": must be integer?[+-]integer? or end?[+-]integer?}} test stringComp-4.3 {string first, too many args} { proc foo {} {string first a b 5 d} list [catch {foo} msg] $msg -} {1 {wrong # args: should be "string first subString string ?startIndex?"}} +} {1 {wrong # args: should be "string first needleString haystackString ?startIndex?"}} test stringComp-4.4 {string first} { proc foo {} {string first bq abcdefgbcefgbqrs} foo @@ -302,7 +301,7 @@ test stringComp-5.6 {string index} { test stringComp-5.7 {string index} { proc foo {} {string index a xyz} list [catch {foo} msg] $msg -} {1 {bad index "xyz": must be integer or end?-integer?}} +} {1 {bad index "xyz": must be integer?[+-]integer? or end?[+-]integer?}} test stringComp-5.8 {string index} { proc foo {} {string index abc end} foo @@ -348,14 +347,14 @@ test stringComp-5.16 {string index, bytearray object with string obj shimmering} } foo } 0 -test stringComp-5.17 {string index, bad integer} { - proc foo {} {string index "abc" 08} +test stringComp-5.17 {string index, bad integer} -body { + proc foo {} {string index "abc" 0o8} list [catch {foo} msg] $msg -} {1 {bad index "08": must be integer or end?-integer? (looks like invalid octal number)}} -test stringComp-5.18 {string index, bad integer} { - proc foo {} {string index "abc" end-00289} +} -match glob -result {1 {*invalid octal number*}} +test stringComp-5.18 {string index, bad integer} -body { + proc foo {} {string index "abc" end-0o0289} list [catch {foo} msg] $msg -} {1 {bad index "end-00289": must be integer or end?-integer? (looks like invalid octal number)}} +} -match glob -result {1 {*invalid octal number*}} test stringComp-5.19 {string index, bytearray object out of bounds} { proc foo {} {string index [binary format I* {0x50515253 0x52}] -1} foo diff --git a/tests/stringObj.test b/tests/stringObj.test index 991b256..3b25592 100644 --- a/tests/stringObj.test +++ b/tests/stringObj.test @@ -17,20 +17,16 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -if {[info commands testobj] == {}} { - puts "This application hasn't been compiled with the \"testobj\"" - puts "command, so I can't test the Tcl type and object support." - ::tcltest::cleanupTests - return -} +testConstraint testobj [llength [info commands testobj]] +testConstraint testdstring [llength [info commands testdstring]] -test stringObj-1.1 {string type registration} { +test stringObj-1.1 {string type registration} testobj { set t [testobj types] set first [string first "string" $t] set result [expr {$first != -1}] } {1} -test stringObj-2.1 {Tcl_NewStringObj} { +test stringObj-2.1 {Tcl_NewStringObj} testobj { set result "" lappend result [testobj freeallvars] lappend result [teststringobj set 1 abcd] @@ -38,7 +34,7 @@ test stringObj-2.1 {Tcl_NewStringObj} { lappend result [testobj refcount 1] } {{} abcd string 2} -test stringObj-3.1 {Tcl_SetStringObj, existing "empty string" object} { +test stringObj-3.1 {Tcl_SetStringObj, existing "empty string" object} testobj { set result "" lappend result [testobj freeallvars] lappend result [testobj newobj 1] @@ -46,7 +42,7 @@ test stringObj-3.1 {Tcl_SetStringObj, existing "empty string" object} { lappend result [testobj type 1] lappend result [testobj refcount 1] } {{} {} xyz string 2} -test stringObj-3.2 {Tcl_SetStringObj, existing non-"empty string" object} { +test stringObj-3.2 {Tcl_SetStringObj, existing non-"empty string" object} testobj { set result "" lappend result [testobj freeallvars] lappend result [testintobj set 1 512] @@ -55,47 +51,47 @@ test stringObj-3.2 {Tcl_SetStringObj, existing non-"empty string" object} { lappend result [testobj refcount 1] } {{} 512 foo string 2} -test stringObj-4.1 {Tcl_SetObjLength procedure, string gets shorter} { +test stringObj-4.1 {Tcl_SetObjLength procedure, string gets shorter} testobj { testobj freeallvars teststringobj set 1 test teststringobj setlength 1 3 list [teststringobj length 1] [teststringobj length2 1] \ [teststringobj get 1] } {3 4 tes} -test stringObj-4.2 {Tcl_SetObjLength procedure, string gets longer} { +test stringObj-4.2 {Tcl_SetObjLength procedure, string gets longer} testobj { testobj freeallvars teststringobj set 1 abcdef teststringobj setlength 1 10 list [teststringobj length 1] [teststringobj length2 1] } {10 10} -test stringObj-4.3 {Tcl_SetObjLength procedure, string gets longer} { +test stringObj-4.3 {Tcl_SetObjLength procedure, string gets longer} testobj { testobj freeallvars teststringobj set 1 abcdef teststringobj append 1 xyzq -1 list [teststringobj length 1] [teststringobj length2 1] \ [teststringobj get 1] } {10 20 abcdefxyzq} -test stringObj-4.4 {Tcl_SetObjLength procedure, "expty string", length 0} { +test stringObj-4.4 {Tcl_SetObjLength procedure, "expty string", length 0} testobj { testobj freeallvars testobj newobj 1 teststringobj setlength 1 0 list [teststringobj length2 1] [teststringobj get 1] } {0 {}} -test stringObj-5.1 {Tcl_AppendToObj procedure, type conversion} { +test stringObj-5.1 {Tcl_AppendToObj procedure, type conversion} testobj { testobj freeallvars testintobj set2 1 43 teststringobj append 1 xyz -1 teststringobj get 1 } {43xyz} -test stringObj-5.2 {Tcl_AppendToObj procedure, length calculation} { +test stringObj-5.2 {Tcl_AppendToObj procedure, length calculation} testobj { testobj freeallvars teststringobj set 1 {x y } teststringobj append 1 bbCCddEE 4 teststringobj append 1 123 -1 teststringobj get 1 } {x y bbCC123} -test stringObj-5.3 {Tcl_AppendToObj procedure, reallocating space} { +test stringObj-5.3 {Tcl_AppendToObj procedure, reallocating space} testobj { testobj freeallvars teststringobj set 1 xyz teststringobj setlength 1 15 @@ -109,37 +105,37 @@ test stringObj-5.3 {Tcl_AppendToObj procedure, reallocating space} { [teststringobj get 1] } {15 15 16 32 xy12345678abcdef} -test stringObj-6.1 {Tcl_AppendStringsToObj procedure, type conversion} { +test stringObj-6.1 {Tcl_AppendStringsToObj procedure, type conversion} testobj { testobj freeallvars teststringobj set2 1 [list a b] teststringobj appendstrings 1 xyz { 1234 } foo teststringobj get 1 } {a bxyz 1234 foo} -test stringObj-6.2 {Tcl_AppendStringsToObj procedure, counting space} { +test stringObj-6.2 {Tcl_AppendStringsToObj procedure, counting space} testobj { testobj freeallvars teststringobj set 1 abc teststringobj appendstrings 1 list [teststringobj length 1] [teststringobj get 1] } {3 abc} -test stringObj-6.3 {Tcl_AppendStringsToObj procedure, counting space} { +test stringObj-6.3 {Tcl_AppendStringsToObj procedure, counting space} testobj { testobj freeallvars teststringobj set 1 abc teststringobj appendstrings 1 {} {} {} {} list [teststringobj length 1] [teststringobj get 1] } {3 abc} -test stringObj-6.4 {Tcl_AppendStringsToObj procedure, counting space} { +test stringObj-6.4 {Tcl_AppendStringsToObj procedure, counting space} testobj { testobj freeallvars teststringobj set 1 abc teststringobj appendstrings 1 { 123 } abcdefg list [teststringobj length 1] [teststringobj get 1] } {15 {abc 123 abcdefg}} -test stringObj-6.5 {Tcl_AppendStringsToObj procedure, don't double space if initial string empty} { +test stringObj-6.5 {Tcl_AppendStringsToObj procedure, don't double space if initial string empty} testobj { testobj freeallvars testobj newobj 1 teststringobj appendstrings 1 123 abcdefg list [teststringobj length 1] [teststringobj length2 1] [teststringobj get 1] } {10 10 123abcdefg} -test stringObj-6.6 {Tcl_AppendStringsToObj procedure, space reallocation} { +test stringObj-6.6 {Tcl_AppendStringsToObj procedure, space reallocation} testobj { testobj freeallvars teststringobj set 1 abc teststringobj setlength 1 10 @@ -148,7 +144,7 @@ test stringObj-6.6 {Tcl_AppendStringsToObj procedure, space reallocation} { list [teststringobj length 1] [teststringobj length2 1] \ [teststringobj get 1] } {10 10 ab34567890} -test stringObj-6.7 {Tcl_AppendStringsToObj procedure, space reallocation} { +test stringObj-6.7 {Tcl_AppendStringsToObj procedure, space reallocation} testobj { testobj freeallvars teststringobj set 1 abc teststringobj setlength 1 10 @@ -157,45 +153,45 @@ test stringObj-6.7 {Tcl_AppendStringsToObj procedure, space reallocation} { list [teststringobj length 1] [teststringobj length2 1] \ [teststringobj get 1] } {11 22 ab34567890x} -test stringObj-6.8 {Tcl_AppendStringsToObj procedure, object totally empty} { +test stringObj-6.8 {Tcl_AppendStringsToObj procedure, object totally empty} testobj { testobj freeallvars testobj newobj 1 teststringobj appendstrings 1 {} list [teststringobj length2 1] [teststringobj get 1] } {0 {}} -test stringObj-6.9 {Tcl_AppendStringToObj, pure unicode} { +test stringObj-6.9 {Tcl_AppendStringToObj, pure unicode} testobj { testobj freeallvars teststringobj set2 1 [string replace abc 1 1 d] teststringobj appendstrings 1 foo bar soom teststringobj get 1 } adcfoobarsoom -test stringObj-7.1 {SetStringFromAny procedure} { +test stringObj-7.1 {SetStringFromAny procedure} testobj { testobj freeallvars teststringobj set2 1 [list a b] teststringobj append 1 x -1 list [teststringobj length 1] [teststringobj length2 1] \ [teststringobj get 1] } {4 8 {a bx}} -test stringObj-7.2 {SetStringFromAny procedure, null object} { +test stringObj-7.2 {SetStringFromAny procedure, null object} testobj { testobj freeallvars testobj newobj 1 teststringobj appendstrings 1 {} list [teststringobj length 1] [teststringobj length2 1] \ [teststringobj get 1] } {0 0 {}} -test stringObj-7.3 {SetStringFromAny called with non-string obj} { +test stringObj-7.3 {SetStringFromAny called with non-string obj} testobj { set x 2345 list [incr x] [testobj objtype $x] [string index $x end] \ [testobj objtype $x] } {2346 int 6 string} -test stringObj-7.4 {SetStringFromAny called with string obj} { +test stringObj-7.4 {SetStringFromAny called with string obj} testobj { set x "abcdef" list [string length $x] [testobj objtype $x] \ [string length $x] [testobj objtype $x] } {6 string 6 string} -test stringObj-8.1 {DupStringInternalRep procedure} { +test stringObj-8.1 {DupStringInternalRep procedure} testobj { testobj freeallvars teststringobj set 1 {} teststringobj append 1 abcde -1 @@ -205,28 +201,28 @@ test stringObj-8.1 {DupStringInternalRep procedure} { [teststringobj length 2] [teststringobj length2 2] \ [teststringobj ualloc 2] [teststringobj get 2] } {5 10 0 abcde 5 5 0 abcde} -test stringObj-8.2 {DupUnicodeInternalRep, mixed width chars} { +test stringObj-8.2 {DupUnicodeInternalRep, mixed width chars} testobj { set x abcï¿®ghi string length $x set y $x list [testobj objtype $x] [testobj objtype $y] [append x "®¿ï"] \ [set y] [testobj objtype $x] [testobj objtype $y] } {string string abcï¿®ghi®¿ï abcï¿®ghi string string} -test stringObj-8.3 {DupUnicodeInternalRep, mixed width chars} { +test stringObj-8.3 {DupUnicodeInternalRep, mixed width chars} testobj { set x abcï¿®ghi set y $x string length $x list [testobj objtype $x] [testobj objtype $y] [append x "®¿ï"] \ [set y] [testobj objtype $x] [testobj objtype $y] } {string string abcï¿®ghi®¿ï abcï¿®ghi string string} -test stringObj-8.4 {DupUnicodeInternalRep, all byte-size chars} { +test stringObj-8.4 {DupUnicodeInternalRep, all byte-size chars} testobj { set x abcdefghi string length $x set y $x list [testobj objtype $x] [testobj objtype $y] [append x jkl] \ [set y] [testobj objtype $x] [testobj objtype $y] } {string string abcdefghijkl abcdefghi string string} -test stringObj-8.5 {DupUnicodeInternalRep, all byte-size chars} { +test stringObj-8.5 {DupUnicodeInternalRep, all byte-size chars} testobj { set x abcdefghi set y $x string length $x @@ -234,14 +230,16 @@ test stringObj-8.5 {DupUnicodeInternalRep, all byte-size chars} { [set y] [testobj objtype $x] [testobj objtype $y] } {string string abcdefghijkl abcdefghi string string} -test stringObj-9.1 {TclAppendObjToObj, mixed src & dest} { - set x abcï¿®ghi - set y ®¿ï +test stringObj-9.1 {TclAppendObjToObj, mixed src & dest} {testobj testdstring} { + set x abc\u00ef\u00bf\u00aeghi + testdstring free + testdstring append \u00ae\u00bf\u00ef -1 + set y [testdstring get] string length $x list [testobj objtype $x] [testobj objtype $y] [append x $y] \ - [set y] [testobj objtype $x] [testobj objtype $y] -} {string none abcï¿®ghi®¿ï ®¿ï string none} -test stringObj-9.2 {TclAppendObjToObj, mixed src & dest} { + [set y] [testobj objtype $x] [testobj objtype $y] +} "string none abc\u00ef\u00bf\u00aeghi\u00ae\u00bf\u00ef \u00ae\u00bf\u00ef string none" +test stringObj-9.2 {TclAppendObjToObj, mixed src & dest} testobj { set x abcï¿®ghi string length $x list [testobj objtype $x] [append x $x] [testobj objtype $x] \ @@ -249,61 +247,67 @@ test stringObj-9.2 {TclAppendObjToObj, mixed src & dest} { } {string abcï¿®ghiabcï¿®ghi string\ abcï¿®ghiabcï¿®ghiabcï¿®ghiabcï¿®ghi\ string} -test stringObj-9.3 {TclAppendObjToObj, mixed src & 1-byte dest} { +test stringObj-9.3 {TclAppendObjToObj, mixed src & 1-byte dest} {testobj testdstring} { set x abcdefghi - set y ®¿ï + testdstring free + testdstring append \u00ae\u00bf\u00ef -1 + set y [testdstring get] string length $x list [testobj objtype $x] [testobj objtype $y] [append x $y] \ - [set y] [testobj objtype $x] [testobj objtype $y] -} {string none abcdefghi®¿ï ®¿ï string none} -test stringObj-9.4 {TclAppendObjToObj, 1-byte src & dest} { + [set y] [testobj objtype $x] [testobj objtype $y] +} "string none abcdefghi\u00ae\u00bf\u00ef \u00ae\u00bf\u00ef string none" +test stringObj-9.4 {TclAppendObjToObj, 1-byte src & dest} {testobj testdstring} { set x abcdefghi - set y jkl + testdstring free + testdstring append jkl -1 + set y [testdstring get] string length $x list [testobj objtype $x] [testobj objtype $y] [append x $y] \ - [set y] [testobj objtype $x] [testobj objtype $y] + [set y] [testobj objtype $x] [testobj objtype $y] } {string none abcdefghijkl jkl string none} -test stringObj-9.5 {TclAppendObjToObj, 1-byte src & dest} { +test stringObj-9.5 {TclAppendObjToObj, 1-byte src & dest} testobj { set x abcdefghi string length $x list [testobj objtype $x] [append x $x] [testobj objtype $x] \ [append x $x] [testobj objtype $x] } {string abcdefghiabcdefghi string abcdefghiabcdefghiabcdefghiabcdefghi\ string} -test stringObj-9.6 {TclAppendObjToObj, 1-byte src & mixed dest} { - set x abcï¿®ghi - set y jkl +test stringObj-9.6 {TclAppendObjToObj, 1-byte src & mixed dest} {testobj testdstring} { + set x abc\u00ef\u00bf\u00aeghi + testdstring free + testdstring append jkl -1 + set y [testdstring get] string length $x list [testobj objtype $x] [testobj objtype $y] [append x $y] \ - [set y] [testobj objtype $x] [testobj objtype $y] -} {string none abcï¿®ghijkl jkl string none} -test stringObj-9.7 {TclAppendObjToObj, integer src & dest} { + [set y] [testobj objtype $x] [testobj objtype $y] +} "string none abc\u00ef\u00bf\u00aeghijkl jkl string none" +test stringObj-9.7 {TclAppendObjToObj, integer src & dest} testobj { set x [expr {4 * 5}] set y [expr {4 + 5}] list [testobj objtype $x] [testobj objtype $y] [append x $y] \ [testobj objtype $x] [append x $y] [testobj objtype $x] \ [testobj objtype $y] } {int int 209 string 2099 string int} -test stringObj-9.8 {TclAppendObjToObj, integer src & dest} { +test stringObj-9.8 {TclAppendObjToObj, integer src & dest} testobj { set x [expr {4 * 5}] list [testobj objtype $x] [append x $x] [testobj objtype $x] \ [append x $x] [testobj objtype $x] } {int 2020 string 20202020 string} -test stringObj-9.9 {TclAppendObjToObj, integer src & 1-byte dest} { +test stringObj-9.9 {TclAppendObjToObj, integer src & 1-byte dest} testobj { set x abcdefghi set y [expr {4 + 5}] string length $x list [testobj objtype $x] [testobj objtype $y] [append x $y] \ [set y] [testobj objtype $x] [testobj objtype $y] } {string int abcdefghi9 9 string int} -test stringObj-9.10 {TclAppendObjToObj, integer src & mixed dest} { +test stringObj-9.10 {TclAppendObjToObj, integer src & mixed dest} testobj { set x abcï¿®ghi set y [expr {4 + 5}] string length $x list [testobj objtype $x] [testobj objtype $y] [append x $y] \ [set y] [testobj objtype $x] [testobj objtype $y] } {string int abcï¿®ghi9 9 string int} -test stringObj-9.11 {TclAppendObjToObj, mixed src & 1-byte dest index check} { +test stringObj-9.11 {TclAppendObjToObj, mixed src & 1-byte dest index check} testobj { # bug 2678, in <=8.2.0, the second obj (the one to append) in # Tcl_AppendObjToObj was not correctly checked to see if it was # all one byte chars, so a unicode string would be added as one @@ -321,22 +325,26 @@ test stringObj-9.11 {TclAppendObjToObj, mixed src & 1-byte dest index check} { set q } {a b c d e f a ü b å c ï} -test stringObj-10.1 {Tcl_GetRange with all byte-size chars} { - set x "abcdef" +test stringObj-10.1 {Tcl_GetRange with all byte-size chars} {testobj testdstring} { + testdstring free + testdstring append abcdef -1 + set x [testdstring get] list [testobj objtype $x] [set y [string range $x 1 end-1]] \ - [testobj objtype $x] [testobj objtype $y] + [testobj objtype $x] [testobj objtype $y] } [list none bcde string string] -test stringObj-10.2 {Tcl_GetRange with some mixed width chars} { +test stringObj-10.2 {Tcl_GetRange with some mixed width chars} {testobj testdstring} { # Because this test does not use \uXXXX notation below instead of - # hardcoding the values, it may fail in multibyte locales. However, - # we need to test that the parser produces untyped objects even when there - # are high-ASCII characters in the input (like "ï"). I don't know what + # hardcoding the values, it may fail in multibyte locales. However, we + # need to test that the parser produces untyped objects even when there + # are high-ASCII characters in the input (like "ï"). I don't know what # else to do but inline those characters here. - set x "abcïïdef" + testdstring free + testdstring append "abc\u00ef\u00efdef" -1 + set x [testdstring get] list [testobj objtype $x] [set y [string range $x 1 end-1]] \ - [testobj objtype $x] [testobj objtype $y] + [testobj objtype $x] [testobj objtype $y] } [list none "bc\u00EF\u00EFde" string string] -test stringObj-10.3 {Tcl_GetRange with some mixed width chars} { +test stringObj-10.3 {Tcl_GetRange with some mixed width chars} testobj { # set x "abcïïdef" # Use \uXXXX notation below instead of hardcoding the values, otherwise # the test will fail in multibyte locales. @@ -345,7 +353,7 @@ test stringObj-10.3 {Tcl_GetRange with some mixed width chars} { list [testobj objtype $x] [set y [string range $x 1 end-1]] \ [testobj objtype $x] [testobj objtype $y] } [list string "bc\u00EF\u00EFde" string string] -test stringObj-10.4 {Tcl_GetRange with some mixed width chars} { +test stringObj-10.4 {Tcl_GetRange with some mixed width chars} testobj { # set a "ïa¿b®cï¿d®" # Use \uXXXX notation below instead of hardcoding the values, otherwise # the test will fail in multibyte locales. @@ -362,71 +370,71 @@ test stringObj-10.4 {Tcl_GetRange with some mixed width chars} { \u00AEc \ {}] -test stringObj-11.1 {UpdateStringOfString} { +test stringObj-11.1 {UpdateStringOfString} testobj { set x 2345 list [string index $x end] [testobj objtype $x] [incr x] \ [testobj objtype $x] } {5 string 2346 int} -test stringObj-12.1 {Tcl_GetUniChar with byte-size chars} { +test stringObj-12.1 {Tcl_GetUniChar with byte-size chars} testobj { set x "abcdefghi" list [string index $x 0] [string index $x 1] } {a b} -test stringObj-12.2 {Tcl_GetUniChar with byte-size chars} { +test stringObj-12.2 {Tcl_GetUniChar with byte-size chars} testobj { set x "abcdefghi" list [string index $x 3] [string index $x end] } {d i} -test stringObj-12.3 {Tcl_GetUniChar with byte-size chars} { +test stringObj-12.3 {Tcl_GetUniChar with byte-size chars} testobj { set x "abcdefghi" list [string index $x end] [string index $x end-1] } {i h} -test stringObj-12.4 {Tcl_GetUniChar with mixed width chars} { +test stringObj-12.4 {Tcl_GetUniChar with mixed width chars} testobj { string index "ïa¿b®c®¿dï" 0 } "ï" -test stringObj-12.5 {Tcl_GetUniChar} { +test stringObj-12.5 {Tcl_GetUniChar} testobj { set x "ïa¿b®c®¿dï" list [string index $x 4] [string index $x 0] } {® ï} -test stringObj-12.6 {Tcl_GetUniChar} { +test stringObj-12.6 {Tcl_GetUniChar} testobj { string index "ïa¿b®cï¿d®" end } "®" -test stringObj-13.1 {Tcl_GetCharLength with byte-size chars} { +test stringObj-13.1 {Tcl_GetCharLength with byte-size chars} testobj { set a "" list [string length $a] [string length $a] } {0 0} -test stringObj-13.2 {Tcl_GetCharLength with byte-size chars} { +test stringObj-13.2 {Tcl_GetCharLength with byte-size chars} testobj { string length "a" } 1 -test stringObj-13.3 {Tcl_GetCharLength with byte-size chars} { +test stringObj-13.3 {Tcl_GetCharLength with byte-size chars} testobj { set a "abcdef" list [string length $a] [string length $a] } {6 6} -test stringObj-13.4 {Tcl_GetCharLength with mixed width chars} { +test stringObj-13.4 {Tcl_GetCharLength with mixed width chars} testobj { string length "®" } 1 -test stringObj-13.5 {Tcl_GetCharLength with mixed width chars} { +test stringObj-13.5 {Tcl_GetCharLength with mixed width chars} testobj { # string length "○○" # Use \uXXXX notation below instead of hardcoding the values, otherwise # the test will fail in multibyte locales. string length "\u00EF\u00BF\u00AE\u00EF\u00BF\u00AE" } 6 -test stringObj-13.6 {Tcl_GetCharLength with mixed width chars} { +test stringObj-13.6 {Tcl_GetCharLength with mixed width chars} testobj { # set a "ïa¿b®cï¿d®" # Use \uXXXX notation below instead of hardcoding the values, otherwise # the test will fail in multibyte locales. set a "\u00EFa\u00BFb\u00AEc\u00EF\u00BFd\u00AE" list [string length $a] [string length $a] } {10 10} -test stringObj-13.7 {Tcl_GetCharLength with identity nulls} { +test stringObj-13.7 {Tcl_GetCharLength with identity nulls} testobj { # SF bug #684699 string length [encoding convertfrom identity \x00] } 1 -test stringObj-13.8 {Tcl_GetCharLength with identity nulls} { +test stringObj-13.8 {Tcl_GetCharLength with identity nulls} testobj { string length [encoding convertfrom identity \x01\x00\x02] } 3 -test stringObj-14.1 {Tcl_SetObjLength on pure unicode object} { +test stringObj-14.1 {Tcl_SetObjLength on pure unicode object} testobj { teststringobj set 1 foo teststringobj getunicode 1 teststringobj append 1 bar -1 @@ -437,40 +445,42 @@ test stringObj-14.1 {Tcl_SetObjLength on pure unicode object} { teststringobj get 1 } {bar} -test stringObj-15.1 {Tcl_Append*ToObj: self appends} { +test stringObj-15.1 {Tcl_Append*ToObj: self appends} testobj { teststringobj set 1 foo teststringobj appendself 1 0 } foofoo -test stringObj-15.2 {Tcl_Append*ToObj: self appends} { +test stringObj-15.2 {Tcl_Append*ToObj: self appends} testobj { teststringobj set 1 foo teststringobj appendself 1 1 } foooo -test stringObj-15.3 {Tcl_Append*ToObj: self appends} { +test stringObj-15.3 {Tcl_Append*ToObj: self appends} testobj { teststringobj set 1 foo teststringobj appendself 1 2 } fooo -test stringObj-15.4 {Tcl_Append*ToObj: self appends} { +test stringObj-15.4 {Tcl_Append*ToObj: self appends} testobj { teststringobj set 1 foo teststringobj appendself 1 3 } foo -test stringObj-15.5 {Tcl_Append*ToObj: self appends} { +test stringObj-15.5 {Tcl_Append*ToObj: self appends} testobj { teststringobj set 1 foo teststringobj appendself2 1 0 } foofoo -test stringObj-15.6 {Tcl_Append*ToObj: self appends} { +test stringObj-15.6 {Tcl_Append*ToObj: self appends} testobj { teststringobj set 1 foo teststringobj appendself2 1 1 } foooo -test stringObj-15.7 {Tcl_Append*ToObj: self appends} { +test stringObj-15.7 {Tcl_Append*ToObj: self appends} testobj { teststringobj set 1 foo teststringobj appendself2 1 2 } fooo -test stringObj-15.8 {Tcl_Append*ToObj: self appends} { +test stringObj-15.8 {Tcl_Append*ToObj: self appends} testobj { teststringobj set 1 foo teststringobj appendself2 1 3 } foo -testobj freeallvars +if {[testConstraint testobj]} { + testobj freeallvars +} # cleanup ::tcltest::cleanupTests diff --git a/tests/subst.test b/tests/subst.test index 77a3df7..933b1c6 100644 --- a/tests/subst.test +++ b/tests/subst.test @@ -12,7 +12,7 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2.1 namespace import -force ::tcltest::* } @@ -160,12 +160,12 @@ test subst-8.5 {return in a subst} { test subst-8.6 {return in a subst} { list [catch {subst {foo [return {x}; bogus code bar}} msg] $msg } {1 {missing close-bracket}} -test subst-8.7 {return in a subst, parse error} { +test subst-8.7 {return in a subst, parse error} -body { subst {foo [return {x} ; set a {}" ; stuff] bar} -} {foo xset a {}" ; stuff] bar} -test subst-8.8 {return in a subst, parse error} { +} -returnCodes error -result {extra characters after close-brace} +test subst-8.8 {return in a subst, parse error} -body { subst {foo [return {x} ; set bar baz ; set a {}" ; stuff] bar} -} {foo xset bar baz ; set a {}" ; stuff] bar} +} -returnCodes error -result {extra characters after close-brace} test subst-8.9 {return in a variable subst} { subst {foo $var([return {x}]) bar} } {foo x bar} @@ -208,12 +208,12 @@ test subst-11.2 {continue in a subst} { test subst-11.3 {continue in a subst} { subst {foo [if 1 { continue; bogus code}] bar} } {foo bar} -test subst-11.4 {continue in a subst, parse error} { +test subst-11.4 {continue in a subst, parse error} -body { subst {foo [continue ; set a {}{} ; stuff] bar} -} {foo set a {}{} ; stuff] bar} -test subst-11.5 {continue in a subst, parse error} { +} -returnCodes error -result {extra characters after close-brace} +test subst-11.5 {continue in a subst, parse error} -body { subst {foo [continue ;set bar baz ;set a {}{} ; stuff] bar} -} {foo set bar baz ;set a {}{} ; stuff] bar} +} -returnCodes error -result {extra characters after close-brace} test subst-11.6 {continue in a variable subst} { subst {foo $var([continue]) bar} } {foo bar} @@ -235,24 +235,24 @@ test subst-12.2 {nasty case, Bug 1036649} { test subst-12.3 {nasty case, Bug 1036649} { set x 0 for {set i 0} {$i < 10} {incr i} { - set res [list [catch {subst "\[incr x;"} msg] $msg] - if {$msg ne "missing close-bracket"} break + set res [list [catch {subst "\[incr x;"} msg] $msg] + if {$msg ne "missing close-bracket"} break } list $res $x } {{1 {missing close-bracket}} 10} test subst-12.4 {nasty case, Bug 1036649} { set x 0 for {set i 0} {$i < 10} {incr i} { - set res [list [catch {subst "\[incr x; "} msg] $msg] - if {$msg ne "missing close-bracket"} break + set res [list [catch {subst "\[incr x; "} msg] $msg] + if {$msg ne "missing close-bracket"} break } list $res $x } {{1 {missing close-bracket}} 10} test subst-12.5 {nasty case, Bug 1036649} { set x 0 for {set i 0} {$i < 10} {incr i} { - set res [list [catch {subst "\[incr x"} msg] $msg] - if {$msg ne "missing close-bracket"} break + set res [list [catch {subst "\[incr x"} msg] $msg] + if {$msg ne "missing close-bracket"} break } list $res $x } {{1 {missing close-bracket}} 0} diff --git a/tests/switch.test b/tests/switch.test index 007456f..f04f636 100644 --- a/tests/switch.test +++ b/tests/switch.test @@ -12,104 +12,173 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } test switch-1.1 {simple patterns} { - switch a a {format 1} b {format 2} c {format 3} default {format 4} + switch a a {subst 1} b {subst 2} c {subst 3} default {subst 4} } 1 test switch-1.2 {simple patterns} { - switch b a {format 1} b {format 2} c {format 3} default {format 4} + switch b a {subst 1} b {subst 2} c {subst 3} default {subst 4} } 2 test switch-1.3 {simple patterns} { - switch x a {format 1} b {format 2} c {format 3} default {format 4} + switch x a {subst 1} b {subst 2} c {subst 3} default {subst 4} } 4 test switch-1.4 {simple patterns} { - switch x a {format 1} b {format 2} c {format 3} + switch x a {subst 1} b {subst 2} c {subst 3} } {} test switch-1.5 {simple pattern matches many times} { - switch b a {format 1} b {format 2} b {format 3} b {format 4} + switch b a {subst 1} b {subst 2} b {subst 3} b {subst 4} } 2 test switch-1.6 {simple patterns} { - switch default a {format 1} default {format 2} c {format 3} default {format 4} + switch default a {subst 1} default {subst 2} c {subst 3} default {subst 4} } 2 test switch-1.7 {simple patterns} { - switch x a {format 1} default {format 2} c {format 3} default {format 4} + switch x a {subst 1} default {subst 2} c {subst 3} default {subst 4} +} 4 +test switch-1.8 {simple patterns with -nocase} { + switch -nocase b a {subst 1} b {subst 2} c {subst 3} default {subst 4} +} 2 +test switch-1.9 {simple patterns with -nocase} { + switch -nocase B a {subst 1} b {subst 2} c {subst 3} default {subst 4} +} 2 +test switch-1.10 {simple patterns with -nocase} { + switch -nocase b a {subst 1} B {subst 2} c {subst 3} default {subst 4} +} 2 +test switch-1.11 {simple patterns with -nocase} { + switch -nocase x a {subst 1} default {subst 2} c {subst 3} default {subst 4} } 4 test switch-2.1 {single-argument form for pattern/command pairs} { switch b { - a {format 1} - b {format 2} - default {format 6} + a {subst 1} + b {subst 2} + default {subst 6} } } {2} -test switch-2.2 {single-argument form for pattern/command pairs} { - list [catch {switch z {a 2 b}} msg] $msg -} {1 {extra switch pattern with no body}} +test switch-2.2 {single-argument form for pattern/command pairs} -body { + switch z {a 2 b} +} -returnCodes error -result {extra switch pattern with no body} test switch-3.1 {-exact vs. -glob vs. -regexp} { switch -exact aaaab { - ^a*b$ {concat regexp} - *b {concat glob} - aaaab {concat exact} - default {concat none} + ^a*b$ {subst regexp} + *b {subst glob} + aaaab {subst exact} + default {subst none} } } exact test switch-3.2 {-exact vs. -glob vs. -regexp} { switch -regexp aaaab { - ^a*b$ {concat regexp} - *b {concat glob} - aaaab {concat exact} - default {concat none} + ^a*b$ {subst regexp} + *b {subst glob} + aaaab {subst exact} + default {subst none} } } regexp test switch-3.3 {-exact vs. -glob vs. -regexp} { switch -glob aaaab { - ^a*b$ {concat regexp} - *b {concat glob} - aaaab {concat exact} - default {concat none} + ^a*b$ {subst regexp} + *b {subst glob} + aaaab {subst exact} + default {subst none} } } glob test switch-3.4 {-exact vs. -glob vs. -regexp} { - switch aaaab {^a*b$} {concat regexp} *b {concat glob} \ - aaaab {concat exact} default {concat none} + switch aaaab {^a*b$} {subst regexp} *b {subst glob} \ + aaaab {subst exact} default {subst none} } exact test switch-3.5 {-exact vs. -glob vs. -regexp} { switch -- -glob { - ^g.*b$ {concat regexp} - -* {concat glob} - -glob {concat exact} - default {concat none} + ^g.*b$ {subst regexp} + -* {subst glob} + -glob {subst exact} + default {subst none} + } +} exact +test switch-3.6 {-exact vs. -glob vs. -regexp} -body { + switch -foo a b c +} -returnCodes error -result {bad option "-foo": must be -exact, -glob, -indexvar, -matchvar, -nocase, -regexp, or --} +test switch-3.7 {-exact vs. -glob vs. -regexp with -nocase} { + switch -exact -nocase aaaab { + ^a*b$ {subst regexp} + *b {subst glob} + aaaab {subst exact} + default {subst none} + } +} exact +test switch-3.8 {-exact vs. -glob vs. -regexp with -nocase} { + switch -regexp -nocase aaaab { + ^a*b$ {subst regexp} + *b {subst glob} + aaaab {subst exact} + default {subst none} + } +} regexp +test switch-3.9 {-exact vs. -glob vs. -regexp with -nocase} { + switch -glob -nocase aaaab { + ^a*b$ {subst regexp} + *b {subst glob} + aaaab {subst exact} + default {subst none} } +} glob +test switch-3.10 {-exact vs. -glob vs. -regexp with -nocase} { + switch -nocase aaaab {^a*b$} {subst regexp} *b {subst glob} \ + aaaab {subst exact} default {subst none} } exact -test switch-3.6 {-exact vs. -glob vs. -regexp} { - list [catch {switch -foo a b c} msg] $msg -} {1 {bad option "-foo": must be -exact, -glob, -regexp, or --}} +test switch-3.11 {-exact vs. -glob vs. -regexp with -nocase} { + switch -nocase -- -glob { + ^g.*b$ {subst regexp} + -* {subst glob} + -glob {subst exact} + default {subst none} + } +} exact +test switch-3.12 {-exact vs. -glob vs. -regexp} { + switch -exa Foo Foo {set result OK} +} OK +test switch-3.13 {-exact vs. -glob vs. -regexp} { + switch -gl Foo Fo? {set result OK} +} OK +test switch-3.14 {-exact vs. -glob vs. -regexp} { + switch -re Foo Fo. {set result OK} +} OK +test switch-3.15 {-exact vs. -glob vs. -regexp} -body { + switch -exact -exact Foo Foo {set result OK} +} -returnCodes error -result {bad option "-exact": -exact option already found} +test switch-3.16 {-exact vs. -glob vs. -regexp} -body { + switch -exact -glob Foo Foo {set result OK} +} -returnCodes error -result {bad option "-glob": -exact option already found} +test switch-3.17 {-exact vs. -glob vs. -regexp} -body { + switch -glob -regexp Foo Foo {set result OK} +} -returnCodes error -result {bad option "-regexp": -glob option already found} +test switch-3.18 {-exact vs. -glob vs. -regexp} -body { + switch -regexp -glob Foo Foo {set result OK} +} -returnCodes error -result {bad option "-glob": -regexp option already found} test switch-4.1 {error in executed command} { - list [catch {switch a a {error "Just a test"} default {format 1}} msg] \ - $msg $errorInfo + list [catch {switch a a {error "Just a test"} default {subst 1}} msg] \ + $msg $::errorInfo } {1 {Just a test} {Just a test while executing "error "Just a test"" ("a" arm line 1) invoked from within -"switch a a {error "Just a test"} default {format 1}"}} -test switch-4.2 {error: not enough args} { - list [catch {switch} msg] $msg -} {1 {wrong # args: should be "switch ?switches? string pattern body ... ?default body?"}} -test switch-4.3 {error: pattern with no body} { - list [catch {switch a b} msg] $msg -} {1 {extra switch pattern with no body}} -test switch-4.4 {error: pattern with no body} { - list [catch {switch a b {format 1} c} msg] $msg -} {1 {extra switch pattern with no body}} +"switch a a {error "Just a test"} default {subst 1}"}} +test switch-4.2 {error: not enough args} -returnCodes error -body { + switch +} -result {wrong # args: should be "switch ?switches? string pattern body ... ?default body?"} +test switch-4.3 {error: pattern with no body} -body { + switch a b +} -returnCodes error -result {extra switch pattern with no body} +test switch-4.4 {error: pattern with no body} -body { + switch a b {subst 1} c +} -returnCodes error -result {extra switch pattern with no body} test switch-4.5 {error in default command} { list [catch {switch foo a {error switch1} b {error switch 3} \ - default {error switch2}} msg] $msg $errorInfo + default {error switch2}} msg] $msg $::errorInfo } {1 switch2 {switch2 while executing "error switch2" @@ -117,30 +186,30 @@ test switch-4.5 {error in default command} { invoked from within "switch foo a {error switch1} b {error switch 3} default {error switch2}"}} -test switch-5.1 {errors in -regexp matching} { - list [catch {switch -regexp aaaab { - *b {concat glob} - aaaab {concat exact} - default {concat none} - }} msg] $msg -} {1 {couldn't compile regular expression pattern: quantifier operand invalid}} +test switch-5.1 {errors in -regexp matching} -returnCodes error -body { + switch -regexp aaaab { + *b {subst glob} + aaaab {subst exact} + default {subst none} + } +} -result {couldn't compile regular expression pattern: quantifier operand invalid} test switch-6.1 {backslashes in patterns} { switch -exact {\a\$\.\[} { - \a\$\.\[ {concat first} - \a\\$\.\\[ {concat second} - \\a\\$\\.\\[ {concat third} - {\a\\$\.\\[} {concat fourth} - {\\a\\$\\.\\[} {concat fifth} - default {concat none} + \a\$\.\[ {subst first} + \a\\$\.\\[ {subst second} + \\a\\$\\.\\[ {subst third} + {\a\\$\.\\[} {subst fourth} + {\\a\\$\\.\\[} {subst fifth} + default {subst none} } } third test switch-6.2 {backslashes in patterns} { switch -exact {\a\$\.\[} { - \a\$\.\[ {concat first} - {\a\$\.\[} {concat second} - {{\a\$\.\[}} {concat third} - default {concat none} + \a\$\.\[ {subst first} + {\a\$\.\[} {subst second} + {{\a\$\.\[}} {subst third} + default {subst none} } } second @@ -148,28 +217,31 @@ test switch-7.1 {"-" bodies} { switch a { a - b - - c {concat 1} - default {concat 2} + c {subst 1} + default {subst 2} } } 1 -test switch-7.2 {"-" bodies} { - list [catch { - switch a { - a - - b - - c - - } - } msg] $msg -} {1 {no body specified for pattern "c"}} -test switch-7.3 {"-" bodies} { - list [catch { - switch a { - a - - b -foo - c - - } - } msg] $msg -} {1 {no body specified for pattern "c"}} +test switch-7.2 {"-" bodies} -body { + switch a { + a - + b - + c - + } +} -returnCodes error -result {no body specified for pattern "c"} +test switch-7.3 {"-" bodies} -body { + switch a { + a - + b -foo + c - + } +} -returnCodes error -result {no body specified for pattern "c"} +test switch-7.4 {"-" bodies} -body { + switch a { + a - + b -foo + c {} + } +} -returnCodes error -result {invalid command name "-foo"} test switch-8.1 {empty body} { set msg {} @@ -179,38 +251,505 @@ test switch-8.1 {empty body} { default {set msg 2} } } {} +proc test_switch_body {} { + return "INVOKED" +} +test switch-8.2 {weird body text, variable} { + set cmd {test_switch_body} + switch Foo { + Foo $cmd + } +} {INVOKED} +test switch-8.3 {weird body text, variable} { + set cmd {test_switch_body} + switch Foo { + Foo {$cmd} + } +} {INVOKED} + +test switch-9.1 {empty pattern/body list} -returnCodes error -body { + switch x +} -result {wrong # args: should be "switch ?switches? string pattern body ... ?default body?"} +test switch-9.2 {unpaired pattern} -returnCodes error -body { + switch -- x +} -result {extra switch pattern with no body} +test switch-9.3 {empty pattern/body list} -body { + switch x {} +} -returnCodes error -result {wrong # args: should be "switch ?switches? string {pattern body ... ?default body?}"} +test switch-9.4 {empty pattern/body list} -body { + switch -- x {} +} -returnCodes error -result {wrong # args: should be "switch ?switches? string {pattern body ... ?default body?}"} +test switch-9.5 {unpaired pattern} -body { + switch x a {} b +} -returnCodes error -result {extra switch pattern with no body} +test switch-9.6 {unpaired pattern} -body { + switch x {a {} b} +} -returnCodes error -result {extra switch pattern with no body} +test switch-9.7 {unpaired pattern} -body { + switch x a {} # comment b +} -returnCodes error -result {extra switch pattern with no body} +test switch-9.8 {unpaired pattern} -returnCodes error -body { + switch x {a {} # comment b} +} -result {extra switch pattern with no body, this may be due to a comment incorrectly placed outside of a switch body - see the "switch" documentation} +test switch-9.9 {unpaired pattern} -body { + switch x a {} x {} # comment b +} -returnCodes error -result {extra switch pattern with no body} +test switch-9.10 {unpaired pattern} -returnCodes error -body { + switch x {a {} x {} # comment b} +} -result {extra switch pattern with no body, this may be due to a comment incorrectly placed outside of a switch body - see the "switch" documentation} + +test switch-10.1 {compiled -exact switch} { + if 1 {switch -exact -- a {a {subst 1} b {subst 2}}} +} 1 +test switch-10.1a {compiled -exact switch} { + if 1 {switch -exact a {a {subst 1} b {subst 2}}} +} 1 +test switch-10.2 {compiled -exact switch} { + if 1 {switch -exact -- b {a {subst 1} b {subst 2}}} +} 2 +test switch-10.2a {compiled -exact switch} { + if 1 {switch -exact b {a {subst 1} b {subst 2}}} +} 2 +test switch-10.3 {compiled -exact switch} { + if 1 {switch -exact -- c {a {subst 1} b {subst 2}}} +} {} +test switch-10.3a {compiled -exact switch} { + if 1 {switch -exact c {a {subst 1} b {subst 2}}} +} {} +test switch-10.4 {compiled -exact switch} { + if 1 { + set x 0 + switch -exact -- c {a {subst 1} b {subst 2}} + } +} {} +test switch-10.5 {compiled -exact switch} { + if 1 {switch -exact -- a {a - aa {subst 1} b {subst 2}}} +} 1 +test switch-10.6 {compiled -exact switch} { + if 1 {switch -exact -- b {a { + set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1 + set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1 + set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1 + set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1 + set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1 + set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1 + set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1 + set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1;set x 1 + } b {subst 2}}} +} 2 + +# Command variants are: +# c* are compiled switches, i* are interpreted +# *-glob use glob matching, *-exact use exact matching +# *2* include a default clause (different results too.) +proc cswtest-glob s { + set x 0; set y 0 + foreach c [split $s {}] { + switch -glob $c { + a {incr x} + b {incr y} + } + } + set x [expr {$x*100}]; set y [expr {$y*100}] + foreach c [split $s {}] { + switch -glob -- $c a {incr x} b {incr y} + } + return $x,$y +} +proc iswtest-glob s { + set x 0; set y 0; set switch switch + foreach c [split $s {}] { + $switch -glob $c { + a {incr x} + b {incr y} + } + } + set x [expr {$x*100}]; set y [expr {$y*100}] + foreach c [split $s {}] { + $switch -glob -- $c a {incr x} b {incr y} + } + return $x,$y +} +proc cswtest-exact s { + set x 0; set y 0 + foreach c [split $s {}] { + switch -exact $c { + a {incr x} + b {incr y} + } + } + set x [expr {$x*100}]; set y [expr {$y*100}] + foreach c [split $s {}] { + switch -exact -- $c a {incr x} b {incr y} + } + return $x,$y +} +proc iswtest-exact s { + set x 0; set y 0; set switch switch + foreach c [split $s {}] { + $switch -exact $c { + a {incr x} + b {incr y} + } + } + set x [expr {$x*100}]; set y [expr {$y*100}] + foreach c [split $s {}] { + $switch -exact -- $c a {incr x} b {incr y} + } + return $x,$y +} +proc cswtest2-glob s { + set x 0; set y 0; set z 0 + foreach c [split $s {}] { + switch -glob $c { + a {incr x} + b {incr y} + default {incr z} + } + } + set x [expr {$x*100}]; set y [expr {$y*100}]; set z [expr {$z*100}] + foreach c [split $s {}] { + switch -glob -- $c a {incr x} b {incr y} default {incr z} + } + return $x,$y,$z +} +proc iswtest2-glob s { + set x 0; set y 0; set z 0; set switch switch + foreach c [split $s {}] { + $switch -glob $c { + a {incr x} + b {incr y} + default {incr z} + } + } + set x [expr {$x*100}]; set y [expr {$y*100}]; set z [expr {$z*100}] + foreach c [split $s {}] { + $switch -glob -- $c a {incr x} b {incr y} default {incr z} + } + return $x,$y,$z +} +proc cswtest2-exact s { + set x 0; set y 0; set z 0 + foreach c [split $s {}] { + switch -exact $c { + a {incr x} + b {incr y} + default {incr z} + } + } + set x [expr {$x*100}]; set y [expr {$y*100}]; set z [expr {$z*100}] + foreach c [split $s {}] { + switch -exact -- $c a {incr x} b {incr y} default {incr z} + } + return $x,$y,$z +} +proc iswtest2-exact s { + set x 0; set y 0; set z 0; set switch switch + foreach c [split $s {}] { + $switch -exact $c { + a {incr x} + b {incr y} + default {incr z} + } + } + set x [expr {$x*100}]; set y [expr {$y*100}]; set z [expr {$z*100}] + foreach c [split $s {}] { + $switch -exact -- $c a {incr x} b {incr y} default {incr z} + } + return $x,$y,$z +} -test switch-9.1 {empty pattern/body list} { - list [catch {switch x} msg] $msg -} {1 {wrong # args: should be "switch ?switches? string pattern body ... ?default body?"}} -test switch-9.2 {empty pattern/body list} { - list [catch {switch -- x} msg] $msg -} {1 {wrong # args: should be "switch ?switches? string pattern body ... ?default body?"}} -test switch-9.3 {empty pattern/body list} { - list [catch {switch x {}} msg] $msg -} {1 {wrong # args: should be "switch ?switches? string {pattern body ... ?default body?}"}} -test switch-9.4 {empty pattern/body list} { - list [catch {switch -- x {}} msg] $msg -} {1 {wrong # args: should be "switch ?switches? string {pattern body ... ?default body?}"}} -test switch-9.5 {unpaired pattern} { - list [catch {switch x a {} b} msg] $msg -} {1 {extra switch pattern with no body}} -test switch-9.6 {unpaired pattern} { - list [catch {switch x {a {} b}} msg] $msg -} {1 {extra switch pattern with no body}} -test switch-9.7 {unpaired pattern} { - list [catch {switch x a {} # comment b} msg] $msg -} {1 {extra switch pattern with no body}} -test switch-9.8 {unpaired pattern} { - list [catch {switch x {a {} # comment b}} msg] $msg -} {1 {extra switch pattern with no body, this may be due to a comment incorrectly placed outside of a switch body - see the "switch" documentation}} -test switch-9.9 {unpaired pattern} { - list [catch {switch x a {} x {} # comment b} msg] $msg -} {1 {extra switch pattern with no body}} -test switch-9.10 {unpaired pattern} { - list [catch {switch x {a {} x {} # comment b}} msg] $msg -} {1 {extra switch pattern with no body, this may be due to a comment incorrectly placed outside of a switch body - see the "switch" documentation}} +test switch-10.7 {comparison of compiled and interpreted behaviour of switch, exact matching} { + cswtest-exact abcb +} [iswtest-exact abcb] +test switch-10.8 {comparison of compiled and interpreted behaviour of switch, glob matching} { + cswtest-glob abcb +} [iswtest-glob abcb] +test switch-10.9 {comparison of compiled and interpreted behaviour of switch, exact matching with default} { + cswtest2-exact abcb +} [iswtest2-exact abcb] +test switch-10.10 {comparison of compiled and interpreted behaviour of switch, glob matching with default} { + cswtest2-glob abcb +} [iswtest2-glob abcb] +proc cswtest-default-exact {x} { + switch -- $x { + a* {return b} + aa {return c} + default {return d} + } +} +test switch-10.11 {default to exact matching when compiled} { + cswtest-default-exact a +} d +test switch-10.12 {default to exact matching when compiled} { + cswtest-default-exact aa +} c +test switch-10.13 {default to exact matching when compiled} { + cswtest-default-exact a* +} b +test switch-10.14 {default to exact matching when compiled} { + cswtest-default-exact a** +} d +rename cswtest-default-exact {} +rename cswtest-glob {} +rename iswtest-glob {} +rename cswtest2-glob {} +rename iswtest2-glob {} +rename cswtest-exact {} +rename iswtest-exact {} +rename cswtest2-exact {} +rename iswtest2-exact {} +# Bug 1891827 +test switch-10.15 {(not) compiled exact nocase regression} { + apply {{} { + switch -nocase -- A { a {return yes} default {return no} } + }} +} yes + +# Added due to TIP#75 +test switch-11.1 {regexp matching with -matchvar} { + switch -regexp -matchvar x -- abc {.(.). {set x}} +} {abc b} +test switch-11.2 {regexp matching with -matchvar} { + set x GOOD + switch -regexp -matchvar x -- abc {.(.).. {list $x z}} + set x +} GOOD +test switch-11.3 {regexp matching with -matchvar} { + switch -regexp -matchvar x -- "a b c" {.(.). {set x}} +} {{a b} { }} +test switch-11.4 {regexp matching with -matchvar} { + set x BAD + switch -regexp -matchvar x -- "a b c" { + bc {list $x YES} + default {list $x NO} + } +} {{} NO} +test switch-11.5 {-matchvar without -regexp} { + set x {} + list [catch {switch -glob -matchvar x -- abc . {set x}} msg] $x $msg +} {1 {} {-matchvar option requires -regexp option}} +test switch-11.6 {-matchvar unwritable} { + set x {} + list [catch {switch -regexp -matchvar x(x) -- abc . {set x}} msg] $x $msg +} {1 {} {can't set "x(x)": variable isn't array}} + +test switch-12.1 {regexp matching with -indexvar} { + switch -regexp -indexvar x -- abc {.(.). {set x}} +} {{0 2} {1 1}} +test switch-12.2 {regexp matching with -indexvar} { + set x GOOD + switch -regexp -indexvar x -- abc {.(.).. {list $x z}} + set x +} GOOD +test switch-12.3 {regexp matching with -indexvar} { + switch -regexp -indexvar x -- "a b c" {.(.). {set x}} +} {{0 2} {1 1}} +test switch-12.4 {regexp matching with -indexvar} { + set x BAD + switch -regexp -indexvar x -- "a b c" { + bc {list $x YES} + default {list $x NO} + } +} {{} NO} +test switch-12.5 {-indexvar without -regexp} { + set x {} + list [catch {switch -glob -indexvar x -- abc . {set x}} msg] $x $msg +} {1 {} {-indexvar option requires -regexp option}} +test switch-12.6 {-indexvar unwritable} { + set x {} + list [catch {switch -regexp -indexvar x(x) -- abc . {set x}} msg] $x $msg +} {1 {} {can't set "x(x)": variable isn't array}} +test switch-12.7 {[Bug 3106532] -indexvar should be directly usable with [string range]} { + set str abcdef + switch -regexp -indexvar x -- $str ^... {string range $str {*}[lindex $x 0]} +} abc +test switch-12.8 {-indexvar and matched empty strings} { + switch -regexp -indexvar x -- abcdef ^...(x?) {return $x} +} {{0 2} {3 2}} +test switch-12.9 {-indexvar and unmatched strings} { + switch -regexp -indexvar x -- abcdef ^...(x)? {return $x} +} {{0 2} {-1 -1}} + +test switch-13.1 {-indexvar -matchvar combinations} { + switch -regexp -indexvar x -matchvar y abc { + . {list $x $y} + } +} {{{0 0}} a} +test switch-13.2 {-indexvar -matchvar combinations} { + switch -regexp -indexvar x -matchvar y abc { + .$ {list $x $y} + } +} {{{2 2}} c} +test switch-13.3 {-indexvar -matchvar combinations} { + switch -regexp -indexvar x -matchvar y abc { + (.)(.)(.) {list $x $y} + } +} {{{0 2} {0 0} {1 1} {2 2}} {abc a b c}} +test switch-13.4 {-indexvar -matchvar combinations} { + set x - + set y - + switch -regexp -indexvar x -matchvar y abc { + (.)(.)(.). - + default {list $x $y} + } +} {{} {}} +test switch-13.5 {-indexvar -matchvar combinations} { + set x - + set y - + list [catch { + switch -regexp -indexvar x(x) -matchvar y abc {. {list $x $y}} + } msg] $x $y $msg +} {1 - - {can't set "x(x)": variable isn't array}} +test switch-13.6 {-indexvar -matchvar combinations} { + set x - + set y - + list [catch { + switch -regexp -indexvar x -matchvar y(y) abc {. {list $x $y}} + } msg] $x $y $msg +} {1 {{0 0}} - {can't set "y(y)": variable isn't array}} + +test switch-14.1 {-regexp -- compilation [Bug 1854399]} { + switch -regexp -- 0 { + {[0-9]+} {return yes} + default {return no} + } + foo +} yes +test switch-14.2 {-regexp -- compilation [Bug 1854399]} { + proc foo {} { + switch -regexp -- 0 { + {[0-9]+} {return yes} + default {return no} + } + } + foo +} yes +test switch-14.3 {-regexp -- compilation [Bug 1854399]} { + proc foo {} { + switch -regexp -- 0 { + {\d+} {return yes} + default {return no} + } + } + foo +} yes +test switch-14.4 {-regexp -- compilation [Bug 1854399]} { + proc foo {} { + switch -regexp -- 0 { + {0} {return yes} + default {return no} + } + } + foo +} yes +test switch-14.5 {switch -regexp compilation} { + apply {{} { + switch -regexp -- 0 { + {0|1|2} {return yes} + default {return no} + } + }} +} yes +test switch-14.6 {switch -regexp compilation} { + apply {{} { + switch -regexp -- 0 { + {0|11|222} {return yes} + default {return no} + } + }} +} yes +test switch-14.7 {switch -regexp compilation} { + apply {{} { + switch -regexp -- 0 { + {[012]} {return yes} + default {return no} + } + }} +} yes +test switch-14.8 {switch -regexp compilation} { + apply {{} { + switch -regexp -- x { + {0|1|2} {return yes} + default {return no} + } + }} +} no +test switch-14.9 {switch -regexp compilation} { + apply {{} { + switch -regexp -- x { + {0|11|222} {return yes} + default {return no} + } + }} +} no +test switch-14.10 {switch -regexp compilation} { + apply {{} { + switch -regexp -- x { + {[012]} {return yes} + default {return no} + } + }} +} no +test switch-14.11 {switch -regexp compilation} { + apply {{} { + switch -regexp -- x { + {0|1|2} {return yes} + .+ {return yes2} + default {return no} + } + }} +} yes2 +test switch-14.12 {switch -regexp compilation} { + apply {{} { + switch -regexp -- x { + {0|11|222} {return yes} + .+ {return yes2} + default {return no} + } + }} +} yes2 +test switch-14.13 {switch -regexp compilation} { + apply {{} { + switch -regexp -- x { + {[012]} {return yes} + .+ {return yes2} + default {return no} + } + }} +} yes2 +test switch-14.14 {switch -regexp compilation} { + apply {{} { + switch -regexp -- {} { + {0|1|2} {return yes} + .+ {return yes2} + default {return no} + } + }} +} no +test switch-14.15 {switch -regexp compilation} { + apply {{} { + switch -regexp -- {} { + {0|11|222} {return yes} + .+ {return yes2} + default {return no} + } + }} +} no +test switch-14.16 {switch -regexp compilation} { + apply {{} { + switch -regexp -- {} { + {[012]} {return yes} + .+ {return yes2} + default {return no} + } + }} +} no # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/tcltest.test b/tests/tcltest.test index 97a2863..86aca6f 100755..100644 --- a/tests/tcltest.test +++ b/tests/tcltest.test @@ -2,11 +2,11 @@ # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # -# Copyright (c) 1998-1999 by Scriptics Corporation. +# Copyright (c) 1998-1999 by Scriptics Corporation. # Copyright (c) 2000 by Ajuba Solutions # All rights reserved. -# Note that there are several places where the value of +# Note that there are several places where the value of # tcltest::currentFailure is stored/reset in the -setup/-cleanup # of a test that has a body that runs [test] that will fail. # This is a workaround of using the same tcltest code that we are @@ -14,7 +14,7 @@ # # It would be better to have the -body of the tests run the tcltest # commands in a slave interp so the [test] being tested would not -# interfere with the [test] doing the testing. +# interfere with the [test] doing the testing. # if {[catch {package require tcltest 2.1}]} { @@ -51,7 +51,7 @@ testConstraint exec [llength [info commands exec]] test tcltest-1.1 {tcltest -help} {exec} { set result [catch {exec [interpreter] test.tcl -help} msg] list $result [regexp Usage $msg] -} {1 1} +} {1 1} test tcltest-1.2 {tcltest -help -something} {exec} { set result [catch {exec [interpreter] test.tcl -help -something} msg] list $result [regexp Usage $msg] @@ -59,7 +59,7 @@ test tcltest-1.2 {tcltest -help -something} {exec} { test tcltest-1.3 {tcltest -h} {exec} { set result [catch {exec [interpreter] test.tcl -h} msg] list $result [regexp Usage $msg] -} {1 0} +} {1 0} # -verbose, implicit & explicit testing of [verbose] proc slave {msgVar args} { @@ -437,7 +437,7 @@ test tcltest-6.7 {tcltest::outputChannel - retrieval} { } -result {stdout} -cleanup { - set tcltest::outputChannel $of + set ::tcltest::outputChannel $of } } @@ -526,30 +526,29 @@ set normaldirectory [makeDirectory normaldirectory] normalizePath normaldirectory # -tmpdir, [temporaryDirectory] -test tcltest-8.1 {tcltest a.tcl -tmpdir a} {unixOrPc} { +test tcltest-8.1 {tcltest a.tcl -tmpdir a} -constraints unixOrPc -setup { file delete -force thisdirectorydoesnotexist +} -body { slave msg $a -tmpdir thisdirectorydoesnotexist - list [file exists [file join thisdirectorydoesnotexist a.tmp]] \ - [file delete -force thisdirectorydoesnotexist] -} {1 {}} + file exists [file join thisdirectorydoesnotexist a.tmp] +} -cleanup { + file delete -force thisdirectorydoesnotexist +} -result 1 test tcltest-8.2 {tcltest a.tcl -tmpdir thisdirectoryisafile} { -constraints unixOrPc -body { slave msg $a -tmpdir $tdiaf - set msg + return $msg } -result {*not a directory*} -match glob } - # Test non-writeable directories, non-readable directories with directory flags set notReadableDir [file join [temporaryDirectory] notreadable] set notWriteableDir [file join [temporaryDirectory] notwriteable] - makeDirectory notreadable makeDirectory notwriteable - -switch $tcl_platform(platform) { +switch -- $::tcl_platform(platform) { "unix" { file attributes $notReadableDir -permissions 00333 file attributes $notWriteableDir -permissions 00555 @@ -559,25 +558,44 @@ switch $tcl_platform(platform) { catch {testchmod 000 $notWriteableDir} } } - -test tcltest-8.3 {tcltest a.tcl -tmpdir notReadableDir} {unix notRoot} { - slave msg $a -tmpdir $notReadableDir - string match {*not readable*} $msg -} {1} - -test tcltest-8.4 {tcltest a.tcl -tmpdir notWriteableDir} {unixOrPc notRoot} { - slave msg $a -tmpdir $notWriteableDir - string match {*not writeable*} $msg -} {1} - -test tcltest-8.5 {tcltest a.tcl -tmpdir normaldirectory} {unixOrPc} { - slave msg $a -tmpdir $normaldirectory - # The join is necessary because the message can be split on multiple lines - list [file exists [file join $normaldirectory a.tmp]] \ - [file delete [file join $normaldirectory a.tmp]] -} {1 {}} +test tcltest-8.3 {tcltest a.tcl -tmpdir notReadableDir} { + -constraints {unix notRoot} + -body { + slave msg $a -tmpdir $notReadableDir + return $msg + } + -result {*not readable*} + -match glob +} +# This constraint doesn't go at the top of the file so that it doesn't +# interfere with tcltest-5.5 +testConstraint notFAT [expr { + ![string match "FAT*" [lindex [file system $notWriteableDir] 1]] +}] +# FAT permissions are fairly hopeless; ignore this test if that FS is used +test tcltest-8.4 {tcltest a.tcl -tmpdir notWriteableDir} { + -constraints {unixOrPc notRoot notFAT} + -body { + slave msg $a -tmpdir $notWriteableDir + return $msg + } + -result {*not writeable*} + -match glob +} +test tcltest-8.5 {tcltest a.tcl -tmpdir normaldirectory} { + -constraints unixOrPc + -body { + slave msg $a -tmpdir $normaldirectory + # The join is necessary because the message can be split on multiple + # lines + file exists [file join $normaldirectory a.tmp] + } + -cleanup { + catch {file delete [file join $normaldirectory a.tmp]} + } + -result 1 +} cd [workingDirectory] - test tcltest-8.6 {temporaryDirectory} { -setup { set old $::tcltest::temporaryDirectory @@ -594,7 +612,6 @@ test tcltest-8.6 {temporaryDirectory} { set ::tcltest::temporaryDirectory $old } } - test tcltest-8.6a {temporaryDirectory - test format 2} -setup { set old $::tcltest::temporaryDirectory set ::tcltest::temporaryDirectory $normaldirectory @@ -606,35 +623,53 @@ test tcltest-8.6a {temporaryDirectory - test format 2} -setup { } -cleanup { set ::tcltest::temporaryDirectory $old } -result [list $normaldirectory [workingDirectory] [workingDirectory]] - cd [temporaryDirectory] # -testdir, [testsDirectory] -test tcltest-8.10 {tcltest a.tcl -testdir thisdirectorydoesnotexist} {unixOrPc} { - file delete -force thisdirectorydoesnotexist - slave msg $a -testdir thisdirectorydoesnotexist - string match "*does not exist*" $msg -} {1} - -test tcltest-8.11 {tcltest a.tcl -testdir thisdirectoryisafile} {unixOrPc} { - slave msg $a -testdir $tdiaf - string match "*not a directory*" $msg -} {1} - -test tcltest-8.12 {tcltest a.tcl -testdir notReadableDir} {unix notRoot} { - slave msg $a -testdir $notReadableDir - string match {*not readable*} $msg -} {1} - - -test tcltest-8.13 {tcltest a.tcl -testdir normaldirectory} {unixOrPc} { - slave msg $a -testdir $normaldirectory - # The join is necessary because the message can be split on multiple lines - list [string first "testdir: $normaldirectory" [join $msg]] \ - [file exists [file join [temporaryDirectory] a.tmp]] \ - [file delete [file join [temporaryDirectory] a.tmp]] -} {0 1 {}} +test tcltest-8.10 {tcltest a.tcl -testdir thisdirectorydoesnotexist} { + -constraints unixOrPc + -setup { + file delete -force thisdirectorydoesnotexist + } + -body { + slave msg $a -testdir thisdirectorydoesnotexist + return $msg + } + -match glob + -result {*does not exist*} +} +test tcltest-8.11 {tcltest a.tcl -testdir thisdirectoryisafile} { + -constraints unixOrPc + -body { + slave msg $a -testdir $tdiaf + return $msg + } + -match glob + -result {*not a directory*} +} +test tcltest-8.12 {tcltest a.tcl -testdir notReadableDir} { + -constraints {unix notRoot} + -body { + slave msg $a -testdir $notReadableDir + return $msg + } + -match glob + -result {*not readable*} +} +test tcltest-8.13 {tcltest a.tcl -testdir normaldirectory} { + -constraints unixOrPc + -body { + slave msg $a -testdir $normaldirectory + # The join is necessary because the message can be split on multiple + # lines + list [string first "testdir: $normaldirectory" [join $msg]] \ + [file exists [file join [temporaryDirectory] a.tmp]] + } + -cleanup { + file delete [file join [temporaryDirectory] a.tmp] + } + -result {0 1} +} cd [workingDirectory] - set current [pwd] test tcltest-8.14 {testsDirectory} { -setup { @@ -652,7 +687,6 @@ test tcltest-8.14 {testsDirectory} { set ::tcltest::testsDirectory $old } } - # [workingDirectory] test tcltest-8.60 {::workingDirectory} { -setup { @@ -665,7 +699,7 @@ test tcltest-8.60 {::workingDirectory} { set f1 [workingDirectory] set f2 [pwd] set f3 [workingDirectory $current] - set f4 [pwd] + set f4 [pwd] set f5 [workingDirectory] list $f1 $f2 $f3 $f4 $f5 } @@ -682,7 +716,7 @@ test tcltest-8.60 {::workingDirectory} { # clean up from directory testing -switch $tcl_platform(platform) { +switch $::tcl_platform(platform) { "unix" { file attributes $notReadableDir -permissions 777 file attributes $notWriteableDir -permissions 777 @@ -704,7 +738,7 @@ test tcltest-9.1 {-file d*.tcl} -constraints {unixOrPc} -setup { testsDirectory [file dirname [info script]] } -body { slave msg [file join [testsDirectory] all.tcl] -file d*.test - set msg + return $msg } -cleanup { testsDirectory $old } -match regexp -result {dstring\.test} @@ -813,17 +847,17 @@ test tcltest-10.4 {-preservecore 3} {unixOrPc} { removeFile makecore.tcl # -load, -loadfile, [loadScript], [loadFile] -set contents { +set contents { package require tcltest namespace import tcltest::* puts [outputChannel] $::tcltest::loadScript exit -} +} set loadfile [makeFile $contents load.tcl] test tcltest-12.1 {-load xxx} {unixOrPc} { slave msg $loadfile -load xxx - set msg + return $msg } {xxx} # Using child process because of -debug usage. @@ -914,7 +948,7 @@ test tcltest-14.1 {-singleproc - single process} { -constraints {unixOrPc} -body { slave msg $allfile -singleproc 0 -tmpdir [temporaryDirectory] - set msg + return $msg } -result {Test file error: can't unset .foo.: no such variable} -match regexp @@ -924,7 +958,7 @@ test tcltest-14.2 {-singleproc - multiple process} { -constraints {unixOrPc} -body { slave msg $allfile -singleproc 1 -tmpdir [temporaryDirectory] - set msg + return $msg } -result {single1.test.*single2.test.*all\-single.tcl:.*Total.*0.*Passed.*0.*Skipped.*0.*Failed.*0} -match regexp @@ -1758,7 +1792,7 @@ test tcltest-25.3 { test tcltest-26.1 {Bug/RFE 1017151} -setup { makeFile { package require tcltest - set errorInfo "Should never see this" + set ::errorInfo "Should never see this" tcltest::test tcltest-26.1.0 { no errorInfo when only return code mismatch } -body { @@ -1768,7 +1802,7 @@ test tcltest-26.1 {Bug/RFE 1017151} -setup { } test.tcl } -body { slave msg [file join [temporaryDirectory] test.tcl] - set msg + return $msg } -cleanup { removeFile test.tcl } -match glob -result {* @@ -1778,7 +1812,7 @@ test tcltest-26.1 {Bug/RFE 1017151} -setup { test tcltest-26.2 {Bug/RFE 1017151} -setup { makeFile { package require tcltest - set errorInfo "Should never see this" + set ::errorInfo "Should never see this" tcltest::test tcltest-26.2.0 {do not mask body errorInfo} -body { error "body error" } -cleanup { @@ -1788,7 +1822,7 @@ test tcltest-26.2 {Bug/RFE 1017151} -setup { } test.tcl } -body { slave msg [file join [temporaryDirectory] test.tcl] - set msg + return $msg } -cleanup { removeFile test.tcl } -match glob -result {* diff --git a/tests/thread.test b/tests/thread.test index 0edddd2..bfef91c 100644 --- a/tests/thread.test +++ b/tests/thread.test @@ -17,11 +17,9 @@ if {[lsearch [namespace children] ::tcltest] == -1} { # Some tests require the testthread command -set ::tcltest::testConstraints(testthread) \ - [expr {[info commands testthread] != {}}] - -if {$::tcltest::testConstraints(testthread)} { +testConstraint testthread [expr {[info commands testthread] != {}}] +if {[testConstraint testthread]} { testthread errorproc ThreadError proc ThreadError {id info} { @@ -38,15 +36,12 @@ if {$::tcltest::testConstraints(testthread)} { test thread-1.1 {Tcl_ThreadObjCmd: no args} {testthread} { list [catch {testthread} msg] $msg } {1 {wrong # args: should be "testthread option ?args?"}} - test thread-1.2 {Tcl_ThreadObjCmd: bad option} {testthread} { list [catch {testthread foo} msg] $msg } {1 {bad option "foo": must be create, exit, id, join, names, send, wait, or errorproc}} - test thread-1.3 {Tcl_ThreadObjCmd: initial thread list} {testthread} { list [threadReap] [llength [testthread names]] } {1 1} - test thread-1.4 {Tcl_ThreadObjCmd: thread create } {testthread} { threadReap set serverthread [testthread create] @@ -55,7 +50,6 @@ test thread-1.4 {Tcl_ThreadObjCmd: thread create } {testthread} { threadReap set numthreads } {2} - test thread-1.5 {Tcl_ThreadObjCmd: thread create one shot} {testthread} { threadReap testthread create {set x 5} @@ -71,7 +65,6 @@ test thread-1.5 {Tcl_ThreadObjCmd: thread create one shot} {testthread} { threadReap set l } {1} - test thread-1.6 {Tcl_ThreadObjCmd: thread exit} {testthread} { threadReap testthread create {testthread exit} @@ -81,35 +74,28 @@ test thread-1.6 {Tcl_ThreadObjCmd: thread exit} {testthread} { threadReap set result } {1} - test thread-1.7 {Tcl_ThreadObjCmd: thread id args} {testthread} { set x [catch {testthread id x} msg] list $x $msg } {1 {wrong # args: should be "testthread id"}} - test thread-1.8 {Tcl_ThreadObjCmd: thread id} {testthread} { string compare [testthread id] $::tcltest::mainThread } {0} - test thread-1.9 {Tcl_ThreadObjCmd: thread names args} {testthread} { set x [catch {testthread names x} msg] list $x $msg } {1 {wrong # args: should be "testthread names"}} - test thread-1.10 {Tcl_ThreadObjCmd: thread id} {testthread} { string compare [testthread names] $::tcltest::mainThread } {0} - test thread-1.11 {Tcl_ThreadObjCmd: send args} {testthread} { set x [catch {testthread send} msg] list $x $msg } {1 {wrong # args: should be "testthread send ?-async? id script"}} - test thread-1.12 {Tcl_ThreadObjCmd: send nonint} {testthread} { set x [catch {testthread send abc command} msg] list $x $msg } {1 {expected integer but got "abc"}} - test thread-1.13 {Tcl_ThreadObjCmd: send args} {testthread} { threadReap set serverthread [testthread create] @@ -117,13 +103,11 @@ test thread-1.13 {Tcl_ThreadObjCmd: send args} {testthread} { threadReap set five } 5 - test thread-1.14 {Tcl_ThreadObjCmd: send bad id} {testthread} { set tid [expr $::tcltest::mainThread + 10] set x [catch {testthread send $tid {set x 5}} msg] list $x $msg } {1 {invalid thread id}} - test thread-1.15 {Tcl_ThreadObjCmd: wait} {testthread} { threadReap set serverthread [testthread create {set z 5 ; testthread wait}] @@ -131,12 +115,10 @@ test thread-1.15 {Tcl_ThreadObjCmd: wait} {testthread} { threadReap set five } 5 - test thread-1.16 {Tcl_ThreadObjCmd: errorproc args} {testthread} { set x [catch {testthread errorproc foo bar} msg] list $x $msg } {1 {wrong # args: should be "testthread errorproc proc"}} - test thread-1.17 {Tcl_ThreadObjCmd: errorproc change} {testthread} { testthread errorproc foo testthread errorproc ThreadError @@ -181,7 +163,6 @@ test thread-4.1 {TclThreadSend to self} {testthread} { } set x } {4} - test thread-4.2 {TclThreadSend -async} {testthread} { threadReap set len [llength [testthread names]] @@ -196,13 +177,12 @@ test thread-4.2 {TclThreadSend -async} {testthread} { threadReap list $len [llength [testthread names]] $two } {1 1 2} - test thread-4.3 {TclThreadSend preserve errorInfo} {testthread} { threadReap set len [llength [testthread names]] set serverthread [testthread create] set x [catch {testthread send $serverthread {set undef}} msg] - set savedErrorInfo $errorInfo + set savedErrorInfo $::errorInfo threadReap list $len $x $msg $savedErrorInfo } {1 1 {can't read "undef": no such variable} {can't read "undef": no such variable @@ -210,23 +190,22 @@ test thread-4.3 {TclThreadSend preserve errorInfo} {testthread} { "set undef" invoked from within "testthread send $serverthread {set undef}"}} - test thread-4.4 {TclThreadSend preserve code} {testthread} { threadReap set len [llength [testthread names]] set serverthread [testthread create] - set x [catch {testthread send $serverthread {break}} msg] - set savedErrorInfo $errorInfo + set ::errorInfo {} + set x [catch {testthread send $serverthread {set ::errorInfo {}; break}} msg] + set savedErrorInfo $::errorInfo threadReap list $len $x $msg $savedErrorInfo } {1 3 {} {}} - test thread-4.5 {TclThreadSend preserve errorCode} {testthread} { threadReap set ::tcltest::mainThread [testthread names] set serverthread [testthread create] set x [catch {testthread send $serverthread {error ERR INFO CODE}} msg] - set savedErrorCode $errorCode + set savedErrorCode $::errorCode threadReap list $x $msg $savedErrorCode } {1 ERR CODE} @@ -240,7 +219,6 @@ test thread-5.0 {Joining threads} {testthread} { threadReap set res } {0} - test thread-5.1 {Joining threads after the fact} {testthread} { threadReap set serverthread [testthread create -joinable] @@ -250,7 +228,6 @@ test thread-5.1 {Joining threads after the fact} {testthread} { threadReap set res } {0} - test thread-5.2 {Try to join a detached thread} {testthread} { threadReap set serverthread [testthread create] @@ -260,6 +237,23 @@ test thread-5.2 {Try to join a detached thread} {testthread} { lrange $msg 0 2 } {cannot join thread} +test thread-6.1 {freeing very large object trees in a thread} testthread { + # conceptual duplicate of obj-32.1 + threadReap + set serverthread [testthread create -joinable] + testthread send -async $serverthread { + set x {} + for {set i 0} {$i<100000} {incr i} { + set x [list $x {}] + } + unset x + testthread exit + } + catch {set res [testthread join $serverthread]} msg + threadReap + set res +} {0} + # cleanup ::tcltest::cleanupTests return diff --git a/tests/timer.test b/tests/timer.test index 3dd140e..db508e5 100644 --- a/tests/timer.test +++ b/tests/timer.test @@ -14,7 +14,7 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest 2 + package require tcltest namespace import -force ::tcltest::* } @@ -26,8 +26,8 @@ test timer-1.1 {Tcl_CreateTimerHandler procedure} { foreach i {100 200 1000 50 150} { after $i lappend x $i } - after 200 - update + after 200 set done 1 + vwait done set x } {50 100 150 200} @@ -36,13 +36,13 @@ test timer-2.1 {Tcl_DeleteTimerHandler procedure} { after cancel $i } set x "" - foreach i {100 200 300 50 150} { + foreach i {100 200 1000 50 150} { after $i lappend x $i } after cancel lappend x 150 after cancel lappend x 50 - after 200 - update + after 200 set done 1 + vwait done set x } {100 200} @@ -175,10 +175,10 @@ test timer-6.1 {Tcl_AfterCmd procedure, basics} { } {1 {wrong # args: should be "after option ?arg arg ...?"}} test timer-6.2 {Tcl_AfterCmd procedure, basics} { list [catch {after 2x} msg] $msg -} {1 {expected integer but got "2x"}} +} {1 {bad argument "2x": must be cancel, idle, info, or an integer}} test timer-6.3 {Tcl_AfterCmd procedure, basics} { list [catch {after gorp} msg] $msg -} {1 {bad argument "gorp": must be cancel, idle, info, or a number}} +} {1 {bad argument "gorp": must be cancel, idle, info, or an integer}} test timer-6.4 {Tcl_AfterCmd procedure, ms argument} { set x before after 400 {set x after} @@ -453,20 +453,22 @@ test timer-8.1 {AfterProc procedure} { } list [foo] $x } {untouched after} -test timer-8.2 {AfterProc procedure} { - catch {rename bgerror {}} - proc bgerror msg { - global x errorInfo - set x [list $msg $errorInfo] +test timer-8.2 {AfterProc procedure} -setup { + variable x empty + proc myHandler {msg options} { + variable x [list $msg [dict get $options -errorinfo]] } - set x empty + set handler [interp bgerror {}] + interp bgerror {} [namespace which myHandler] +} -body { after 100 {error "After error"} after 200 set y $x update - catch {rename bgerror {}} list $y $x -} {empty {{After error} {After error +} -cleanup { + interp bgerror {} $handler +} -result {empty {{After error} {After error while executing "error "After error"" ("after" script)}}} @@ -535,6 +537,7 @@ test timer-9.1 {AfterCleanupProc procedure} { update set x } {before after2 after4} + test timer-10.1 {Bug 1016167: [after] overwrites imports} -setup { interp create slave slave eval namespace export after @@ -547,6 +550,19 @@ test timer-10.1 {Bug 1016167: [after] overwrites imports} -setup { interp delete slave } -result ::after +test timer-11.1 {Bug 1350291: [after] overflowing 32-bit field} \ + -body { + set b ok + set a [after 0x100000001 {set b "after fired early"}] + after 100 set done 1 + vwait done + set b + } \ + -cleanup { + catch {after cancel $a} + } \ + -result ok + test timer-11.2 {Bug 1350293: [after] negative argument} \ -body { set l {} @@ -557,6 +573,11 @@ test timer-11.2 {Bug 1350293: [after] negative argument} \ } \ -result {-1 100} + # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/tm.test b/tests/tm.test new file mode 100644 index 0000000..f6c9a68 --- /dev/null +++ b/tests/tm.test @@ -0,0 +1,245 @@ +# This file contains tests for the ::tcl::tm::* commands. +# +# Sourcing this file into Tcl runs the tests and generates output for +# errors. No output means no errors were found. +# +# Copyright (c) 2004 by Donal K. Fellows. +# All rights reserved. + +package require Tcl 8.5 +if {"::tcltest" ni [namespace children]} { + package require tcltest 2 + namespace import -force ::tcltest::* +} + +test tm-1.1 {tm: path command exists} { + catch { ::tcl::tm::path } + info commands ::tcl::tm::path +} ::tcl::tm::path +test tm-1.2 {tm: path command syntax} -returnCodes error -body { + ::tcl::tm::path foo +} -result {unknown or ambiguous subcommand "foo": must be add, list, or remove} +test tm-1.3 {tm: path command syntax} -returnCodes error -body { + ::tcl::tm::path add +} -result "wrong # args: should be \"::tcl::tm::path add path ...\"" +test tm-1.4 {tm: path command syntax} -returnCodes error -body { + ::tcl::tm::path remove +} -result "wrong # args: should be \"::tcl::tm::path remove path ...\"" +test tm-1.5 {tm: path command syntax} -returnCodes error -body { + ::tcl::tm::path list foobar +} -result "wrong # args: should be \"::tcl::tm::path list\"" + +test tm-2.1 {tm: roots command exists} { + catch { ::tcl::tm::roots } + info commands ::tcl::tm::roots +} ::tcl::tm::roots +test tm-2.2 {tm: roots command syntax} -returnCodes error -body { + ::tcl::tm::roots +} -result "wrong # args: should be \"::tcl::tm::roots paths\"" +test tm-2.3 {tm: roots command syntax} -returnCodes error -body { + ::tcl::tm::roots foo bar +} -result "wrong # args: should be \"::tcl::tm::roots paths\"" + + +test tm-3.1 {tm: module path management, input validation} -setup { + # Save and clear the list + set defaults [::tcl::tm::path list] + foreach p $defaults {::tcl::tm::path remove $p} +} -cleanup { + # Restore old contents of path list. + foreach p [::tcl::tm::path list] {::tcl::tm::path remove $p} + foreach p $defaults {::tcl::tm::path add $p} +} -returnCodes error -body { + ::tcl::tm::path add foo/bar + ::tcl::tm::path add foo +} -result {foo is ancestor of existing module path foo/bar.} + +test tm-3.2 {tm: module path management, input validation} -setup { + # Save and clear the list + set defaults [::tcl::tm::path list] + foreach p $defaults {::tcl::tm::path remove $p} +} -cleanup { + # Restore old contents of path list. + foreach p [::tcl::tm::path list] {::tcl::tm::path remove $p} + foreach p $defaults {::tcl::tm::path add $p} +} -returnCodes error -body { + ::tcl::tm::path add foo + ::tcl::tm::path add foo/bar +} -result {foo/bar is subdirectory of existing module path foo.} + +test tm-3.3 {tm: module path management, add/list interaction} -setup { + # Save and clear the list + set defaults [::tcl::tm::path list] + foreach p $defaults {::tcl::tm::path remove $p} +} -cleanup { + # Restore old contents of path list. + foreach p [::tcl::tm::path list] {::tcl::tm::path remove $p} + foreach p $defaults {::tcl::tm::path add $p} +} -body { + ::tcl::tm::path add foo + ::tcl::tm::path add bar + ::tcl::tm::path list +} -result {bar foo} + +test tm-3.4 {tm: module path management, add/list interaction} -setup { + # Save and clear the list + set defaults [::tcl::tm::path list] + foreach p $defaults {::tcl::tm::path remove $p} +} -cleanup { + # Restore old contents of path list. + foreach p [::tcl::tm::path list] {::tcl::tm::path remove $p} + foreach p $defaults {::tcl::tm::path add $p} +} -body { + ::tcl::tm::path add foo bar baz + ::tcl::tm::path list +} -result {baz bar foo} + +test tm-3.5 {tm: module path management, input validation/list interaction} -setup { + # Save and clear the list + set defaults [::tcl::tm::path list] + foreach p $defaults {::tcl::tm::path remove $p} +} -cleanup { + # Restore old contents of path list. + foreach p [::tcl::tm::path list] {::tcl::tm::path remove $p} + foreach p $defaults {::tcl::tm::path add $p} +} -body { + catch {::tcl::tm::path add snarf foo geode foo/bar} + # Nothing is added if a problem was found. + ::tcl::tm::path list +} -result {} + +test tm-3.6 {tm: module path management, input validation/list interaction} -setup { + # Save and clear the list + set defaults [::tcl::tm::path list] + foreach p $defaults {::tcl::tm::path remove $p} +} -cleanup { + # Restore old contents of path list. + foreach p [::tcl::tm::path list] {::tcl::tm::path remove $p} + foreach p $defaults {::tcl::tm::path add $p} +} -body { + catch {::tcl::tm::path add snarf foo/bar geode foo} + # Nothing is added if a problem was found. + ::tcl::tm::path list +} -result {} + +test tm-3.7 {tm: module path management, input validation/list interaction} -setup { + # Save and clear the list + set defaults [::tcl::tm::path list] + foreach p $defaults {::tcl::tm::path remove $p} +} -cleanup { + # Restore old contents of path list. + foreach p [::tcl::tm::path list] {::tcl::tm::path remove $p} + foreach p $defaults {::tcl::tm::path add $p} +} -body { + catch { + ::tcl::tm::path add foo/bar + ::tcl::tm::path add snarf geode foo + } + # Nothing is added if a problem was found. + ::tcl::tm::path list +} -result {foo/bar} + +test tm-3.8 {tm: module path management, input validation, ignore duplicates} -setup { + # Save and clear the list + set defaults [::tcl::tm::path list] + foreach p $defaults {::tcl::tm::path remove $p} +} -cleanup { + # Restore old contents of path list. + foreach p [::tcl::tm::path list] {::tcl::tm::path remove $p} + foreach p $defaults {::tcl::tm::path add $p} +} -body { + # Ignore path if present + ::tcl::tm::path add foo + ::tcl::tm::path add snarf geode foo + ::tcl::tm::path list +} -result {geode snarf foo} + +test tm-3.9 {tm: module path management, input validation, ignore duplicates} -setup { + # Save and clear the list + set defaults [::tcl::tm::path list] + foreach p $defaults {::tcl::tm::path remove $p} +} -cleanup { + # Restore old contents of path list. + foreach p [::tcl::tm::path list] {::tcl::tm::path remove $p} + foreach p $defaults {::tcl::tm::path add $p} +} -body { + # Ignore path if present + ::tcl::tm::path add foo snarf geode foo + ::tcl::tm::path list +} -result {geode snarf foo} + +test tm-3.10 {tm: module path management, remove} -setup { + # Save and clear the list + set defaults [::tcl::tm::path list] + foreach p $defaults {::tcl::tm::path remove $p} +} -cleanup { + # Restore old contents of path list. + foreach p [::tcl::tm::path list] {::tcl::tm::path remove $p} + foreach p $defaults {::tcl::tm::path add $p} +} -body { + ::tcl::tm::path add snarf geode foo + ::tcl::tm::path remove foo + ::tcl::tm::path list +} -result {geode snarf} + +test tm-3.11 {tm: module path management, remove ignores unknown path} -setup { + # Save and clear the list + set defaults [::tcl::tm::path list] + foreach p $defaults {::tcl::tm::path remove $p} +} -cleanup { + # Restore old contents of path list. + foreach p [::tcl::tm::path list] {::tcl::tm::path remove $p} + foreach p $defaults {::tcl::tm::path add $p} +} -body { + ::tcl::tm::path add foo snarf geode + ::tcl::tm::path remove fox + ::tcl::tm::path list +} -result {geode snarf foo} + + +proc genpaths {base} { + # Normalizing picks up drive letters on windows [Bug 1053568] + set base [file normalize $base] + foreach {major minor} [split [info tclversion] .] break + set results {} + set base [file join $base tcl$major] + lappend results [file join $base site-tcl] + for {set i 0} {$i <= $minor} {incr i} { + lappend results [file join $base ${major}.$i] + } + return $results +} + +test tm-3.12 {tm: module path management, roots} -setup { + # Save and clear the list + set defaults [::tcl::tm::path list] + foreach p $defaults {::tcl::tm::path remove $p} +} -cleanup { + # Restore old contents of path list. + foreach p [::tcl::tm::path list] {::tcl::tm::path remove $p} + foreach p $defaults {::tcl::tm::path add $p} +} -body { + ::tcl::tm::roots /FOO + ::tcl::tm::path list +} -result [genpaths /FOO] + +test tm-3.13 {tm: module path management, roots} -setup { + # Save and clear the list + set defaults [::tcl::tm::path list] + foreach p $defaults {::tcl::tm::path remove $p} +} -cleanup { + # Restore old contents of path list. + foreach p [::tcl::tm::path list] {::tcl::tm::path remove $p} + foreach p $defaults {::tcl::tm::path add $p} +} -body { + ::tcl::tm::roots [list /FOO /BAR] + ::tcl::tm::path list +} -result [concat [genpaths /BAR] [genpaths /FOO]] + +rename genpaths {} +::tcltest::cleanupTests +return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/trace.test b/tests/trace.test index 80bdb4a..b1202b8 100644 --- a/tests/trace.test +++ b/tests/trace.test @@ -16,11 +16,12 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } +testConstraint testcmdtrace [llength [info commands testcmdtrace]] +testConstraint testevalobjv [llength [info commands testevalobjv]] + # Used for constraining memory leak tests testConstraint memory [llength [info commands memory]] -testConstraint testevalobjv [llength [info commands testevalobjv]] - proc getbytes {} { set lines [split [memory info] "\n"] lindex [lindex $lines 3] 3 @@ -237,8 +238,8 @@ test trace-2.6 {trace variable writes on compiled local} { catch {unset x} set info {} proc p {} { - trace add variable x write traceArray - set x(X) willy + trace add variable x write traceArray + set x(X) willy } p set info @@ -255,6 +256,8 @@ test trace-2.7 {trace variable writes on errorInfo} -body { unset ::errorInfo } -result {::errorInfo {} write} + + # append no longer triggers read traces when fetching the old values of # variables before doing the append operation. However, lappend _does_ # still trigger these read traces. Also lappend triggers only one write @@ -768,6 +771,7 @@ test trace-13.1 {delete one trace from another} { set x set info } {5 1} + test trace-13.2 {leak when unsetting traced variable} \ -constraints memory -body { set end [getbytes] @@ -860,7 +864,7 @@ test trace-14.3 "trace command, wrong # args errors" { } [list 1 "wrong # args: should be \"trace remove type ?arg arg ...?\""] test trace-14.4 "trace command, wrong # args errors" { list [catch {trace info} msg] $msg -} [list 1 "wrong # args: should be \"trace info type ?arg arg ...?\""] +} [list 1 "wrong # args: should be \"trace info type name\""] test trace-14.5 {trace command, invalid option} { list [catch {trace gorp} msg] $msg @@ -1444,7 +1448,7 @@ test trace-20.7 {trace add command delete in subinterp while being deleted} { } {} proc traceDelete {cmd old new op} { - eval trace remove command $cmd [lindex [trace info command $cmd] 0] + trace remove command $cmd {*}[lindex [trace info command $cmd] 0] global info set info [list $old $new $op] } @@ -1528,6 +1532,7 @@ test trace-20.16 {delete trace discards error result [Bug 1355342]} { rename foo {} } {} + proc foo {b} { set a $b } @@ -1623,15 +1628,15 @@ test trace-21.9 {trace execution: TCL_EVAL_GLOBAL} testevalobjv { namespace eval test_ns_1 { proc soom args {lappend ::info FAIL [info level]} # [testevalobjv 1 ...] ought to produce the same - # results as [uplevel #0 ...]. + # results as [uplevel #0 ...]. testevalobjv 1 foo x - uplevel #0 foo x + uplevel #0 foo x } namespace delete test_ns_1 trace remove execution foo enter soom set ::info } {SUCCESS 1 SUCCESS 1} - + test trace-21.10 {trace execution: TCL_EVAL_GLOBAL} testevalobjv { trace add execution foo leave soom proc ::soom args {lappend ::info SUCCESS [info level]} @@ -1639,9 +1644,9 @@ test trace-21.10 {trace execution: TCL_EVAL_GLOBAL} testevalobjv { namespace eval test_ns_1 { proc soom args {lappend ::info FAIL [info level]} # [testevalobjv 1 ...] ought to produce the same - # results as [uplevel #0 ...]. + # results as [uplevel #0 ...]. testevalobjv 1 foo x - uplevel #0 foo x + uplevel #0 foo x } namespace delete test_ns_1 trace remove execution foo leave soom @@ -1771,7 +1776,7 @@ test trace-23.3 {recursive(3) trace execution: enter, leave, enterstep, leaveste {factorial 3} 0 6 leave} proc traceDelete {cmd args} { - eval trace remove execution $cmd [lindex [trace info execution $cmd] 0] + trace remove execution $cmd {*}[lindex [trace info execution $cmd] 0] global info set info $args } @@ -2265,8 +2270,75 @@ test trace-28.10 {exec trace info nonsense} { list [catch {trace remove execution} res] $res } {1 {wrong # args: should be "trace remove execution name opList command"}} -# Missing test number to keep in sync with the 8.5 branch -# (want to backport those tests?) +test trace-29.1 {Tcl_CreateTrace, correct command and argc/argv arguments of trace proc} {testcmdtrace} { + testcmdtrace tracetest {set stuff [expr 14 + 16]} +} {{expr 14 + 16} {expr 14 + 16} {set stuff [expr 14 + 16]} {set stuff 30}} +test trace-29.2 {Tcl_CreateTrace, correct command and argc/argv arguments of trace proc} {testcmdtrace} { + testcmdtrace tracetest {set stuff [info tclversion]} +} [concat {{info tclversion} {info tclversion} ::tcl::info::tclversion {::tcl::info::tclversion} {set stuff [info tclversion]}} [list "set stuff [info tclversion]"]] +test trace-29.3 {Tcl_CreateTrace, correct command and argc/argv arguments of trace proc} {testcmdtrace} { + testcmdtrace deletetest {set stuff [info tclversion]} +} [info tclversion] +test trace-29.4 {Tcl_CreateTrace, check that tracing doesn't cause memory faults} {testcmdtrace} { + # Note that the proc call is the same as the variable name, and that + # the call can be direct or indirect by way of another procedure + proc tracer {args} {} + proc tracedLoop {level} { + incr level + tracer + foreach tracer [expr {$level==1 ? {1 2} : {}}] {tracedLoop $level} + } + testcmdtrace tracetest {tracedLoop 0} +} {{tracedLoop 0} {tracedLoop 0} {incr level} {incr level} tracer {tracer} {expr {$level==1 ? {1 2} : {}}} {expr {$level==1 ? {1 2} : {}}} {foreach tracer [expr {$level==1 ? {1 2} : {}}] {tracedLoop $level}} {foreach tracer {1 2} {tracedLoop $level}} {tracedLoop $level} {tracedLoop 1} {incr level} {incr level} tracer {tracer} {expr {$level==1 ? {1 2} : {}}} {expr {$level==1 ? {1 2} : {}}} {foreach tracer [expr {$level==1 ? {1 2} : {}}] {tracedLoop $level}} {foreach tracer {} {tracedLoop $level}} {tracedLoop $level} {tracedLoop 1} {incr level} {incr level} tracer {tracer} {expr {$level==1 ? {1 2} : {}}} {expr {$level==1 ? {1 2} : {}}} {foreach tracer [expr {$level==1 ? {1 2} : {}}] {tracedLoop $level}} {foreach tracer {} {tracedLoop $level}}} +catch {rename tracer {}} +catch {rename tracedLoop {}} + +test trace-29.5 {Tcl_CreateObjTrace, status return TCL_ERROR} {testcmdtrace} { + proc Error { args } { error "Shouldn't get here" } + set x 1; + list [catch {testcmdtrace resulttest {Error $x}} result] [set result] +} {1 {Error $x}} + +test trace-29.6 {Tcl_CreateObjTrace, status return TCL_RETURN} {testcmdtrace} { + proc Return { args } { error "Shouldn't get here" } + set x 1; + list [catch {testcmdtrace resulttest {Return $x}} result] [set result] +} {2 {}} + +test trace-29.7 {Tcl_CreateObjTrace, status return TCL_BREAK} {testcmdtrace} { + proc Break { args } { error "Shouldn't get here" } + set x 1; + list [catch {testcmdtrace resulttest {Break $x}} result] [set result] +} {3 {}} + +test trace-29.8 {Tcl_CreateObjTrace, status return TCL_CONTINUE} {testcmdtrace} { + proc Continue { args } { error "Shouldn't get here" } + set x 1; + list [catch {testcmdtrace resulttest {Continue $x}} result] [set result] +} {4 {}} + +test trace-29.9 {Tcl_CreateObjTrace, status return unknown} {testcmdtrace} { + proc OtherStatus { args } { error "Shouldn't get here" } + set x 1; + list [catch {testcmdtrace resulttest {OtherStatus $x}} result] [set result] +} {6 {}} + +test trace-29.10 {Tcl_CreateTrace, correct level interpretation} {testcmdtrace} { + proc foo {} {uplevel 1 bar} + proc bar {} {uplevel 1 grok} + proc grok {} {uplevel 1 spock} + proc spock {} {uplevel 1 fascinating} + proc fascinating {} {} + testcmdtrace leveltest {foo} +} {foo {foo} {uplevel 1 bar} {uplevel 1 bar} bar {bar} {uplevel 1 grok} {uplevel 1 grok}} + +test trace-29.11 {Tcl_CreateTrace, multiple traces} {testcmdtrace} { + testcmdtrace doubletest {format xx} +} {{format xx} {format xx}} + +test trace-30.1 {Tcl_DeleteTrace} {emptyTest} { + # the above tests have tested Tcl_DeleteTrace +} {} test trace-31.1 {command and execution traces shared struct} { # Tcl Bug 807243 @@ -2314,12 +2386,12 @@ test trace-34.1 {Bug 1201035} { set ::x [list] proc foo {} {lappend ::x foo} proc bar args { - lappend ::x $args - trace remove execution foo leavestep bar - trace remove execution foo enterstep bar - trace add execution foo leavestep bar - trace add execution foo enterstep bar - lappend ::x done + lappend ::x $args + trace remove execution foo leavestep bar + trace remove execution foo enterstep bar + trace add execution foo leavestep bar + trace add execution foo enterstep bar + lappend ::x done } trace add execution foo leavestep bar trace add execution foo enterstep bar @@ -2370,19 +2442,19 @@ test trace-34.5 {Bug 1047286} { test trace-34.6 {Bug 1458266} -setup { proc dummy {} {} proc stepTraceHandler {cmdString args} { - variable log - append log "[expr {[info level] - 1}]: [lindex [split $cmdString] 0]\n" - dummy - isTracedInside_2 + variable log + append log "[expr {[info level] - 1}]: [lindex [split $cmdString] 0]\n" + dummy + isTracedInside_2 } proc cmdTraceHandler {cmdString args} { - # silent + # silent } proc isTracedInside_1 {} { - isTracedInside_2 + isTracedInside_2 } proc isTracedInside_2 {} { - set x 2 + set x 2 } } -body { variable log {} @@ -2404,19 +2476,101 @@ test trace-34.6 {Bug 1458266} -setup { rename isTracedInside_2 {} } -result ok +test trace-35.1 {527164: Keep -errorinfo of traces} -setup { + unset -nocomplain x y +} -body { + trace add variable x write {error foo;#} + trace add variable y write {set x 2;#} + list [catch {set y 1} msg opts] $msg [dict get $opts -errorinfo] +} -cleanup { + unset -nocomplain x y +} -result {1 {can't set "y": can't set "x": foo} {foo + while executing +"error foo" + (write trace on "x") + invoked from within +"set x 2" + (write trace on "y") + invoked from within +"set y 1"}} + + +# +# Test for the correct(?) dynamics of execution traces. This test insures that +# the dynamics of the original implementation remain valid; note that +# these aspects are neither documented nor do they appear in TIP 62 + +proc traceproc {tracevar args} { + append ::$tracevar * +} +proc untraced {type} { + trace add execution untraced $type {traceproc tracevar} + append ::tracevar - +} +proc runbase {results base} { + set tt {enter leave enterstep leavestep} + foreach n {1 2 3 4} t $tt r $results { + eval [subst $base] + } +} +set base { + test trace-36.$n {dynamic trace creation: $t} -setup { + set ::tracevar {} + } -cleanup { + unset ::tracevar + trace remove execution untraced $t {traceproc tracevar} + } -body { + untraced $t + set ::tracevar + } -result {$r} +} +runbase {- - - -} $base + +set base { + test trace-37.$n {dynamic trace addition: $t} -setup { + set ::tracevar {} + set ::tracevar2 {} + trace add execution untraced enter {traceproc tracevar2} + } -cleanup { + trace remove execution untraced $t {traceproc tracevar} + trace remove execution untraced enter {traceproc tracevar2} + unset ::tracevar ::tracevar2 + } -body { + untraced $t + list \$::tracevar \$::tracevar2 + } -result {$r} +} +runbase {{- *} {-* *} {- *} {- *}} $base + +set base { + test trace-38.$n {dynamic trace addition: $t} -setup { + set ::tracevar {} + set ::tracevar2 {} + trace add execution untraced leave {traceproc tracevar2} + } -cleanup { + trace remove execution untraced $t {traceproc tracevar} + trace remove execution untraced leave {traceproc tracevar2} + unset ::tracevar ::tracevar2 + } -body { + untraced $t + list \$::tracevar \$::tracevar2 + } -result {$r} +} +runbase {{- *} {-* *} {- *} {- *}} $base + test trace-39 {bug #3484621: tracing Bc'ed commands} -setup { set ::traceLog 0 set ::traceCalls 0 set ::bar [list 0 1 2 3] set res {} proc dotrace args { - incr ::traceLog + incr ::traceLog } proc foo {} { - incr ::traceCalls - # choose a BC'ed command that is 'unlikely' to interfere with tcltest's - # internals - lset ::bar 1 2 + incr ::traceCalls + # choose a BC'ed command that is 'unlikely' to interfere with tcltest's + # internals + lset ::bar 1 2 } } -body { foo @@ -2430,21 +2584,55 @@ test trace-39 {bug #3484621: tracing Bc'ed commands} -setup { foo lappend res $::traceLog - linsert $res 0 $::traceCalls | + list $::traceCalls | {*}$res } -cleanup { unset ::traceLog ::traceCalls ::bar res rename dotrace {} rename foo {} } -result {3 | 0 1 1} + +test trace-39.1 {bug #3485022: tracing Bc'ed commands} -setup { + set ::traceLog 0 + set ::traceCalls 0 + set res {} + proc dotrace args { + incr ::traceLog + } + proc foo {} { + incr ::traceCalls + string equal zip zap + } +} -body { + foo + lappend res $::traceLog + trace add execution ::tcl::string::equal enter dotrace + foo + lappend res $::traceLog + + trace remove execution tcl::string::equal enter dotrace + foo + lappend res $::traceLog + + list $::traceCalls | {*}$res +} -cleanup { + unset ::traceLog ::traceCalls res + rename dotrace {} + rename foo {} +} -result {3 | 0 1 1} + # Delete procedures when done, so we don't clash with other tests # (e.g. foobar will clash with 'unknown' tests). catch {rename foobar {}} catch {rename foo {}} catch {rename bar {}} +catch {rename untraced {}} +catch {rename traceproc {}} +catch {rename runbase {}} -# Unset the varaible when done +# Unset the variable when done catch {unset info} +catch {unset base} # cleanup ::tcltest::cleanupTests diff --git a/tests/unixFCmd.test b/tests/unixFCmd.test index fcb5e69..f60e04c 100644 --- a/tests/unixFCmd.test +++ b/tests/unixFCmd.test @@ -14,6 +14,8 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } +testConstraint testchmod [llength [info commands testchmod]] + # These tests really need to be run from a writable directory, which # it is assumed [temporaryDirectory] is. set oldcwd [pwd] @@ -21,7 +23,7 @@ cd [temporaryDirectory] # Several tests require need to match results against the unix username set user {} -if {$tcl_platform(platform) == "unix"} { +if {[testConstraint unix]} { catch {set user [exec whoami]} if {$user == ""} { catch {regexp {^[^(]*\(([^)]*)\)} [exec id] dummy user} @@ -31,6 +33,28 @@ if {$tcl_platform(platform) == "unix"} { } } +# Find a group that exists on this system, or else skip tests that require +# groups +testConstraint foundGroup 0 +if {[testConstraint unix]} { + catch { + set groupList [exec groups] + set group [lindex $groupList 0] + testConstraint foundGroup 1 + } +} + +# check whether -readonly attribute is supported +testConstraint readonlyAttr 0 +if {[testConstraint unix]} { + set f [makeFile "whatever" probe] + catch { + file attributes $f -readonly + testConstraint readonlyAttr 1 + } + removeFile probe +} + proc openup {path} { testchmod 777 $path if {[file isdirectory $path]} { @@ -49,7 +73,10 @@ proc cleanup {args} { set x [glob -directory $p tf* td*] } foreach file $x { - if {[catch {file delete -force -- $file}]} { + if { + [catch {file delete -force -- $file}] + && [testConstraint testchmod] + } then { openup $file file delete -force -- $file } @@ -57,7 +84,7 @@ proc cleanup {args} { } } -test unixFCmd-1.1 {TclpRenameFile: EACCES} {unixOnly notRoot} { +test unixFCmd-1.1 {TclpRenameFile: EACCES} {unix notRoot} { cleanup file mkdir td1/td2/td3 file attributes td1/td2 -permissions 0000 @@ -65,29 +92,29 @@ test unixFCmd-1.1 {TclpRenameFile: EACCES} {unixOnly notRoot} { file attributes td1/td2 -permissions 0755 set msg } {1 {error renaming "td1/td2/td3": permission denied}} -test unixFCmd-1.2 {TclpRenameFile: EEXIST} {unixOnly notRoot} { +test unixFCmd-1.2 {TclpRenameFile: EEXIST} {unix notRoot} { cleanup file mkdir td1/td2 file mkdir td2 list [catch {file rename td2 td1} msg] $msg } {1 {error renaming "td2" to "td1/td2": file already exists}} -test unixFCmd-1.3 {TclpRenameFile: EINVAL} {unixOnly notRoot} { +test unixFCmd-1.3 {TclpRenameFile: EINVAL} {unix notRoot} { cleanup file mkdir td1 list [catch {file rename td1 td1} msg] $msg } {1 {error renaming "td1" to "td1/td1": trying to rename a volume or move a directory into itself}} -test unixFCmd-1.4 {TclpRenameFile: EISDIR} {emptyTest unixOnly notRoot} { +test unixFCmd-1.4 {TclpRenameFile: EISDIR} {emptyTest unix notRoot} { # can't make it happen } {} -test unixFCmd-1.5 {TclpRenameFile: ENOENT} {unixOnly notRoot} { +test unixFCmd-1.5 {TclpRenameFile: ENOENT} {unix notRoot} { cleanup file mkdir td1 list [catch {file rename td2 td1} msg] $msg } {1 {error renaming "td2": no such file or directory}} -test unixFCmd-1.6 {TclpRenameFile: ENOTDIR} {emptyTest unixOnly notRoot} { +test unixFCmd-1.6 {TclpRenameFile: ENOTDIR} {emptyTest unix notRoot} { # can't make it happen } {} -test unixFCmd-1.7 {TclpRenameFile: EXDEV} {unixOnly notRoot} { +test unixFCmd-1.7 {TclpRenameFile: EXDEV} {unix notRoot} { cleanup file mkdir foo/bar file attr foo -perm 040555 @@ -98,12 +125,12 @@ test unixFCmd-1.7 {TclpRenameFile: EXDEV} {unixOnly notRoot} { catch {file delete -force foo} list $catchResult $msg } {1 { permission denied}} -test unixFCmd-1.8 {Checking EINTR Bug} {unixOnly notRoot nonPortable} { +test unixFCmd-1.8 {Checking EINTR Bug} {unix notRoot nonPortable} { testalarm after 2000 list [testgotsig] [testgotsig] } {1 0} -test unixFCmd-1.9 {Checking EINTR Bug} {unixOnly notRoot nonPortable} { +test unixFCmd-1.9 {Checking EINTR Bug} {unix notRoot nonPortable} { cleanup set f [open tfalarm w] puts $f { @@ -118,14 +145,15 @@ test unixFCmd-1.9 {Checking EINTR Bug} {unixOnly notRoot nonPortable} { catch {close $pipe} list $line [testgotsig] } {h 1} + test unixFCmd-2.1 {TclpCopyFile: target exists: lstat(dst) == 0} \ - {unixOnly notRoot} { + {unix notRoot} { cleanup close [open tf1 a] close [open tf2 a] file copy -force tf1 tf2 } {} -test unixFCmd-2.2.1 {TclpCopyFile: src is symlink} {unixOnly notRoot dontCopyLinks} { +test unixFCmd-2.2.1 {TclpCopyFile: src is symlink} {unix notRoot dontCopyLinks} { # copying links should end up with real files cleanup close [open tf1 a] @@ -133,7 +161,7 @@ test unixFCmd-2.2.1 {TclpCopyFile: src is symlink} {unixOnly notRoot dontCopyLin file copy tf2 tf3 file type tf3 } {file} -test unixFCmd-2.2.2 {TclpCopyFile: src is symlink} {unixOnly notRoot} { +test unixFCmd-2.2.2 {TclpCopyFile: src is symlink} {unix notRoot} { # copying links should end up with the links copied cleanup close [open tf1 a] @@ -141,7 +169,7 @@ test unixFCmd-2.2.2 {TclpCopyFile: src is symlink} {unixOnly notRoot} { file copy tf2 tf3 file type tf3 } {link} -test unixFCmd-2.3 {TclpCopyFile: src is block} {unixOnly notRoot} { +test unixFCmd-2.3 {TclpCopyFile: src is block} {unix notRoot} { cleanup set null "/dev/null" while {[file type $null] != "characterSpecial"} { @@ -149,7 +177,7 @@ test unixFCmd-2.3 {TclpCopyFile: src is block} {unixOnly notRoot} { } # file copy $null tf1 } {} -test unixFCmd-2.4 {TclpCopyFile: src is fifo} {unixOnly notRoot} { +test unixFCmd-2.4 {TclpCopyFile: src is fifo} {unix notRoot} { cleanup if [catch {exec mknod tf1 p}] { list 1 @@ -158,7 +186,7 @@ test unixFCmd-2.4 {TclpCopyFile: src is fifo} {unixOnly notRoot} { expr {"[file type tf1]" == "[file type tf2]"} } } {1} -test unixFCmd-2.5 {TclpCopyFile: copy attributes} {unixOnly notRoot} { +test unixFCmd-2.5 {TclpCopyFile: copy attributes} {unix notRoot} { cleanup close [open tf1 a] file attributes tf1 -permissions 0472 @@ -166,124 +194,113 @@ test unixFCmd-2.5 {TclpCopyFile: copy attributes} {unixOnly notRoot} { file attributes tf2 -permissions } 00472 ;# i.e. perms field of [exec ls -l tf2] is -r--rwx-w- -test unixFCmd-3.1 {CopyFile not done} {emptyTest unixOnly notRoot} { +test unixFCmd-3.1 {CopyFile not done} {emptyTest unix notRoot} { } {} -test unixFCmd-4.1 {TclpDeleteFile not done} {emptyTest unixOnly notRoot} { +test unixFCmd-4.1 {TclpDeleteFile not done} {emptyTest unix notRoot} { } {} -test unixFCmd-5.1 {TclpCreateDirectory not done} {emptyTest unixOnly notRoot} { +test unixFCmd-5.1 {TclpCreateDirectory not done} {emptyTest unix notRoot} { } {} -test unixFCmd-6.1 {TclpCopyDirectory not done} {emptyTest unixOnly notRoot} { +test unixFCmd-6.1 {TclpCopyDirectory not done} {emptyTest unix notRoot} { } {} -test unixFCmd-7.1 {TclpRemoveDirectory not done} {emptyTest unixOnly notRoot} { +test unixFCmd-7.1 {TclpRemoveDirectory not done} {emptyTest unix notRoot} { } {} -test unixFCmd-8.1 {TraverseUnixTree not done} {emptyTest unixOnly notRoot} { +test unixFCmd-8.1 {TraverseUnixTree not done} {emptyTest unix notRoot} { } {} -test unixFCmd-9.1 {TraversalCopy not done} {emptyTest unixOnly notRoot} { +test unixFCmd-9.1 {TraversalCopy not done} {emptyTest unix notRoot} { } {} -test unixFCmd-10.1 {TraversalDelete not done} {emptyTest unixOnly notRoot} { +test unixFCmd-10.1 {TraversalDelete not done} {emptyTest unix notRoot} { } {} -test unixFCmd-11.1 {CopyFileAttrs not done} {emptyTest unixOnly notRoot} { +test unixFCmd-11.1 {CopyFileAttrs not done} {emptyTest unix notRoot} { } {} -test unixFCmd-12.1 {GetGroupAttribute - file not found} {unixOnly notRoot} { +test unixFCmd-12.1 {GetGroupAttribute - file not found} {unix notRoot} { catch {file delete -force -- foo.test} list [catch {file attributes foo.test -group} msg] $msg } {1 {could not read "foo.test": no such file or directory}} -test unixFCmd-12.2 {GetGroupAttribute - file found} {unixOnly notRoot} { +test unixFCmd-12.2 {GetGroupAttribute - file found} {unix notRoot} { catch {file delete -force -- foo.test} close [open foo.test w] list [catch {file attributes foo.test -group}] [file delete -force -- foo.test] } {0 {}} -test unixFCmd-13.1 {GetOwnerAttribute - file not found} {unixOnly notRoot} { +test unixFCmd-13.1 {GetOwnerAttribute - file not found} {unix notRoot} { catch {file delete -force -- foo.test} list [catch {file attributes foo.test -group} msg] $msg } {1 {could not read "foo.test": no such file or directory}} -test unixFCmd-13.2 {GetOwnerAttribute} {unixOnly notRoot} { +test unixFCmd-13.2 {GetOwnerAttribute} {unix notRoot} { catch {file delete -force -- foo.test} close [open foo.test w] list [catch {file attributes foo.test -owner} msg] \ [string compare $msg $user] [file delete -force -- foo.test] } {0 0 {}} -test unixFCmd-14.1 {GetPermissionsAttribute - file not found} {unixOnly notRoot} { +test unixFCmd-14.1 {GetPermissionsAttribute - file not found} {unix notRoot} { catch {file delete -force -- foo.test} list [catch {file attributes foo.test -permissions} msg] $msg } {1 {could not read "foo.test": no such file or directory}} -test unixFCmd-14.2 {GetPermissionsAttribute} {unixOnly notRoot} { +test unixFCmd-14.2 {GetPermissionsAttribute} {unix notRoot} { catch {file delete -force -- foo.test} close [open foo.test w] list [catch {file attribute foo.test -permissions}] \ [file delete -force -- foo.test] } {0 {}} -# Find a group that exists on this system, or else skip tests that require -# groups -set ::tcltest::testConstraints(foundGroup) 0 -if {$tcl_platform(platform) == "unix"} { - catch { - set groupList [exec groups] - set group [lindex $groupList 0] - set ::tcltest::testConstraints(foundGroup) 1 - } -} - #groups hard to test -test unixFCmd-15.1 {SetGroupAttribute - invalid group} {unixOnly notRoot} { +test unixFCmd-15.1 {SetGroupAttribute - invalid group} {unix notRoot} { catch {file delete -force -- foo.test} list [catch {file attributes foo.test -group foozzz} msg] \ $msg [file delete -force -- foo.test] } {1 {could not set group for file "foo.test": group "foozzz" does not exist} {}} test unixFCmd-15.2 {SetGroupAttribute - invalid file} \ - {unixOnly notRoot foundGroup} { + {unix notRoot foundGroup} { catch {file delete -force -- foo.test} list [catch {file attributes foo.test -group $group} msg] $msg } {1 {could not set group for file "foo.test": no such file or directory}} #changing owners hard to do -test unixFCmd-16.1 {SetOwnerAttribute - current owner} {unixOnly notRoot} { +test unixFCmd-16.1 {SetOwnerAttribute - current owner} {unix notRoot} { catch {file delete -force -- foo.test} close [open foo.test w] list [catch {file attributes foo.test -owner $user} msg] \ $msg [string compare [file attributes foo.test -owner] $user] \ [file delete -force -- foo.test] } {0 {} 0 {}} -test unixFCmd-16.2 {SetOwnerAttribute - invalid file} {unixOnly notRoot} { +test unixFCmd-16.2 {SetOwnerAttribute - invalid file} {unix notRoot} { catch {file delete -force -- foo.test} list [catch {file attributes foo.test -owner $user} msg] $msg } {1 {could not set owner for file "foo.test": no such file or directory}} -test unixFCmd-16.3 {SetOwnerAttribute - invalid owner} {unixOnly notRoot} { +test unixFCmd-16.3 {SetOwnerAttribute - invalid owner} {unix notRoot} { catch {file delete -force -- foo.test} list [catch {file attributes foo.test -owner foozzz} msg] $msg } {1 {could not set owner for file "foo.test": user "foozzz" does not exist}} -test unixFCmd-17.1 {SetPermissionsAttribute} {unixOnly notRoot} { +test unixFCmd-17.1 {SetPermissionsAttribute} {unix notRoot} { catch {file delete -force -- foo.test} close [open foo.test w] list [catch {file attributes foo.test -permissions 0000} msg] \ $msg [file attributes foo.test -permissions] \ [file delete -force -- foo.test] } {0 {} 00000 {}} -test unixFCmd-17.2 {SetPermissionsAttribute} {unixOnly notRoot} { +test unixFCmd-17.2 {SetPermissionsAttribute} {unix notRoot} { catch {file delete -force -- foo.test} list [catch {file attributes foo.test -permissions 0000} msg] $msg } {1 {could not set permissions for file "foo.test": no such file or directory}} -test unixFCmd-17.3 {SetPermissionsAttribute} {unixOnly notRoot} { +test unixFCmd-17.3 {SetPermissionsAttribute} {unix notRoot} { catch {file delete -force -- foo.test} close [open foo.test w] list [catch {file attributes foo.test -permissions foo} msg] $msg \ [file delete -force -- foo.test] } {1 {unknown permission string format "foo"} {}} -test unixFCmd-17.4 {SetPermissionsAttribute} {unixOnly notRoot} { +test unixFCmd-17.4 {SetPermissionsAttribute} {unix notRoot} { catch {file delete -force -- foo.test} close [open foo.test w] list [catch {file attributes foo.test -permissions ---rwx} msg] $msg \ @@ -293,7 +310,7 @@ test unixFCmd-17.4 {SetPermissionsAttribute} {unixOnly notRoot} { close [open foo.test w] set ::i 4 proc permcheck {testnum permstr expected} { - test $testnum {SetPermissionsAttribute} {unixOnly notRoot} { + test $testnum {SetPermissionsAttribute} {unix notRoot} { file attributes foo.test -permissions $permstr file attributes foo.test -permissions } $expected @@ -308,7 +325,7 @@ permcheck unixFCmd-17.11 --x--x--x 00111 permcheck unixFCmd-17.12 a+rwx 00777 file delete -force -- foo.test -test unixFCmd-18.1 {Unix pwd} {nonPortable unixOnly notRoot} { +test unixFCmd-18.1 {Unix pwd} {nonPortable unix notRoot} { # This test is nonportable because SunOS generates a weird error # message when the current directory isn't readable. set cd [pwd] @@ -323,8 +340,38 @@ test unixFCmd-18.1 {Unix pwd} {nonPortable unixOnly notRoot} { set r } {1 {error getting working directory name:}} +test unixFCmd-19.1 {GetReadOnlyAttribute - file not found} {unix notRoot readonlyAttr} { + catch {file delete -force -- foo.test} + list [catch {file attributes foo.test -readonly} msg] $msg +} {1 {could not read "foo.test": no such file or directory}} +test unixFCmd-19.2 {GetReadOnlyAttribute} {unix notRoot readonlyAttr} { + catch {file delete -force -- foo.test} + close [open foo.test w] + list [catch {file attribute foo.test -readonly} msg] $msg \ + [file delete -force -- foo.test] +} {0 0 {}} + +test unixFCmd-20.1 {SetReadOnlyAttribute} {unix notRoot readonlyAttr} { + catch {file delete -force -- foo.test} + close [open foo.test w] + list [catch {file attributes foo.test -readonly 1} msg] $msg \ + [catch {file attribute foo.test -readonly} msg] $msg \ + [catch {file delete -force -- foo.test}] \ + [catch {file attributes foo.test -readonly 0} msg] $msg \ + [catch {file attribute foo.test -readonly} msg] $msg \ + [file delete -force -- foo.test] +} {0 {} 0 1 1 0 {} 0 0 {}} +test unixFCmd-20.2 {SetReadOnlyAttribute} {unix notRoot readonlyAttr} { + catch {file delete -force -- foo.test} + list [catch {file attributes foo.test -readonly 1} msg] $msg +} {1 {could not read "foo.test": no such file or directory}} + # cleanup cleanup cd $oldcwd ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/unixFile.test b/tests/unixFile.test index 14fc533..0ea0ec1 100644 --- a/tests/unixFile.test +++ b/tests/unixFile.test @@ -14,12 +14,7 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -if {[info commands testobj] == {}} { - puts "This application hasn't been compiled with the \"testfindexecutable\"" - puts "command, so I can't test the Tcl_FindExecutable function" - ::tcltest::cleanupTests - return -} +testConstraint testfindexecutable [llength [info commands testfindexecutable]] set oldpwd [pwd] cd [temporaryDirectory] @@ -30,31 +25,31 @@ catch { } set absPath [file join [temporaryDirectory] junk] -test unixFile-1.1 {Tcl_FindExecutable} {unixOnly} { +test unixFile-1.1 {Tcl_FindExecutable} {testfindexecutable unix} { set env(PATH) "" testfindexecutable junk } $absPath -test unixFile-1.2 {Tcl_FindExecutable} {unixOnly} { +test unixFile-1.2 {Tcl_FindExecutable} {testfindexecutable unix} { set env(PATH) "/dummy" testfindexecutable junk } {} -test unixFile-1.3 {Tcl_FindExecutable} {unixOnly} { +test unixFile-1.3 {Tcl_FindExecutable} {testfindexecutable unix} { set env(PATH) "/dummy:[pwd]" testfindexecutable junk } $absPath -test unixFile-1.4 {Tcl_FindExecutable} {unixOnly} { +test unixFile-1.4 {Tcl_FindExecutable} {testfindexecutable unix} { set env(PATH) "/dummy:" testfindexecutable junk } $absPath -test unixFile-1.5 {Tcl_FindExecutable} {unixOnly} { +test unixFile-1.5 {Tcl_FindExecutable} {testfindexecutable unix} { set env(PATH) "/dummy:/dummy" testfindexecutable junk } {} -test unixFile-1.6 {Tcl_FindExecutable} {unixOnly} { +test unixFile-1.6 {Tcl_FindExecutable} {testfindexecutable unix} { set env(PATH) "/dummy::/dummy" testfindexecutable junk } $absPath -test unixFile-1.7 {Tcl_FindExecutable} {unixOnly} { +test unixFile-1.7 {Tcl_FindExecutable} {testfindexecutable unix} { set env(PATH) ":/dummy" testfindexecutable junk } $absPath diff --git a/tests/unixInit.test b/tests/unixInit.test index a4a9249..003dd00 100644 --- a/tests/unixInit.test +++ b/tests/unixInit.test @@ -10,43 +10,34 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. -package require tcltest 2 +package require tcltest 2.2 namespace import -force ::tcltest::* unset -nocomplain path -if {[info exists env(TCL_LIBRARY)]} { - set oldlibrary $env(TCL_LIBRARY) - unset env(TCL_LIBRARY) -} catch {set oldlang $env(LANG)} set env(LANG) C -test unixInit-1.1 {TclpInitPlatform: ignore SIGPIPE} {unixOnly stdio} { +test unixInit-1.1 {TclpInitPlatform: ignore SIGPIPE} {unix stdio} { set x {} - # Watch out for a race condition here. If tcltest is too slow to start # then we'll kill it before it has a chance to set up its signal handler. - set f [open "|[list [interpreter]]" w+] puts $f "puts hi" flush $f gets $f exec kill -PIPE [pid $f] lappend x [catch {close $f}] - set f [open "|[list [interpreter]]" w+] puts $f "puts hi" flush $f gets $f exec kill [pid $f] lappend x [catch {close $f}] - set x } {0 1} - # This test is really a test of code in tclUnixChan.c, but the # channels are set up as part of initialisation of the interpreter so # the test seems to me to fit here as well as anywhere else. -test unixInit-1.2 {initialisation: standard channel type deduction} {unixOnly stdio} { +test unixInit-1.2 {initialisation: standard channel type deduction} {unix stdio} { # pipe1 is a connection to a server that reports what port it # starts on, and delivers a constant string to the first client to # connect to that port before exiting. @@ -57,7 +48,7 @@ test unixInit-1.2 {initialisation: standard channel type deduction} {unixOnly st close $channel exit } - puts [fconfigure [socket -server accept 0] -sockname] + puts [fconfigure [socket -server accept -myaddr 127.0.0.1 0] -sockname] vwait forever \ } # Note the backslash above; this is important to make sure that the @@ -72,16 +63,13 @@ test unixInit-1.2 {initialisation: standard channel type deduction} {unixOnly st # as a socket. Which is what this test is all about. set pipe2 [open "|[list [interpreter] <@$sock]" r] set result [gets $pipe2] - # Clear any pending data; stops certain kinds of (non-important) errors fconfigure $pipe1 -blocking 0; gets $pipe1 fconfigure $pipe2 -blocking 0; gets $pipe2 - # Close the pipes and the socket. close $pipe2 close $pipe1 catch {close $sock} - # Can't use normal comparison, as hostname varies due to some # installations having a messed up /etc/hosts file. if { @@ -94,76 +82,100 @@ test unixInit-1.2 {initialisation: standard channel type deduction} {unixOnly st } } {OK} -proc getlibpath [list [list program [interpreter]]] { - set f [open "|[list $program]" w+] - fconfigure $f -buffering none - puts $f {puts $tcl_libPath; exit} - set path [gets $f] - close $f - return $path -} +# The unixInit-2.* tests were written to test the internal routine, +# TclpInitLibraryPath. That routine no longer does the things it used +# to do so those tests are obsolete. Skip them. -# Some tests require the testgetdefenc command +skip [concat [skip] unixInit-2.*] -testConstraint testgetdefenc [llength [info commands testgetdefenc]] - -test unixInit-2.0 {TclpInitLibraryPath: setting tclDefaultEncodingDir} \ - {unixOnly testgetdefenc} { +test unixInit-2.0 {TclpInitLibraryPath: setting tclDefaultEncodingDir} { set origDir [testgetdefenc] testsetdefenc slappy set path [testgetdefenc] testsetdefenc $origDir set path } {slappy} -test unixInit-2.1 {TclpInitLibraryPath: value of installLib, developLib} \ - {unixOnly stdio} { +test unixInit-2.1 {TclpInitLibraryPath: value of installLib, developLib} -setup { + unset -nocomplain oldlibrary + if {[info exists env(TCL_LIBRARY)]} { + set oldlibrary $env(TCL_LIBRARY) + unset env(TCL_LIBRARY) + } +} -body { set path [getlibpath] - set installLib lib/tcl[info tclversion] set developLib tcl[info patchlevel]/library set prefix [file dirname [file dirname [interpreter]]] - set x {} lappend x [string compare [lindex $path 0] $prefix/$installLib] lappend x [string compare [lindex $path 4] [file dirname $prefix]/$developLib] set x -} {0 0} -test unixInit-2.2 {TclpInitLibraryPath: TCL_LIBRARY} {unixOnly stdio} { - # ((str != NULL) && (str[0] != '\0')) - +} -cleanup { + if {[info exists oldlibrary]} { + set env(TCL_LIBRARY) $oldlibrary + unset oldlibrary + } +} -result {0 0} +test unixInit-2.2 {TclpInitLibraryPath: TCL_LIBRARY} -setup { + unset -nocomplain oldlibrary + if {[info exists env(TCL_LIBRARY)]} { + set oldlibrary $env(TCL_LIBRARY) + } +} -body { + # ((str != NULL) && (str[0] != '\0')) set env(TCL_LIBRARY) sparkly set path [getlibpath] unset env(TCL_LIBRARY) - lindex $path 0 -} "sparkly" -test unixInit-2.3 {TclpInitLibraryPath: TCL_LIBRARY wrong version} \ - {unixOnly stdio} { +} -cleanup { + if {[info exists oldlibrary]} { + set env(TCL_LIBRARY) $oldlibrary + unset oldlibrary + } +} -result "sparkly" +test unixInit-2.3 {TclpInitLibraryPath: TCL_LIBRARY wrong version} -setup { + unset -nocomplain oldlibrary + if {[info exists env(TCL_LIBRARY)]} { + set oldlibrary $env(TCL_LIBRARY) + } +} -body { # ((pathc > 0) && (strcasecmp(installLib + 4, pathv[pathc - 1]) != 0)) - set env(TCL_LIBRARY) /a/b/tcl1.7 set path [getlibpath] unset env(TCL_LIBRARY) - lrange $path 0 1 -} [list /a/b/tcl1.7 /a/b/tcl[info tclversion]] -test unixInit-2.4 {TclpInitLibraryPath: TCL_LIBRARY: INTL} \ - {unixOnly stdio} { +} -cleanup { + if {[info exists oldlibrary]} { + set env(TCL_LIBRARY) $oldlibrary + unset oldlibrary + } +} -result [list /a/b/tcl1.7 /a/b/tcl[info tclversion]] +test unixInit-2.4 {TclpInitLibraryPath: TCL_LIBRARY: INTL} -setup { + if {[info exists env(TCL_LIBRARY)]} { + set oldlibrary $env(TCL_LIBRARY) + } +} -body { # Child process translates env variable from native encoding. - set env(TCL_LIBRARY) "\xa7" set x [lindex [getlibpath] 0] unset env(TCL_LIBRARY) unset env(LANG) - set x -} "\xa7" -test unixInit-2.5 {TclpInitLibraryPath: compiled-in library path} \ - {emptyTest unixOnly} { +} -cleanup { + if {[info exists oldlibrary]} { + set env(TCL_LIBRARY) $oldlibrary + unset oldlibrary + } +} -result "\xa7" +test unixInit-2.5 {TclpInitLibraryPath: compiled-in library path} { # cannot test } {} -test unixInit-2.6 {TclpInitLibraryPath: executable relative} \ - {unixOnly stdio} { +test unixInit-2.6 {TclpInitLibraryPath: executable relative} -setup { + unset -nocomplain oldlibrary + if {[info exists env(TCL_LIBRARY)]} { + set oldlibrary $env(TCL_LIBRARY) + } + set env(TCL_LIBRARY) [info library] makeDirectory tmp makeDirectory [file join tmp sparkly] makeDirectory [file join tmp sparkly bin] @@ -172,19 +184,23 @@ test unixInit-2.6 {TclpInitLibraryPath: executable relative} \ makeDirectory [file join tmp sparkly lib] makeDirectory [file join tmp sparkly lib tcl[info tclversion]] makeFile {} [file join tmp sparkly lib tcl[info tclversion] init.tcl] - - set x [lrange [getlibpath [file join [temporaryDirectory] tmp sparkly \ - bin tcltest]] 0 1] +} -body { + lrange [getlibpath [file join [temporaryDirectory] tmp sparkly \ + bin tcltest]] 1 2 +} -cleanup { removeFile [file join tmp sparkly lib tcl[info tclversion] init.tcl] removeDirectory [file join tmp sparkly lib tcl[info tclversion]] removeDirectory [file join tmp sparkly lib] removeDirectory [file join tmp sparkly bin] removeDirectory [file join tmp sparkly] removeDirectory tmp - set x -} [list [temporaryDirectory]/tmp/sparkly/lib/tcl[info tclversion] [temporaryDirectory]/tmp/lib/tcl[info tclversion]] -test unixInit-2.7 {TclpInitLibraryPath: compiled-in library path} \ - {emptyTest unixOnly} { + unset env(TCL_LIBRARY) + if {[info exists oldlibrary]} { + set env(TCL_LIBRARY) $oldlibrary + unset oldlibrary + } +} -result [list [temporaryDirectory]/tmp/sparkly/lib/tcl[info tclversion] [temporaryDirectory]/tmp/lib/tcl[info tclversion]] +test unixInit-2.7 {TclpInitLibraryPath: compiled-in library path} { # would need test command to get defaultLibDir and compare it to # [lindex $auto_path end] } {} @@ -194,10 +210,12 @@ test unixInit-2.7 {TclpInitLibraryPath: compiled-in library path} \ # these tests need paths near the "root" of the file system to present # themselves. # -testConstraint noSparkly [expr {![file exists [file join /tmp sparkly]]}] -testConstraint noTmpInstall [expr {![file exists \ - [file join /tmp lib tcl[info tclversion]]]}] -test unixInit-2.8 {TclpInitLibraryPath: all absolute pathtype} {unix noSparkly noTmpInstall} { +test unixInit-2.8 {TclpInitLibraryPath: all absolute pathtype} -setup { + unset -nocomplain oldlibrary + if {[info exists env(TCL_LIBRARY)]} { + set oldlibrary $env(TCL_LIBRARY) + } + set env(TCL_LIBRARY) [info library] # Checking for Bug 219416 # When a program that embeds the Tcl library, like tcltest, is # installed near the "root" of the file system, there was a problem @@ -217,7 +235,6 @@ test unixInit-2.8 {TclpInitLibraryPath: all absolute pathtype} {unix noSparkly n file delete -force /tmp/lib/tcl[info tclversion] file mkdir /tmp/sparkly file copy [interpreter] /tmp/sparkly/tcltest - # Keep any existing /tmp/lib directory set deletelib 1 if {[file exists /tmp/lib]} { @@ -227,47 +244,60 @@ test unixInit-2.8 {TclpInitLibraryPath: all absolute pathtype} {unix noSparkly n file delete -force /tmp/lib } } - # For a successful Tcl_Init, we need a [source]-able init.tcl in # ../lib/tcl$version relative to the executable. file mkdir /tmp/lib/tcl[info tclversion] close [open /tmp/lib/tcl[info tclversion]/init.tcl w] - +} -body { # Check that all directories in the library path are absolute pathnames set allAbsolute 1 foreach dir [getlibpath /tmp/sparkly/tcltest] { set allAbsolute [expr {$allAbsolute \ && [string equal absolute [file pathtype $dir]]}] } - + set allAbsolute +} -cleanup { # Clean up temporary installation file delete -force /tmp/sparkly file delete -force /tmp/lib/tcl[info tclversion] if {$deletelib} {file delete -force /tmp/lib} - set allAbsolute -} 1 -testConstraint noTmpBuild [expr {![file exists [file join /tmp library]]}] -test unixInit-2.9 {TclpInitLibraryPath: paths relative to executable} {unix noSparkly noTmpBuild} { + unset env(TCL_LIBRARY) + if {[info exists oldlibrary]} { + set env(TCL_LIBRARY) $oldlibrary + unset oldlibrary + } +} -result 1 +test unixInit-2.9 {TclpInitLibraryPath: paths relative to executable} -setup { # Checking for Bug 438014 + unset -nocomplain oldlibrary + if {[info exists env(TCL_LIBRARY)]} { + set oldlibrary $env(TCL_LIBRARY) + } + set env(TCL_LIBRARY) [info library] file delete -force /tmp/sparkly file delete -force /tmp/library file mkdir /tmp/sparkly file copy [interpreter] /tmp/sparkly/tcltest - file mkdir /tmp/library/ close [open /tmp/library/init.tcl w] - - set x [lrange [getlibpath /tmp/sparkly/tcltest] 0 4] - +} -body { + lrange [getlibpath /tmp/sparkly/tcltest] 1 5 +} -cleanup { file delete -force /tmp/sparkly file delete -force /tmp/library - set x -} [list /tmp/lib/tcl[info tclversion] /lib/tcl[info tclversion] \ + unset env(TCL_LIBRARY) + if {[info exists oldlibrary]} { + set env(TCL_LIBRARY) $oldlibrary + unset oldlibrary + } +} -result [list /tmp/lib/tcl[info tclversion] /lib/tcl[info tclversion] \ /tmp/library /library /tcl[info patchlevel]/library] - -test unixInit-2.10 {TclpInitLibraryPath: executable relative} -constraints { - unixOnly stdio -} -setup { +test unixInit-2.10 {TclpInitLibraryPath: executable relative} -setup { + unset -nocomplain oldlibrary + if {[info exists env(TCL_LIBRARY)]} { + set oldlibrary $env(TCL_LIBRARY) + } + set env(TCL_LIBRARY) [info library] set tmpDir [makeDirectory tmp] set sparklyDir [makeDirectory sparkly $tmpDir] set execPath [file join [makeDirectory bin $sparklyDir] tcltest] @@ -279,9 +309,9 @@ test unixInit-2.10 {TclpInitLibraryPath: executable relative} -constraints { cd $libDir } -body { # Checking for Bug 832657 - set x [lrange [getlibpath [file join .. bin tcltest]] 2 3] + set x [lrange [getlibpath [file join .. bin tcltest]] 3 4] foreach p $x { - lappend y [file normalize $p] + lappend y [file normalize $p] } set y } -cleanup { @@ -300,30 +330,31 @@ test unixInit-2.10 {TclpInitLibraryPath: executable relative} -constraints { unset tmpDir removeDirectory tmp unset x p y + unset env(TCL_LIBRARY) + if {[info exists oldlibrary]} { + set env(TCL_LIBRARY) $oldlibrary + unset oldlibrary + } } -result [list [file join [temporaryDirectory] tmp sparkly library] \ [file join [temporaryDirectory] tmp library] ] test unixInit-3.1 {TclpSetInitialEncodings} -constraints { - unixOnly stdio + unix stdio } -body { set env(LANG) C - set f [open "|[list [interpreter]]" w+] fconfigure $f -buffering none puts $f {puts [encoding system]; exit} set enc [gets $f] close $f unset env(LANG) - set enc } -match regexp -result [expr { ($tcl_platform(os) eq "Darwin") ? "^utf-8$" : "^iso8859-15?$"}] - -test unixInit-3.2 {TclpSetInitialEncodings} {unixOnly stdio} { +test unixInit-3.2 {TclpSetInitialEncodings} {unix stdio} { set env(LANG) japanese catch {set oldlc_all $env(LC_ALL)} set env(LC_ALL) japanese - set f [open "|[list [interpreter]]" w+] fconfigure $f -buffering none puts $f {puts [encoding system]; exit} @@ -332,7 +363,6 @@ test unixInit-3.2 {TclpSetInitialEncodings} {unixOnly stdio} { unset env(LANG) unset env(LC_ALL) catch {set env(LC_ALL) $oldlc_all} - set validEncodings [list euc-jp] if {[string match HP-UX $tcl_platform(os)]} { # Some older HP-UX systems need us to accept this as valid @@ -343,23 +373,22 @@ test unixInit-3.2 {TclpSetInitialEncodings} {unixOnly stdio} { expr {[lsearch -exact $validEncodings $enc] < 0} } 0 -test unixInit-4.1 {TclpSetVariables} {unixOnly} { +test unixInit-4.1 {TclpSetVariables} {unix} { # just make sure they exist - set a [list $tcl_library $tcl_pkgPath $tcl_platform(os)] set a [list $tcl_platform(osVersion) $tcl_platform(machine)] set tcl_platform(platform) } "unix" -test unixInit-5.1 {Tcl_Init} {emptyTest unixOnly} { +test unixInit-5.1 {Tcl_Init} {emptyTest unix} { # test initScript } {} -test unixInit-6.1 {Tcl_SourceRCFile} {emptyTest unixOnly} { +test unixInit-6.1 {Tcl_SourceRCFile} {emptyTest unix} { } {} test unixInit-7.1 {closed standard channel: Bug 772288} -constraints { - unixOnly stdio + unix stdio } -body { set tclsh [interpreter] set crash [makeFile {puts [open /dev/null]} crash.tcl] @@ -374,11 +403,9 @@ test unixInit-7.1 {closed standard channel: Bug 772288} -constraints { } -returnCodes 0 # cleanup -if {[info exists oldlibrary]} { - set env(TCL_LIBRARY) $oldlibrary -} catch {unset env(LANG)} catch {set env(LANG) $oldlang} unset -nocomplain path ::tcltest::cleanupTests return + diff --git a/tests/unixNotfy.test b/tests/unixNotfy.test index 8308055..8af8a21 100644 --- a/tests/unixNotfy.test +++ b/tests/unixNotfy.test @@ -19,14 +19,9 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -if {[info exists tk_version]} { - puts "When run in a Tk shell, these tests run hang. Skipping tests ..." - ::tcltest::cleanupTests - return -} - -set ::tcltest::testConstraints(testthread) \ - [expr {[info commands testthread] != {}}] +# When run in a Tk shell, these tests hang. +testConstraint noTk [expr {![info exists tk_version]}] +testConstraint testthread [expr {[info commands testthread] != {}}] # Darwin always uses a threaded notifier testConstraint unthreaded [expr { (![info exist tcl_platform(threaded)] || !$tcl_platform(threaded)) @@ -36,56 +31,46 @@ testConstraint unthreaded [expr { # The next two tests will hang if threads are enabled because the notifier # will not necessarily wait for ever in this case, so it does not generate # an error. - -test unixNotfy-1.1 {Tcl_DeleteFileHandler} \ - -constraints {unixOnly && unthreaded} \ - -body { - catch {vwait x} - set f [open [makeFile "" foo] w] - fileevent $f writable {set x 1} - vwait x - close $f - list [catch {vwait x} msg] $msg - } \ - -result {1 {can't wait for variable "x": would wait forever}} \ - -cleanup { - catch { close $f } - catch { removeFile foo } - } - -test unixNotfy-1.2 {Tcl_DeleteFileHandler} \ - -constraints {unixOnly && unthreaded} \ - -body { - catch {vwait x} - set f1 [open [makeFile "" foo] w] - set f2 [open [makeFile "" foo2] w] - fileevent $f1 writable {set x 1} - fileevent $f2 writable {set y 1} - vwait x - close $f1 - vwait y - close $f2 - list [catch {vwait x} msg] $msg - } \ - -result {1 {can't wait for variable "x": would wait forever}} \ - -cleanup { - catch { close $f1 } - catch { close $f2 } - catch { removeFile foo } - catch { removeFile foo2 } - } +test unixNotfy-1.1 {Tcl_DeleteFileHandler} -constraints {noTk unix unthreaded} -body { + catch {vwait x} + set f [open [makeFile "" foo] w] + fileevent $f writable {set x 1} + vwait x + close $f + list [catch {vwait x} msg] $msg +} -result {1 {can't wait for variable "x": would wait forever}} -cleanup { + catch { close $f } + catch { removeFile foo } +} +test unixNotfy-1.2 {Tcl_DeleteFileHandler} -constraints {noTk unix unthreaded} -body { + catch {vwait x} + set f1 [open [makeFile "" foo] w] + set f2 [open [makeFile "" foo2] w] + fileevent $f1 writable {set x 1} + fileevent $f2 writable {set y 1} + vwait x + close $f1 + vwait y + close $f2 + list [catch {vwait x} msg] $msg +} -result {1 {can't wait for variable "x": would wait forever}} -cleanup { + catch { close $f1 } + catch { close $f2 } + catch { removeFile foo } + catch { removeFile foo2 } +} test unixNotfy-2.1 {Tcl_DeleteFileHandler} \ - -constraints {unixOnly testthread} \ + -constraints {noTk unix testthread} \ -body { update set f [open [makeFile "" foo] w] fileevent $f writable {set x 1} vwait x close $f - testthread create "testthread send [testthread id] {set x ok}" + testthread create "testthread send [testthread id] {set x ok}" vwait x - threadReap + threadReap set x } \ -result {ok} \ @@ -93,9 +78,8 @@ test unixNotfy-2.1 {Tcl_DeleteFileHandler} \ catch { close $f } catch { removeFile foo } } - test unixNotfy-2.2 {Tcl_DeleteFileHandler} \ - -constraints {unixOnly testthread} \ + -constraints {noTk unix testthread} \ -body { update set f1 [open [makeFile "" foo] w] @@ -106,9 +90,9 @@ test unixNotfy-2.2 {Tcl_DeleteFileHandler} \ close $f1 vwait y close $f2 - testthread create "testthread send [testthread id] {set x ok}" + testthread create "testthread send [testthread id] {set x ok}" vwait x - threadReap + threadReap set x } \ -result {ok} \ diff --git a/tests/unknown.test b/tests/unknown.test index 6e95a2b..69a468f 100644 --- a/tests/unknown.test +++ b/tests/unknown.test @@ -63,15 +63,3 @@ catch {rename unknown {}} catch {rename unknown.old unknown} ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/unload.test b/tests/unload.test new file mode 100644 index 0000000..9e34bce --- /dev/null +++ b/tests/unload.test @@ -0,0 +1,219 @@ +# Commands covered: unload +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. +# +# Copyright (c) 1995 Sun Microsystems, Inc. +# Copyright (c) 1998-1999 by Scriptics Corporation. +# Copyright (c) 2003-2004 by Georgios Petasis +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest 2 + namespace import -force ::tcltest::* +} + +# Figure out what extension is used for shared libraries on this +# platform. +if {![info exists ext]} { + set ext [info sharedlibextension] +} + +# Tests require the existence of one of the DLLs in the dltest directory. +set testDir [file join [file dirname [info nameofexecutable]] dltest] +set x [file join $testDir pkgua$ext] +set dll "[file tail $x]Required" +testConstraint $dll [file readable $x] + +# Tests also require that this DLL has not already been loaded. +set loaded "[file tail $x]Loaded" +set alreadyLoaded [info loaded] +testConstraint $loaded [expr {![string match *pkgua* $alreadyLoaded]}] + +set alreadyTotalLoaded [info loaded] + +# Certain tests require the 'teststaticpkg' command from tcltest +testConstraint teststaticpkg [llength [info commands teststaticpkg]] + +# Basic tests: parameter testing... +test unload-1.1 {basic errors} {} { + list [catch {unload} msg] $msg +} "1 {wrong \# args: should be \"unload ?switches? fileName ?packageName? ?interp?\"}" +test unload-1.2 {basic errors} {} { + list [catch {unload a b c d} msg] $msg +} "1 {wrong \# args: should be \"unload ?switches? fileName ?packageName? ?interp?\"}" +test unload-1.3 {basic errors} {} { + list [catch {unload a b foobar} msg] $msg +} {1 {could not find interpreter "foobar"}} +test unload-1.4 {basic errors} {} { + list [catch {unload {}} msg] $msg +} {1 {must specify either file name or package name}} +test unload-1.5 {basic errors} {} { + list [catch {unload {} {}} msg] $msg +} {1 {must specify either file name or package name}} +test unload-1.6 {basic errors} {} { + list [catch {unload {} Unknown} msg] $msg +} {1 {package "Unknown" is loaded statically and cannot be unloaded}} +test unload-1.7 {-nocomplain switch} {} { + list [unload -nocomplain {} Unknown] +} {{}} + +set pkgua_loaded {} +set pkgua_detached {} +set pkgua_unloaded {} +# Tests for loading/unloading in trusted (non-safe) interpreters... +test unload-2.1 {basic loading of non-unloadable package, with guess for package name} [list $dll $loaded] { + load [file join $testDir pkga$ext] + list [pkga_eq abc def] [lsort [info commands pkga_*]] +} {0 {pkga_eq pkga_quote}} +test unload-2.2 {basic loading of unloadable package, with guess for package name} [list $dll $loaded] { + list $pkgua_loaded $pkgua_detached $pkgua_unloaded \ + [load [file join $testDir pkgua$ext]] \ + [pkgua_eq abc def] [lsort [info commands pkgua_*]] \ + $pkgua_loaded $pkgua_detached $pkgua_unloaded +} {{} {} {} {} 0 {pkgua_eq pkgua_quote} . {} {}} +test unload-2.3 {basic unloading of non-unloadable package, with guess for package name} [list $dll $loaded] { + list [catch {unload [file join $testDir pkga$ext]} msg] \ + [string map [list [file join $testDir pkga$ext] file] $msg] +} {1 {file "file" cannot be unloaded under a trusted interpreter}} +test unload-2.4 {basic unloading of unloadable package, with guess for package name} [list $dll $loaded] { + list $pkgua_loaded $pkgua_detached $pkgua_unloaded \ + [unload [file join $testDir pkgua$ext]] \ + [info commands pkgua_*] \ + $pkgua_loaded $pkgua_detached $pkgua_unloaded +} {. {} {} {} {} . . .} +test unload-2.5 {reloading of unloaded package, with guess for package name} [list $dll $loaded] { + list $pkgua_loaded $pkgua_detached $pkgua_unloaded \ + [load [file join $testDir pkgua$ext]] \ + [pkgua_eq abc def] [lsort [info commands pkgua_*]] \ + $pkgua_loaded $pkgua_detached $pkgua_unloaded +} {. . . {} 0 {pkgua_eq pkgua_quote} .. . .} +test unload-2.6 {basic unloading of re-loaded package, with guess for package name} [list $dll $loaded] { + list $pkgua_loaded $pkgua_detached $pkgua_unloaded \ + [unload [file join $testDir pkgua$ext]] \ + [info commands pkgua_*] \ + $pkgua_loaded $pkgua_detached $pkgua_unloaded +} {.. . . {} {} .. .. ..} + +# Tests for loading/unloading in safe interpreters... +interp create -safe child +child eval { + set pkgua_loaded {} + set pkgua_detached {} + set pkgua_unloaded {} +} +test unload-3.1 {basic loading of non-unloadable package in a safe interpreter, with package name conversion} \ + [list $dll $loaded] { + catch {rename pkgb_sub {}} + load [file join $testDir pkgb$ext] pKgB child + list [child eval pkgb_sub 44 13] [catch {child eval pkgb_unsafe} msg] $msg \ + [catch {pkgb_sub 12 10} msg2] $msg2 +} {31 1 {invalid command name "pkgb_unsafe"} 1 {invalid command name "pkgb_sub"}} +test unload-3.2 {basic loading of unloadable package in a safe interpreter, with package name conversion} \ + [list $dll $loaded] { + list [child eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] \ + [load [file join $testDir pkgua$ext] pKgUA child] \ + [child eval pkgua_eq abc def] \ + [lsort [child eval info commands pkgua_*]] \ + [child eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] +} {{{} {} {}} {} 0 {pkgua_eq pkgua_quote} {. {} {}}} +test unload-3.3 {unloading of a package that has never been loaded from a safe interpreter} \ + [list $dll $loaded] { + list [catch {unload [file join $testDir pkga$ext] {} child} msg] \ + [string map [list [file join $testDir pkga$ext] file] $msg] +} {1 {file "file" has never been loaded in this interpreter}} +test unload-3.4 {basic unloading of a non-unloadable package from a safe interpreter, with guess for package name} \ + [list $dll $loaded] { + list [catch {unload [file join $testDir pkgb$ext] {} child} msg] \ + [string map [list [file join $testDir pkgb$ext] file] $msg] +} {1 {file "file" cannot be unloaded under a safe interpreter}} +test unload-3.5 {basic unloading of an unloadable package from a safe interpreter, with guess for package name} \ + [list $dll $loaded] { + list [child eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] \ + [unload [file join $testDir pkgua$ext] {} child] \ + [child eval info commands pkgua_*] \ + [child eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] +} {{. {} {}} {} {} {. . .}} +test unload-3.6 {reloading of unloaded package in a safe interpreter, with guess for package name} \ + [list $dll $loaded] { + list [child eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] \ + [load [file join $testDir pkgua$ext] {} child] \ + [child eval pkgua_eq abc def] \ + [lsort [child eval info commands pkgua_*]] \ + [child eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] +} {{. . .} {} 0 {pkgua_eq pkgua_quote} {.. . .}} +test unload-3.7 {basic unloading of re-loaded package from a safe interpreter, with package name conversion} \ + [list $dll $loaded] { + list [child eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] \ + [unload [file join $testDir pkgua$ext] pKgUa child] \ + [child eval info commands pkgua_*] \ + [child eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] +} {{.. . .} {} {} {.. .. ..}} + +# Tests for loading/unloading of a package among multiple interpreters... +interp create child-trusted +child-trusted eval { + set pkgua_loaded {} + set pkgua_detached {} + set pkgua_unloaded {} +} +## Load package in main trusted interpreter... +test unload-4.1 {loading of unloadable package in trusted interpreter, with guess for package name} \ + [list $dll $loaded] { + list [list $pkgua_loaded $pkgua_detached $pkgua_unloaded] \ + [load [file join $testDir pkgua$ext]] \ + [pkgua_eq abc def] [lsort [info commands pkgua_*]] \ + [list $pkgua_loaded $pkgua_detached $pkgua_unloaded] +} {{.. .. ..} {} 0 {pkgua_eq pkgua_quote} {... .. ..}} +## Load package in child-safe interpreter... +test unload-4.2 {basic loading of unloadable package in a safe interpreter, with package name conversion} \ + [list $dll $loaded] { + list [child eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] \ + [load [file join $testDir pkgua$ext] pKgUA child] \ + [child eval pkgua_eq abc def] \ + [lsort [child eval info commands pkgua_*]] \ + [child eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] +} {{.. .. ..} {} 0 {pkgua_eq pkgua_quote} {... .. ..}} +## Load package in child-trusted interpreter... +test unload-4.3 {basic loading of unloadable package in a second trusted interpreter, with package name conversion} \ + [list $dll $loaded] { + list [child-trusted eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] \ + [load [file join $testDir pkgua$ext] pkguA child-trusted] \ + [child-trusted eval pkgua_eq abc def] \ + [lsort [child-trusted eval info commands pkgua_*]] \ + [child-trusted eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] +} {{{} {} {}} {} 0 {pkgua_eq pkgua_quote} {. {} {}}} +## Unload the package from the main trusted interpreter... +test unload-4.4 {basic unloading of unloadable package from trusted interpreter, with guess for package name} \ + [list $dll $loaded] { + list [list $pkgua_loaded $pkgua_detached $pkgua_unloaded] \ + [unload [file join $testDir pkgua$ext]] \ + [info commands pkgua_*] \ + [list $pkgua_loaded $pkgua_detached $pkgua_unloaded] +} {{... .. ..} {} {} {... ... ..}} +## Unload the package from the child safe interpreter... +test unload-4.5 {basic unloading of unloadable package from a safe interpreter, with guess for package name} \ + [list $dll $loaded] { + list [child eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] \ + [unload [file join $testDir pkgua$ext] {} child] \ + [child eval info commands pkgua_*] \ + [child eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] +} {{... .. ..} {} {} {... ... ..}} +## Unload the package from the child trusted interpreter... +test unload-4.6 {basic unloading of unloadable package from a safe interpreter, with guess for package name} \ + [list $dll $loaded] { + list [child-trusted eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] \ + [unload [file join $testDir pkgua$ext] {} child-trusted] \ + [child-trusted eval info commands pkgua_*] \ + [child-trusted eval {list $pkgua_loaded $pkgua_detached $pkgua_unloaded}] +} {{. {} {}} {} {} {. . .}} + +# cleanup +interp delete child +interp delete child-trusted +unset ext +::tcltest::cleanupTests +return diff --git a/tests/uplevel.test b/tests/uplevel.test index 4670369..cfe4b72 100644 --- a/tests/uplevel.test +++ b/tests/uplevel.test @@ -128,15 +128,3 @@ test uplevel-6.1 {uplevel and shadowed cmds} { # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/upvar.test b/tests/upvar.test index 1301338..457c9f8 100644 --- a/tests/upvar.test +++ b/tests/upvar.test @@ -1,4 +1,4 @@ -# Commands covered: upvar +# Commands covered: 'upvar', 'namespace upvar' # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and @@ -12,10 +12,12 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } +testConstraint testupvar [llength [info commands testupvar]] + test upvar-1.1 {reading variables with upvar} { proc p1 {a b} {set c 22; set d 33; p2} proc p2 {} {upvar a x1 b x2 c x3 d x4; set a abc; list $x1 $x2 $x3 $x4 $a} @@ -312,13 +314,15 @@ test upvar-8.7 {errors in upvar command} { proc p1 {} {trace variable a w foo; upvar b a} list [catch p1 msg] $msg } {1 {variable "a" has traces: can't use for upvar}} -test upvar-8.8 {create nested array with upvar} { +test upvar-8.8 {create nested array with upvar} -body { proc p1 {} {upvar x(a) b; set b(2) 44} catch {unset x} list [catch p1 msg] $msg -} {1 {can't set "b(2)": variable isn't array}} +} -cleanup { + unset x +} -result {1 {can't set "b(2)": variable isn't array}} test upvar-8.9 {upvar won't create namespace variable that refers to procedure variable} { - catch {eval namespace delete [namespace children :: test_ns_*]} + catch {namespace delete {*}[namespace children :: test_ns_*]} catch {rename MakeLink ""} namespace eval ::test_ns_1 {} proc MakeLink {a} { @@ -334,82 +338,211 @@ test upvar-8.10 {upvar will create element alias for new array element} { array set upvarArray {} catch {upvar 0 upvarArray(elem) upvarArrayElemAlias} } {0} +test upvar-8.11 {upvar will not create a variable that looks like an array} -body { + catch {unset upvarArray} + array set upvarArray {} + upvar 0 upvarArray(elem) upvarArrayElemAlias(elem) +} -returnCodes 1 -match glob -result * -if {[info commands testupvar] != {}} { - test upvar-9.1 {Tcl_UpVar2 procedure} { - list [catch {testupvar xyz a {} x global} msg] $msg - } {1 {bad level "xyz"}} - test upvar-9.2 {Tcl_UpVar2 procedure} { - catch {unset a} - catch {unset x} - set a 44 - list [catch {testupvar #0 a 1 x global} msg] $msg - } {1 {can't access "a(1)": variable isn't array}} - test upvar-9.3 {Tcl_UpVar2 procedure} { - proc foo {} { - testupvar 1 a {} x local - set x - } - catch {unset a} - catch {unset x} - set a 44 - foo - } {44} - test upvar-9.4 {Tcl_UpVar2 procedure} { - proc foo {} { - testupvar 1 a {} _up_ global - list [catch {set x} msg] $msg - } - catch {unset a} - catch {unset _up_} - set a 44 - concat [foo] $_up_ - } {1 {can't read "x": no such variable} 44} - test upvar-9.5 {Tcl_UpVar2 procedure} { - proc foo {} { - testupvar 1 a b x local - set x - } - catch {unset a} - catch {unset x} - set a(b) 1234 - foo - } {1234} - test upvar-9.6 {Tcl_UpVar procedure} { - proc foo {} { - testupvar 1 a x local - set x - } - catch {unset a} - catch {unset x} - set a xyzzy - foo - } {xyzzy} - test upvar-9.7 {Tcl_UpVar procedure} { - proc foo {} { - testupvar #0 a(b) x local - set x - } - catch {unset a} - catch {unset x} - set a(b) 1234 - foo - } {1234} -} +test upvar-9.1 {Tcl_UpVar2 procedure} testupvar { + list [catch {testupvar xyz a {} x global} msg] $msg +} {1 {bad level "xyz"}} +test upvar-9.2 {Tcl_UpVar2 procedure} testupvar { + catch {unset a} + catch {unset x} + set a 44 + list [catch "testupvar #0 a 1 x global" msg] $msg +} {1 {can't access "a(1)": variable isn't array}} +test upvar-9.3 {Tcl_UpVar2 procedure} testupvar { + proc foo {} { + testupvar 1 a {} x local + set x + } + catch {unset a} + catch {unset x} + set a 44 + foo +} {44} +test upvar-9.4 {Tcl_UpVar2 procedure} testupvar { + proc foo {} { + testupvar 1 a {} _up_ global + list [catch {set x} msg] $msg + } + catch {unset a} + catch {unset _up_} + set a 44 + concat [foo] $_up_ +} {1 {can't read "x": no such variable} 44} +test upvar-9.5 {Tcl_UpVar2 procedure} testupvar { + proc foo {} { + testupvar 1 a b x local + set x + } + catch {unset a} + catch {unset x} + set a(b) 1234 + foo +} {1234} +test upvar-9.6 {Tcl_UpVar procedure} testupvar { + proc foo {} { + testupvar 1 a x local + set x + } + catch {unset a} + catch {unset x} + set a xyzzy + foo +} {xyzzy} +test upvar-9.7 {Tcl_UpVar procedure} testupvar { + proc foo {} { + testupvar #0 a(b) x local + set x + } + catch {unset a} + catch {unset x} + set a(b) 1234 + foo +} {1234} catch {unset a} -# cleanup -::tcltest::cleanupTests -return +# +# Tests for 'namespace upvar'. As the implementation is essentially the same as +# for 'upvar', we only test that the variables are linked correctly. Ie, we +# assume that the behaviour of variables once the link is established has +# already been tested above. +# +# + +# Clear out any namespaces called test_ns_* +catch {namespace delete {*}[namespace children :: test_ns_*]} +namespace eval test_ns_0 { + variable x test_ns_0 +} + +set x test_global +test upvar-NS-1.1 {nsupvar links to correct variable} \ + -body { + namespace eval test_ns_1 { + namespace upvar ::test_ns_0 x w + set w + } + } \ + -result {test_ns_0} \ + -cleanup {namespace delete test_ns_1} + +test upvar-NS-1.2 {nsupvar links to correct variable} \ + -body { + namespace eval test_ns_1 { + proc a {} { + namespace upvar ::test_ns_0 x w + set w + } + return [a] + } + } \ + -result {test_ns_0} \ + -cleanup {namespace delete test_ns_1} +test upvar-NS-1.3 {nsupvar links to correct variable} \ + -body { + namespace eval test_ns_1 { + namespace upvar test_ns_0 x w + set w + } + } \ + -result {namespace "test_ns_0" not found in "::test_ns_1"} \ + -returnCodes error \ + -cleanup {namespace delete test_ns_1} +test upvar-NS-1.4 {nsupvar links to correct variable} \ + -body { + namespace eval test_ns_1 { + proc a {} { + namespace upvar test_ns_0 x w + set w + } + return [a] + } + } \ + -result {namespace "test_ns_0" not found in "::test_ns_1"} \ + -returnCodes error \ + -cleanup {namespace delete test_ns_1} +test upvar-NS-1.5 {nsupvar links to correct variable} \ + -body { + namespace eval test_ns_1 { + namespace eval test_ns_0 {} + namespace upvar test_ns_0 x w + set w + } + } \ + -result {can't read "w": no such variable} \ + -returnCodes error \ + -cleanup {namespace delete test_ns_1} +test upvar-NS-1.6 {nsupvar links to correct variable} \ + -body { + namespace eval test_ns_1 { + namespace eval test_ns_0 {} + proc a {} { + namespace upvar test_ns_0 x w + set w + } + return [a] + } + } \ + -result {can't read "w": no such variable} \ + -returnCodes error \ + -cleanup {namespace delete test_ns_1} +test upvar-NS-1.7 {nsupvar links to correct variable} \ + -body { + namespace eval test_ns_1 { + namespace eval test_ns_0 { + variable x test_ns_1::test_ns_0 + } + namespace upvar test_ns_0 x w + set w + } + } \ + -result {test_ns_1::test_ns_0} \ + -cleanup {namespace delete test_ns_1} +test upvar-NS-1.8 {nsupvar links to correct variable} \ + -body { + namespace eval test_ns_1 { + namespace eval test_ns_0 { + variable x test_ns_1::test_ns_0 + } + proc a {} { + namespace upvar test_ns_0 x w + set w + } + return [a] + } + } \ + -result {test_ns_1::test_ns_0} \ + -cleanup {namespace delete test_ns_1} +test upvar-NS-1.9 {nsupvar links to correct variable} \ + -body { + namespace eval test_ns_1 { + variable x test_ns_1 + proc a {} { + namespace upvar test_ns_0 x w + set w + } + return [a] + } + } \ + -result {namespace "test_ns_0" not found in "::test_ns_1"} \ + -returnCodes error \ + -cleanup {namespace delete test_ns_1} +# cleanup +::tcltest::cleanupTests +return diff --git a/tests/utf.test b/tests/utf.test index 1d263d0..ad1e7b8 100644 --- a/tests/utf.test +++ b/tests/utf.test @@ -285,6 +285,10 @@ test utf-21.2 {unicode alnum char in regc_locale.c} { # this returns 1 with Unicode 6 compliance list [regexp {^[[:alnum:]]+$} \u1040\u021f\u0220] [regexp {^\w+$} \u1040\u021f\u0220] } {1 1} +test utf-21.3 {unicode print char in regc_locale.c} { + # this returns 1 with Unicode 6 compliance + regexp {^[[:print:]]+$} \ufbc1 +} 1 test utf-21.4 {TclUniCharIsGraph} { # [Bug 3464428] string is graph \u0120 @@ -358,38 +362,67 @@ test utf-24.4 {unicode space char in regc_locale.c} { testConstraint teststringobj [llength [info commands teststringobj]] -test utf-25.1 {Tcl_UniCharNcasecmp} teststringobj { - testobj freeallvars - teststringobj set 1 a - teststringobj set 2 b - teststringobj getunicode 1 - teststringobj getunicode 2 - string compare -nocase [teststringobj get 1] [teststringobj get 2] -} -1 -test utf-25.2 {Tcl_UniCharNcasecmp} teststringobj { - testobj freeallvars - teststringobj set 1 b - teststringobj set 2 a - teststringobj getunicode 1 - teststringobj getunicode 2 - string compare -nocase [teststringobj get 1] [teststringobj get 2] -} 1 -test utf-25.3 {Tcl_UniCharNcasecmp} teststringobj { - testobj freeallvars - teststringobj set 1 B - teststringobj set 2 a - teststringobj getunicode 1 - teststringobj getunicode 2 - string compare -nocase [teststringobj get 1] [teststringobj get 2] -} 1 -test utf-25.4 {Tcl_UniCharNcasecmp} teststringobj { - testobj freeallvars - teststringobj set 1 aBcB - teststringobj set 2 abca - teststringobj getunicode 1 - teststringobj getunicode 2 - string compare -nocase [teststringobj get 1] [teststringobj get 2] -} 1 +test utf-25.1 {Tcl_UniCharNcasecmp} -constraints teststringobj \ + -setup { + testobj freeallvars + } \ + -body { + teststringobj set 1 a + teststringobj set 2 b + teststringobj getunicode 1 + teststringobj getunicode 2 + string compare -nocase [teststringobj get 1] [teststringobj get 2] + } \ + -cleanup { + testobj freeallvars + } \ + -result -1 +test utf-25.2 {Tcl_UniCharNcasecmp} -constraints teststringobj \ + -setup { + testobj freeallvars + } \ + -body { + teststringobj set 1 b + teststringobj set 2 a + teststringobj getunicode 1 + teststringobj getunicode 2 + string compare -nocase [teststringobj get 1] [teststringobj get 2] + } \ + -cleanup { + testobj freeallvars + } \ + -result 1 +test utf-25.3 {Tcl_UniCharNcasecmp} -constraints teststringobj \ + -setup { + testobj freeallvars + } \ + -body { + teststringobj set 1 B + teststringobj set 2 a + teststringobj getunicode 1 + teststringobj getunicode 2 + string compare -nocase [teststringobj get 1] [teststringobj get 2] + } \ + -cleanup { + testobj freeallvars + } \ + -result 1 + +test utf-25.4 {Tcl_UniCharNcasecmp} -constraints teststringobj \ + -setup { + testobj freeallvars + } \ + -body { + teststringobj set 1 aBcB + teststringobj set 2 abca + teststringobj getunicode 1 + teststringobj getunicode 2 + string compare -nocase [teststringobj get 1] [teststringobj get 2] + } \ + -cleanup { + testobj freeallvars + } \ + -result 1 # cleanup ::tcltest::cleanupTests diff --git a/tests/util.test b/tests/util.test index da42f61..61a1790 100644 --- a/tests/util.test +++ b/tests/util.test @@ -12,6 +12,111 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } +testConstraint testdstring [llength [info commands testdstring]] +testConstraint testconcatobj [llength [info commands testconcatobj]] +testConstraint testdoubledigits [llength [info commands testdoubledigits]] + +# Big test for correct ordering of data in [expr] + +proc testIEEE {} { + variable ieeeValues + binary scan [binary format dd -1.0 1.0] c* c + switch -exact -- $c { + {0 0 0 0 0 0 -16 -65 0 0 0 0 0 0 -16 63} { + # little endian + binary scan \x00\x00\x00\x00\x00\x00\xf0\xff d \ + ieeeValues(-Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf0\xbf d \ + ieeeValues(-Normal) + binary scan \x00\x00\x00\x00\x00\x00\x08\x80 d \ + ieeeValues(-Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\x00\x80 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x00\x00\x00\x00\x00\x08\x00 d \ + ieeeValues(+Subnormal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x3f d \ + ieeeValues(+Normal) + binary scan \x00\x00\x00\x00\x00\x00\xf0\x7f d \ + ieeeValues(+Infinity) + binary scan \x00\x00\x00\x00\x00\x00\xf8\x7f d \ + ieeeValues(NaN) + binary scan \x00\x00\x00\x00\x00\x00\xf8\xff d \ + ieeeValues(-NaN) + binary scan \xef\xcd\xab\x89\x67\x45\xfb\xff d \ + ieeeValues(-NaN(3456789abcdef)) + set ieeeValues(littleEndian) 1 + return 1 + } + {-65 -16 0 0 0 0 0 0 63 -16 0 0 0 0 0 0} { + binary scan \xff\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Infinity) + binary scan \xbf\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Normal) + binary scan \x80\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-Subnormal) + binary scan \x80\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-0) + binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+0) + binary scan \x00\x08\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Subnormal) + binary scan \x3f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Normal) + binary scan \x7f\xf0\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(+Infinity) + binary scan \x7f\xf8\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(NaN) + binary scan \xff\xf8\x00\x00\x00\x00\x00\x00 d \ + ieeeValues(-NaN) + binary scan \xff\xfb\x45\x67\x89\xab\xcd\xef d \ + ieeeValues(-NaN(3456789abcdef)) + set ieeeValues(littleEndian) 0 + return 1 + } + default { + return 0 + } + } +} +testConstraint ieeeFloatingPoint [testIEEE] + +proc convertDouble { x } { + variable ieeeValues + if { $ieeeValues(littleEndian) } { + binary scan [binary format w $x] d result + } else { + binary scan [binary format W $x] d result + } + return $result +} + +proc verdonk_test {sig binexp shouldbe exp} { + regexp {([-+]?)([0-9a-f]+)} $sig -> signum sig + scan $sig %llx sig + if {$signum eq {-}} { + set signum [expr 1<<63] + } else { + set signum 0 + } + regexp {E([-+]?[0-9]+)} $binexp -> binexp + set word [expr {$signum | (($binexp + 0x3ff)<<52)|($sig & ~(1<<52))}] + binary scan [binary format w $word] q double + regexp {([-+])(\d+)_(\d+)\&} $shouldbe -> signum digits1 digits2 + regexp {E([-+]\d+)} $exp -> decexp + incr decexp [expr {[string length $digits1] - 1}] + lassign [testdoubledigits $double [string length $digits1] e] \ + outdigits decpt outsign + if {[string index $digits2 0] >= 5} { + incr digits1 + } + if {$outsign != $signum || $outdigits != $digits1 || $decpt != $decexp} { + return -code error "result is ${outsign}0.${outdigits}E$decpt\ + should be ${signum}0.${digits1}E$decexp" + } +} + test util-1.1 {TclFindElement procedure - binary element in middle of list} { lindex {0 foo\x00help 1} 1 } "foo\x00help" @@ -32,11 +137,50 @@ test util-3.1 {Tcl_ScanCountedElement procedure - don't leave unmatched braces} # have the property that it can be enclosing in curly braces to make # an embedded sub-list. If this property doesn't hold, then # Tcl_DStringStartSublist doesn't work. - set x {} - lappend x " \\\{ \\" + lappend x "# \\\{ \\" concat $x [llength "{$x}"] -} {\ \\\{\ \\ 1} +} {\#\ \\\{\ \\ 1} +test util-3.2 {Tcl_ConverCountedElement procedure - quote leading '#'} { + list # # a +} {{#} # a} +test util-3.3 {Tcl_ConverCountedElement procedure - quote leading '#'} { + list #\{ # a +} {\#\{ # a} +test util-3.4 {Tcl_ConverCountedElement procedure - quote leading '#'} { + proc # {} {return #} + set result [eval [list #]] + rename # {} + set result +} {#} +test util-3.4.1 {Tcl_ConverCountedElement procedure - quote leading '#'} { + proc # {} {return #} + set cmd [list #] + append cmd "" ;# force string rep generation + set result [eval $cmd] + rename # {} + set result +} {#} +test util-3.5 {Tcl_ConverCountedElement procedure - quote leading '#'} { + proc #\{ {} {return #} + set result [eval [list #\{]] + rename #\{ {} + set result +} {#} +test util-3.5.1 {Tcl_ConverCountedElement procedure - quote leading '#'} { + proc #\{ {} {return #} + set cmd [list #\{] + append cmd "" ;# force string rep generation + set result [eval $cmd] + rename #\{ {} + set result +} {#} +test util-3.6 {Tcl_ConvertElement, Bug 3371644} { + interp create #\\ + interp alias {} x #\\ concat + interp target {} x ;# Crash if bug not fixed + interp delete #\\ +} {} test util-4.1 {Tcl_ConcatObj - backslash-space at end of argument} { concat a {b\ } c @@ -57,6 +201,11 @@ test util-4.6 {Tcl_ConcatObj - utf-8 sequence with "whitespace" char} { # Check for Bug #227512. If this violates C isspace, then it returns \xc3. concat \xe0 } \xe0 +test util-4.7 {Tcl_ConcatObj - refCount safety} testconcatobj { + # Check for Bug #1447328 (actually, bugs in its original "fix"). One of the + # symptoms was Bug #2055782. + testconcatobj +} {} proc Wrapper_Tcl_StringMatch {pattern string} { # Forces use of Tcl_StringMatch, not Tcl_UniCharCaseMatch @@ -88,7 +237,6 @@ test util-5.8 {Tcl_StringMatch} { } 1 test util-5.9 {Tcl_StringMatch: UTF-8} { # skip one character in string - Wrapper_Tcl_StringMatch a?c a\u4e4fc } 1 test util-5.10 {Tcl_StringMatch} { @@ -102,19 +250,16 @@ test util-5.12 {Tcl_StringMatch} { } 1 test util-5.13 {Tcl_StringMatch: UTF-8} { # string += Tcl_UtfToUniChar(string, &ch); - Wrapper_Tcl_StringMatch "\[\u4e4fxy\]bc" "\u4e4fbc" } 1 test util-5.14 {Tcl_StringMatch} { # if ((*pattern == ']') || (*pattern == '\0')) # badly formed pattern - Wrapper_Tcl_StringMatch {[]} {[]} } 0 test util-5.15 {Tcl_StringMatch} { # if ((*pattern == ']') || (*pattern == '\0')) # badly formed pattern - Wrapper_Tcl_StringMatch {[} {[} } 0 test util-5.16 {Tcl_StringMatch} { @@ -123,19 +268,16 @@ test util-5.16 {Tcl_StringMatch} { test util-5.17 {Tcl_StringMatch: UTF-8} { # pattern += Tcl_UtfToUniChar(pattern, &endChar); # get 1 UTF-8 character - Wrapper_Tcl_StringMatch "a\[a\u4e4fc]c" "a\u4e4fc" } 1 test util-5.18 {Tcl_StringMatch: UTF-8} { # pattern += Tcl_UtfToUniChar(pattern, &endChar); # proper advance: wrong answer would match on UTF trail byte of \u4e4f - Wrapper_Tcl_StringMatch {a[a\u4e4fc]c} [bytestring a\u008fc] } 0 test util-5.19 {Tcl_StringMatch: UTF-8} { # pattern += Tcl_UtfToUniChar(pattern, &endChar); # proper advance. - Wrapper_Tcl_StringMatch {a[a\u4e4fc]c} "acc" } 1 test util-5.20 {Tcl_StringMatch} { @@ -216,7 +358,6 @@ test util-5.44 {Tcl_StringMatch: skip correct number of ']'} { test util-5.45 {Tcl_StringMatch} { # if (*pattern == '\0') # badly formed pattern, still treats as a set - Wrapper_Tcl_StringMatch {[a} a } 1 test util-5.46 {Tcl_StringMatch} { @@ -238,42 +379,70 @@ test util-5.51 {Tcl_StringMatch} { Wrapper_Tcl_StringMatch "" "" } 1 -test util-6.1 {Tcl_PrintDouble - using tcl_precision} { +test util-6.1 {Tcl_PrintDouble - using tcl_precision} -setup { + set old_precision $::tcl_precision + set ::tcl_precision 12 +} -body { concat x[expr 1.4] -} {x1.4} -test util-6.2 {Tcl_PrintDouble - using tcl_precision} { +} -cleanup { + set ::tcl_precision $old_precision +} -result {x1.4} +test util-6.2 {Tcl_PrintDouble - using tcl_precision} -setup { + set old_precision $::tcl_precision + set ::tcl_precision 12 +} -body { concat x[expr 1.39999999999] -} {x1.39999999999} -test util-6.3 {Tcl_PrintDouble - using tcl_precision} { +} -cleanup { + set ::tcl_precision $old_precision +} -result {x1.39999999999} +test util-6.3 {Tcl_PrintDouble - using tcl_precision} -setup { + set old_precision $::tcl_precision + set ::tcl_precision 12 +} -body { concat x[expr 1.399999999999] -} {x1.4} -test util-6.4 {Tcl_PrintDouble - using tcl_precision} { - set tcl_precision 5 +} -cleanup { + set ::tcl_precision $old_precision +} -result {x1.4} +test util-6.4 {Tcl_PrintDouble - using tcl_precision} -setup { + set old_precision $::tcl_precision + set ::tcl_precision 5 +} -body { concat x[expr 1.123412341234] -} {x1.1234} -set tcl_precision 12 +} -cleanup { + set tcl_precision $old_precision +} -result {x1.1234} test util-6.5 {Tcl_PrintDouble - make sure there's a decimal point} { concat x[expr 2.0] } {x2.0} -test util-6.6 {Tcl_PrintDouble - make sure there's a decimal point} {eformat} { +test util-6.6 {Tcl_PrintDouble - make sure there's a decimal point} { concat x[expr 3.0e98] } {x3e+98} -test util-7.1 {TclPrecTraceProc - unset callbacks} { +test util-7.1 {TclPrecTraceProc - unset callbacks} -setup { + set old_precision $::tcl_precision +} -body { set tcl_precision 7 set x $tcl_precision unset tcl_precision list $x $tcl_precision -} {7 7} -test util-7.2 {TclPrecTraceProc - read traces, sharing among interpreters} { +} -cleanup { + set ::tcl_precision $old_precision +} -result {7 7} +test util-7.2 {TclPrecTraceProc - read traces, sharing among interpreters} -setup { + set old_precision $::tcl_precision +} -body { set tcl_precision 12 interp create child set x [child eval set tcl_precision] child eval {set tcl_precision 6} interp delete child list $x $tcl_precision -} {12 6} -test util-7.3 {TclPrecTraceProc - write traces, safe interpreters} { +} -cleanup { + set ::tcl_precision $old_precision +} -result {12 6} +test util-7.3 {TclPrecTraceProc - write traces, safe interpreters} -setup { + set old_precision $::tcl_precision +} -body { set tcl_precision 12 interp create -safe child set x [child eval { @@ -281,13 +450,17 @@ test util-7.3 {TclPrecTraceProc - write traces, safe interpreters} { }] interp delete child list $x $tcl_precision -} {{1 {can't set "tcl_precision": can't modify precision from a safe interpreter}} 12} -test util-7.4 {TclPrecTraceProc - write traces, bogus values} { +} -cleanup { + set ::tcl_precision $old_precision +} -result {{1 {can't set "tcl_precision": can't modify precision from a safe interpreter}} 12} +test util-7.4 {TclPrecTraceProc - write traces, bogus values} -setup { + set old_precision $::tcl_precision +} -body { set tcl_precision 12 list [catch {set tcl_precision abc} msg] $msg $tcl_precision -} {1 {can't set "tcl_precision": improper value for precision} 12} - -set tcl_precision 12 +} -cleanup { + set ::tcl_precision $old_precision +} -result {1 {can't set "tcl_precision": improper value for precision} 12} # This test always succeeded in the C locale anyway... test util-8.1 {TclNeedSpace - correct UTF8 handling} { @@ -304,9 +477,6 @@ test util-8.1 {TclNeedSpace - correct UTF8 handling} { interp delete \u5420 set result } "\u5420 foo" - -tcltest::testConstraint testdstring [expr {[info commands testdstring] != {}}] - test util-8.2 {TclNeedSpace - correct UTF8 handling} testdstring { # Bug 411825 # This tests the same bug as the previous test, but @@ -353,6 +523,3496 @@ test util-8.6 {TclNeedSpace - correct UTF8 handling} testdstring { list [llength [testdstring get]] [string length [testdstring get]] } {2 9} +test util-9.0.0 {TclGetIntForIndex} { + string index abcd 0 +} a +test util-9.0.1 {TclGetIntForIndex} { + string index abcd 0x0 +} a +test util-9.0.2 {TclGetIntForIndex} { + string index abcd -0x0 +} a +test util-9.0.3 {TclGetIntForIndex} { + string index abcd { 0 } +} a +test util-9.0.4 {TclGetIntForIndex} { + string index abcd { 0x0 } +} a +test util-9.0.5 {TclGetIntForIndex} { + string index abcd { -0x0 } +} a +test util-9.0.6 {TclGetIntForIndex} { + string index abcd 01 +} b +test util-9.0.7 {TclGetIntForIndex} { + string index abcd { 01 } +} b +test util-9.1.0 {TclGetIntForIndex} { + string index abcd 3 +} d +test util-9.1.1 {TclGetIntForIndex} { + string index abcd { 3 } +} d +test util-9.1.2 {TclGetIntForIndex} { + string index abcdefghijk 0xa +} k +test util-9.1.3 {TclGetIntForIndex} { + string index abcdefghijk { 0xa } +} k +test util-9.2.0 {TclGetIntForIndex} { + string index abcd end +} d +test util-9.2.1 {TclGetIntForIndex} -body { + string index abcd { end} +} -returnCodes error -match glob -result * +test util-9.2.2 {TclGetIntForIndex} -body { + string index abcd {end } +} -returnCodes error -match glob -result * +test util-9.3 {TclGetIntForIndex} { + # Deprecated + string index abcd en +} d +test util-9.4 {TclGetIntForIndex} { + # Deprecated + string index abcd e +} d +test util-9.5.0 {TclGetIntForIndex} { + string index abcd end-1 +} c +test util-9.5.1 {TclGetIntForIndex} { + string index abcd {end-1 } +} c +test util-9.5.2 {TclGetIntForIndex} -body { + string index abcd { end-1} +} -returnCodes error -match glob -result * +test util-9.6 {TclGetIntForIndex} { + string index abcd end+-1 +} c +test util-9.7 {TclGetIntForIndex} { + string index abcd end+1 +} {} +test util-9.8 {TclGetIntForIndex} { + string index abcd end--1 +} {} +test util-9.9.0 {TclGetIntForIndex} { + string index abcd 0+0 +} a +test util-9.9.1 {TclGetIntForIndex} { + string index abcd { 0+0 } +} a +test util-9.10 {TclGetIntForIndex} { + string index abcd 0-0 +} a +test util-9.11 {TclGetIntForIndex} { + string index abcd 1+0 +} b +test util-9.12 {TclGetIntForIndex} { + string index abcd 1-0 +} b +test util-9.13 {TclGetIntForIndex} { + string index abcd 1+1 +} c +test util-9.14 {TclGetIntForIndex} { + string index abcd 1-1 +} a +test util-9.15 {TclGetIntForIndex} { + string index abcd -1+2 +} b +test util-9.16 {TclGetIntForIndex} { + string index abcd -1--2 +} b +test util-9.17 {TclGetIntForIndex} { + string index abcd { -1+2 } +} b +test util-9.18 {TclGetIntForIndex} { + string index abcd { -1--2 } +} b +test util-9.19 {TclGetIntForIndex} -body { + string index a {} +} -returnCodes error -match glob -result * +test util-9.20 {TclGetIntForIndex} -body { + string index a { } +} -returnCodes error -match glob -result * +test util-9.21 {TclGetIntForIndex} -body { + string index a " \r\t\n" +} -returnCodes error -match glob -result * +test util-9.22 {TclGetIntForIndex} -body { + string index a + +} -returnCodes error -match glob -result * +test util-9.23 {TclGetIntForIndex} -body { + string index a - +} -returnCodes error -match glob -result * +test util-9.24 {TclGetIntForIndex} -body { + string index a x +} -returnCodes error -match glob -result * +test util-9.25 {TclGetIntForIndex} -body { + string index a +x +} -returnCodes error -match glob -result * +test util-9.26 {TclGetIntForIndex} -body { + string index a -x +} -returnCodes error -match glob -result * +test util-9.27 {TclGetIntForIndex} -body { + string index a 0y +} -returnCodes error -match glob -result * +test util-9.28 {TclGetIntForIndex} -body { + string index a 1* +} -returnCodes error -match glob -result * +test util-9.29 {TclGetIntForIndex} -body { + string index a 0+ +} -returnCodes error -match glob -result * +test util-9.30 {TclGetIntForIndex} -body { + string index a {0+ } +} -returnCodes error -match glob -result * +test util-9.31 {TclGetIntForIndex} -body { + string index a 0x +} -returnCodes error -match glob -result * +test util-9.32 {TclGetIntForIndex} -body { + string index a 0x1FFFFFFFF+0 +} -returnCodes error -match glob -result * +test util-9.33 {TclGetIntForIndex} -body { + string index a 100000000000+0 +} -returnCodes error -match glob -result * +test util-9.34 {TclGetIntForIndex} -body { + string index a 1.0 +} -returnCodes error -match glob -result * +test util-9.35 {TclGetIntForIndex} -body { + string index a 1e23 +} -returnCodes error -match glob -result * +test util-9.36 {TclGetIntForIndex} -body { + string index a 1.5e2 +} -returnCodes error -match glob -result * +test util-9.37 {TclGetIntForIndex} -body { + string index a 0+x +} -returnCodes error -match glob -result * +test util-9.38 {TclGetIntForIndex} -body { + string index a 0+0x +} -returnCodes error -match glob -result * +test util-9.39 {TclGetIntForIndex} -body { + string index a 0+0xg +} -returnCodes error -match glob -result * +test util-9.40 {TclGetIntForIndex} -body { + string index a 0+0xg +} -returnCodes error -match glob -result * +test util-9.41 {TclGetIntForIndex} -body { + string index a 0+1.0 +} -returnCodes error -match glob -result * +test util-9.42 {TclGetIntForIndex} -body { + string index a 0+1e2 +} -returnCodes error -match glob -result * +test util-9.43 {TclGetIntForIndex} -body { + string index a 0+1.5e1 +} -returnCodes error -match glob -result * +test util-9.44 {TclGetIntForIndex} -body { + string index a 0+1000000000000 +} -returnCodes error -match glob -result * + +test util-10.1 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x0000000000000000 +} {0.0} +test util-10.2 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x8000000000000000 +} {-0.0} +test util-10.3 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x7ef754e31cd072da +} {4e+303} +test util-10.4 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xd08afcef51f0fb5f +} {-1e+80} +test util-10.5 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x7ed754e31cd072da +} {1e+303} +test util-10.6 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xfee754e31cd072da +} {-2e+303} +test util-10.7 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x0afe07b27dd78b14 +} {1e-255} +test util-10.8 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x93ae29e9c56687fe +} {-7e-214} +test util-10.9 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x376be03d0bf225c7 +} {1e-41} +test util-10.10 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xa0ca2fe76a3f9475 +} {-1e-150} +test util-10.11 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x7fa9a2028368022e +} {9e+306} +test util-10.12 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xdfc317e5ef3ab327 +} {-2e+153} +test util-10.13 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x5fd317e5ef3ab327 +} {4e+153} +test util-10.14 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xdfe317e5ef3ab327 +} {-8e+153} +test util-10.15 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x00feb8e84fa0b278 +} {7e-304} +test util-10.16 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x8133339131c46f8b +} {-7e-303} +test util-10.17 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x35dc0f92a6276c9d +} {3e-49} +test util-10.18 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xa445ce1f143d7ad2 +} {-6e-134} +test util-10.19 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x2d2c0794d9d40e96 +} {4.3e-91} +test util-10.20 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xad3c0794d9d40e96 +} {-8.6e-91} +test util-10.21 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x30ecd5bee57763e6 +} {5.1e-73} +test util-10.22 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x68ad1c26db7d0dae +} {1.7e+196} +test util-10.23 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbfa3f7ced916872b +} {-0.039} +test util-10.24 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x64b7d93193f78fc6 +} {1.51e+177} +test util-10.25 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x98ea82a1631eeb30 +} {-1.19e-188} +test util-10.26 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xd216c309024bab4b +} {-2.83e+87} +test util-10.27 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x0dfdbbac6f83a821 +} {2.7869147e-241} +test util-10.28 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xdadc569e968e0944 +} {-4.91080654e+129} +test util-10.29 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x5acc569e968e0944 +} {2.45540327e+129} +test util-10.30 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xab5fc575867314ee +} {-9.078555839e-100} +test util-10.31 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xdabc569e968e0944 +} {-1.227701635e+129} +test util-10.32 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x2b6fc575867314ee +} {1.8157111678e-99} +test util-10.33 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xb3b8bf7e7fa6f02a +} {-1.5400733123779e-59} +test util-10.34 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xcd83de005bd620df +} {-2.6153245263757307e+65} +test util-10.35 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x6cdf92bacb3cb40c +} {2.7210404151224248e+216} +test util-10.36 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xecef92bacb3cb40c +} {-5.4420808302448496e+216} +test util-10.37 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x49342dbf25096cf5 +} {4.5e+44} +test util-10.38 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xd06afcef51f0fb5f +} {-2.5e+79} +test util-10.39 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x49002498ea6df0c4 +} {4.5e+43} +test util-10.40 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xfeb754e31cd072da +} {-2.5e+302} +test util-10.41 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x1d22deac01e2b4f7 +} {2.5e-168} +test util-10.42 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xaccb1df536c13eee +} {-6.5e-93} +test util-10.43 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3650711fed5b19a4 +} {4.5e-47} +test util-10.44 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xb6848d67e8b1e00d +} {-4.5e-46} +test util-10.45 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x4bac8c574c0c6be7 +} {3.5e+56} +test util-10.46 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xccd756183c147514 +} {-1.5e+62} +test util-10.47 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x4ca2ab469676c410 +} {1.5e+61} +test util-10.48 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xcf5539684e774b48 +} {-1.5e+74} +test util-10.49 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x2e12e5f5dfa4fe9d +} {9.5e-87} +test util-10.50 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x8b9bdc2417bf7787 +} {-9.5e-253} +test util-10.51 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x00eeb8e84fa0b278 +} {3.5e-304} +test util-10.52 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xadde3cbc9907fdc8 +} {-9.5e-88} +test util-10.53 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x2bb0ad836f269a17 +} {3.05e-98} +test util-10.54 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x950b39ae1909c31b +} {-2.65e-207} +test util-10.55 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x1bfb2ab18615fcc6 +} {6.865e-174} +test util-10.56 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x98f3e1f90a573064 +} {-1.785e-188} +test util-10.57 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x5206c309024bab4b +} {1.415e+87} +test util-10.58 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xcc059bd3ad46e346 +} {-1.6955e+58} +test util-10.59 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x47bdf4170f0fdecc +} {3.9815e+37} +test util-10.60 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x59e7e1e0f1c7a4ac +} {1.263005e+125} +test util-10.61 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xda1dda592e398dd7 +} {-1.263005e+126} +test util-10.62 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xdc4e597c0b94b7ae +} {-4.4118455e+136} +test util-10.63 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x5aac569e968e0944 +} {6.138508175e+128} +test util-10.64 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xdabc569e968e0944 +} {-1.227701635e+129} +test util-10.65 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x6ce7ae0c186d8709 +} {4.081560622683637e+216} +test util-10.66 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x44b52d02c7e14af7 +} {1.0000000000000001e+23} +test util-10.67 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc589d971e4fe8402 +} {-1e+27} +test util-10.68 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x4599d971e4fe8402 +} {2e+27} +test util-10.69 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc5a9d971e4fe8402 +} {-4e+27} +test util-10.70 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3e45798ee2308c3a +} {1e-8} +test util-10.71 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbe55798ee2308c3a +} {-2e-8} +test util-10.72 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3e65798ee2308c3a +} {4e-8} +test util-10.73 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbabef2d0f5da7dd9 +} {-1e-25} +test util-10.74 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x44da784379d99db4 +} {5e+23} +test util-10.75 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc4fa784379d99db4 +} {-2e+24} +test util-10.76 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x4503da329b633647 +} {3e+24} +test util-10.77 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc54cf389cd46047d +} {-7e+25} +test util-10.78 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3fc999999999999a +} {0.2} +test util-10.79 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbfd3333333333333 +} {-0.3} +test util-10.80 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3cf6849b86a12b9b +} {5e-15} +test util-10.81 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbd16849b86a12b9b +} {-2e-14} +test util-10.82 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3b87ccfc73126788 +} {6.3e-22} +test util-10.83 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbbbdc03b8fd7016a +} {-6.3e-21} +test util-10.84 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3fa3f7ced916872b +} {0.039} +test util-10.85 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x460b297cad9f70b6 +} {2.69e+29} +test util-10.86 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc61b297cad9f70b6 +} {-5.38e+29} +test util-10.87 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3adcdc06b20ef183 +} {3.73e-25} +test util-10.88 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x45fb297cad9f70b6 +} {1.345e+29} +test util-10.89 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc60b297cad9f70b6 +} {-2.69e+29} +test util-10.90 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbc050a246ecd44f3 +} {-1.4257e-19} +test util-10.91 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbec19b96f36ec68b +} {-2.09901e-6} +test util-10.92 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3dcc06d366394441 +} {5.0980203373e-11} +test util-10.93 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc79f58ac4db68c90 +} {-1.04166211811e+37} +test util-10.94 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x4569d971e4fe8402 +} {2.5e+26} +test util-10.95 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc50dc74be914d16b +} {-4.5e+24} +test util-10.96 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x4534adf4b7320335 +} {2.5e+25} +test util-10.97 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc54ae22487c1042b +} {-6.5e+25} +test util-10.98 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3c987fe49aab41e0 +} {8.5e-17} +test util-10.99 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbc2f5c05e4b23fd7 +} {-8.5e-19} +test util-10.100 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3d5faa7ab552a552 +} {4.5e-13} +test util-10.101 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbdbb7cdfd9d7bdbb +} {-2.5e-11} +test util-10.102 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x44f3da329b633647 +} {1.5e+24} +test util-10.103 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc53cf389cd46047d +} {-3.5e+25} +test util-10.104 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x454f04ef12cb04cf +} {7.5e+25} +test util-10.105 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc55f04ef12cb04cf +} {-1.5e+26} +test util-10.106 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3fc3333333333333 +} {0.15} +test util-10.107 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbdb07e1fe91b0b70 +} {-1.5e-11} +test util-10.108 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3de49da7e361ce4c +} {1.5e-10} +test util-10.109 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbe19c511dc3a41df +} {-1.5e-9} +test util-10.110 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc5caa83d74267822 +} {-1.65e+28} +test util-10.111 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x4588f1d5969453de +} {9.65e+26} +test util-10.112 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3b91d9bd564dcda6 +} {9.45e-22} +test util-10.113 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbcfa58973ecbede6 +} {-5.85e-15} +test util-10.114 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x45eb297cad9f70b6 +} {6.725e+28} +test util-10.115 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc5fb297cad9f70b6 +} {-1.345e+29} +test util-10.116 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3accdc06b20ef183 +} {1.865e-25} +test util-10.117 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xbd036071dcae4565 +} {-8.605e-15} +test util-10.118 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x462cb968d297dde8 +} {1.137885e+30} +test util-10.119 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0xc661f3e1839eeab1 +} {-1.137885e+31} +test util-10.120 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x474e9cec176c96f8 +} {3.179033335e+35} +test util-10.121 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x3dbc06d366394441 +} {2.54901016865e-11} +test util-10.122 {Tcl_PrintDouble - rounding} {ieeeFloatingPoint} { + convertDouble 0x478f58ac4db68c90 +} {5.20831059055e+36} + +test util-11.1 {Tcl_PrintDouble - scaling} { + expr 1.1e-5 +} {1.1e-5} +test util-11.2 {Tcl_PrintDouble - scaling} { + expr 1.1e-4 +} {0.00011} +test util-11.3 {Tcl_PrintDouble - scaling} { + expr 1.1e-3 +} {0.0011} +test util-11.4 {Tcl_PrintDouble - scaling} { + expr 1.1e-2 +} {0.011} +test util-11.5 {Tcl_PrintDouble - scaling} { + expr 1.1e-1 +} {0.11} +test util-11.6 {Tcl_PrintDouble - scaling} { + expr 1.1e0 +} {1.1} +test util-11.7 {Tcl_PrintDouble - scaling} { + expr 1.1e1 +} {11.0} +test util-11.8 {Tcl_PrintDouble - scaling} { + expr 1.1e2 +} {110.0} +test util-11.9 {Tcl_PrintDouble - scaling} { + expr 1.1e3 +} {1100.0} +test util-11.10 {Tcl_PrintDouble - scaling} { + expr 1.1e4 +} {11000.0} +test util-11.11 {Tcl_PrintDouble - scaling} { + expr 1.1e5 +} {110000.0} +test util-11.12 {Tcl_PrintDouble - scaling} { + expr 1.1e6 +} {1100000.0} +test util-11.13 {Tcl_PrintDouble - scaling} { + expr 1.1e7 +} {11000000.0} +test util-11.14 {Tcl_PrintDouble - scaling} { + expr 1.1e8 +} {110000000.0} +test util-11.15 {Tcl_PrintDouble - scaling} { + expr 1.1e9 +} {1100000000.0} +test util-11.16 {Tcl_PrintDouble - scaling} { + expr 1.1e10 +} {11000000000.0} +test util-11.17 {Tcl_PrintDouble - scaling} { + expr 1.1e11 +} {110000000000.0} +test util-11.18 {Tcl_PrintDouble - scaling} { + expr 1.1e12 +} {1100000000000.0} +test util-11.19 {Tcl_PrintDouble - scaling} { + expr 1.1e13 +} {11000000000000.0} +test util-11.20 {Tcl_PrintDouble - scaling} { + expr 1.1e14 +} {110000000000000.0} +test util-11.21 {Tcl_PrintDouble - scaling} { + expr 1.1e15 +} {1100000000000000.0} +test util-11.22 {Tcl_PrintDouble - scaling} { + expr 1.1e16 +} {11000000000000000.0} +test util-11.23 {Tcl_PrintDouble - scaling} { + expr 1.1e17 +} {1.1e+17} + +test util-12.1 {Tcl_DoubleDigits - Inf} {testdoubledigits ieeeFloatingPoint} { + testdoubledigits Inf -1 shortest +} {Infinity 9999 +} +test util-12.2 {Tcl_DoubleDigits - -Inf} {testdoubledigits ieeeFloatingPoint} { + testdoubledigits -Inf -1 shortest +} {Infinity 9999 -} +test util-12.3 {Tcl_DoubleDigits - NaN} {testdoubledigits ieeeFloatingPoint} { + testdoubledigits $ieeeValues(NaN) -1 shortest +} {NaN 9999 +} +test util-12.4 {Tcl_DoubleDigits - NaN} {testdoubledigits ieeeFloatingPoint} { + testdoubledigits -NaN -1 shortest +} {NaN 9999 -} +test util-12.5 {Tcl_DoubleDigits - 0} testdoubledigits { + testdoubledigits 0.0 -1 shortest +} {0 0 +} +test util-12.6 {Tcl_DoubleDigits - -0} testdoubledigits { + testdoubledigits -0.0 -1 shortest +} {0 0 -} + +# Verdonk test vectors + +test util-13.1 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1754e31cd072da E+1008 +4_000000000000000000& E+303 + } + -result {} +} +test util-13.2 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1afcef51f0fb5f E+265 -1_000000000000000000& E+80 + } + -result {} +} +test util-13.3 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1754e31cd072da E+1006 +1_000000000000000000& E+303 + } + -result {} +} +test util-13.4 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1754e31cd072da E+1007 -2_000000000000000000& E+303 + } + -result {} +} +test util-13.5 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1e07b27dd78b14 E-848 +1_00000000000000000& E-255 + } + -result {} +} +test util-13.6 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1e29e9c56687fe E-709 -7_00000000000000000& E-214 + } + -result {} +} +test util-13.7 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1be03d0bf225c7 E-137 +1_00000000000000000& E-41 + } + -result {} +} +test util-13.8 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1a2fe76a3f9475 E-499 -1_00000000000000000& E-150 + } + -result {} +} +test util-13.9 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 19a2028368022e E+1019 +8_999999999999999999& E+306 + } + -result {} +} +test util-13.10 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1317e5ef3ab327 E+509 -1_999999999999999999& E+153 + } + -result {} +} +test util-13.11 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1317e5ef3ab327 E+510 +3_99999999999999999& E+153 + } + -result {} +} +test util-13.12 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1317e5ef3ab327 E+511 -7_99999999999999999& E+153 + } + -result {} +} +test util-13.13 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1eb8e84fa0b278 E-1008 +6_999999999999999999& E-304 + } + -result {} +} +test util-13.14 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -13339131c46f8b E-1004 -6_999999999999999999& E-303 + } + -result {} +} +test util-13.15 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1c0f92a6276c9d E-162 +2_999999999999999999& E-49 + } + -result {} +} +test util-13.16 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -15ce1f143d7ad2 E-443 -5_99999999999999999& E-134 + } + -result {} +} +test util-13.17 {just over exact - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1c0794d9d40e96 E-301 +43_000000000000000000& E-92 + } + -result {} +} +test util-13.18 {just over exact - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1c0794d9d40e96 E-300 -86_000000000000000000& E-92 + } + -result {} +} +test util-13.19 {just over exact - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1cd5bee57763e6 E-241 +51_000000000000000000& E-74 + } + -result {} +} +test util-13.20 {just under exact - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1d1c26db7d0dae E+651 +16_999999999999999999& E+195 + } + -result {} +} +test util-13.21 {just under exact - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -13f7ced916872b E-5 -38_999999999999999999& E-3 + } + -result {} +} +test util-13.22 {just over exact - 3 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 17d93193f78fc6 E+588 +151_0000000000000000000& E+175 + } + -result {} +} +test util-13.23 {just over exact - 3 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1a82a1631eeb30 E-625 -119_000000000000000000& E-190 + } + -result {} +} +test util-13.24 {just under exact - 3 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -16c309024bab4b E+290 -282_999999999999999999& E+85 + } + -result {} +} +test util-13.25 {just over exact - 8 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1dbbac6f83a821 E-800 +27869147_0000000000000000000& E-248 + } + -result {} +} +test util-13.26 {just under exact - 9 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1c569e968e0944 E+430 -491080653_9999999999999999999& E+121 + } + -result {} +} +test util-13.27 {just under exact - 9 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1c569e968e0944 E+429 +245540326_9999999999999999999& E+121 + } + -result {} +} +test util-13.28 {just over exact - 10 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1fc575867314ee E-330 -9078555839_0000000000000000000& E-109 + } + -result {} +} +test util-13.29 {just under exact - 10 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1c569e968e0944 E+428 -1227701634_9999999999999999999& E+120 + } + -result {} +} +test util-13.30 {just over exact - 11 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1fc575867314ee E-329 +18157111678_0000000000000000000& E-109 + } + -result {} +} +test util-13.31 {just over exact - 14 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -18bf7e7fa6f02a E-196 -15400733123779_0000000000000000000& E-72 + } + -result {} +} +test util-13.32 {just over exact - 17 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -13de005bd620df E+217 -26153245263757307_0000000000000000000& E+49 + } + -result {} +} +test util-13.33 {just over exact - 18 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1f92bacb3cb40c E+718 +272104041512242479_0000000000000000000& E+199 + } + -result {} +} +test util-13.34 {just over exact - 18 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1f92bacb3cb40c E+719 -544208083024484958_0000000000000000000& E+199 + } + -result {} +} +test util-13.35 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 142dbf25096cf5 E+148 +4_500000000000000000& E+44 + } + -result {} +} +test util-13.36 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1afcef51f0fb5f E+263 -2_500000000000000000& E+79 + } + -result {} +} +test util-13.37 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 102498ea6df0c4 E+145 +4_500000000000000000& E+43 + } + -result {} +} +test util-13.38 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1754e31cd072da E+1004 -2_500000000000000000& E+302 + } + -result {} +} +test util-13.39 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 12deac01e2b4f7 E-557 +2_50000000000000000& E-168 + } + -result {} +} +test util-13.40 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1b1df536c13eee E-307 -6_50000000000000000& E-93 + } + -result {} +} +test util-13.41 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 10711fed5b19a4 E-154 +4_50000000000000000& E-47 + } + -result {} +} +test util-13.42 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -148d67e8b1e00d E-151 -4_50000000000000000& E-46 + } + -result {} +} +test util-13.43 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1c8c574c0c6be7 E+187 +3_49999999999999999& E+56 + } + -result {} +} +test util-13.44 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1756183c147514 E+206 -1_49999999999999999& E+62 + } + -result {} +} +test util-13.45 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 12ab469676c410 E+203 +1_49999999999999999& E+61 + } + -result {} +} +test util-13.46 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1539684e774b48 E+246 -1_49999999999999999& E+74 + } + -result {} +} +test util-13.47 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 12e5f5dfa4fe9d E-286 +9_499999999999999999& E-87 + } + -result {} +} +test util-13.48 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1bdc2417bf7787 E-838 -9_499999999999999999& E-253 + } + -result {} +} +test util-13.49 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1eb8e84fa0b278 E-1009 +3_499999999999999999& E-304 + } + -result {} +} +test util-13.50 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1e3cbc9907fdc8 E-290 -9_499999999999999999& E-88 + } + -result {} +} +test util-13.51 {just over half ulp - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 10ad836f269a17 E-324 +30_500000000000000000& E-99 + } + -result {} +} +test util-13.52 {just over half ulp - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1b39ae1909c31b E-687 -26_500000000000000000& E-208 + } + -result {} +} +test util-13.53 {just over half ulp - 3 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1b2ab18615fcc6 E-576 +686_500000000000000000& E-176 + } + -result {} +} +test util-13.54 {just over half ulp - 3 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -13e1f90a573064 E-624 -178_500000000000000000& E-190 + } + -result {} +} +test util-13.55 {just under half ulp - 3 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 16c309024bab4b E+289 +141_499999999999999999& E+85 + } + -result {} +} +test util-13.56 {just under half ulp - 4 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -159bd3ad46e346 E+193 -1695_499999999999999999& E+55 + } + -result {} +} +test util-13.57 {just under half ulp - 4 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1df4170f0fdecc E+124 +3981_499999999999999999& E+34 + } + -result {} +} +test util-13.58 {just over half ulp - 6 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 17e1e0f1c7a4ac E+415 +126300_5000000000000000000& E+120 + } + -result {} +} +test util-13.59 {just over half ulp - 6 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1dda592e398dd7 E+418 -126300_5000000000000000000& E+121 + } + -result {} +} +test util-13.60 {just under half ulp - 7 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1e597c0b94b7ae E+453 -4411845_499999999999999999& E+130 + } + -result {} +} +test util-13.61 {just under half ulp - 9 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1c569e968e0944 E+427 +613850817_4999999999999999999& E+120 + } + -result {} +} +test util-13.62 {just under half ulp - 9 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1c569e968e0944 E+428 -122770163_49999999999999999999& E+121 + } + -result {} +} +test util-13.63 {just over half ulp - 18 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 17ae0c186d8709 E+719 +408156062268363718_5000000000000000000& E+199 + } + -result {} +} +test util-13.64 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 152d02c7e14af7 E+76 +1_0000000000000000& E+23 + } + -result {} +} +test util-13.65 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -19d971e4fe8402 E+89 -1_0000000000000000& E+27 + } + -result {} +} +test util-13.66 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 19d971e4fe8402 E+90 +2_0000000000000000& E+27 + } + -result {} +} +test util-13.67 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -19d971e4fe8402 E+91 -4_0000000000000000& E+27 + } + -result {} +} +test util-13.68 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 15798ee2308c3a E-27 +1_0000000000000000& E-8 + } + -result {} +} +test util-13.69 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -15798ee2308c3a E-26 -2_0000000000000000& E-8 + } + -result {} +} +test util-13.70 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 15798ee2308c3a E-25 +4_0000000000000000& E-8 + } + -result {} +} +test util-13.71 {just over exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1ef2d0f5da7dd9 E-84 -1_0000000000000000& E-25 + } + -result {} +} +test util-13.72 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1a784379d99db4 E+78 +4_9999999999999999& E+23 + } + -result {} +} +test util-13.73 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1a784379d99db4 E+80 -1_9999999999999999& E+24 + } + -result {} +} +test util-13.74 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 13da329b633647 E+81 +2_9999999999999999& E+24 + } + -result {} +} +test util-13.75 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1cf389cd46047d E+85 -6_9999999999999999& E+25 + } + -result {} +} +test util-13.76 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 19999999999999 E-3 +1_99999999999999999& E-1 + } + -result {} +} +test util-13.77 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -13333333333333 E-2 -2_99999999999999999& E-1 + } + -result {} +} +test util-13.78 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 16849b86a12b9b E-48 +4_99999999999999999& E-15 + } + -result {} +} +test util-13.79 {just under exact - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -16849b86a12b9b E-46 -1_99999999999999999& E-14 + } + -result {} +} +test util-13.80 {just over exact - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 17ccfc73126788 E-71 +63_00000000000000000& E-23 + } + -result {} +} +test util-13.81 {just over exact - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1dc03b8fd7016a E-68 -63_00000000000000000& E-22 + } + -result {} +} +test util-13.82 {just under exact - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 13f7ced916872b E-5 +38_999999999999999999& E-3 + } + -result {} +} +test util-13.83 {just over exact - 3 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1b297cad9f70b6 E+97 +269_000000000000000000& E+27 + } + -result {} +} +test util-13.84 {just over exact - 3 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1b297cad9f70b6 E+98 -538_00000000000000000& E+27 + } + -result {} +} +test util-13.85 {just over exact - 3 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1cdc06b20ef183 E-82 +373_00000000000000000& E-27 + } + -result {} +} +test util-13.86 {just over exact - 4 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1b297cad9f70b6 E+96 +1345_00000000000000000& E+26 + } + -result {} +} +# this one is not 4 digits, it is 3, and it is covered above. +test util-13.87 {just over exact - 4 digits} {*}{ + -constraints {testdoubledigits knownBadTest} + -body { + verdonk_test -1b297cad9f70b6 E+97 -2690_00000000000000000& E+26 + } + -result {} +} +test util-13.88 {just over exact - 5 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -150a246ecd44f3 E-63 -14257_00000000000000000& E-23 + } + -result {} +} +test util-13.89 {just under exact - 6 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -119b96f36ec68b E-19 -209900_999999999999999999& E-11 + } + -result {} +} +test util-13.90 {just over exact - 11 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1c06d366394441 E-35 +50980203373_000000000000000000& E-21 + } + -result {} +} +test util-13.91 {just under exact - 12 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1f58ac4db68c90 E+122 -104166211810_99999999999999999& E+26 + } + -result {} +} +test util-13.92 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 19d971e4fe8402 E+87 +2_5000000000000000& E+26 + } + -result {} +} +test util-13.93 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1dc74be914d16b E+81 -4_500000000000000& E+24 + } + -result {} +} +test util-13.94 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 14adf4b7320335 E+84 +2_500000000000000& E+25 + } + -result {} +} +test util-13.95 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1ae22487c1042b E+85 -6_5000000000000000& E+25 + } + -result {} +} +test util-13.96 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 187fe49aab41e0 E-54 +8_5000000000000000& E-17 + } + -result {} +} +test util-13.97 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1f5c05e4b23fd7 E-61 -8_5000000000000000& E-19 + } + -result {} +} +test util-13.98 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1faa7ab552a552 E-42 +4_5000000000000000& E-13 + } + -result {} +} +test util-13.99 {just over half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1b7cdfd9d7bdbb E-36 -2_5000000000000000& E-11 + } + -result {} +} +test util-13.100 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 13da329b633647 E+80 +1_4999999999999999& E+24 + } + -result {} +} +test util-13.101 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1cf389cd46047d E+84 -3_49999999999999999& E+25 + } + -result {} +} +test util-13.102 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1f04ef12cb04cf E+85 +7_4999999999999999& E+25 + } + -result {} +} +test util-13.103 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1f04ef12cb04cf E+86 -1_4999999999999999& E+26 + } + -result {} +} +test util-13.104 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 13333333333333 E-3 +1_49999999999999999& E-1 + } + -result {} +} +test util-13.105 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -107e1fe91b0b70 E-36 -1_49999999999999999& E-11 + } + -result {} +} +test util-13.106 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 149da7e361ce4c E-33 +1_49999999999999999& E-10 + } + -result {} +} +test util-13.107 {just under half ulp - 1 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -19c511dc3a41df E-30 -1_49999999999999999& E-9 + } + -result {} +} +test util-13.108 {just over half ulp - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1aa83d74267822 E+93 -16_5000000000000000& E+27 + } + -result {} +} +test util-13.109 {just over half ulp - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 18f1d5969453de E+89 +96_5000000000000000& E+25 + } + -result {} +} +test util-13.110 {just over half ulp - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 11d9bd564dcda6 E-70 +94_50000000000000000& E-23 + } + -result {} +} +test util-13.111 {just over half ulp - 2 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1a58973ecbede6 E-48 -58_50000000000000000& E-16 + } + -result {} +} +test util-13.112 {just over half ulp - 3 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1b297cad9f70b6 E+95 +672_50000000000000000& E+26 + } + -result {} +} +test util-13.113 {just over half ulp - 3 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -1b297cad9f70b6 E+96 -134_500000000000000000& E+27 + } + -result {} +} +test util-13.114 {just over half ulp - 3 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1cdc06b20ef183 E-83 +186_50000000000000000& E-27 + } + -result {} +} +test util-13.115 {just over half ulp - 3 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -136071dcae4565 E-47 -860_50000000000000000& E-17 + } + -result {} +} +test util-13.116 {just over half ulp - 6 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1cb968d297dde8 E+99 +113788_50000000000000000& E+25 + } + -result {} +} +test util-13.117 {just over half ulp - 6 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test -11f3e1839eeab1 E+103 -113788_50000000000000000& E+26 + } + -result {} +} +test util-13.118 {just under half ulp - 9 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1e9cec176c96f8 E+117 +317903333_49999999999999999& E+27 + } + -result {} +} +test util-13.119 {just over half ulp - 11 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1c06d366394441 E-36 +25490101686_500000000000000000& E-21 + } + -result {} +} +test util-13.120 {just under half ulp - 11 digits} {*}{ + -constraints testdoubledigits + -body { + verdonk_test 1f58ac4db68c90 E+121 +52083105905_49999999999999999& E+26 + } + -result {} +} + +test util-14.1 {funky NaN} {*}{ + -constraints ieeeFloatingPoint + -body { + set ieeeValues(-NaN) + } + -result -NaN +} + +test util-14.2 {funky NaN} {*}{ + -constraints ieeeFloatingPoint + -body { + set ieeeValues(-NaN(3456789abcdef)) + } + -result -NaN(3456789abcdef) +} + +test util-15.1 {largest subnormal} {*}{ + -body { + binary scan [binary format w 0x000fffffffffffff] q x + set x + } + -result 2.225073858507201e-308 + -cleanup { + unset x + } +} + +test util-15.2 {largest subnormal} {*}{ + -body { + binary scan [binary format w 0x800fffffffffffff] q x + set x + } + -result -2.225073858507201e-308 + -cleanup { + unset x + } +} + +test util-15.3 {largest subnormal} {*}{ + -body { + binary scan [binary format q 2.225073858507201e-308] w x + format %#lx $x + } + -result 0xfffffffffffff + -cleanup { + unset x + } +} + +test util-15.4 {largest subnormal} {*}{ + -body { + binary scan [binary format q -2.225073858507201e-308] w x + format %#lx $x + } + -result 0x800fffffffffffff + -cleanup { + unset x + } +} + +test util-15.5 {smallest normal} {*}{ + -body { + binary scan [binary format w 0x0010000000000000] q x + set x + } + -result 2.2250738585072014e-308 + -cleanup { + unset x + } +} + +test util-15.6 {smallest normal} {*}{ + -body { + binary scan [binary format w 0x8010000000000000] q x + set x + } + -result -2.2250738585072014e-308 + -cleanup { + unset x + } +} + +test util-15.7 {smallest normal} {*}{ + -body { + binary scan [binary format q 2.2250738585072014e-308] w x + format %#lx $x + } + -result 0x10000000000000 + -cleanup { + unset x + } +} + +test util-15.8 {smallest normal} {*}{ + -body { + binary scan [binary format q -2.2250738585072014e-308] w x + format %#lx $x + } + -result 0x8010000000000000 + -cleanup { + unset x + } +} + +set saved_precision $::tcl_precision +foreach ::tcl_precision {0 12} { + for {set e -312} {$e < -9} {incr e} { + test util-16.1.$::tcl_precision.$e {shortening of numbers} \ + "expr 1.1e$e" 1.1e$e + } +} +set tcl_precision 0 +for {set e -9} {$e < -4} {incr e} { + test util-16.1.$::tcl_precision.$e {shortening of numbers} \ + "expr 1.1e$e" 1.1e$e +} +set tcl_precision 12 +for {set e -9} {$e < -4} {incr e} { + test util-16.1.$::tcl_precision.$e {8.4 compatible formatting of doubles} \ + "expr 1.1e$e" 1.1e[format %+03d $e] +} +foreach ::tcl_precision {0 12} { + test util-16.1.$::tcl_precision.-4 {shortening of numbers} \ + {expr 1.1e-4} \ + 0.00011 + test util-16.1.$::tcl_precision.-3 {shortening of numbers} \ + {expr 1.1e-3} \ + 0.0011 + test util-16.1.$::tcl_precision.-2 {shortening of numbers} \ + {expr 1.1e-2} \ + 0.011 + test util-16.1.$::tcl_precision.-1 {shortening of numbers} \ + {expr 1.1e-1} \ + 0.11 + test util-16.1.$::tcl_precision.0 {shortening of numbers} \ + {expr 1.1} \ + 1.1 + for {set e 1} {$e < 17} {incr e} { + test util-16.1.$::tcl_precision.$e {shortening of numbers} \ + "expr 11[string repeat 0 [expr {$e-1}]].0" \ + 11[string repeat 0 [expr {$e-1}]].0 + } + for {set e 17} {$e < 309} {incr e} { + test util-16.1.$::tcl_precision.$e {shortening of numbers} \ + "expr 1.1e$e" 1.1e+$e + } +} +set tcl_precision 17 +test util-16.1.17.-300 {8.4 compatible formatting of doubles} \ + {expr 1e-300} \ + 1e-300 +test util-16.1.17.-299 {8.4 compatible formatting of doubles} \ + {expr 1e-299} \ + 9.9999999999999999e-300 +test util-16.1.17.-298 {8.4 compatible formatting of doubles} \ + {expr 1e-298} \ + 9.9999999999999991e-299 +test util-16.1.17.-297 {8.4 compatible formatting of doubles} \ + {expr 1e-297} \ + 1e-297 +test util-16.1.17.-296 {8.4 compatible formatting of doubles} \ + {expr 1e-296} \ + 1e-296 +test util-16.1.17.-295 {8.4 compatible formatting of doubles} \ + {expr 1e-295} \ + 1.0000000000000001e-295 +test util-16.1.17.-294 {8.4 compatible formatting of doubles} \ + {expr 1e-294} \ + 1e-294 +test util-16.1.17.-293 {8.4 compatible formatting of doubles} \ + {expr 1e-293} \ + 1.0000000000000001e-293 +test util-16.1.17.-292 {8.4 compatible formatting of doubles} \ + {expr 1e-292} \ + 1.0000000000000001e-292 +test util-16.1.17.-291 {8.4 compatible formatting of doubles} \ + {expr 1e-291} \ + 9.9999999999999996e-292 +test util-16.1.17.-290 {8.4 compatible formatting of doubles} \ + {expr 1e-290} \ + 1.0000000000000001e-290 +test util-16.1.17.-289 {8.4 compatible formatting of doubles} \ + {expr 1e-289} \ + 1e-289 +test util-16.1.17.-288 {8.4 compatible formatting of doubles} \ + {expr 1e-288} \ + 1.0000000000000001e-288 +test util-16.1.17.-287 {8.4 compatible formatting of doubles} \ + {expr 1e-287} \ + 1e-287 +test util-16.1.17.-286 {8.4 compatible formatting of doubles} \ + {expr 1e-286} \ + 1.0000000000000001e-286 +test util-16.1.17.-285 {8.4 compatible formatting of doubles} \ + {expr 1e-285} \ + 1.0000000000000001e-285 +test util-16.1.17.-284 {8.4 compatible formatting of doubles} \ + {expr 1e-284} \ + 1e-284 +test util-16.1.17.-283 {8.4 compatible formatting of doubles} \ + {expr 1e-283} \ + 9.9999999999999995e-284 +test util-16.1.17.-282 {8.4 compatible formatting of doubles} \ + {expr 1e-282} \ + 1e-282 +test util-16.1.17.-281 {8.4 compatible formatting of doubles} \ + {expr 1e-281} \ + 1e-281 +test util-16.1.17.-280 {8.4 compatible formatting of doubles} \ + {expr 1e-280} \ + 9.9999999999999996e-281 +test util-16.1.17.-279 {8.4 compatible formatting of doubles} \ + {expr 1e-279} \ + 1.0000000000000001e-279 +test util-16.1.17.-278 {8.4 compatible formatting of doubles} \ + {expr 1e-278} \ + 9.9999999999999994e-279 +test util-16.1.17.-277 {8.4 compatible formatting of doubles} \ + {expr 1e-277} \ + 9.9999999999999997e-278 +test util-16.1.17.-276 {8.4 compatible formatting of doubles} \ + {expr 1e-276} \ + 1.0000000000000001e-276 +test util-16.1.17.-275 {8.4 compatible formatting of doubles} \ + {expr 1e-275} \ + 9.9999999999999993e-276 +test util-16.1.17.-274 {8.4 compatible formatting of doubles} \ + {expr 1e-274} \ + 9.9999999999999997e-275 +test util-16.1.17.-273 {8.4 compatible formatting of doubles} \ + {expr 1e-273} \ + 1.0000000000000001e-273 +test util-16.1.17.-272 {8.4 compatible formatting of doubles} \ + {expr 1e-272} \ + 9.9999999999999993e-273 +test util-16.1.17.-271 {8.4 compatible formatting of doubles} \ + {expr 1e-271} \ + 9.9999999999999996e-272 +test util-16.1.17.-270 {8.4 compatible formatting of doubles} \ + {expr 1e-270} \ + 1e-270 +test util-16.1.17.-269 {8.4 compatible formatting of doubles} \ + {expr 1e-269} \ + 9.9999999999999996e-270 +test util-16.1.17.-268 {8.4 compatible formatting of doubles} \ + {expr 1e-268} \ + 9.9999999999999996e-269 +test util-16.1.17.-267 {8.4 compatible formatting of doubles} \ + {expr 1e-267} \ + 9.9999999999999998e-268 +test util-16.1.17.-266 {8.4 compatible formatting of doubles} \ + {expr 1e-266} \ + 9.9999999999999998e-267 +test util-16.1.17.-265 {8.4 compatible formatting of doubles} \ + {expr 1e-265} \ + 9.9999999999999998e-266 +test util-16.1.17.-264 {8.4 compatible formatting of doubles} \ + {expr 1e-264} \ + 1e-264 +test util-16.1.17.-263 {8.4 compatible formatting of doubles} \ + {expr 1e-263} \ + 1e-263 +test util-16.1.17.-262 {8.4 compatible formatting of doubles} \ + {expr 1e-262} \ + 1e-262 +test util-16.1.17.-261 {8.4 compatible formatting of doubles} \ + {expr 1e-261} \ + 9.9999999999999998e-262 +test util-16.1.17.-260 {8.4 compatible formatting of doubles} \ + {expr 1e-260} \ + 9.9999999999999996e-261 +test util-16.1.17.-259 {8.4 compatible formatting of doubles} \ + {expr 1e-259} \ + 1.0000000000000001e-259 +test util-16.1.17.-258 {8.4 compatible formatting of doubles} \ + {expr 1e-258} \ + 9.9999999999999995e-259 +test util-16.1.17.-257 {8.4 compatible formatting of doubles} \ + {expr 1e-257} \ + 9.9999999999999998e-258 +test util-16.1.17.-256 {8.4 compatible formatting of doubles} \ + {expr 1e-256} \ + 9.9999999999999998e-257 +test util-16.1.17.-255 {8.4 compatible formatting of doubles} \ + {expr 1e-255} \ + 1e-255 +test util-16.1.17.-254 {8.4 compatible formatting of doubles} \ + {expr 1e-254} \ + 9.9999999999999991e-255 +test util-16.1.17.-253 {8.4 compatible formatting of doubles} \ + {expr 1e-253} \ + 1.0000000000000001e-253 +test util-16.1.17.-252 {8.4 compatible formatting of doubles} \ + {expr 1e-252} \ + 9.9999999999999994e-253 +test util-16.1.17.-251 {8.4 compatible formatting of doubles} \ + {expr 1e-251} \ + 1e-251 +test util-16.1.17.-250 {8.4 compatible formatting of doubles} \ + {expr 1e-250} \ + 1.0000000000000001e-250 +test util-16.1.17.-249 {8.4 compatible formatting of doubles} \ + {expr 1e-249} \ + 1.0000000000000001e-249 +test util-16.1.17.-248 {8.4 compatible formatting of doubles} \ + {expr 1e-248} \ + 9.9999999999999998e-249 +test util-16.1.17.-247 {8.4 compatible formatting of doubles} \ + {expr 1e-247} \ + 1e-247 +test util-16.1.17.-246 {8.4 compatible formatting of doubles} \ + {expr 1e-246} \ + 9.9999999999999996e-247 +test util-16.1.17.-245 {8.4 compatible formatting of doubles} \ + {expr 1e-245} \ + 9.9999999999999993e-246 +test util-16.1.17.-244 {8.4 compatible formatting of doubles} \ + {expr 1e-244} \ + 9.9999999999999993e-245 +test util-16.1.17.-243 {8.4 compatible formatting of doubles} \ + {expr 1e-243} \ + 1e-243 +test util-16.1.17.-242 {8.4 compatible formatting of doubles} \ + {expr 1e-242} \ + 9.9999999999999997e-243 +test util-16.1.17.-241 {8.4 compatible formatting of doubles} \ + {expr 1e-241} \ + 9.9999999999999997e-242 +test util-16.1.17.-240 {8.4 compatible formatting of doubles} \ + {expr 1e-240} \ + 9.9999999999999997e-241 +test util-16.1.17.-239 {8.4 compatible formatting of doubles} \ + {expr 1e-239} \ + 1.0000000000000001e-239 +test util-16.1.17.-238 {8.4 compatible formatting of doubles} \ + {expr 1e-238} \ + 9.9999999999999999e-239 +test util-16.1.17.-237 {8.4 compatible formatting of doubles} \ + {expr 1e-237} \ + 9.9999999999999999e-238 +test util-16.1.17.-236 {8.4 compatible formatting of doubles} \ + {expr 1e-236} \ + 1e-236 +test util-16.1.17.-235 {8.4 compatible formatting of doubles} \ + {expr 1e-235} \ + 9.9999999999999996e-236 +test util-16.1.17.-234 {8.4 compatible formatting of doubles} \ + {expr 1e-234} \ + 9.9999999999999996e-235 +test util-16.1.17.-233 {8.4 compatible formatting of doubles} \ + {expr 1e-233} \ + 9.9999999999999996e-234 +test util-16.1.17.-232 {8.4 compatible formatting of doubles} \ + {expr 1e-232} \ + 1e-232 +test util-16.1.17.-231 {8.4 compatible formatting of doubles} \ + {expr 1e-231} \ + 9.9999999999999999e-232 +test util-16.1.17.-230 {8.4 compatible formatting of doubles} \ + {expr 1e-230} \ + 1e-230 +test util-16.1.17.-229 {8.4 compatible formatting of doubles} \ + {expr 1e-229} \ + 1.0000000000000001e-229 +test util-16.1.17.-228 {8.4 compatible formatting of doubles} \ + {expr 1e-228} \ + 1e-228 +test util-16.1.17.-227 {8.4 compatible formatting of doubles} \ + {expr 1e-227} \ + 9.9999999999999994e-228 +test util-16.1.17.-226 {8.4 compatible formatting of doubles} \ + {expr 1e-226} \ + 9.9999999999999992e-227 +test util-16.1.17.-225 {8.4 compatible formatting of doubles} \ + {expr 1e-225} \ + 9.9999999999999996e-226 +test util-16.1.17.-224 {8.4 compatible formatting of doubles} \ + {expr 1e-224} \ + 1e-224 +test util-16.1.17.-223 {8.4 compatible formatting of doubles} \ + {expr 1e-223} \ + 9.9999999999999997e-224 +test util-16.1.17.-222 {8.4 compatible formatting of doubles} \ + {expr 1e-222} \ + 1e-222 +test util-16.1.17.-221 {8.4 compatible formatting of doubles} \ + {expr 1e-221} \ + 1e-221 +test util-16.1.17.-220 {8.4 compatible formatting of doubles} \ + {expr 1e-220} \ + 9.9999999999999999e-221 +test util-16.1.17.-219 {8.4 compatible formatting of doubles} \ + {expr 1e-219} \ + 1e-219 +test util-16.1.17.-218 {8.4 compatible formatting of doubles} \ + {expr 1e-218} \ + 1e-218 +test util-16.1.17.-217 {8.4 compatible formatting of doubles} \ + {expr 1e-217} \ + 1.0000000000000001e-217 +test util-16.1.17.-216 {8.4 compatible formatting of doubles} \ + {expr 1e-216} \ + 1e-216 +test util-16.1.17.-215 {8.4 compatible formatting of doubles} \ + {expr 1e-215} \ + 1e-215 +test util-16.1.17.-214 {8.4 compatible formatting of doubles} \ + {expr 1e-214} \ + 9.9999999999999991e-215 +test util-16.1.17.-213 {8.4 compatible formatting of doubles} \ + {expr 1e-213} \ + 9.9999999999999995e-214 +test util-16.1.17.-212 {8.4 compatible formatting of doubles} \ + {expr 1e-212} \ + 9.9999999999999995e-213 +test util-16.1.17.-211 {8.4 compatible formatting of doubles} \ + {expr 1e-211} \ + 1.0000000000000001e-211 +test util-16.1.17.-210 {8.4 compatible formatting of doubles} \ + {expr 1e-210} \ + 1e-210 +test util-16.1.17.-209 {8.4 compatible formatting of doubles} \ + {expr 1e-209} \ + 1e-209 +test util-16.1.17.-208 {8.4 compatible formatting of doubles} \ + {expr 1e-208} \ + 1.0000000000000001e-208 +test util-16.1.17.-207 {8.4 compatible formatting of doubles} \ + {expr 1e-207} \ + 9.9999999999999993e-208 +test util-16.1.17.-206 {8.4 compatible formatting of doubles} \ + {expr 1e-206} \ + 1e-206 +test util-16.1.17.-205 {8.4 compatible formatting of doubles} \ + {expr 1e-205} \ + 1e-205 +test util-16.1.17.-204 {8.4 compatible formatting of doubles} \ + {expr 1e-204} \ + 1e-204 +test util-16.1.17.-203 {8.4 compatible formatting of doubles} \ + {expr 1e-203} \ + 1e-203 +test util-16.1.17.-202 {8.4 compatible formatting of doubles} \ + {expr 1e-202} \ + 1e-202 +test util-16.1.17.-201 {8.4 compatible formatting of doubles} \ + {expr 1e-201} \ + 9.9999999999999995e-202 +test util-16.1.17.-200 {8.4 compatible formatting of doubles} \ + {expr 1e-200} \ + 9.9999999999999998e-201 +test util-16.1.17.-199 {8.4 compatible formatting of doubles} \ + {expr 1e-199} \ + 9.9999999999999998e-200 +test util-16.1.17.-198 {8.4 compatible formatting of doubles} \ + {expr 1e-198} \ + 9.9999999999999991e-199 +test util-16.1.17.-197 {8.4 compatible formatting of doubles} \ + {expr 1e-197} \ + 9.9999999999999999e-198 +test util-16.1.17.-196 {8.4 compatible formatting of doubles} \ + {expr 1e-196} \ + 1e-196 +test util-16.1.17.-195 {8.4 compatible formatting of doubles} \ + {expr 1e-195} \ + 1.0000000000000001e-195 +test util-16.1.17.-194 {8.4 compatible formatting of doubles} \ + {expr 1e-194} \ + 1e-194 +test util-16.1.17.-193 {8.4 compatible formatting of doubles} \ + {expr 1e-193} \ + 1e-193 +test util-16.1.17.-192 {8.4 compatible formatting of doubles} \ + {expr 1e-192} \ + 1.0000000000000001e-192 +test util-16.1.17.-191 {8.4 compatible formatting of doubles} \ + {expr 1e-191} \ + 1e-191 +test util-16.1.17.-190 {8.4 compatible formatting of doubles} \ + {expr 1e-190} \ + 1e-190 +test util-16.1.17.-189 {8.4 compatible formatting of doubles} \ + {expr 1e-189} \ + 1.0000000000000001e-189 +test util-16.1.17.-188 {8.4 compatible formatting of doubles} \ + {expr 1e-188} \ + 9.9999999999999995e-189 +test util-16.1.17.-187 {8.4 compatible formatting of doubles} \ + {expr 1e-187} \ + 1e-187 +test util-16.1.17.-186 {8.4 compatible formatting of doubles} \ + {expr 1e-186} \ + 9.9999999999999991e-187 +test util-16.1.17.-185 {8.4 compatible formatting of doubles} \ + {expr 1e-185} \ + 9.9999999999999999e-186 +test util-16.1.17.-184 {8.4 compatible formatting of doubles} \ + {expr 1e-184} \ + 1.0000000000000001e-184 +test util-16.1.17.-183 {8.4 compatible formatting of doubles} \ + {expr 1e-183} \ + 1e-183 +test util-16.1.17.-182 {8.4 compatible formatting of doubles} \ + {expr 1e-182} \ + 1e-182 +test util-16.1.17.-181 {8.4 compatible formatting of doubles} \ + {expr 1e-181} \ + 1e-181 +test util-16.1.17.-180 {8.4 compatible formatting of doubles} \ + {expr 1e-180} \ + 1e-180 +test util-16.1.17.-179 {8.4 compatible formatting of doubles} \ + {expr 1e-179} \ + 1e-179 +test util-16.1.17.-178 {8.4 compatible formatting of doubles} \ + {expr 1e-178} \ + 9.9999999999999995e-179 +test util-16.1.17.-177 {8.4 compatible formatting of doubles} \ + {expr 1e-177} \ + 9.9999999999999995e-178 +test util-16.1.17.-176 {8.4 compatible formatting of doubles} \ + {expr 1e-176} \ + 1e-176 +test util-16.1.17.-175 {8.4 compatible formatting of doubles} \ + {expr 1e-175} \ + 1e-175 +test util-16.1.17.-174 {8.4 compatible formatting of doubles} \ + {expr 1e-174} \ + 1e-174 +test util-16.1.17.-173 {8.4 compatible formatting of doubles} \ + {expr 1e-173} \ + 1e-173 +test util-16.1.17.-172 {8.4 compatible formatting of doubles} \ + {expr 1e-172} \ + 1e-172 +test util-16.1.17.-171 {8.4 compatible formatting of doubles} \ + {expr 1e-171} \ + 9.9999999999999998e-172 +test util-16.1.17.-170 {8.4 compatible formatting of doubles} \ + {expr 1e-170} \ + 9.9999999999999998e-171 +test util-16.1.17.-169 {8.4 compatible formatting of doubles} \ + {expr 1e-169} \ + 1e-169 +test util-16.1.17.-168 {8.4 compatible formatting of doubles} \ + {expr 1e-168} \ + 1e-168 +test util-16.1.17.-167 {8.4 compatible formatting of doubles} \ + {expr 1e-167} \ + 1e-167 +test util-16.1.17.-166 {8.4 compatible formatting of doubles} \ + {expr 1e-166} \ + 1e-166 +test util-16.1.17.-165 {8.4 compatible formatting of doubles} \ + {expr 1e-165} \ + 1e-165 +test util-16.1.17.-164 {8.4 compatible formatting of doubles} \ + {expr 1e-164} \ + 9.9999999999999996e-165 +test util-16.1.17.-163 {8.4 compatible formatting of doubles} \ + {expr 1e-163} \ + 9.9999999999999992e-164 +test util-16.1.17.-162 {8.4 compatible formatting of doubles} \ + {expr 1e-162} \ + 9.9999999999999995e-163 +test util-16.1.17.-161 {8.4 compatible formatting of doubles} \ + {expr 1e-161} \ + 1e-161 +test util-16.1.17.-160 {8.4 compatible formatting of doubles} \ + {expr 1e-160} \ + 9.9999999999999999e-161 +test util-16.1.17.-159 {8.4 compatible formatting of doubles} \ + {expr 1e-159} \ + 9.9999999999999999e-160 +test util-16.1.17.-158 {8.4 compatible formatting of doubles} \ + {expr 1e-158} \ + 1.0000000000000001e-158 +test util-16.1.17.-157 {8.4 compatible formatting of doubles} \ + {expr 1e-157} \ + 9.9999999999999994e-158 +test util-16.1.17.-156 {8.4 compatible formatting of doubles} \ + {expr 1e-156} \ + 1e-156 +test util-16.1.17.-155 {8.4 compatible formatting of doubles} \ + {expr 1e-155} \ + 1e-155 +test util-16.1.17.-154 {8.4 compatible formatting of doubles} \ + {expr 1e-154} \ + 9.9999999999999997e-155 +test util-16.1.17.-153 {8.4 compatible formatting of doubles} \ + {expr 1e-153} \ + 1e-153 +test util-16.1.17.-152 {8.4 compatible formatting of doubles} \ + {expr 1e-152} \ + 1.0000000000000001e-152 +test util-16.1.17.-151 {8.4 compatible formatting of doubles} \ + {expr 1e-151} \ + 9.9999999999999994e-152 +test util-16.1.17.-150 {8.4 compatible formatting of doubles} \ + {expr 1e-150} \ + 1e-150 +test util-16.1.17.-149 {8.4 compatible formatting of doubles} \ + {expr 1e-149} \ + 9.9999999999999998e-150 +test util-16.1.17.-148 {8.4 compatible formatting of doubles} \ + {expr 1e-148} \ + 9.9999999999999994e-149 +test util-16.1.17.-147 {8.4 compatible formatting of doubles} \ + {expr 1e-147} \ + 9.9999999999999997e-148 +test util-16.1.17.-146 {8.4 compatible formatting of doubles} \ + {expr 1e-146} \ + 1e-146 +test util-16.1.17.-145 {8.4 compatible formatting of doubles} \ + {expr 1e-145} \ + 9.9999999999999991e-146 +test util-16.1.17.-144 {8.4 compatible formatting of doubles} \ + {expr 1e-144} \ + 9.9999999999999995e-145 +test util-16.1.17.-143 {8.4 compatible formatting of doubles} \ + {expr 1e-143} \ + 9.9999999999999995e-144 +test util-16.1.17.-142 {8.4 compatible formatting of doubles} \ + {expr 1e-142} \ + 1e-142 +test util-16.1.17.-141 {8.4 compatible formatting of doubles} \ + {expr 1e-141} \ + 1e-141 +test util-16.1.17.-140 {8.4 compatible formatting of doubles} \ + {expr 1e-140} \ + 9.9999999999999998e-141 +test util-16.1.17.-139 {8.4 compatible formatting of doubles} \ + {expr 1e-139} \ + 1e-139 +test util-16.1.17.-138 {8.4 compatible formatting of doubles} \ + {expr 1e-138} \ + 1.0000000000000001e-138 +test util-16.1.17.-137 {8.4 compatible formatting of doubles} \ + {expr 1e-137} \ + 9.9999999999999998e-138 +test util-16.1.17.-136 {8.4 compatible formatting of doubles} \ + {expr 1e-136} \ + 1e-136 +test util-16.1.17.-135 {8.4 compatible formatting of doubles} \ + {expr 1e-135} \ + 1e-135 +test util-16.1.17.-134 {8.4 compatible formatting of doubles} \ + {expr 1e-134} \ + 1e-134 +test util-16.1.17.-133 {8.4 compatible formatting of doubles} \ + {expr 1e-133} \ + 1.0000000000000001e-133 +test util-16.1.17.-132 {8.4 compatible formatting of doubles} \ + {expr 1e-132} \ + 9.9999999999999999e-133 +test util-16.1.17.-131 {8.4 compatible formatting of doubles} \ + {expr 1e-131} \ + 9.9999999999999999e-132 +test util-16.1.17.-130 {8.4 compatible formatting of doubles} \ + {expr 1e-130} \ + 1.0000000000000001e-130 +test util-16.1.17.-129 {8.4 compatible formatting of doubles} \ + {expr 1e-129} \ + 9.9999999999999993e-130 +test util-16.1.17.-128 {8.4 compatible formatting of doubles} \ + {expr 1e-128} \ + 1.0000000000000001e-128 +test util-16.1.17.-127 {8.4 compatible formatting of doubles} \ + {expr 1e-127} \ + 1e-127 +test util-16.1.17.-126 {8.4 compatible formatting of doubles} \ + {expr 1e-126} \ + 9.9999999999999995e-127 +test util-16.1.17.-125 {8.4 compatible formatting of doubles} \ + {expr 1e-125} \ + 1e-125 +test util-16.1.17.-124 {8.4 compatible formatting of doubles} \ + {expr 1e-124} \ + 9.9999999999999993e-125 +test util-16.1.17.-123 {8.4 compatible formatting of doubles} \ + {expr 1e-123} \ + 1.0000000000000001e-123 +test util-16.1.17.-122 {8.4 compatible formatting of doubles} \ + {expr 1e-122} \ + 1.0000000000000001e-122 +test util-16.1.17.-121 {8.4 compatible formatting of doubles} \ + {expr 1e-121} \ + 9.9999999999999998e-122 +test util-16.1.17.-120 {8.4 compatible formatting of doubles} \ + {expr 1e-120} \ + 9.9999999999999998e-121 +test util-16.1.17.-119 {8.4 compatible formatting of doubles} \ + {expr 1e-119} \ + 1e-119 +test util-16.1.17.-118 {8.4 compatible formatting of doubles} \ + {expr 1e-118} \ + 9.9999999999999999e-119 +test util-16.1.17.-117 {8.4 compatible formatting of doubles} \ + {expr 1e-117} \ + 1e-117 +test util-16.1.17.-116 {8.4 compatible formatting of doubles} \ + {expr 1e-116} \ + 9.9999999999999999e-117 +test util-16.1.17.-115 {8.4 compatible formatting of doubles} \ + {expr 1e-115} \ + 1.0000000000000001e-115 +test util-16.1.17.-114 {8.4 compatible formatting of doubles} \ + {expr 1e-114} \ + 1.0000000000000001e-114 +test util-16.1.17.-113 {8.4 compatible formatting of doubles} \ + {expr 1e-113} \ + 9.9999999999999998e-114 +test util-16.1.17.-112 {8.4 compatible formatting of doubles} \ + {expr 1e-112} \ + 9.9999999999999995e-113 +test util-16.1.17.-111 {8.4 compatible formatting of doubles} \ + {expr 1e-111} \ + 1.0000000000000001e-111 +test util-16.1.17.-110 {8.4 compatible formatting of doubles} \ + {expr 1e-110} \ + 1.0000000000000001e-110 +test util-16.1.17.-109 {8.4 compatible formatting of doubles} \ + {expr 1e-109} \ + 9.9999999999999999e-110 +test util-16.1.17.-108 {8.4 compatible formatting of doubles} \ + {expr 1e-108} \ + 1e-108 +test util-16.1.17.-107 {8.4 compatible formatting of doubles} \ + {expr 1e-107} \ + 1e-107 +test util-16.1.17.-106 {8.4 compatible formatting of doubles} \ + {expr 1e-106} \ + 9.9999999999999994e-107 +test util-16.1.17.-105 {8.4 compatible formatting of doubles} \ + {expr 1e-105} \ + 9.9999999999999997e-106 +test util-16.1.17.-104 {8.4 compatible formatting of doubles} \ + {expr 1e-104} \ + 9.9999999999999993e-105 +test util-16.1.17.-103 {8.4 compatible formatting of doubles} \ + {expr 1e-103} \ + 9.9999999999999996e-104 +test util-16.1.17.-102 {8.4 compatible formatting of doubles} \ + {expr 1e-102} \ + 9.9999999999999993e-103 +test util-16.1.17.-101 {8.4 compatible formatting of doubles} \ + {expr 1e-101} \ + 1.0000000000000001e-101 +test util-16.1.17.-100 {8.4 compatible formatting of doubles} \ + {expr 1e-100} \ + 1e-100 +test util-16.1.17.-99 {8.4 compatible formatting of doubles} \ + {expr 1e-99} \ + 1e-99 +test util-16.1.17.-98 {8.4 compatible formatting of doubles} \ + {expr 1e-98} \ + 9.9999999999999994e-99 +test util-16.1.17.-97 {8.4 compatible formatting of doubles} \ + {expr 1e-97} \ + 1e-97 +test util-16.1.17.-96 {8.4 compatible formatting of doubles} \ + {expr 1e-96} \ + 9.9999999999999991e-97 +test util-16.1.17.-95 {8.4 compatible formatting of doubles} \ + {expr 1e-95} \ + 9.9999999999999999e-96 +test util-16.1.17.-94 {8.4 compatible formatting of doubles} \ + {expr 1e-94} \ + 9.9999999999999996e-95 +test util-16.1.17.-93 {8.4 compatible formatting of doubles} \ + {expr 1e-93} \ + 9.999999999999999e-94 +test util-16.1.17.-92 {8.4 compatible formatting of doubles} \ + {expr 1e-92} \ + 9.9999999999999999e-93 +test util-16.1.17.-91 {8.4 compatible formatting of doubles} \ + {expr 1e-91} \ + 1e-91 +test util-16.1.17.-90 {8.4 compatible formatting of doubles} \ + {expr 1e-90} \ + 9.9999999999999999e-91 +test util-16.1.17.-89 {8.4 compatible formatting of doubles} \ + {expr 1e-89} \ + 1e-89 +test util-16.1.17.-88 {8.4 compatible formatting of doubles} \ + {expr 1e-88} \ + 9.9999999999999993e-89 +test util-16.1.17.-87 {8.4 compatible formatting of doubles} \ + {expr 1e-87} \ + 1e-87 +test util-16.1.17.-86 {8.4 compatible formatting of doubles} \ + {expr 1e-86} \ + 1.0000000000000001e-86 +test util-16.1.17.-85 {8.4 compatible formatting of doubles} \ + {expr 1e-85} \ + 9.9999999999999998e-86 +test util-16.1.17.-84 {8.4 compatible formatting of doubles} \ + {expr 1e-84} \ + 1e-84 +test util-16.1.17.-83 {8.4 compatible formatting of doubles} \ + {expr 1e-83} \ + 1e-83 +test util-16.1.17.-82 {8.4 compatible formatting of doubles} \ + {expr 1e-82} \ + 9.9999999999999996e-83 +test util-16.1.17.-81 {8.4 compatible formatting of doubles} \ + {expr 1e-81} \ + 9.9999999999999996e-82 +test util-16.1.17.-80 {8.4 compatible formatting of doubles} \ + {expr 1e-80} \ + 9.9999999999999996e-81 +test util-16.1.17.-79 {8.4 compatible formatting of doubles} \ + {expr 1e-79} \ + 1e-79 +test util-16.1.17.-78 {8.4 compatible formatting of doubles} \ + {expr 1e-78} \ + 1e-78 +test util-16.1.17.-77 {8.4 compatible formatting of doubles} \ + {expr 1e-77} \ + 9.9999999999999993e-78 +test util-16.1.17.-76 {8.4 compatible formatting of doubles} \ + {expr 1e-76} \ + 9.9999999999999993e-77 +test util-16.1.17.-75 {8.4 compatible formatting of doubles} \ + {expr 1e-75} \ + 9.9999999999999996e-76 +test util-16.1.17.-74 {8.4 compatible formatting of doubles} \ + {expr 1e-74} \ + 9.9999999999999996e-75 +test util-16.1.17.-73 {8.4 compatible formatting of doubles} \ + {expr 1e-73} \ + 1e-73 +test util-16.1.17.-72 {8.4 compatible formatting of doubles} \ + {expr 1e-72} \ + 9.9999999999999997e-73 +test util-16.1.17.-71 {8.4 compatible formatting of doubles} \ + {expr 1e-71} \ + 9.9999999999999992e-72 +test util-16.1.17.-70 {8.4 compatible formatting of doubles} \ + {expr 1e-70} \ + 1e-70 +test util-16.1.17.-69 {8.4 compatible formatting of doubles} \ + {expr 1e-69} \ + 9.9999999999999996e-70 +test util-16.1.17.-68 {8.4 compatible formatting of doubles} \ + {expr 1e-68} \ + 1.0000000000000001e-68 +test util-16.1.17.-67 {8.4 compatible formatting of doubles} \ + {expr 1e-67} \ + 9.9999999999999994e-68 +test util-16.1.17.-66 {8.4 compatible formatting of doubles} \ + {expr 1e-66} \ + 9.9999999999999998e-67 +test util-16.1.17.-65 {8.4 compatible formatting of doubles} \ + {expr 1e-65} \ + 9.9999999999999992e-66 +test util-16.1.17.-64 {8.4 compatible formatting of doubles} \ + {expr 1e-64} \ + 9.9999999999999997e-65 +test util-16.1.17.-63 {8.4 compatible formatting of doubles} \ + {expr 1e-63} \ + 1.0000000000000001e-63 +test util-16.1.17.-62 {8.4 compatible formatting of doubles} \ + {expr 1e-62} \ + 1e-62 +test util-16.1.17.-61 {8.4 compatible formatting of doubles} \ + {expr 1e-61} \ + 1e-61 +test util-16.1.17.-60 {8.4 compatible formatting of doubles} \ + {expr 1e-60} \ + 9.9999999999999997e-61 +test util-16.1.17.-59 {8.4 compatible formatting of doubles} \ + {expr 1e-59} \ + 1e-59 +test util-16.1.17.-58 {8.4 compatible formatting of doubles} \ + {expr 1e-58} \ + 1e-58 +test util-16.1.17.-57 {8.4 compatible formatting of doubles} \ + {expr 1e-57} \ + 9.9999999999999995e-58 +test util-16.1.17.-56 {8.4 compatible formatting of doubles} \ + {expr 1e-56} \ + 1e-56 +test util-16.1.17.-55 {8.4 compatible formatting of doubles} \ + {expr 1e-55} \ + 9.9999999999999999e-56 +test util-16.1.17.-54 {8.4 compatible formatting of doubles} \ + {expr 1e-54} \ + 1e-54 +test util-16.1.17.-53 {8.4 compatible formatting of doubles} \ + {expr 1e-53} \ + 1e-53 +test util-16.1.17.-52 {8.4 compatible formatting of doubles} \ + {expr 1e-52} \ + 1e-52 +test util-16.1.17.-51 {8.4 compatible formatting of doubles} \ + {expr 1e-51} \ + 1e-51 +test util-16.1.17.-50 {8.4 compatible formatting of doubles} \ + {expr 1e-50} \ + 1e-50 +test util-16.1.17.-49 {8.4 compatible formatting of doubles} \ + {expr 1e-49} \ + 9.9999999999999994e-50 +test util-16.1.17.-48 {8.4 compatible formatting of doubles} \ + {expr 1e-48} \ + 9.9999999999999997e-49 +test util-16.1.17.-47 {8.4 compatible formatting of doubles} \ + {expr 1e-47} \ + 9.9999999999999997e-48 +test util-16.1.17.-46 {8.4 compatible formatting of doubles} \ + {expr 1e-46} \ + 1e-46 +test util-16.1.17.-45 {8.4 compatible formatting of doubles} \ + {expr 1e-45} \ + 9.9999999999999998e-46 +test util-16.1.17.-44 {8.4 compatible formatting of doubles} \ + {expr 1e-44} \ + 9.9999999999999995e-45 +test util-16.1.17.-43 {8.4 compatible formatting of doubles} \ + {expr 1e-43} \ + 1.0000000000000001e-43 +test util-16.1.17.-42 {8.4 compatible formatting of doubles} \ + {expr 1e-42} \ + 1e-42 +test util-16.1.17.-41 {8.4 compatible formatting of doubles} \ + {expr 1e-41} \ + 1e-41 +test util-16.1.17.-40 {8.4 compatible formatting of doubles} \ + {expr 1e-40} \ + 9.9999999999999993e-41 +test util-16.1.17.-39 {8.4 compatible formatting of doubles} \ + {expr 1e-39} \ + 9.9999999999999993e-40 +test util-16.1.17.-38 {8.4 compatible formatting of doubles} \ + {expr 1e-38} \ + 9.9999999999999996e-39 +test util-16.1.17.-37 {8.4 compatible formatting of doubles} \ + {expr 1e-37} \ + 1.0000000000000001e-37 +test util-16.1.17.-36 {8.4 compatible formatting of doubles} \ + {expr 1e-36} \ + 9.9999999999999994e-37 +test util-16.1.17.-35 {8.4 compatible formatting of doubles} \ + {expr 1e-35} \ + 1e-35 +test util-16.1.17.-34 {8.4 compatible formatting of doubles} \ + {expr 1e-34} \ + 9.9999999999999993e-35 +test util-16.1.17.-33 {8.4 compatible formatting of doubles} \ + {expr 1e-33} \ + 1.0000000000000001e-33 +test util-16.1.17.-32 {8.4 compatible formatting of doubles} \ + {expr 1e-32} \ + 1.0000000000000001e-32 +test util-16.1.17.-31 {8.4 compatible formatting of doubles} \ + {expr 1e-31} \ + 1.0000000000000001e-31 +test util-16.1.17.-30 {8.4 compatible formatting of doubles} \ + {expr 1e-30} \ + 1.0000000000000001e-30 +test util-16.1.17.-29 {8.4 compatible formatting of doubles} \ + {expr 1e-29} \ + 9.9999999999999994e-30 +test util-16.1.17.-28 {8.4 compatible formatting of doubles} \ + {expr 1e-28} \ + 9.9999999999999997e-29 +test util-16.1.17.-27 {8.4 compatible formatting of doubles} \ + {expr 1e-27} \ + 1e-27 +test util-16.1.17.-26 {8.4 compatible formatting of doubles} \ + {expr 1e-26} \ + 1e-26 +test util-16.1.17.-25 {8.4 compatible formatting of doubles} \ + {expr 1e-25} \ + 1e-25 +test util-16.1.17.-24 {8.4 compatible formatting of doubles} \ + {expr 1e-24} \ + 9.9999999999999992e-25 +test util-16.1.17.-23 {8.4 compatible formatting of doubles} \ + {expr 1e-23} \ + 9.9999999999999996e-24 +test util-16.1.17.-22 {8.4 compatible formatting of doubles} \ + {expr 1e-22} \ + 1e-22 +test util-16.1.17.-21 {8.4 compatible formatting of doubles} \ + {expr 1e-21} \ + 9.9999999999999991e-22 +test util-16.1.17.-20 {8.4 compatible formatting of doubles} \ + {expr 1e-20} \ + 9.9999999999999995e-21 +test util-16.1.17.-19 {8.4 compatible formatting of doubles} \ + {expr 1e-19} \ + 9.9999999999999998e-20 +test util-16.1.17.-18 {8.4 compatible formatting of doubles} \ + {expr 1e-18} \ + 1.0000000000000001e-18 +test util-16.1.17.-17 {8.4 compatible formatting of doubles} \ + {expr 1e-17} \ + 1.0000000000000001e-17 +test util-16.1.17.-16 {8.4 compatible formatting of doubles} \ + {expr 1e-16} \ + 9.9999999999999998e-17 +test util-16.1.17.-15 {8.4 compatible formatting of doubles} \ + {expr 1e-15} \ + 1.0000000000000001e-15 +test util-16.1.17.-14 {8.4 compatible formatting of doubles} \ + {expr 1e-14} \ + 1e-14 +test util-16.1.17.-13 {8.4 compatible formatting of doubles} \ + {expr 1e-13} \ + 1e-13 +test util-16.1.17.-12 {8.4 compatible formatting of doubles} \ + {expr 1e-12} \ + 9.9999999999999998e-13 +test util-16.1.17.-11 {8.4 compatible formatting of doubles} \ + {expr 1e-11} \ + 9.9999999999999994e-12 +test util-16.1.17.-10 {8.4 compatible formatting of doubles} \ + {expr 1e-10} \ + 1e-10 +test util-16.1.17.-9 {8.4 compatible formatting of doubles} \ + {expr 1e-9} \ + 1.0000000000000001e-09 +test util-16.1.17.-8 {8.4 compatible formatting of doubles} \ + {expr 1e-8} \ + 1e-08 +test util-16.1.17.-7 {8.4 compatible formatting of doubles} \ + {expr 1e-7} \ + 9.9999999999999995e-08 +test util-16.1.17.-6 {8.4 compatible formatting of doubles} \ + {expr 1e-6} \ + 9.9999999999999995e-07 +test util-16.1.17.-5 {8.4 compatible formatting of doubles} \ + {expr 1e-5} \ + 1.0000000000000001e-05 +test util-16.1.17.-4 {8.4 compatible formatting of doubles} \ + {expr 1e-4} \ + 0.0001 +test util-16.1.17.-3 {8.4 compatible formatting of doubles} \ + {expr 1e-3} \ + 0.001 +test util-16.1.17.-2 {8.4 compatible formatting of doubles} \ + {expr 1e-2} \ + 0.01 +test util-16.1.17.-1 {8.4 compatible formatting of doubles} \ + {expr 1e-1} \ + 0.10000000000000001 +test util-16.1.17.0 {8.4 compatible formatting of doubles} \ + {expr 1e0} \ + 1.0 +test util-16.1.17.1 {8.4 compatible formatting of doubles} \ + {expr 1e1} \ + 10.0 +test util-16.1.17.2 {8.4 compatible formatting of doubles} \ + {expr 1e2} \ + 100.0 +test util-16.1.17.3 {8.4 compatible formatting of doubles} \ + {expr 1e3} \ + 1000.0 +test util-16.1.17.4 {8.4 compatible formatting of doubles} \ + {expr 1e4} \ + 10000.0 +test util-16.1.17.5 {8.4 compatible formatting of doubles} \ + {expr 1e5} \ + 100000.0 +test util-16.1.17.6 {8.4 compatible formatting of doubles} \ + {expr 1e6} \ + 1000000.0 +test util-16.1.17.7 {8.4 compatible formatting of doubles} \ + {expr 1e7} \ + 10000000.0 +test util-16.1.17.8 {8.4 compatible formatting of doubles} \ + {expr 1e8} \ + 100000000.0 +test util-16.1.17.9 {8.4 compatible formatting of doubles} \ + {expr 1e9} \ + 1000000000.0 +test util-16.1.17.10 {8.4 compatible formatting of doubles} \ + {expr 1e10} \ + 10000000000.0 +test util-16.1.17.11 {8.4 compatible formatting of doubles} \ + {expr 1e11} \ + 100000000000.0 +test util-16.1.17.12 {8.4 compatible formatting of doubles} \ + {expr 1e12} \ + 1000000000000.0 +test util-16.1.17.13 {8.4 compatible formatting of doubles} \ + {expr 1e13} \ + 10000000000000.0 +test util-16.1.17.14 {8.4 compatible formatting of doubles} \ + {expr 1e14} \ + 100000000000000.0 +test util-16.1.17.15 {8.4 compatible formatting of doubles} \ + {expr 1e15} \ + 1000000000000000.0 +test util-16.1.17.16 {8.4 compatible formatting of doubles} \ + {expr 1e16} \ + 10000000000000000.0 +test util-16.1.17.17 {8.4 compatible formatting of doubles} \ + {expr 1e17} \ + 1e+17 +test util-16.1.17.18 {8.4 compatible formatting of doubles} \ + {expr 1e18} \ + 1e+18 +test util-16.1.17.19 {8.4 compatible formatting of doubles} \ + {expr 1e19} \ + 1e+19 +test util-16.1.17.20 {8.4 compatible formatting of doubles} \ + {expr 1e20} \ + 1e+20 +test util-16.1.17.21 {8.4 compatible formatting of doubles} \ + {expr 1e21} \ + 1e+21 +test util-16.1.17.22 {8.4 compatible formatting of doubles} \ + {expr 1e22} \ + 1e+22 +test util-16.1.17.23 {8.4 compatible formatting of doubles} \ + {expr 1e23} \ + 9.9999999999999992e+22 +test util-16.1.17.24 {8.4 compatible formatting of doubles} \ + {expr 1e24} \ + 9.9999999999999998e+23 +test util-16.1.17.25 {8.4 compatible formatting of doubles} \ + {expr 1e25} \ + 1.0000000000000001e+25 +test util-16.1.17.26 {8.4 compatible formatting of doubles} \ + {expr 1e26} \ + 1e+26 +test util-16.1.17.27 {8.4 compatible formatting of doubles} \ + {expr 1e27} \ + 1e+27 +test util-16.1.17.28 {8.4 compatible formatting of doubles} \ + {expr 1e28} \ + 9.9999999999999996e+27 +test util-16.1.17.29 {8.4 compatible formatting of doubles} \ + {expr 1e29} \ + 9.9999999999999991e+28 +test util-16.1.17.30 {8.4 compatible formatting of doubles} \ + {expr 1e30} \ + 1e+30 +test util-16.1.17.31 {8.4 compatible formatting of doubles} \ + {expr 1e31} \ + 9.9999999999999996e+30 +test util-16.1.17.32 {8.4 compatible formatting of doubles} \ + {expr 1e32} \ + 1.0000000000000001e+32 +test util-16.1.17.33 {8.4 compatible formatting of doubles} \ + {expr 1e33} \ + 9.9999999999999995e+32 +test util-16.1.17.34 {8.4 compatible formatting of doubles} \ + {expr 1e34} \ + 9.9999999999999995e+33 +test util-16.1.17.35 {8.4 compatible formatting of doubles} \ + {expr 1e35} \ + 9.9999999999999997e+34 +test util-16.1.17.36 {8.4 compatible formatting of doubles} \ + {expr 1e36} \ + 1e+36 +test util-16.1.17.37 {8.4 compatible formatting of doubles} \ + {expr 1e37} \ + 9.9999999999999995e+36 +test util-16.1.17.38 {8.4 compatible formatting of doubles} \ + {expr 1e38} \ + 9.9999999999999998e+37 +test util-16.1.17.39 {8.4 compatible formatting of doubles} \ + {expr 1e39} \ + 9.9999999999999994e+38 +test util-16.1.17.40 {8.4 compatible formatting of doubles} \ + {expr 1e40} \ + 1e+40 +test util-16.1.17.41 {8.4 compatible formatting of doubles} \ + {expr 1e41} \ + 1e+41 +test util-16.1.17.42 {8.4 compatible formatting of doubles} \ + {expr 1e42} \ + 1e+42 +test util-16.1.17.43 {8.4 compatible formatting of doubles} \ + {expr 1e43} \ + 1e+43 +test util-16.1.17.44 {8.4 compatible formatting of doubles} \ + {expr 1e44} \ + 1.0000000000000001e+44 +test util-16.1.17.45 {8.4 compatible formatting of doubles} \ + {expr 1e45} \ + 9.9999999999999993e+44 +test util-16.1.17.46 {8.4 compatible formatting of doubles} \ + {expr 1e46} \ + 9.9999999999999999e+45 +test util-16.1.17.47 {8.4 compatible formatting of doubles} \ + {expr 1e47} \ + 1e+47 +test util-16.1.17.48 {8.4 compatible formatting of doubles} \ + {expr 1e48} \ + 1e+48 +test util-16.1.17.49 {8.4 compatible formatting of doubles} \ + {expr 1e49} \ + 9.9999999999999995e+48 +test util-16.1.17.50 {8.4 compatible formatting of doubles} \ + {expr 1e50} \ + 1.0000000000000001e+50 +test util-16.1.17.51 {8.4 compatible formatting of doubles} \ + {expr 1e51} \ + 9.9999999999999999e+50 +test util-16.1.17.52 {8.4 compatible formatting of doubles} \ + {expr 1e52} \ + 9.9999999999999999e+51 +test util-16.1.17.53 {8.4 compatible formatting of doubles} \ + {expr 1e53} \ + 9.9999999999999999e+52 +test util-16.1.17.54 {8.4 compatible formatting of doubles} \ + {expr 1e54} \ + 1.0000000000000001e+54 +test util-16.1.17.55 {8.4 compatible formatting of doubles} \ + {expr 1e55} \ + 1e+55 +test util-16.1.17.56 {8.4 compatible formatting of doubles} \ + {expr 1e56} \ + 1.0000000000000001e+56 +test util-16.1.17.57 {8.4 compatible formatting of doubles} \ + {expr 1e57} \ + 1e+57 +test util-16.1.17.58 {8.4 compatible formatting of doubles} \ + {expr 1e58} \ + 9.9999999999999994e+57 +test util-16.1.17.59 {8.4 compatible formatting of doubles} \ + {expr 1e59} \ + 9.9999999999999997e+58 +test util-16.1.17.60 {8.4 compatible formatting of doubles} \ + {expr 1e60} \ + 9.9999999999999995e+59 +test util-16.1.17.61 {8.4 compatible formatting of doubles} \ + {expr 1e61} \ + 9.9999999999999995e+60 +test util-16.1.17.62 {8.4 compatible formatting of doubles} \ + {expr 1e62} \ + 1e+62 +test util-16.1.17.63 {8.4 compatible formatting of doubles} \ + {expr 1e63} \ + 1.0000000000000001e+63 +test util-16.1.17.64 {8.4 compatible formatting of doubles} \ + {expr 1e64} \ + 1e+64 +test util-16.1.17.65 {8.4 compatible formatting of doubles} \ + {expr 1e65} \ + 9.9999999999999999e+64 +test util-16.1.17.66 {8.4 compatible formatting of doubles} \ + {expr 1e66} \ + 9.9999999999999995e+65 +test util-16.1.17.67 {8.4 compatible formatting of doubles} \ + {expr 1e67} \ + 9.9999999999999998e+66 +test util-16.1.17.68 {8.4 compatible formatting of doubles} \ + {expr 1e68} \ + 9.9999999999999995e+67 +test util-16.1.17.69 {8.4 compatible formatting of doubles} \ + {expr 1e69} \ + 1.0000000000000001e+69 +test util-16.1.17.70 {8.4 compatible formatting of doubles} \ + {expr 1e70} \ + 1.0000000000000001e+70 +test util-16.1.17.71 {8.4 compatible formatting of doubles} \ + {expr 1e71} \ + 1e+71 +test util-16.1.17.72 {8.4 compatible formatting of doubles} \ + {expr 1e72} \ + 9.9999999999999994e+71 +test util-16.1.17.73 {8.4 compatible formatting of doubles} \ + {expr 1e73} \ + 9.9999999999999998e+72 +test util-16.1.17.74 {8.4 compatible formatting of doubles} \ + {expr 1e74} \ + 9.9999999999999995e+73 +test util-16.1.17.75 {8.4 compatible formatting of doubles} \ + {expr 1e75} \ + 9.9999999999999993e+74 +test util-16.1.17.76 {8.4 compatible formatting of doubles} \ + {expr 1e76} \ + 1e+76 +test util-16.1.17.77 {8.4 compatible formatting of doubles} \ + {expr 1e77} \ + 9.9999999999999998e+76 +test util-16.1.17.78 {8.4 compatible formatting of doubles} \ + {expr 1e78} \ + 1e+78 +test util-16.1.17.79 {8.4 compatible formatting of doubles} \ + {expr 1e79} \ + 9.9999999999999997e+78 +test util-16.1.17.80 {8.4 compatible formatting of doubles} \ + {expr 1e80} \ + 1e+80 +test util-16.1.17.81 {8.4 compatible formatting of doubles} \ + {expr 1e81} \ + 9.9999999999999992e+80 +test util-16.1.17.82 {8.4 compatible formatting of doubles} \ + {expr 1e82} \ + 9.9999999999999996e+81 +test util-16.1.17.83 {8.4 compatible formatting of doubles} \ + {expr 1e83} \ + 1e+83 +test util-16.1.17.84 {8.4 compatible formatting of doubles} \ + {expr 1e84} \ + 1.0000000000000001e+84 +test util-16.1.17.85 {8.4 compatible formatting of doubles} \ + {expr 1e85} \ + 1e+85 +test util-16.1.17.86 {8.4 compatible formatting of doubles} \ + {expr 1e86} \ + 1e+86 +test util-16.1.17.87 {8.4 compatible formatting of doubles} \ + {expr 1e87} \ + 9.9999999999999996e+86 +test util-16.1.17.88 {8.4 compatible formatting of doubles} \ + {expr 1e88} \ + 9.9999999999999996e+87 +test util-16.1.17.89 {8.4 compatible formatting of doubles} \ + {expr 1e89} \ + 9.9999999999999999e+88 +test util-16.1.17.90 {8.4 compatible formatting of doubles} \ + {expr 1e90} \ + 9.9999999999999997e+89 +test util-16.1.17.91 {8.4 compatible formatting of doubles} \ + {expr 1e91} \ + 1.0000000000000001e+91 +test util-16.1.17.92 {8.4 compatible formatting of doubles} \ + {expr 1e92} \ + 1e+92 +test util-16.1.17.93 {8.4 compatible formatting of doubles} \ + {expr 1e93} \ + 1e+93 +test util-16.1.17.94 {8.4 compatible formatting of doubles} \ + {expr 1e94} \ + 1e+94 +test util-16.1.17.95 {8.4 compatible formatting of doubles} \ + {expr 1e95} \ + 1e+95 +test util-16.1.17.96 {8.4 compatible formatting of doubles} \ + {expr 1e96} \ + 1e+96 +test util-16.1.17.97 {8.4 compatible formatting of doubles} \ + {expr 1e97} \ + 1.0000000000000001e+97 +test util-16.1.17.98 {8.4 compatible formatting of doubles} \ + {expr 1e98} \ + 1e+98 +test util-16.1.17.99 {8.4 compatible formatting of doubles} \ + {expr 1e99} \ + 9.9999999999999997e+98 +test util-16.1.17.100 {8.4 compatible formatting of doubles} \ + {expr 1e100} \ + 1e+100 +test util-16.1.17.101 {8.4 compatible formatting of doubles} \ + {expr 1e101} \ + 9.9999999999999998e+100 +test util-16.1.17.102 {8.4 compatible formatting of doubles} \ + {expr 1e102} \ + 9.9999999999999998e+101 +test util-16.1.17.103 {8.4 compatible formatting of doubles} \ + {expr 1e103} \ + 1e+103 +test util-16.1.17.104 {8.4 compatible formatting of doubles} \ + {expr 1e104} \ + 1e+104 +test util-16.1.17.105 {8.4 compatible formatting of doubles} \ + {expr 1e105} \ + 9.9999999999999994e+104 +test util-16.1.17.106 {8.4 compatible formatting of doubles} \ + {expr 1e106} \ + 1.0000000000000001e+106 +test util-16.1.17.107 {8.4 compatible formatting of doubles} \ + {expr 1e107} \ + 9.9999999999999997e+106 +test util-16.1.17.108 {8.4 compatible formatting of doubles} \ + {expr 1e108} \ + 1e+108 +test util-16.1.17.109 {8.4 compatible formatting of doubles} \ + {expr 1e109} \ + 9.9999999999999998e+108 +test util-16.1.17.110 {8.4 compatible formatting of doubles} \ + {expr 1e110} \ + 1e+110 +test util-16.1.17.111 {8.4 compatible formatting of doubles} \ + {expr 1e111} \ + 9.9999999999999996e+110 +test util-16.1.17.112 {8.4 compatible formatting of doubles} \ + {expr 1e112} \ + 9.9999999999999993e+111 +test util-16.1.17.113 {8.4 compatible formatting of doubles} \ + {expr 1e113} \ + 1e+113 +test util-16.1.17.114 {8.4 compatible formatting of doubles} \ + {expr 1e114} \ + 1e+114 +test util-16.1.17.115 {8.4 compatible formatting of doubles} \ + {expr 1e115} \ + 1e+115 +test util-16.1.17.116 {8.4 compatible formatting of doubles} \ + {expr 1e116} \ + 1e+116 +test util-16.1.17.117 {8.4 compatible formatting of doubles} \ + {expr 1e117} \ + 1.0000000000000001e+117 +test util-16.1.17.118 {8.4 compatible formatting of doubles} \ + {expr 1e118} \ + 9.9999999999999997e+117 +test util-16.1.17.119 {8.4 compatible formatting of doubles} \ + {expr 1e119} \ + 9.9999999999999994e+118 +test util-16.1.17.120 {8.4 compatible formatting of doubles} \ + {expr 1e120} \ + 9.9999999999999998e+119 +test util-16.1.17.121 {8.4 compatible formatting of doubles} \ + {expr 1e121} \ + 1e+121 +test util-16.1.17.122 {8.4 compatible formatting of doubles} \ + {expr 1e122} \ + 1e+122 +test util-16.1.17.123 {8.4 compatible formatting of doubles} \ + {expr 1e123} \ + 9.9999999999999998e+122 +test util-16.1.17.124 {8.4 compatible formatting of doubles} \ + {expr 1e124} \ + 9.9999999999999995e+123 +test util-16.1.17.125 {8.4 compatible formatting of doubles} \ + {expr 1e125} \ + 9.9999999999999992e+124 +test util-16.1.17.126 {8.4 compatible formatting of doubles} \ + {expr 1e126} \ + 9.9999999999999992e+125 +test util-16.1.17.127 {8.4 compatible formatting of doubles} \ + {expr 1e127} \ + 9.9999999999999995e+126 +test util-16.1.17.128 {8.4 compatible formatting of doubles} \ + {expr 1e128} \ + 1.0000000000000001e+128 +test util-16.1.17.129 {8.4 compatible formatting of doubles} \ + {expr 1e129} \ + 1e+129 +test util-16.1.17.130 {8.4 compatible formatting of doubles} \ + {expr 1e130} \ + 1.0000000000000001e+130 +test util-16.1.17.131 {8.4 compatible formatting of doubles} \ + {expr 1e131} \ + 9.9999999999999991e+130 +test util-16.1.17.132 {8.4 compatible formatting of doubles} \ + {expr 1e132} \ + 9.9999999999999999e+131 +test util-16.1.17.133 {8.4 compatible formatting of doubles} \ + {expr 1e133} \ + 1e+133 +test util-16.1.17.134 {8.4 compatible formatting of doubles} \ + {expr 1e134} \ + 9.9999999999999992e+133 +test util-16.1.17.135 {8.4 compatible formatting of doubles} \ + {expr 1e135} \ + 9.9999999999999996e+134 +test util-16.1.17.136 {8.4 compatible formatting of doubles} \ + {expr 1e136} \ + 1.0000000000000001e+136 +test util-16.1.17.137 {8.4 compatible formatting of doubles} \ + {expr 1e137} \ + 1e+137 +test util-16.1.17.138 {8.4 compatible formatting of doubles} \ + {expr 1e138} \ + 1e+138 +test util-16.1.17.139 {8.4 compatible formatting of doubles} \ + {expr 1e139} \ + 1e+139 +test util-16.1.17.140 {8.4 compatible formatting of doubles} \ + {expr 1e140} \ + 1.0000000000000001e+140 +test util-16.1.17.141 {8.4 compatible formatting of doubles} \ + {expr 1e141} \ + 1e+141 +test util-16.1.17.142 {8.4 compatible formatting of doubles} \ + {expr 1e142} \ + 1.0000000000000001e+142 +test util-16.1.17.143 {8.4 compatible formatting of doubles} \ + {expr 1e143} \ + 1e+143 +test util-16.1.17.144 {8.4 compatible formatting of doubles} \ + {expr 1e144} \ + 1e+144 +test util-16.1.17.145 {8.4 compatible formatting of doubles} \ + {expr 1e145} \ + 9.9999999999999999e+144 +test util-16.1.17.146 {8.4 compatible formatting of doubles} \ + {expr 1e146} \ + 9.9999999999999993e+145 +test util-16.1.17.147 {8.4 compatible formatting of doubles} \ + {expr 1e147} \ + 9.9999999999999998e+146 +test util-16.1.17.148 {8.4 compatible formatting of doubles} \ + {expr 1e148} \ + 1e+148 +test util-16.1.17.149 {8.4 compatible formatting of doubles} \ + {expr 1e149} \ + 1e+149 +test util-16.1.17.150 {8.4 compatible formatting of doubles} \ + {expr 1e150} \ + 9.9999999999999998e+149 +test util-16.1.17.151 {8.4 compatible formatting of doubles} \ + {expr 1e151} \ + 1e+151 +test util-16.1.17.152 {8.4 compatible formatting of doubles} \ + {expr 1e152} \ + 1e+152 +test util-16.1.17.153 {8.4 compatible formatting of doubles} \ + {expr 1e153} \ + 1e+153 +test util-16.1.17.154 {8.4 compatible formatting of doubles} \ + {expr 1e154} \ + 1e+154 +test util-16.1.17.155 {8.4 compatible formatting of doubles} \ + {expr 1e155} \ + 1e+155 +test util-16.1.17.156 {8.4 compatible formatting of doubles} \ + {expr 1e156} \ + 9.9999999999999998e+155 +test util-16.1.17.157 {8.4 compatible formatting of doubles} \ + {expr 1e157} \ + 9.9999999999999998e+156 +test util-16.1.17.158 {8.4 compatible formatting of doubles} \ + {expr 1e158} \ + 9.9999999999999995e+157 +test util-16.1.17.159 {8.4 compatible formatting of doubles} \ + {expr 1e159} \ + 9.9999999999999993e+158 +test util-16.1.17.160 {8.4 compatible formatting of doubles} \ + {expr 1e160} \ + 1e+160 +test util-16.1.17.161 {8.4 compatible formatting of doubles} \ + {expr 1e161} \ + 1e+161 +test util-16.1.17.162 {8.4 compatible formatting of doubles} \ + {expr 1e162} \ + 9.9999999999999994e+161 +test util-16.1.17.163 {8.4 compatible formatting of doubles} \ + {expr 1e163} \ + 9.9999999999999994e+162 +test util-16.1.17.164 {8.4 compatible formatting of doubles} \ + {expr 1e164} \ + 1e+164 +test util-16.1.17.165 {8.4 compatible formatting of doubles} \ + {expr 1e165} \ + 9.999999999999999e+164 +test util-16.1.17.166 {8.4 compatible formatting of doubles} \ + {expr 1e166} \ + 9.9999999999999994e+165 +test util-16.1.17.167 {8.4 compatible formatting of doubles} \ + {expr 1e167} \ + 1e+167 +test util-16.1.17.168 {8.4 compatible formatting of doubles} \ + {expr 1e168} \ + 9.9999999999999993e+167 +test util-16.1.17.169 {8.4 compatible formatting of doubles} \ + {expr 1e169} \ + 9.9999999999999993e+168 +test util-16.1.17.170 {8.4 compatible formatting of doubles} \ + {expr 1e170} \ + 1e+170 +test util-16.1.17.171 {8.4 compatible formatting of doubles} \ + {expr 1e171} \ + 9.9999999999999995e+170 +test util-16.1.17.172 {8.4 compatible formatting of doubles} \ + {expr 1e172} \ + 1.0000000000000001e+172 +test util-16.1.17.173 {8.4 compatible formatting of doubles} \ + {expr 1e173} \ + 1e+173 +test util-16.1.17.174 {8.4 compatible formatting of doubles} \ + {expr 1e174} \ + 1.0000000000000001e+174 +test util-16.1.17.175 {8.4 compatible formatting of doubles} \ + {expr 1e175} \ + 9.9999999999999994e+174 +test util-16.1.17.176 {8.4 compatible formatting of doubles} \ + {expr 1e176} \ + 1e+176 +test util-16.1.17.177 {8.4 compatible formatting of doubles} \ + {expr 1e177} \ + 1e+177 +test util-16.1.17.178 {8.4 compatible formatting of doubles} \ + {expr 1e178} \ + 1.0000000000000001e+178 +test util-16.1.17.179 {8.4 compatible formatting of doubles} \ + {expr 1e179} \ + 9.9999999999999998e+178 +test util-16.1.17.180 {8.4 compatible formatting of doubles} \ + {expr 1e180} \ + 1e+180 +test util-16.1.17.181 {8.4 compatible formatting of doubles} \ + {expr 1e181} \ + 9.9999999999999992e+180 +test util-16.1.17.182 {8.4 compatible formatting of doubles} \ + {expr 1e182} \ + 1.0000000000000001e+182 +test util-16.1.17.183 {8.4 compatible formatting of doubles} \ + {expr 1e183} \ + 9.9999999999999995e+182 +test util-16.1.17.184 {8.4 compatible formatting of doubles} \ + {expr 1e184} \ + 1e+184 +test util-16.1.17.185 {8.4 compatible formatting of doubles} \ + {expr 1e185} \ + 9.9999999999999998e+184 +test util-16.1.17.186 {8.4 compatible formatting of doubles} \ + {expr 1e186} \ + 9.9999999999999998e+185 +test util-16.1.17.187 {8.4 compatible formatting of doubles} \ + {expr 1e187} \ + 9.9999999999999991e+186 +test util-16.1.17.188 {8.4 compatible formatting of doubles} \ + {expr 1e188} \ + 1e+188 +test util-16.1.17.189 {8.4 compatible formatting of doubles} \ + {expr 1e189} \ + 1e+189 +test util-16.1.17.190 {8.4 compatible formatting of doubles} \ + {expr 1e190} \ + 1.0000000000000001e+190 +test util-16.1.17.191 {8.4 compatible formatting of doubles} \ + {expr 1e191} \ + 1.0000000000000001e+191 +test util-16.1.17.192 {8.4 compatible formatting of doubles} \ + {expr 1e192} \ + 1e+192 +test util-16.1.17.193 {8.4 compatible formatting of doubles} \ + {expr 1e193} \ + 1.0000000000000001e+193 +test util-16.1.17.194 {8.4 compatible formatting of doubles} \ + {expr 1e194} \ + 9.9999999999999994e+193 +test util-16.1.17.195 {8.4 compatible formatting of doubles} \ + {expr 1e195} \ + 9.9999999999999998e+194 +test util-16.1.17.196 {8.4 compatible formatting of doubles} \ + {expr 1e196} \ + 9.9999999999999995e+195 +test util-16.1.17.197 {8.4 compatible formatting of doubles} \ + {expr 1e197} \ + 9.9999999999999995e+196 +test util-16.1.17.198 {8.4 compatible formatting of doubles} \ + {expr 1e198} \ + 1e+198 +test util-16.1.17.199 {8.4 compatible formatting of doubles} \ + {expr 1e199} \ + 1.0000000000000001e+199 +test util-16.1.17.200 {8.4 compatible formatting of doubles} \ + {expr 1e200} \ + 9.9999999999999997e+199 +test util-16.1.17.201 {8.4 compatible formatting of doubles} \ + {expr 1e201} \ + 1e+201 +test util-16.1.17.202 {8.4 compatible formatting of doubles} \ + {expr 1e202} \ + 9.999999999999999e+201 +test util-16.1.17.203 {8.4 compatible formatting of doubles} \ + {expr 1e203} \ + 9.9999999999999999e+202 +test util-16.1.17.204 {8.4 compatible formatting of doubles} \ + {expr 1e204} \ + 9.9999999999999999e+203 +test util-16.1.17.205 {8.4 compatible formatting of doubles} \ + {expr 1e205} \ + 1e+205 +test util-16.1.17.206 {8.4 compatible formatting of doubles} \ + {expr 1e206} \ + 1e+206 +test util-16.1.17.207 {8.4 compatible formatting of doubles} \ + {expr 1e207} \ + 1e+207 +test util-16.1.17.208 {8.4 compatible formatting of doubles} \ + {expr 1e208} \ + 9.9999999999999998e+207 +test util-16.1.17.209 {8.4 compatible formatting of doubles} \ + {expr 1e209} \ + 1.0000000000000001e+209 +test util-16.1.17.210 {8.4 compatible formatting of doubles} \ + {expr 1e210} \ + 9.9999999999999993e+209 +test util-16.1.17.211 {8.4 compatible formatting of doubles} \ + {expr 1e211} \ + 9.9999999999999996e+210 +test util-16.1.17.212 {8.4 compatible formatting of doubles} \ + {expr 1e212} \ + 9.9999999999999991e+211 +test util-16.1.17.213 {8.4 compatible formatting of doubles} \ + {expr 1e213} \ + 9.9999999999999998e+212 +test util-16.1.17.214 {8.4 compatible formatting of doubles} \ + {expr 1e214} \ + 9.9999999999999995e+213 +test util-16.1.17.215 {8.4 compatible formatting of doubles} \ + {expr 1e215} \ + 9.9999999999999991e+214 +test util-16.1.17.216 {8.4 compatible formatting of doubles} \ + {expr 1e216} \ + 1e+216 +test util-16.1.17.217 {8.4 compatible formatting of doubles} \ + {expr 1e217} \ + 9.9999999999999996e+216 +test util-16.1.17.218 {8.4 compatible formatting of doubles} \ + {expr 1e218} \ + 1.0000000000000001e+218 +test util-16.1.17.219 {8.4 compatible formatting of doubles} \ + {expr 1e219} \ + 9.9999999999999997e+218 +test util-16.1.17.220 {8.4 compatible formatting of doubles} \ + {expr 1e220} \ + 1e+220 +test util-16.1.17.221 {8.4 compatible formatting of doubles} \ + {expr 1e221} \ + 1e+221 +test util-16.1.17.222 {8.4 compatible formatting of doubles} \ + {expr 1e222} \ + 1e+222 +test util-16.1.17.223 {8.4 compatible formatting of doubles} \ + {expr 1e223} \ + 1e+223 +test util-16.1.17.224 {8.4 compatible formatting of doubles} \ + {expr 1e224} \ + 9.9999999999999997e+223 +test util-16.1.17.225 {8.4 compatible formatting of doubles} \ + {expr 1e225} \ + 9.9999999999999993e+224 +test util-16.1.17.226 {8.4 compatible formatting of doubles} \ + {expr 1e226} \ + 9.9999999999999996e+225 +test util-16.1.17.227 {8.4 compatible formatting of doubles} \ + {expr 1e227} \ + 1.0000000000000001e+227 +test util-16.1.17.228 {8.4 compatible formatting of doubles} \ + {expr 1e228} \ + 9.9999999999999992e+227 +test util-16.1.17.229 {8.4 compatible formatting of doubles} \ + {expr 1e229} \ + 9.9999999999999999e+228 +test util-16.1.17.230 {8.4 compatible formatting of doubles} \ + {expr 1e230} \ + 1.0000000000000001e+230 +test util-16.1.17.231 {8.4 compatible formatting of doubles} \ + {expr 1e231} \ + 1.0000000000000001e+231 +test util-16.1.17.232 {8.4 compatible formatting of doubles} \ + {expr 1e232} \ + 1.0000000000000001e+232 +test util-16.1.17.233 {8.4 compatible formatting of doubles} \ + {expr 1e233} \ + 9.9999999999999997e+232 +test util-16.1.17.234 {8.4 compatible formatting of doubles} \ + {expr 1e234} \ + 1e+234 +test util-16.1.17.235 {8.4 compatible formatting of doubles} \ + {expr 1e235} \ + 1.0000000000000001e+235 +test util-16.1.17.236 {8.4 compatible formatting of doubles} \ + {expr 1e236} \ + 1.0000000000000001e+236 +test util-16.1.17.237 {8.4 compatible formatting of doubles} \ + {expr 1e237} \ + 9.9999999999999994e+236 +test util-16.1.17.238 {8.4 compatible formatting of doubles} \ + {expr 1e238} \ + 1e+238 +test util-16.1.17.239 {8.4 compatible formatting of doubles} \ + {expr 1e239} \ + 9.9999999999999999e+238 +test util-16.1.17.240 {8.4 compatible formatting of doubles} \ + {expr 1e240} \ + 1e+240 +test util-16.1.17.241 {8.4 compatible formatting of doubles} \ + {expr 1e241} \ + 1.0000000000000001e+241 +test util-16.1.17.242 {8.4 compatible formatting of doubles} \ + {expr 1e242} \ + 1.0000000000000001e+242 +test util-16.1.17.243 {8.4 compatible formatting of doubles} \ + {expr 1e243} \ + 1.0000000000000001e+243 +test util-16.1.17.244 {8.4 compatible formatting of doubles} \ + {expr 1e244} \ + 1.0000000000000001e+244 +test util-16.1.17.245 {8.4 compatible formatting of doubles} \ + {expr 1e245} \ + 1e+245 +test util-16.1.17.246 {8.4 compatible formatting of doubles} \ + {expr 1e246} \ + 1.0000000000000001e+246 +test util-16.1.17.247 {8.4 compatible formatting of doubles} \ + {expr 1e247} \ + 9.9999999999999995e+246 +test util-16.1.17.248 {8.4 compatible formatting of doubles} \ + {expr 1e248} \ + 1e+248 +test util-16.1.17.249 {8.4 compatible formatting of doubles} \ + {expr 1e249} \ + 9.9999999999999992e+248 +test util-16.1.17.250 {8.4 compatible formatting of doubles} \ + {expr 1e250} \ + 9.9999999999999992e+249 +test util-16.1.17.251 {8.4 compatible formatting of doubles} \ + {expr 1e251} \ + 1e+251 +test util-16.1.17.252 {8.4 compatible formatting of doubles} \ + {expr 1e252} \ + 1.0000000000000001e+252 +test util-16.1.17.253 {8.4 compatible formatting of doubles} \ + {expr 1e253} \ + 9.9999999999999994e+252 +test util-16.1.17.254 {8.4 compatible formatting of doubles} \ + {expr 1e254} \ + 9.9999999999999994e+253 +test util-16.1.17.255 {8.4 compatible formatting of doubles} \ + {expr 1e255} \ + 9.9999999999999999e+254 +test util-16.1.17.256 {8.4 compatible formatting of doubles} \ + {expr 1e256} \ + 1e+256 +test util-16.1.17.257 {8.4 compatible formatting of doubles} \ + {expr 1e257} \ + 1e+257 +test util-16.1.17.258 {8.4 compatible formatting of doubles} \ + {expr 1e258} \ + 1.0000000000000001e+258 +test util-16.1.17.259 {8.4 compatible formatting of doubles} \ + {expr 1e259} \ + 9.9999999999999993e+258 +test util-16.1.17.260 {8.4 compatible formatting of doubles} \ + {expr 1e260} \ + 1.0000000000000001e+260 +test util-16.1.17.261 {8.4 compatible formatting of doubles} \ + {expr 1e261} \ + 9.9999999999999993e+260 +test util-16.1.17.262 {8.4 compatible formatting of doubles} \ + {expr 1e262} \ + 1e+262 +test util-16.1.17.263 {8.4 compatible formatting of doubles} \ + {expr 1e263} \ + 1e+263 +test util-16.1.17.264 {8.4 compatible formatting of doubles} \ + {expr 1e264} \ + 1e+264 +test util-16.1.17.265 {8.4 compatible formatting of doubles} \ + {expr 1e265} \ + 1.0000000000000001e+265 +test util-16.1.17.266 {8.4 compatible formatting of doubles} \ + {expr 1e266} \ + 1e+266 +test util-16.1.17.267 {8.4 compatible formatting of doubles} \ + {expr 1e267} \ + 9.9999999999999997e+266 +test util-16.1.17.268 {8.4 compatible formatting of doubles} \ + {expr 1e268} \ + 9.9999999999999997e+267 +test util-16.1.17.269 {8.4 compatible formatting of doubles} \ + {expr 1e269} \ + 1e+269 +test util-16.1.17.270 {8.4 compatible formatting of doubles} \ + {expr 1e270} \ + 1e+270 +test util-16.1.17.271 {8.4 compatible formatting of doubles} \ + {expr 1e271} \ + 9.9999999999999995e+270 +test util-16.1.17.272 {8.4 compatible formatting of doubles} \ + {expr 1e272} \ + 1.0000000000000001e+272 +test util-16.1.17.273 {8.4 compatible formatting of doubles} \ + {expr 1e273} \ + 9.9999999999999995e+272 +test util-16.1.17.274 {8.4 compatible formatting of doubles} \ + {expr 1e274} \ + 9.9999999999999992e+273 +test util-16.1.17.275 {8.4 compatible formatting of doubles} \ + {expr 1e275} \ + 9.9999999999999996e+274 +test util-16.1.17.276 {8.4 compatible formatting of doubles} \ + {expr 1e276} \ + 1.0000000000000001e+276 +test util-16.1.17.277 {8.4 compatible formatting of doubles} \ + {expr 1e277} \ + 1e+277 +test util-16.1.17.278 {8.4 compatible formatting of doubles} \ + {expr 1e278} \ + 9.9999999999999996e+277 +test util-16.1.17.279 {8.4 compatible formatting of doubles} \ + {expr 1e279} \ + 1.0000000000000001e+279 +test util-16.1.17.280 {8.4 compatible formatting of doubles} \ + {expr 1e280} \ + 1e+280 +test util-16.1.17.281 {8.4 compatible formatting of doubles} \ + {expr 1e281} \ + 1e+281 +test util-16.1.17.282 {8.4 compatible formatting of doubles} \ + {expr 1e282} \ + 1e+282 +test util-16.1.17.283 {8.4 compatible formatting of doubles} \ + {expr 1e283} \ + 9.9999999999999996e+282 +test util-16.1.17.284 {8.4 compatible formatting of doubles} \ + {expr 1e284} \ + 1.0000000000000001e+284 +test util-16.1.17.285 {8.4 compatible formatting of doubles} \ + {expr 1e285} \ + 9.9999999999999998e+284 +test util-16.1.17.286 {8.4 compatible formatting of doubles} \ + {expr 1e286} \ + 1e+286 +test util-16.1.17.287 {8.4 compatible formatting of doubles} \ + {expr 1e287} \ + 1.0000000000000001e+287 +test util-16.1.17.288 {8.4 compatible formatting of doubles} \ + {expr 1e288} \ + 1e+288 +test util-16.1.17.289 {8.4 compatible formatting of doubles} \ + {expr 1e289} \ + 1.0000000000000001e+289 +test util-16.1.17.290 {8.4 compatible formatting of doubles} \ + {expr 1e290} \ + 1.0000000000000001e+290 +test util-16.1.17.291 {8.4 compatible formatting of doubles} \ + {expr 1e291} \ + 9.9999999999999996e+290 +test util-16.1.17.292 {8.4 compatible formatting of doubles} \ + {expr 1e292} \ + 1e+292 +test util-16.1.17.293 {8.4 compatible formatting of doubles} \ + {expr 1e293} \ + 9.9999999999999992e+292 +test util-16.1.17.294 {8.4 compatible formatting of doubles} \ + {expr 1e294} \ + 1.0000000000000001e+294 +test util-16.1.17.295 {8.4 compatible formatting of doubles} \ + {expr 1e295} \ + 9.9999999999999998e+294 +test util-16.1.17.296 {8.4 compatible formatting of doubles} \ + {expr 1e296} \ + 9.9999999999999998e+295 +test util-16.1.17.297 {8.4 compatible formatting of doubles} \ + {expr 1e297} \ + 1e+297 +test util-16.1.17.298 {8.4 compatible formatting of doubles} \ + {expr 1e298} \ + 9.9999999999999996e+297 +test util-16.1.17.299 {8.4 compatible formatting of doubles} \ + {expr 1e299} \ + 1.0000000000000001e+299 +test util-16.1.17.300 {8.4 compatible formatting of doubles} \ + {expr 1e300} \ + 1.0000000000000001e+300 +test util-16.1.17.301 {8.4 compatible formatting of doubles} \ + {expr 1e301} \ + 1.0000000000000001e+301 +test util-16.1.17.302 {8.4 compatible formatting of doubles} \ + {expr 1e302} \ + 1.0000000000000001e+302 +test util-16.1.17.303 {8.4 compatible formatting of doubles} \ + {expr 1e303} \ + 1e+303 +test util-16.1.17.304 {8.4 compatible formatting of doubles} \ + {expr 1e304} \ + 9.9999999999999994e+303 +test util-16.1.17.305 {8.4 compatible formatting of doubles} \ + {expr 1e305} \ + 9.9999999999999994e+304 +test util-16.1.17.306 {8.4 compatible formatting of doubles} \ + {expr 1e306} \ + 1e+306 +test util-16.1.17.307 {8.4 compatible formatting of doubles} \ + {expr 1e307} \ + 9.9999999999999999e+306 + +test util-17.1 {bankers' rounding [Bug 3349507]} {ieeeFloatingPoint} { + set r {} + foreach {input} { + 0x1ffffffffffffc000 + 0x1ffffffffffffc800 + 0x1ffffffffffffd000 + 0x1ffffffffffffd800 + 0x1ffffffffffffe000 + 0x1ffffffffffffe800 + 0x1fffffffffffff000 + 0x1fffffffffffff800 + } { + binary scan [binary format q [expr double($input)]] wu x + lappend r [format %#llx $x] + binary scan [binary format q [expr double(-$input)]] wu x + lappend r [format %#llx $x] + } + set r +} [list {*}{ + 0x43fffffffffffffc 0xc3fffffffffffffc + 0x43fffffffffffffc 0xc3fffffffffffffc + 0x43fffffffffffffd 0xc3fffffffffffffd + 0x43fffffffffffffe 0xc3fffffffffffffe + 0x43fffffffffffffe 0xc3fffffffffffffe + 0x43fffffffffffffe 0xc3fffffffffffffe + 0x43ffffffffffffff 0xc3ffffffffffffff + 0x4400000000000000 0xc400000000000000 +}] + +set ::tcl_precision $saved_precision # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/var.test b/tests/var.test index af3d22c..45b7207 100644 --- a/tests/var.test +++ b/tests/var.test @@ -19,6 +19,10 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } +testConstraint testupvar [llength [info commands testupvar]] +testConstraint testgetvarfullname [llength [info commands testgetvarfullname]] +testConstraint testsetnoerr [llength [info commands testsetnoerr]] + catch {rename p ""} catch {namespace delete test_ns_var} catch {unset xx} @@ -27,7 +31,7 @@ catch {unset y} catch {unset i} catch {unset a} catch {unset arr} - + test var-1.1 {TclLookupVar, Array handling} { catch {unset a} set x "incr" ;# force no compilation and runtime call to Tcl_IncrCmd @@ -199,30 +203,28 @@ test var-3.2 {MakeUpvar, other var has TCL_NAMESPACE_ONLY specified} { p } } {1998} -if {[info commands testupvar] != {}} { - test var-3.3 {MakeUpvar, my var has TCL_GLOBAL_ONLY specified} { - catch {unset a} - set a 123321 - proc p {} { - # create global xx linked to global a - testupvar 1 a {} xx global +test var-3.3 {MakeUpvar, my var has TCL_GLOBAL_ONLY specified} testupvar { + catch {unset a} + set a 123321 + proc p {} { + # create global xx linked to global a + testupvar 1 a {} xx global + } + list [p] $xx [set xx 789] $a +} {{} 123321 789 789} +test var-3.4 {MakeUpvar, my var has TCL_NAMESPACE_ONLY specified} testupvar { + catch {unset a} + set a 456 + namespace eval test_ns_var { + catch {unset ::test_ns_var::vv} + proc p {} { + # create namespace var vv linked to global a + testupvar 1 a {} vv namespace } - list [p] $xx [set xx 789] $a - } {{} 123321 789 789} - test var-3.4 {MakeUpvar, my var has TCL_NAMESPACE_ONLY specified} { - catch {unset a} - set a 456 - namespace eval test_ns_var { - catch {unset ::test_ns_var::vv} - proc p {} { - # create namespace var vv linked to global a - testupvar 1 a {} vv namespace - } - p - } - list $test_ns_var::vv [set test_ns_var::vv 123] $a - } {456 123 123} -} + p + } + list $test_ns_var::vv [set test_ns_var::vv 123] $a +} {456 123 123} test var-3.5 {MakeUpvar, no call frame so my var will be in global :: ns} { catch {unset aaaaa} catch {unset xxxxx} @@ -269,25 +271,28 @@ test var-3.10 {MakeUpvar, } { set msg } } {1 1} +test var-3.11 {MakeUpvar, my var looks like array elem} -body { + catch {unset aaaaa} + set aaaaa 789789 + upvar #0 aaaaa foo(bar) +} -returnCodes 1 -result {bad variable name "foo(bar)": upvar won't create a scalar variable that looks like an array element} -if {[info commands testgetvarfullname] != {}} { - test var-4.1 {Tcl_GetVariableName, global variable} { - catch {unset a} - set a 123 - testgetvarfullname a global - } ::a - test var-4.2 {Tcl_GetVariableName, namespace variable} { - namespace eval test_ns_var { - variable george - testgetvarfullname george namespace - } - } ::test_ns_var::george - test var-4.3 {Tcl_GetVariableName, variable can't be array element} { - catch {unset a} - set a(1) foo - list [catch {testgetvarfullname a(1) global} msg] $msg - } {1 {unknown variable "a(1)"}} -} +test var-4.1 {Tcl_GetVariableName, global variable} testgetvarfullname { + catch {unset a} + set a 123 + testgetvarfullname a global +} ::a +test var-4.2 {Tcl_GetVariableName, namespace variable} testgetvarfullname { + namespace eval test_ns_var { + variable george + testgetvarfullname george namespace + } +} ::test_ns_var::george +test var-4.3 {Tcl_GetVariableName, variable can't be array element} testgetvarfullname { + catch {unset a} + set a(1) foo + list [catch {testgetvarfullname a(1) global} msg] $msg +} {1 {unknown variable "a(1)"}} test var-5.1 {Tcl_GetVariableFullName, global variable} { catch {unset a} @@ -519,11 +524,23 @@ test var-8.1 {TclDeleteVars, "unset" traces are called with fully-qualified var list [unset test_ns_var::v] $test_ns_var::info } {{} {test_ns_var::v {} u}} -if {[info commands testsetnoerr] == {}} { - puts "This application hasn't been compiled with the \"testsetnoerr\"" - puts "command, so I can't test TclSetVar etc." -} else { -test var-9.1 {behaviour of TclGet/SetVar simple get/set} { +test var-8.2 {TclDeleteNamespaceVars, "unset" traces on ns delete are called with fully-qualified var names} { + catch {namespace delete test_ns_var} + catch {unset a} + set info "" + namespace eval test_ns_var { + variable v 123 1 + trace var v u ::traceUnset + } + + proc traceUnset {name1 name2 op} { + set ::info [concat $::info [list $name1 $name2 $op]] + } + + list [namespace delete test_ns_var] $::info +} {{} {::test_ns_var::v {} u}} + +test var-9.1 {behaviour of TclGet/SetVar simple get/set} testsetnoerr { catch {unset u}; catch {unset v} list \ [set u a; testsetnoerr u] \ @@ -531,7 +548,7 @@ test var-9.1 {behaviour of TclGet/SetVar simple get/set} { [testseterr u] \ [unset v; testseterr v b] } [list {before get a} {before set b} {before get a} {before set b}] -test var-9.2 {behaviour of TclGet/SetVar namespace get/set} { +test var-9.2 {behaviour of TclGet/SetVar namespace get/set} testsetnoerr { catch {namespace delete ns} namespace eval ns {variable u a; variable v} list \ @@ -540,46 +557,46 @@ test var-9.2 {behaviour of TclGet/SetVar namespace get/set} { [testseterr ns::u] \ [unset ns::v; testseterr ns::v b] } [list {before get a} {before set b} {before get a} {before set b}] -test var-9.3 {behaviour of TclGetVar no variable} { +test var-9.3 {behaviour of TclGetVar no variable} testsetnoerr { catch {unset u} list \ [catch {testsetnoerr u} res] $res \ [catch {testseterr u} res] $res } {1 {before get} 1 {can't read "u": no such variable}} -test var-9.4 {behaviour of TclGetVar no namespace variable} { +test var-9.4 {behaviour of TclGetVar no namespace variable} testsetnoerr { catch {namespace delete ns} namespace eval ns {} list \ [catch {testsetnoerr ns::w} res] $res \ [catch {testseterr ns::w} res] $res } {1 {before get} 1 {can't read "ns::w": no such variable}} -test var-9.5 {behaviour of TclGetVar no namespace} { +test var-9.5 {behaviour of TclGetVar no namespace} testsetnoerr { catch {namespace delete ns} list \ [catch {testsetnoerr ns::u} res] $res \ [catch {testseterr ns::v} res] $res } {1 {before get} 1 {can't read "ns::v": no such variable}} -test var-9.6 {behaviour of TclSetVar no namespace} { +test var-9.6 {behaviour of TclSetVar no namespace} testsetnoerr { catch {namespace delete ns} list \ [catch {testsetnoerr ns::v 1} res] $res \ [catch {testseterr ns::v 1} res] $res } {1 {before set} 1 {can't set "ns::v": parent namespace doesn't exist}} -test var-9.7 {behaviour of TclGetVar array variable} { +test var-9.7 {behaviour of TclGetVar array variable} testsetnoerr { catch {unset arr} set arr(1) 1; list \ [catch {testsetnoerr arr} res] $res \ [catch {testseterr arr} res] $res } {1 {before get} 1 {can't read "arr": variable is array}} -test var-9.8 {behaviour of TclSetVar array variable} { +test var-9.8 {behaviour of TclSetVar array variable} testsetnoerr { catch {unset arr} set arr(1) 1 list \ [catch {testsetnoerr arr 2} res] $res \ [catch {testseterr arr 2} res] $res } {1 {before set} 1 {can't set "arr": variable is array}} -test var-9.9 {behaviour of TclGetVar read trace success} { +test var-9.9 {behaviour of TclGetVar read trace success} testsetnoerr { proc resetvar {val name elem op} {upvar 1 $name v; set v $val} catch {unset u}; catch {unset v} set u 10 @@ -589,7 +606,7 @@ test var-9.9 {behaviour of TclGetVar read trace success} { [testsetnoerr u] \ [testseterr v] } {{before get 1} {before get 2}} -test var-9.10 {behaviour of TclGetVar read trace error} { +test var-9.10 {behaviour of TclGetVar read trace error} testsetnoerr { proc writeonly args {error "write-only"} set v 456 trace var v r writeonly @@ -597,7 +614,7 @@ test var-9.10 {behaviour of TclGetVar read trace error} { [catch {testsetnoerr v} msg] $msg \ [catch {testseterr v} msg] $msg } {1 {before get} 1 {can't read "v": write-only}} -test var-9.11 {behaviour of TclSetVar write trace success} { +test var-9.11 {behaviour of TclSetVar write trace success} testsetnoerr { proc doubleval {name elem op} {upvar 1 $name v; set v [expr {2 * $v}]} catch {unset u}; catch {unset v} set v 1 @@ -607,7 +624,7 @@ test var-9.11 {behaviour of TclSetVar write trace success} { [testsetnoerr u 2] \ [testseterr v 3] } {{before set 4} {before set 6}} -test var-9.12 {behaviour of TclSetVar write trace error} { +test var-9.12 {behaviour of TclSetVar write trace error} testsetnoerr { proc readonly args {error "read-only"} set v 456 trace var v w readonly @@ -615,12 +632,11 @@ test var-9.12 {behaviour of TclSetVar write trace error} { [catch {testsetnoerr v 2} msg] $msg $v \ [catch {testseterr v 3} msg] $msg $v } {1 {before set} 2 1 {can't set "v": read-only} 3} -} + test var-10.1 {can't nest arrays with array set} { catch {unset arr} list [catch {array set arr(x) {a 1 b 2}} res] $res } {1 {can't set "arr(x)": variable isn't array}} - test var-10.2 {can't nest arrays with array set} { catch {unset arr} list [catch {array set arr(x) {}} res] $res @@ -677,6 +693,10 @@ test var-14.1 {array names syntax} -body { array names foo bar baz snafu } -returnCodes 1 -match glob -result * +test var-14.2 {array names -glob} -body { + array names tcl_platform -glob os +} -returnCodes 0 -match exact -result os + test var-15.1 {segfault in [unset], [Bug 735335]} { proc A { name } { upvar $name var @@ -691,25 +711,53 @@ test var-15.1 {segfault in [unset], [Bug 735335]} { namespace eval test unset useSomeUnlikelyNameHere } {} -test var-16.1 {CallVarTraces: save/restore interp error state: 1038021} { - trace add variable errorCode write { ;#} + +test var-16.1 {CallVarTraces: save/restore interp error state} { + trace add variable ::errorCode write " ;#" catch {error foo bar baz} - trace remove variable errorCode write { ;#} - set errorInfo + trace remove variable ::errorCode write " ;#" + set ::errorInfo } bar test var-17.1 {TclArraySet [Bug 1669489]} -setup { unset -nocomplain ::a } -body { namespace eval :: { - set elements {1 2 3 4} - trace add variable a write {string length $elements ;#} - array set a $elements + set elements {1 2 3 4} + trace add variable a write "string length \$elements ;#" + array set a $elements } } -cleanup { unset -nocomplain ::a ::elements } -result {} +test var-18.1 {array unset and unset traces: Bug 2939073} -setup { + set already 0 + unset x +} -body { + array set x {e 1 i 1} + trace add variable x unset {apply {args { + global already x + if {!$already} { + set already 1 + unset x(i) + } + }}} + # The next command would crash reliably with memory debugging prior to the + # bug fix. + array unset x * + array size x +} -cleanup { + unset x already +} -result 0 + + +test var-19.1 {crash when freeing locals hashtable: Bug 3037525} { + proc foo {} { catch {upvar 0 dummy \$index} } + foo ; # This crashes without the fix for the bug + rename foo {} +} {} + catch {namespace delete ns} catch {unset arr} catch {unset v} @@ -728,3 +776,7 @@ catch {unset aaaaa} # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/while-old.test b/tests/while-old.test index 980b9d4..ee17d0b 100644 --- a/tests/while-old.test +++ b/tests/while-old.test @@ -101,7 +101,7 @@ test while-old-4.5 {errors in while loops} { } {1 {expected boolean value but got "foo"}} test while-old-4.6 {errors in while loops} { set err [catch {while {1} {error "loop aborted"}} msg] - list $err $msg $errorInfo + list $err $msg $::errorInfo } {1 {loop aborted} {loop aborted while executing "error "loop aborted""}} @@ -117,15 +117,3 @@ test while-old-5.2 {while return result} { # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/while.test b/tests/while.test index bf86419..4ad966e 100644 --- a/tests/while.test +++ b/tests/while.test @@ -11,7 +11,7 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } @@ -24,14 +24,11 @@ test while-1.1 {TclCompileWhileCmd: missing test expression} { catch {while } msg set msg } {wrong # args: should be "while test command"} -test while-1.2 {TclCompileWhileCmd: error in test expression} { +test while-1.2 {TclCompileWhileCmd: error in test expression} -body { set i 0 catch {while {$i<} break} msg - set errorInfo -} {syntax error in expression "$i<": premature end of expression - ("while" test expression) - while compiling -"while {$i<} break"} + set ::errorInfo +} -match glob -result {*"while {$i<} break"} test while-1.3 {TclCompileWhileCmd: error in test expression} { set err [catch {while {"a"+"b"} {error "loop aborted"}} msg] list $err $msg @@ -64,16 +61,13 @@ test while-1.7 {TclCompileWhileCmd: missing command body} { catch {while {$i < 5} } msg set msg } {wrong # args: should be "while test command"} -test while-1.8 {TclCompileWhileCmd: error compiling command body} { +test while-1.8 {TclCompileWhileCmd: error compiling command body} -body { set i 0 catch {while {$i < 5} {set}} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling -"set" - ("while" body line 1) - while compiling -"while {$i < 5} {set}"} + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing +"set"*} test while-1.9 {TclCompileWhileCmd: simple command body} { set a {} set i 1 @@ -303,14 +297,12 @@ test while-4.2 {while (not compiled): missing test expression} { catch {$z } msg set msg } {wrong # args: should be "while test command"} -test while-4.3 {while (not compiled): error in test expression} { +test while-4.3 {while (not compiled): error in test expression} -body { set i 0 set z while catch {$z {$i<} {set x 1}} msg - set errorInfo -} {syntax error in expression "$i<": premature end of expression - while executing -"$z {$i<} {set x 1}"} + set ::errorInfo +} -match glob -result {*"$z {$i<} {set x 1}"} test while-4.4 {while (not compiled): error in test expression} { set z while set err [catch {$z {"a"+"b"} {error "loop aborted"}} msg] @@ -348,13 +340,13 @@ test while-4.8 {while (not compiled): missing command body} { catch {$z {$i < 5} } msg set msg } {wrong # args: should be "while test command"} -test while-4.9 {while (not compiled): error compiling command body} { +test while-4.9 {while (not compiled): error compiling command body} -body { set i 0 set z while catch {$z {$i < 5} {set}} msg - set errorInfo -} {wrong # args: should be "set varName ?newValue?" - while compiling + set ::errorInfo +} -match glob -result {wrong # args: should be "set varName ?newValue?" + while *ing "set" ("while" body line 1) invoked from within diff --git a/tests/winConsole.test b/tests/winConsole.test index a8a664c..fdde41c 100644 --- a/tests/winConsole.test +++ b/tests/winConsole.test @@ -15,9 +15,7 @@ if {[lsearch [namespace children] ::tcltest] == -1} { } -test winConsole-1.1 {Console file channel: non-blocking gets} \ - {pcOnly interactive} { - +test winConsole-1.1 {Console file channel: non-blocking gets} {win interactive} { set oldmode [fconfigure stdin] puts stdout "Enter abcdef<return> now: " nonewline @@ -37,7 +35,7 @@ test winConsole-1.1 {Console file channel: non-blocking gets} \ #cleanup the fileevent fileevent stdin readable {} - eval fconfigure stdin $oldmode + fconfigure stdin {*}$oldmode set result diff --git a/tests/winDde.test b/tests/winDde.test index 85fb5a6..f0ef56c 100644 --- a/tests/winDde.test +++ b/tests/winDde.test @@ -2,7 +2,7 @@ # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. +# generates output for errors. No output means no errors were found. # # Copyright (c) 1999 by Scriptics Corporation. # @@ -10,172 +10,432 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 + #tcltest::configure -verbose {pass start} namespace import -force ::tcltest::* } -if {$tcl_platform(platform) == "windows"} { - if [catch { - set lib [lindex [glob -directory [file join [pwd] [file dirname \ - [info nameofexecutable]]] tcldde*.dll] 0] - load $lib dde - }] { - puts "WARNING: Unable to find the dde package. Skipping dde tests." - ::tcltest::cleanupTests - return +testConstraint dde 0 +if {[testConstraint win]} { + if {![catch { + ::tcltest::loadTestedCommands + package require dde + set ::ddelib [lindex [package ifneeded dde 1.3.3] 1]}]} { + testConstraint dde 1 } } -set scriptName script1.tcl -proc createChildProcess { ddeServerName } { +# ------------------------------------------------------------------------- +# Setup a script for a test server +# + +set scriptName [makeFile {} script1.tcl] + +proc createChildProcess {ddeServerName {handler {}}} { file delete -force $::scriptName set f [open $::scriptName w+] + puts $f [list set ddeServerName $ddeServerName] + puts $f [list load $::ddelib dde] puts $f { + # DDE child server - + # if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } - if [catch { - set lib [lindex [glob -directory \ - [file join [pwd] [file dirname [info nameofexecutable]]] \ - tcldde*.dll] 0] - load $lib dde - }] { - puts "Unable to find the dde package. Skipping dde tests." - ::tcltest::cleanupTests - return - } + + # If an error occurs during the tests, this process may end up not + # being closed down. To deal with this we create a 30s timeout. + proc ::DoTimeout {} { + global done ddeServerName + set done 1 + puts "winDde.test child process $ddeServerName timed out." + flush stdout + } + set timeout [after 30000 ::DoTimeout] + + # Define a restricted handler. + proc Handler1 {cmd} { + if {$cmd eq "stop"} {set ::done 1} + puts $cmd ; flush stdout + return + } + proc Handler2 {cmd} { + if {$cmd eq "stop"} {set ::done 1} + puts [uplevel \#0 $cmd] ; flush stdout + return + } + proc Handler3 {prefix cmd} { + if {$cmd eq "stop"} {set ::done 1} + puts [list $prefix $cmd] ; flush stdout + return + } } - puts $f [list dde servername $ddeServerName] + # set the dde server name to the supplied argument. + if {$handler == {}} { + puts $f [list dde servername $ddeServerName] + } else { + puts $f [list dde servername -handler $handler -- $ddeServerName] + } puts $f { - after 200 {set ready 1} - vwait ready + # run the server and handle final cleanup. + after 200;# give dde a chance to get going. puts ready + flush stdout vwait done - after 200 {set final 1} - vwait final + # allow enough time for the calling process to + # claim all results, to avoid spurious "server did + # not respond" + after 200 { set reallyDone 1 } + vwait reallyDone exit } close $f + # run the child server script. set f [open |[list [interpreter] $::scriptName] r] - fconfigure $f -buffering line -blocking 1 - gets $f + fconfigure $f -buffering line + gets $f line return $f } -test winDde-1.1 {Settings the server's topic name} {pcOnly} { +# ------------------------------------------------------------------------- + +test winDde-1.1 {Settings the server's topic name} {win dde} { list [dde servername foobar] [dde servername] [dde servername self] } {foobar foobar self} -test winDde-2.1 {Checking for other services} {pcOnly} { +test winDde-2.1 {Checking for other services} {win dde} { expr [llength [dde services {} {}]] >= 0 } 1 - test winDde-2.2 {Checking for existence, with service and topic specified} \ - {pcOnly} { + {win dde} { llength [dde services TclEval self] } 1 - test winDde-2.3 {Checking for existence, with only the service specified} \ - {pcOnly} { + {win dde} { expr [llength [dde services TclEval {}]] >= 1 } 1 +test winDde-2.4 {Checking for existence, with only the topic specified} \ + {win dde} { + expr [llength [dde services {} self]] >= 1 +} 1 + +# ------------------------------------------------------------------------- -test winDde-3.1 {DDE execute locally} {pcOnly} { +test winDde-3.1 {DDE execute locally} {win dde} { set a "" dde execute TclEval self {set a "foo"} set a } foo - -test winDde-3.2 {DDE execute -async locally} {pcOnly} { +test winDde-3.2 {DDE execute -async locally} {win dde} { set a "" dde execute -async TclEval self {set a "foo"} update set a } foo - -test winDde-3.3 {DDE request locally} {pcOnly} { +test winDde-3.3 {DDE request locally} {win dde} { set a "" dde execute TclEval self {set a "foo"} dde request TclEval self a } foo - -test winDde-3.4 {DDE eval locally} {pcOnly} { +test winDde-3.4 {DDE eval locally} {win dde} { set a "" dde eval self set a "foo" } foo - -test winDde-3.5 {DDE request locally} {pcOnly} { +test winDde-3.5 {DDE request locally} {win dde} { set a "" dde execute TclEval self {set a "foo"} dde request -binary TclEval self a } "foo\x00" -test winDde-4.1 {DDE execute remotely} {stdio pcOnly} { - list [catch { - set a "" - set child [createChildProcess child] - dde execute TclEval child {set a "foo"} - dde execute TclEval child {set done 1} - set a - } err] $err -} [list 0 ""] - -test winDde-4.2 {DDE execute remotely} {stdio pcOnly} { - list [catch { - set a "" - set child [createChildProcess child] - dde execute -async TclEval child {set a "foo"} - after 400 {set ::_dde_forever 1} ; vwait ::_dde_forever; #update - dde execute TclEval child {set done 1} - set a - } err] $err -} [list 0 ""] - -test winDde-4.3 {DDE request locally} {stdio pcOnly} { - list [catch { - set a "" - set child [createChildProcess child] - dde execute TclEval child {set a "foo"} - set a [dde request TclEval child a] - dde execute TclEval child {set done 1} - set a - } err] $err -} [list 0 foo] - -test winDde-4.4 {DDE eval locally} {stdio pcOnly} { - list [catch { - set a "" - set child [createChildProcess child] - set a [dde eval child set a "foo"] - dde execute TclEval child {set done 1} - set a - } err] $err -} [list 0 foo] - -test winDde-5.1 {check for bad arguments} {pcOnly} { - catch {dde execute "" "" "" ""} result - set result -} {wrong # args: should be "dde execute ?-async? serviceName topicName value"} - -test winDde-5.2 {check for bad arguments} {pcOnly} { - catch {dde execute "" "" ""} result - set result -} {cannot execute null data} - -test winDde-5.3 {check for bad arguments} {pcOnly} { - catch {dde execute -foo "" "" ""} result - set result -} {wrong # args: should be "dde execute ?-async? serviceName topicName value"} - -test winDde-5.4 {DDE eval bad arguments} {pcOnly} { - list [catch {dde eval "" "foo"} msg] $msg -} {1 {invalid service name ""}} +# ------------------------------------------------------------------------- + +test winDde-4.1 {DDE execute remotely} {stdio win dde} { + set a "" + set name child-4.1 + set child [createChildProcess $name] + dde execute TclEval $name {set a "foo"} + dde execute TclEval $name {set done 1} + update + set a +} "" +test winDde-4.2 {DDE execute async remotely} {stdio win dde} { + set a "" + set name child-4.2 + set child [createChildProcess $name] + dde execute -async TclEval $name {set a "foo"} + update + dde execute TclEval $name {set done 1} + update + set a +} "" +test winDde-4.3 {DDE request remotely} {stdio win dde} { + set a "" + set name chile-4.3 + set child [createChildProcess $name] + dde execute TclEval $name {set a "foo"} + set a [dde request TclEval $name a] + dde execute TclEval $name {set done 1} + update + set a +} foo +test winDde-4.4 {DDE eval remotely} {stdio win dde} { + set a "" + set name child-4.4 + set child [createChildProcess $name] + set a [dde eval $name set a "foo"] + dde execute TclEval $name {set done 1} + update + set a +} foo + +# ------------------------------------------------------------------------- + +test winDde-5.1 {check for bad arguments} -constraints {win dde} -body { + dde execute "" "" "" "" +} -returnCodes error -result {wrong # args: should be "dde execute ?-async? serviceName topicName value"} +test winDde-5.2 {check for bad arguments} -constraints {win dde} -body { + dde execute "" "" "" +} -returnCodes error -result {cannot execute null data} +test winDde-5.3 {check for bad arguments} -constraints {win dde} -body { + dde execute -foo "" "" "" +} -returnCodes error -result {wrong # args: should be "dde execute ?-async? serviceName topicName value"} +test winDde-5.4 {DDE eval bad arguments} -constraints {win dde} -body { + dde eval "" "foo" +} -returnCodes error -result {invalid service name ""} + +# ------------------------------------------------------------------------- + +test winDde-6.1 {DDE servername bad arguments} -constraints {win dde} -body { + dde servername -z -z -z +} -returnCodes error -result {bad option "-z": must be -force, -handler, or --} +test winDde-6.2 {DDE servername set name} -constraints {win dde} -body { + dde servername -- winDde-6.2 +} -result {winDde-6.2} +test winDde-6.3 {DDE servername set exact name} -constraints {win dde} -body { + dde servername -force winDde-6.3 +} -result {winDde-6.3} +test winDde-6.4 {DDE servername set exact name} -constraints {win dde} -body { + dde servername -force -- winDde-6.4 +} -result {winDde-6.4} +test winDde-6.5 {DDE remote servername collision} -constraints {stdio win dde} -setup { + set name child-6.5 + set child [createChildProcess $name] +} -body { + dde servername -- $name +} -cleanup { + dde execute TclEval $name {set done 1} + update +} -result "child-6.5 #2" +test winDde-6.6 {DDE remote servername collision force} -constraints {stdio win dde} -setup { + set name child-6.6 + set child [createChildProcess $name] +} -body { + dde servername -force -- $name +} -cleanup { + dde execute TclEval $name {set done 1} + update +} -result {child-6.6} + +# ------------------------------------------------------------------------- + +test winDde-7.1 {Load DDE in slave interpreter } -constraints {win dde} -setup { + interp create slave +} -body { + slave eval [list load $::ddelib Dde] + slave eval [list dde servername -- dde-interp-7.1] +} -cleanup { + interp delete slave +} -result {dde-interp-7.1} +test winDde-7.2 {DDE slave cleanup} -constraints {win dde} -setup { + interp create slave + slave eval [list load $::ddelib Dde] + slave eval [list dde servername -- dde-interp-7.5] + interp delete slave +} -body { + dde services TclEval {} + set s [dde services TclEval {}] + set m [list [list TclEval dde-interp-7.5]] + if {[lsearch -exact $s $m] != -1} { + set s + } +} -result {} +test winDde-7.3 {DDE present in slave interp} -constraints {win dde} -setup { + interp create slave + slave eval [list load $::ddelib Dde] + slave eval [list dde servername -- dde-interp-7.3] +} -body { + dde services TclEval dde-interp-7.3 +} -cleanup { + interp delete slave +} -result {{TclEval dde-interp-7.3}} +test winDde-7.4 {interp name collision with -force} -constraints {win dde} -setup { + interp create slave + slave eval [list load $::ddelib Dde] + slave eval [list dde servername -- dde-interp-7.4] +} -body { + dde servername -force -- dde-interp-7.4 +} -cleanup { + interp delete slave +} -result {dde-interp-7.4} +test winDde-7.5 {interp name collision without -force} -constraints {win dde} -setup { + interp create slave + slave eval [list load $::ddelib Dde] + slave eval [list dde servername -- dde-interp-7.5] +} -body { + dde servername -- dde-interp-7.5 +} -cleanup { + interp delete slave +} -result "dde-interp-7.5 #2" + +# ------------------------------------------------------------------------- + +test winDde-8.1 {Safe DDE load} -constraints {win dde} -setup { + interp create -safe slave + slave invokehidden load $::ddelib Dde +} -body { + slave eval dde servername slave +} -cleanup { + interp delete slave +} -returnCodes error -result {invalid command name "dde"} +test winDde-8.2 {Safe DDE set servername} -constraints {win dde} -setup { + interp create -safe slave + slave invokehidden load $::ddelib Dde +} -body { + slave invokehidden dde servername slave +} -cleanup {interp delete slave} -result {slave} +test winDde-8.3 {Safe DDE check handler required for eval} -constraints {win dde} -setup { + interp create -safe slave + slave invokehidden load $::ddelib Dde + slave invokehidden dde servername slave +} -body { + catch {dde eval slave set a 1} msg +} -cleanup {interp delete slave} -result {1} +test winDde-8.4 {Safe DDE check that execute is denied} -constraints {win dde} -setup { + interp create -safe slave + slave invokehidden load $::ddelib Dde + slave invokehidden dde servername slave +} -body { + slave eval set a 1 + dde execute TclEval slave {set a 2} + slave eval set a +} -cleanup {interp delete slave} -result 1 +test winDde-8.5 {Safe DDE check that request is denied} -constraints {win dde} -setup { + interp create -safe slave + slave invokehidden load $::ddelib Dde + slave invokehidden dde servername slave +} -body { + slave eval set a 1 + dde request TclEval slave a +} -cleanup { + interp delete slave +} -returnCodes error -result {remote server cannot handle this command} +test winDde-8.6 {Safe DDE assign handler procedure} -constraints {win dde} -setup { + interp create -safe slave + slave invokehidden load $::ddelib Dde + slave eval {proc DDEACCEPT {cmd} {set ::DDECMD $cmd}} +} -body { + slave invokehidden dde servername -handler DDEACCEPT slave +} -cleanup {interp delete slave} -result slave +test winDde-8.7 {Safe DDE check simple command} -constraints {win dde} -setup { + interp create -safe slave + slave invokehidden load $::ddelib Dde + slave eval {proc DDEACCEPT {cmd} {set ::DDECMD $cmd}} + slave invokehidden dde servername -handler DDEACCEPT slave +} -body { + dde eval slave set x 1 +} -cleanup {interp delete slave} -result {set x 1} +test winDde-8.8 {Safe DDE check non-list command} -constraints {win dde} -setup { + interp create -safe slave + slave invokehidden load $::ddelib Dde + slave eval {proc DDEACCEPT {cmd} {set ::DDECMD $cmd}} + slave invokehidden dde servername -handler DDEACCEPT slave +} -body { + set s "c:\\Program Files\\Microsoft Visual Studio\\" + dde eval slave $s + string equal [slave eval set DDECMD] $s +} -cleanup {interp delete slave} -result 1 +test winDde-8.9 {Safe DDE check command evaluation} -constraints {win dde} -setup { + interp create -safe slave + slave invokehidden load $::ddelib Dde + slave eval {proc DDEACCEPT {cmd} {set ::DDECMD [uplevel \#0 $cmd]}} + slave invokehidden dde servername -handler DDEACCEPT slave +} -body { + dde eval slave set x 1 + slave eval set x +} -cleanup {interp delete slave} -result 1 +test winDde-8.10 {Safe DDE check command evaluation (2)} -constraints {win dde} -setup { + interp create -safe slave + slave invokehidden load $::ddelib Dde + slave eval {proc DDEACCEPT {cmd} {set ::DDECMD [uplevel \#0 $cmd]}} + slave invokehidden dde servername -handler DDEACCEPT slave +} -body { + dde eval slave [list set x 1] + slave eval set x +} -cleanup {interp delete slave} -result 1 +test winDde-8.11 {Safe DDE check command evaluation (3)} -constraints {win dde} -setup { + interp create -safe slave + slave invokehidden load $::ddelib Dde + slave eval {proc DDEACCEPT {cmd} {set ::DDECMD [uplevel \#0 $cmd]}} + slave invokehidden dde servername -handler DDEACCEPT slave +} -body { + dde eval slave [list [list set x 1]] + slave eval set x +} -cleanup {interp delete slave} -returnCodes error -result {invalid command name "set x 1"} + +# ------------------------------------------------------------------------- + +test winDde-9.1 {External safe DDE check string passing} -constraints {win dde stdio} -setup { + set name child-9.1 + set child [createChildProcess $name Handler1] + file copy -force script1.tcl dde-script.tcl +} -body { + dde eval $name set x 1 + gets $child line + set line +} -cleanup { + dde execute TclEval $name stop + update + file delete -force -- dde-script.tcl +} -result {set x 1} +test winDde-9.2 {External safe DDE check command evaluation} -constraints {win dde stdio} -setup { + set name child-9.2 + set child [createChildProcess $name Handler2] + file copy -force script1.tcl dde-script.tcl +} -body { + dde eval $name set x 1 + gets $child line + set line +} -cleanup { + dde execute TclEval $name stop + update + file delete -force -- dde-script.tcl +} -result 1 +test winDde-9.3 {External safe DDE check prefixed arguments} -constraints {win dde stdio} -setup { + set name child-9.3 + set child [createChildProcess $name [list Handler3 ARG]] + file copy -force script1.tcl dde-script.tcl +} -body { + dde eval $name set x 1 + gets $child line + set line +} -cleanup { + dde execute TclEval $name stop + update + file delete -force -- dde-script.tcl +} -result {ARG {set x 1}} + +# ------------------------------------------------------------------------- #cleanup +#catch {interp delete $slave}; # ensure we clean up the slave. file delete -force $::scriptName ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: diff --git a/tests/winFCmd.test b/tests/winFCmd.test index 34a9b16..ef1c4e7 100644 --- a/tests/winFCmd.test +++ b/tests/winFCmd.test @@ -15,14 +15,8 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -::tcltest::loadTestedCommands -catch [list package require -exact Tcltest [info patchlevel]] - # Initialise the test constraints -testConstraint winVista 0 -testConstraint win2000orXP 0 -testConstraint winOlderThan2000 0 testConstraint testvolumetype [llength [info commands testvolumetype]] testConstraint testfile [llength [info commands testfile]] testConstraint testchmod [llength [info commands testchmod]] @@ -51,42 +45,20 @@ proc cleanup {args} { set x [glob -directory $p tf* td*] } if {$x != ""} { - catch {eval file delete -force -- $x} - } - } -} - -if {[testConstraint winOnly]} { - set major [string index $tcl_platform(osVersion) 0] - if {[testConstraint nt] && $major > 4} { - if {$major > 5} { - testConstraint winVista 1 - } elseif {$major == 5} { - testConstraint win2000orXP 1 + catch {file delete -force -- {*}$x} } - } else { - testConstraint winOlderThan2000 1 } } # find a CD-ROM so we can test read-only filesystems. -set cdrom {} -if { [info commands ::testvolumetype] ne {} } { - foreach p {d e f g h i j k l m n o p q r s t u v w x y z} { - if { ! [catch { testvolumetype ${p}: } result] && $result eq {CDFS} } { - set cdrom ${p}: - } - } -} - proc findfile {dir} { - foreach p [glob $dir/*] { + foreach p [glob -directory $dir *] { if {[file type $p] == "file"} { return $p } } - foreach p [glob $dir/*] { + foreach p [glob -directory $dir *] { if {[file type $p] == "directory"} { set f [findfile $p] if {$f != ""} { @@ -97,26 +69,30 @@ proc findfile {dir} { return "" } -if {$cdrom != ""} { - set ::tcltest::testConstraints(cdrom) 1 - set cdfile [findfile $cdrom] +if {[testConstraint testvolumetype]} { + foreach p {d e f g h i j k l m n o p q r s t u v w x y z} { + if {![catch {testvolumetype ${p}:} result] && $result eq "CDFS"} { + set cdrom ${p}: + set cdfile [findfile $cdrom] + testConstraint cdrom 1 + break + } + } } +# NB: filename is chosen to be short but unlikely to clash with other apps if {[file exists c:/] && [file exists d:/]} { - catch {file delete d:/tf1} - if {[catch {close [open d:/tf1 w]}] == 0} { - file delete d:/tf1 - set ::tcltest::testConstraints(exdev) 1 + catch {file delete d:/TclTmpF.1} + if {[catch {close [open d:/TclTmpF.1 w]}] == 0} { + file delete d:/TclTmpF.1 + testConstraint exdev 1 } } file delete -force -- td1 -set foo [catch {open td1 w} testfile] -if {$foo} { - set ::tcltest::testConstraints(longFileNames) 0 -} else { +if {![catch {open td1 w} testfile]} { close $testfile - set ::tcltest::testConstraints(longFileNames) 1 + testConstraint longFileNames 1 file delete -force -- td1 } @@ -136,64 +112,64 @@ append longname $longname # it can be difficult to actually forward "insane" arguments to the # low-level posix emulation layer. -test winFCmd-1.1 {TclpRenameFile: errno: EACCES} {pcOnly cdrom} { +test winFCmd-1.1 {TclpRenameFile: errno: EACCES} {win cdrom testfile} { list [catch {testfile mv $cdfile $cdrom/dummy~~.fil} msg] $msg } {1 EACCES} -test winFCmd-1.2 {TclpRenameFile: errno: EEXIST} {pcOnly} { +test winFCmd-1.2 {TclpRenameFile: errno: EEXIST} {win testfile} { cleanup file mkdir td1/td2/td3 file mkdir td2 list [catch {testfile mv td2 td1/td2} msg] $msg } {1 EEXIST} -test winFCmd-1.3 {TclpRenameFile: errno: EINVAL} {pcOnly} { +test winFCmd-1.3 {TclpRenameFile: errno: EINVAL} {win testfile} { cleanup list [catch {testfile mv / td1} msg] $msg } {1 EINVAL} -test winFCmd-1.4 {TclpRenameFile: errno: EINVAL} {pcOnly} { +test winFCmd-1.4 {TclpRenameFile: errno: EINVAL} {win testfile} { cleanup file mkdir td1 list [catch {testfile mv td1 td1/td2} msg] $msg } {1 EINVAL} -test winFCmd-1.5 {TclpRenameFile: errno: EISDIR} {pcOnly} { +test winFCmd-1.5 {TclpRenameFile: errno: EISDIR} {win testfile} { cleanup file mkdir td1 createfile tf1 list [catch {testfile mv tf1 td1} msg] $msg } {1 EISDIR} -test winFCmd-1.6 {TclpRenameFile: errno: ENOENT} {pcOnly} { +test winFCmd-1.6 {TclpRenameFile: errno: ENOENT} {win testfile} { cleanup list [catch {testfile mv tf1 tf2} msg] $msg } {1 ENOENT} -test winFCmd-1.7 {TclpRenameFile: errno: ENOENT} {pcOnly} { +test winFCmd-1.7 {TclpRenameFile: errno: ENOENT} {win testfile} { cleanup list [catch {testfile mv "" tf2} msg] $msg } {1 ENOENT} -test winFCmd-1.8 {TclpRenameFile: errno: ENOENT} {pcOnly} { +test winFCmd-1.8 {TclpRenameFile: errno: ENOENT} {win testfile} { cleanup createfile tf1 list [catch {testfile mv tf1 ""} msg] $msg } {1 ENOENT} -test winFCmd-1.9 {TclpRenameFile: errno: ENOTDIR} {pcOnly} { +test winFCmd-1.9 {TclpRenameFile: errno: ENOTDIR} {win testfile} { cleanup file mkdir td1 createfile tf1 list [catch {testfile mv td1 tf1} msg] $msg } {1 ENOTDIR} -test winFCmd-1.10 {TclpRenameFile: errno: EXDEV} {pcOnly exdev} { +test winFCmd-1.10 {TclpRenameFile: errno: EXDEV} {win exdev testfile} { file delete -force d:/tf1 file mkdir c:/tf1 set msg [list [catch {testfile mv c:/tf1 d:/tf1} msg] $msg] file delete -force c:/tf1 set msg } {1 EXDEV} -test winFCmd-1.11 {TclpRenameFile: errno: EACCES} {pcOnly} { +test winFCmd-1.11 {TclpRenameFile: errno: EACCES} {win testfile} { cleanup set fd [open tf1 w] set msg [list [catch {testfile mv tf1 tf2} msg] $msg] close $fd set msg } {1 EACCES} -test winFCmd-1.12 {TclpRenameFile: errno: EACCES} {pcOnly} { +test winFCmd-1.12 {TclpRenameFile: errno: EACCES} {win testfile} { cleanup createfile tf1 set fd [open tf2 w] @@ -201,113 +177,105 @@ test winFCmd-1.12 {TclpRenameFile: errno: EACCES} {pcOnly} { close $fd set msg } {1 EACCES} -test winFCmd-1.13 {TclpRenameFile: errno: EACCES} {pcOnly win2000orXP} { - cleanup - list [catch {testfile mv nul tf1} msg] $msg -} {1 EINVAL} -test winFCmd-1.13.1 {TclpRenameFile: errno: EACCES} {pcOnly winOlderThan2000} { +test winFCmd-1.13 {TclpRenameFile: errno: EINVAL|EACCES|ENOENT} -constraints {win testfile} -body { cleanup list [catch {testfile mv nul tf1} msg] $msg -} {1 EACCES} -test winFCmd-1.14 {TclpRenameFile: errno: EACCES} {pcOnly 95} { +} -match regexp -result {1 (EINVAL|EACCES|ENOENT)} +test winFCmd-1.14 {TclpRenameFile: errno: EACCES} {win 95 testfile} { cleanup createfile tf1 list [catch {testfile mv tf1 nul} msg] $msg } {1 EACCES} -test winFCmd-1.15 {TclpRenameFile: errno: EEXIST} {pcOnly nt} { +test winFCmd-1.15 {TclpRenameFile: errno: EEXIST} {win nt testfile} { cleanup createfile tf1 list [catch {testfile mv tf1 nul} msg] $msg } {1 EEXIST} -test winFCmd-1.16 {TclpRenameFile: MoveFile() != FALSE} {pcOnly} { +test winFCmd-1.16 {TclpRenameFile: MoveFile() != FALSE} {win testfile} { cleanup createfile tf1 tf1 testfile mv tf1 tf2 list [file exists tf1] [contents tf2] } {0 tf1} -test winFCmd-1.17 {TclpRenameFile: MoveFile() == FALSE} {pcOnly} { +test winFCmd-1.17 {TclpRenameFile: MoveFile() == FALSE} {win testfile} { cleanup list [catch {testfile mv tf1 tf2} msg] $msg } {1 ENOENT} -test winFCmd-1.18 {TclpRenameFile: srcAttr == -1} {pcOnly} { +test winFCmd-1.18 {TclpRenameFile: srcAttr == -1} {win testfile} { cleanup list [catch {testfile mv tf1 tf2} msg] $msg } {1 ENOENT} -test winFCmd-1.19 {TclpRenameFile: errno == EACCES} {pcOnly win2000orXP} { +test winFCmd-1.19 {TclpRenameFile: errno == EINVAL|EACCES|ENOENT} -constraints {win testfile} -body { cleanup list [catch {testfile mv nul tf1} msg] $msg -} {1 EINVAL} -test winFCmd-1.19.1 {TclpRenameFile: errno == EACCES} {pcOnly winOlderThan2000} { - cleanup - list [catch {testfile mv nul tf1} msg] $msg -} {1 EACCES} -test winFCmd-1.20 {TclpRenameFile: src is dir} {pcOnly nt} { +} -match regexp -result {1 (EINVAL|EACCES|ENOENT)} +test winFCmd-1.20 {TclpRenameFile: src is dir} {win nt testfile} { # under 95, this would actually succeed and move the current dir out from # under the current process! cleanup file delete /tf1 list [catch {testfile mv [pwd] /tf1} msg] $msg } {1 EACCES} -test winFCmd-1.21 {TclpRenameFile: long src} {pcOnly} { +test winFCmd-1.21 {TclpRenameFile: long src} {win testfile} { cleanup list [catch {testfile mv $longname tf1} msg] $msg } {1 ENAMETOOLONG} -test winFCmd-1.22 {TclpRenameFile: long dst} {pcOnly} { +test winFCmd-1.22 {TclpRenameFile: long dst} {win testfile} { cleanup createfile tf1 list [catch {testfile mv tf1 $longname} msg] $msg } {1 ENAMETOOLONG} -test winFCmd-1.23 {TclpRenameFile: move dir into self} {pcOnly} { +test winFCmd-1.23 {TclpRenameFile: move dir into self} {win testfile} { cleanup file mkdir td1 list [catch {testfile mv [pwd]/td1 td1/td2} msg] $msg } {1 EINVAL} -test winFCmd-1.24 {TclpRenameFile: move a root dir} {pcOnly} { +test winFCmd-1.24 {TclpRenameFile: move a root dir} {win testfile} { cleanup list [catch {testfile mv / c:/} msg] $msg } {1 EINVAL} -test winFCmd-1.25 {TclpRenameFile: cross file systems} {pcOnly cdrom} { +test winFCmd-1.25 {TclpRenameFile: cross file systems} {win cdrom testfile} { cleanup file mkdir td1 list [catch {testfile mv td1 $cdrom/td1} msg] $msg } {1 EXDEV} -test winFCmd-1.26 {TclpRenameFile: readonly fs} {pcOnly cdrom} { +test winFCmd-1.26 {TclpRenameFile: readonly fs} {win cdrom testfile} { cleanup list [catch {testfile mv $cdfile $cdrom/dummy~~.fil} msg] $msg } {1 EACCES} -test winFCmd-1.27 {TclpRenameFile: open file} {pcOnly} { +test winFCmd-1.27 {TclpRenameFile: open file} {win testfile} { cleanup set fd [open tf1 w] set msg [list [catch {testfile mv tf1 tf2} msg] $msg] close $fd set msg } {1 EACCES} -test winFCmd-1.28 {TclpRenameFile: errno == EEXIST} {pcOnly} { +test winFCmd-1.28 {TclpRenameFile: errno == EEXIST} {win testfile} { cleanup createfile tf1 createfile tf2 testfile mv tf1 tf2 list [file exists tf1] [file exists tf2] } {0 1} -test winFCmd-1.29 {TclpRenameFile: src is dir} {pcOnly} { +test winFCmd-1.29 {TclpRenameFile: src is dir} {win testfile} { cleanup file mkdir td1 createfile tf1 list [catch {testfile mv td1 tf1} msg] $msg } {1 ENOTDIR} -test winFCmd-1.30 {TclpRenameFile: dst is dir} {pcOnly} { +test winFCmd-1.30 {TclpRenameFile: dst is dir} {win testfile} { cleanup file mkdir td1 file mkdir td2/td2 list [catch {testfile mv td1 td2} msg] $msg } {1 EEXIST} -test winFCmd-1.31 {TclpRenameFile: TclpRemoveDirectory fails} {pcOnly} { +test winFCmd-1.31 {TclpRenameFile: TclpRemoveDirectory fails} {win testfile} { cleanup file mkdir td1 file mkdir td2/td2 list [catch {testfile mv td1 td2} msg] $msg } {1 EEXIST} -test winFCmd-1.32 {TclpRenameFile: TclpRemoveDirectory succeeds} {pcOnly} { +test winFCmd-1.32 {TclpRenameFile: TclpRemoveDirectory succeeds} {win testfile} { cleanup file mkdir td1/td2 file mkdir td2 @@ -315,7 +283,7 @@ test winFCmd-1.32 {TclpRenameFile: TclpRemoveDirectory succeeds} {pcOnly} { list [file exists td1] [file exists td2] [file exists td2/td2] } {0 1 1} test winFCmd-1.33 {TclpRenameFile: After removing dst dir, MoveFile fails} \ - {pcOnly exdev} { + {win exdev testfile testchmod} { file mkdir d:/td1 testchmod 000 d:/td1 file mkdir c:/tf1 @@ -325,56 +293,56 @@ test winFCmd-1.33 {TclpRenameFile: After removing dst dir, MoveFile fails} \ file delete -force c:/tf1 set msg } {1 EXDEV 0} -test winFCmd-1.34 {TclpRenameFile: src is dir, dst is not} {pcOnly} { +test winFCmd-1.34 {TclpRenameFile: src is dir, dst is not} {win testfile} { file mkdir td1 createfile tf1 list [catch {testfile mv td1 tf1} msg] $msg } {1 ENOTDIR} -test winFCmd-1.35 {TclpRenameFile: src is not dir, dst is} {pcOnly} { +test winFCmd-1.35 {TclpRenameFile: src is not dir, dst is} {win testfile} { file mkdir td1 createfile tf1 list [catch {testfile mv tf1 td1} msg] $msg } {1 EISDIR} -test winFCmd-1.36 {TclpRenameFile: src and dst not dir} {pcOnly} { +test winFCmd-1.36 {TclpRenameFile: src and dst not dir} {win testfile} { createfile tf1 tf1 createfile tf2 tf2 testfile mv tf1 tf2 contents tf2 } {tf1} -test winFCmd-1.37 {TclpRenameFile: need to restore temp file} {pcOnly} { +test winFCmd-1.37 {TclpRenameFile: need to restore temp file} {win emptyTest} { # Can't figure out how to cause this. # Need a file that can't be copied. } {} -test winFCmd-2.1 {TclpCopyFile: errno: EACCES} {pcOnly cdrom} { +test winFCmd-2.1 {TclpCopyFile: errno: EACCES} {win cdrom testfile} { cleanup list [catch {testfile cp $cdfile $cdrom/dummy~~.fil} msg] $msg } {1 EACCES} -test winFCmd-2.2 {TclpCopyFile: errno: EISDIR} {pcOnly} { +test winFCmd-2.2 {TclpCopyFile: errno: EISDIR} {win testfile} { cleanup file mkdir td1 list [catch {testfile cp td1 tf1} msg] $msg } {1 EISDIR} -test winFCmd-2.3 {TclpCopyFile: errno: EISDIR} {pcOnly} { +test winFCmd-2.3 {TclpCopyFile: errno: EISDIR} {win testfile} { cleanup createfile tf1 file mkdir td1 list [catch {testfile cp tf1 td1} msg] $msg } {1 EISDIR} -test winFCmd-2.4 {TclpCopyFile: errno: ENOENT} {pcOnly} { +test winFCmd-2.4 {TclpCopyFile: errno: ENOENT} {win testfile} { cleanup list [catch {testfile cp tf1 tf2} msg] $msg } {1 ENOENT} -test winFCmd-2.5 {TclpCopyFile: errno: ENOENT} {pcOnly} { +test winFCmd-2.5 {TclpCopyFile: errno: ENOENT} {win testfile} { cleanup list [catch {testfile cp "" tf2} msg] $msg } {1 ENOENT} -test winFCmd-2.6 {TclpCopyFile: errno: ENOENT} {pcOnly} { +test winFCmd-2.6 {TclpCopyFile: errno: ENOENT} {win testfile} { cleanup createfile tf1 list [catch {testfile cp tf1 ""} msg] $msg } {1 ENOENT} -test winFCmd-2.7 {TclpCopyFile: errno: EACCES} {pcOnly 95} { +test winFCmd-2.7 {TclpCopyFile: errno: EACCES} {win 95 testfile} { cleanup createfile tf1 set fd [open tf2 w] @@ -382,61 +350,53 @@ test winFCmd-2.7 {TclpCopyFile: errno: EACCES} {pcOnly 95} { close $fd set msg } {1 EACCES} -test winFCmd-2.8 {TclpCopyFile: errno: EACCES} {pcOnly win2000orXP} { +test winFCmd-2.8 {TclpCopyFile: errno: EINVAL|EACCES|ENOENT} -constraints {win testfile} -body { cleanup list [catch {testfile cp nul tf1} msg] $msg -} {1 EINVAL} -test winFCmd-2.8.1 {TclpCopyFile: errno: EACCES} {pcOnly nt winOlderThan2000} { - cleanup - list [catch {testfile cp nul tf1} msg] $msg -} {1 EACCES} -test winFCmd-2.9 {TclpCopyFile: errno: ENOENT} {pcOnly 95} { - cleanup - list [catch {testfile cp nul tf1} msg] $msg -} {1 ENOENT} -test winFCmd-2.10 {TclpCopyFile: CopyFile succeeds} {pcOnly} { +} -match regexp -result {1 (EINVAL|EACCES|ENOENT)} +test winFCmd-2.10 {TclpCopyFile: CopyFile succeeds} {win testfile} { cleanup createfile tf1 tf1 testfile cp tf1 tf2 list [contents tf1] [contents tf2] } {tf1 tf1} -test winFCmd-2.11 {TclpCopyFile: CopyFile succeeds} {pcOnly} { +test winFCmd-2.11 {TclpCopyFile: CopyFile succeeds} {win testfile} { cleanup createfile tf1 tf1 createfile tf2 tf2 testfile cp tf1 tf2 list [contents tf1] [contents tf2] } {tf1 tf1} -test winFCmd-2.12 {TclpCopyFile: CopyFile succeeds} {pcOnly} { +test winFCmd-2.12 {TclpCopyFile: CopyFile succeeds} {win testfile} { cleanup createfile tf1 tf1 testchmod 000 tf1 testfile cp tf1 tf2 list [contents tf2] [file writable tf2] } {tf1 0} -test winFCmd-2.13 {TclpCopyFile: CopyFile fails} {pcOnly} { +test winFCmd-2.13 {TclpCopyFile: CopyFile fails} {win testfile} { cleanup createfile tf1 file mkdir td1 list [catch {testfile cp tf1 td1} msg] $msg } {1 EISDIR} -test winFCmd-2.14 {TclpCopyFile: errno == EACCES} {pcOnly} { +test winFCmd-2.14 {TclpCopyFile: errno == EACCES} {win testfile} { cleanup file mkdir td1 list [catch {testfile cp td1 tf1} msg] $msg } {1 EISDIR} -test winFCmd-2.15 {TclpCopyFile: src is directory} {pcOnly} { +test winFCmd-2.15 {TclpCopyFile: src is directory} {win testfile} { cleanup file mkdir td1 list [catch {testfile cp td1 tf1} msg] $msg } {1 EISDIR} -test winFCmd-2.16 {TclpCopyFile: dst is directory} {pcOnly} { +test winFCmd-2.16 {TclpCopyFile: dst is directory} {win testfile} { cleanup createfile tf1 file mkdir td1 list [catch {testfile cp tf1 td1} msg] $msg } {1 EISDIR} -test winFCmd-2.17 {TclpCopyFile: dst is readonly} {pcOnly} { +test winFCmd-2.17 {TclpCopyFile: dst is readonly} {win testfile testchmod} { cleanup createfile tf1 tf1 createfile tf2 tf2 @@ -444,7 +404,7 @@ test winFCmd-2.17 {TclpCopyFile: dst is readonly} {pcOnly} { testfile cp tf1 tf2 list [file writable tf2] [contents tf2] } {1 tf1} -test winFCmd-2.18 {TclpCopyFile: still can't copy onto dst} {pcOnly 95} { +test winFCmd-2.18 {TclpCopyFile: still can't copy onto dst} {win 95 testfile testchmod} { cleanup createfile tf1 createfile tf2 @@ -455,59 +415,59 @@ test winFCmd-2.18 {TclpCopyFile: still can't copy onto dst} {pcOnly 95} { set msg "$msg [file writable tf2]" } {1 EACCES 0} -test winFCmd-3.1 {TclpDeleteFile: errno: EACCES} {pcOnly cdrom} { +test winFCmd-3.1 {TclpDeleteFile: errno: EACCES} {win cdrom testfile} { list [catch {testfile rm $cdfile $cdrom/dummy~~.fil} msg] $msg } {1 EACCES} -test winFCmd-3.2 {TclpDeleteFile: errno: EISDIR} {pcOnly} { +test winFCmd-3.2 {TclpDeleteFile: errno: EISDIR} {win testfile} { cleanup file mkdir td1 list [catch {testfile rm td1} msg] $msg } {1 EISDIR} -test winFCmd-3.3 {TclpDeleteFile: errno: ENOENT} {pcOnly} { +test winFCmd-3.3 {TclpDeleteFile: errno: ENOENT} {win testfile} { cleanup list [catch {testfile rm tf1} msg] $msg } {1 ENOENT} -test winFCmd-3.4 {TclpDeleteFile: errno: ENOENT} {pcOnly} { +test winFCmd-3.4 {TclpDeleteFile: errno: ENOENT} {win testfile} { cleanup list [catch {testfile rm ""} msg] $msg } {1 ENOENT} -test winFCmd-3.5 {TclpDeleteFile: errno: EACCES} {pcOnly} { +test winFCmd-3.5 {TclpDeleteFile: errno: EACCES} {win testfile} { cleanup set fd [open tf1 w] set msg [list [catch {testfile rm tf1} msg] $msg] close $fd set msg } {1 EACCES} -test winFCmd-3.6 {TclpDeleteFile: errno: EACCES} {pcOnly} { +test winFCmd-3.6 {TclpDeleteFile: errno: EACCES} {win testfile} { cleanup list [catch {testfile rm nul} msg] $msg } {1 EACCES} -test winFCmd-3.7 {TclpDeleteFile: DeleteFile succeeds} {pcOnly} { +test winFCmd-3.7 {TclpDeleteFile: DeleteFile succeeds} {win testfile} { cleanup createfile tf1 testfile rm tf1 file exists tf1 } {0} -test winFCmd-3.8 {TclpDeleteFile: DeleteFile fails} {pcOnly} { +test winFCmd-3.8 {TclpDeleteFile: DeleteFile fails} {win testfile} { cleanup file mkdir td1 list [catch {testfile rm td1} msg] $msg } {1 EISDIR} -test winFCmd-3.9 {TclpDeleteFile: errno == EACCES} {pcOnly} { +test winFCmd-3.9 {TclpDeleteFile: errno == EACCES} {win testfile} { cleanup set fd [open tf1 w] set msg [list [catch {testfile rm tf1} msg] $msg] close $fd set msg } {1 EACCES} -test winFCmd-3.10 {TclpDeleteFile: path is readonly} {pcOnly} { +test winFCmd-3.10 {TclpDeleteFile: path is readonly} {win testfile testchmod} { cleanup createfile tf1 testchmod 000 tf1 testfile rm tf1 file exists tf1 } {0} -test winFCmd-3.11 {TclpDeleteFile: still can't remove path} {pcOnly} { +test winFCmd-3.11 {TclpDeleteFile: still can't remove path} {win testfile testchmod} { cleanup set fd [open tf1 w] testchmod 000 tf1 @@ -516,35 +476,35 @@ test winFCmd-3.11 {TclpDeleteFile: still can't remove path} {pcOnly} { set msg } {1 EACCES} -test winFCmd-4.1 {TclpCreateDirectory: errno: EACCES} {pcOnly nt cdrom} { +test winFCmd-4.1 {TclpCreateDirectory: errno: EACCES} {win nt cdrom testfile} { list [catch {testfile mkdir $cdrom/dummy~~.dir} msg] $msg } {1 EACCES} -test winFCmd-4.2 {TclpCreateDirectory: errno: EACCES} {pcOnly 95 cdrom} { +test winFCmd-4.2 {TclpCreateDirectory: errno: EACCES} {win 95 cdrom testfile} { list [catch {testfile mkdir $cdrom/dummy~~.dir} msg] $msg } {1 ENOSPC} -test winFCmd-4.3 {TclpCreateDirectory: errno: EEXIST} {pcOnly} { +test winFCmd-4.3 {TclpCreateDirectory: errno: EEXIST} {win testfile} { cleanup file mkdir td1 list [catch {testfile mkdir td1} msg] $msg } {1 EEXIST} -test winFCmd-4.4 {TclpCreateDirectory: errno: ENOENT} {pcOnly} { +test winFCmd-4.4 {TclpCreateDirectory: errno: ENOENT} {win testfile} { cleanup list [catch {testfile mkdir td1/td2} msg] $msg } {1 ENOENT} -test winFCmd-4.5 {TclpCreateDirectory: CreateDirectory succeeds} {pcOnly} { +test winFCmd-4.5 {TclpCreateDirectory: CreateDirectory succeeds} {win testfile} { cleanup testfile mkdir td1 file type td1 } {directory} -test winFCmd-5.1 {TclpCopyDirectory: calls TraverseWinTree} {pcOnly} { +test winFCmd-5.1 {TclpCopyDirectory: calls TraverseWinTree} {win testfile} { cleanup file mkdir td1 testfile cpdir td1 td2 list [file type td1] [file type td2] } {directory directory} -test winFCmd-6.1 {TclpRemoveDirectory: errno: EACCES} {pcOnly} { +test winFCmd-6.1 {TclpRemoveDirectory: errno: EACCES} {win testfile testchmod} { cleanup file mkdir td1 testchmod 000 td1 @@ -558,40 +518,40 @@ test winFCmd-6.1 {TclpRemoveDirectory: errno: EACCES} {pcOnly} { } set r } {0} -test winFCmd-6.2 {TclpRemoveDirectory: errno: EEXIST} {pcOnly} { +test winFCmd-6.2 {TclpRemoveDirectory: errno: EEXIST} {win testfile} { cleanup file mkdir td1/td2 list [catch {testfile rmdir td1} msg] [file tail $msg] } {1 {td1 EEXIST}} -test winFCmd-6.3 {TclpRemoveDirectory: errno: EACCES} {pcOnly} { +test winFCmd-6.3 {TclpRemoveDirectory: errno: EACCES} {win emptyTest} { # can't test this w/o removing everything on your hard disk first! # testfile rmdir / } {} -test winFCmd-6.4 {TclpRemoveDirectory: errno: ENOENT} {pcOnly} { +test winFCmd-6.4 {TclpRemoveDirectory: errno: ENOENT} {win testfile} { cleanup list [catch {testfile rmdir td1} msg] [file tail $msg] } {1 {td1 ENOENT}} -test winFCmd-6.5 {TclpRemoveDirectory: errno: ENOENT} {pcOnly} { +test winFCmd-6.5 {TclpRemoveDirectory: errno: ENOENT} {win testfile} { cleanup list [catch {testfile rmdir ""} msg] $msg } {1 ENOENT} -test winFCmd-6.6 {TclpRemoveDirectory: errno: ENOTDIR} {pcOnly} { +test winFCmd-6.6 {TclpRemoveDirectory: errno: ENOTDIR} {win testfile} { cleanup createfile tf1 list [catch {testfile rmdir tf1} msg] [file tail $msg] } {1 {tf1 ENOTDIR}} -test winFCmd-6.7 {TclpRemoveDirectory: RemoveDirectory succeeds} {pcOnly} { +test winFCmd-6.7 {TclpRemoveDirectory: RemoveDirectory succeeds} {win testfile} { cleanup file mkdir td1 testfile rmdir td1 file exists td1 } {0} -test winFCmd-6.8 {TclpRemoveDirectory: RemoveDirectory fails} {pcOnly} { +test winFCmd-6.8 {TclpRemoveDirectory: RemoveDirectory fails} {win testfile} { cleanup createfile tf1 list [catch {testfile rmdir tf1} msg] [file tail $msg] } {1 {tf1 ENOTDIR}} -test winFCmd-6.9 {TclpRemoveDirectory: errno == EACCES} {pcOnly} { +test winFCmd-6.9 {TclpRemoveDirectory: errno == EACCES} {win testfile testchmod} { cleanup file mkdir td1 testchmod 000 td1 @@ -605,25 +565,26 @@ test winFCmd-6.9 {TclpRemoveDirectory: errno == EACCES} {pcOnly} { } set r } {0} -test winFCmd-6.10 {TclpRemoveDirectory: attr == -1} {pcOnly 95} { +test winFCmd-6.10 {TclpRemoveDirectory: attr == -1} {win 95 testfile} { cleanup list [catch {testfile rmdir nul} msg] $msg } {1 {nul EACCES}} -test winFCmd-6.11 {TclpRemoveDirectory: attr == -1} {pcOnly nt} { +test winFCmd-6.11 {TclpRemoveDirectory: attr == -1} {win nt testfile} { cleanup set res [list [catch {testfile rmdir /} msg] $msg] # WinXP returns EEXIST, WinNT seems to return EACCES. No policy # decision has been made as to which is correct. - regsub {E(ACCES|EXIST)} $res "EACCES or EEXIST" res - # Don't mind which drive we're on - regsub {[A-Z]:} $res "" -} {1 {/ EACCES or EEXIST}} -test winFCmd-6.12 {TclpRemoveDirectory: errno == EACCES} {pcOnly 95} { + regsub {E(ACCES|EXIST)} $res "EACCES or EEXIST" +} [list 1 [list / EACCES or EEXIST]] +test winFCmd-6.12 {TclpRemoveDirectory: errno == EACCES} {win 95 testfile} { cleanup createfile tf1 - list [catch {testfile rmdir tf1} msg] $msg + set res [catch {testfile rmdir tf1} msg] + # get rid of path + set msg [list [file tail [lindex $msg 0]] [lindex $msg 1]] + list $res $msg } {1 {tf1 ENOTDIR}} -test winFCmd-6.13 {TclpRemoveDirectory: write-protected} {pcOnly} { +test winFCmd-6.13 {TclpRemoveDirectory: write-protected} {win testfile testchmod} { cleanup file mkdir td1 testchmod 000 td1 @@ -637,84 +598,87 @@ test winFCmd-6.13 {TclpRemoveDirectory: write-protected} {pcOnly} { } set r } {0} -test winFCmd-6.14 {TclpRemoveDirectory: check if empty dir} {pcOnly 95} { +test winFCmd-6.14 {TclpRemoveDirectory: check if empty dir} {win 95 testfile} { cleanup file mkdir td1/td2 - list [catch {testfile rmdir td1} msg] $msg + set res [catch {testfile rmdir td1} msg] + # get rid of path + set msg [list [file tail [lindex $msg 0]] [lindex $msg 1]] + list $res $msg } {1 {td1 EEXIST}} -test winFCmd-6.15 {TclpRemoveDirectory: !recursive} {pcOnly} { +test winFCmd-6.15 {TclpRemoveDirectory: !recursive} {win testfile} { cleanup file mkdir td1/td2 list [catch {testfile rmdir td1} msg] [file tail $msg] } {1 {td1 EEXIST}} -test winFCmd-6.16 {TclpRemoveDirectory: recursive, but errno != EEXIST} {pcOnly} { +test winFCmd-6.16 {TclpRemoveDirectory: recursive, but errno != EEXIST} {win testfile} { cleanup createfile tf1 list [catch {testfile rmdir -force tf1} msg] $msg } {1 {tf1 ENOTDIR}} -test winFCmd-6.17 {TclpRemoveDirectory: calls TraverseWinTree} {pcOnly} { +test winFCmd-6.17 {TclpRemoveDirectory: calls TraverseWinTree} {win testfile} { cleanup file mkdir td1/td2 testfile rmdir -force td1 file exists td1 } {0} -test winFCmd-7.1 {TraverseWinTree: targetPtr == NULL} {pcOnly} { +test winFCmd-7.1 {TraverseWinTree: targetPtr == NULL} {win testfile} { cleanup file mkdir td1/td2/td3 testfile rmdir -force td1 file exists td1 } {0} -test winFCmd-7.2 {TraverseWinTree: targetPtr != NULL} {pcOnly} { +test winFCmd-7.2 {TraverseWinTree: targetPtr != NULL} {win testfile} { cleanup file mkdir td1/td2/td3 testfile cpdir td1 td2 list [file exists td1] [file exists td2] } {1 1} -test winFCmd-7.3 {TraverseWinTree: sourceAttr == -1} {pcOnly} { +test winFCmd-7.3 {TraverseWinTree: sourceAttr == -1} {win testfile} { cleanup list [catch {testfile cpdir td1 td2} msg] $msg } {1 {td1 ENOENT}} -test winFCmd-7.4 {TraverseWinTree: source isn't directory} {pcOnly} { +test winFCmd-7.4 {TraverseWinTree: source isn't directory} {win testfile} { cleanup file mkdir td1 createfile td1/tf1 tf1 testfile cpdir td1 td2 contents td2/tf1 } {tf1} -test winFCmd-7.5 {TraverseWinTree: call TraversalCopy: DOTREE_F} {pcOnly} { +test winFCmd-7.5 {TraverseWinTree: call TraversalCopy: DOTREE_F} {win testfile} { cleanup file mkdir td1 createfile td1/tf1 tf1 testfile cpdir td1 td2 contents td2/tf1 } {tf1} -test winFCmd-7.6 {TraverseWinTree: call TraversalDelete: DOTREE_F} {pcOnly} { +test winFCmd-7.6 {TraverseWinTree: call TraversalDelete: DOTREE_F} {win testfile} { cleanup file mkdir td1 createfile td1/tf1 tf1 testfile rmdir -force td1 file exists td1 } {0} -test winFCmd-7.7 {TraverseWinTree: append \ to source if necessary} {pcOnly} { +test winFCmd-7.7 {TraverseWinTree: append \ to source if necessary} {win testfile} { cleanup file mkdir td1 createfile td1/tf1 tf1 testfile cpdir td1 td2 contents td2/tf1 } {tf1} -test winFCmd-7.8 {TraverseWinTree: append \ to source if necessary} {pcOnly 95 cdrom} { +test winFCmd-7.8 {TraverseWinTree: append \ to source if necessary} {win 95 cdrom testfile} { # cdrom can return either d:\ or D:/, but we only care about the errcode list [catch {testfile rmdir $cdrom/} msg] [lindex $msg 1] -} {1 EEXIST} -test winFCmd-7.9 {TraverseWinTree: append \ to source if necessary} {pcOnly nt cdrom} { +} {1 EACCES} ; # was EEXIST, but changed for win98. +test winFCmd-7.9 {TraverseWinTree: append \ to source if necessary} {win nt cdrom testfile} { list [catch {testfile rmdir $cdrom/} msg] [lindex $msg 1] } {1 EACCES} test winFCmd-7.10 {TraverseWinTree: can't read directory: handle == INVALID} \ - {pcOnly} { + {win emptyTest} { # can't make it happen } {} -test winFCmd-7.11 {TraverseWinTree: call TraversalCopy: DOTREE_PRED} {pcOnly} { +test winFCmd-7.11 {TraverseWinTree: call TraversalCopy: DOTREE_PRED} {win testfile testchmod} { cleanup file mkdir td1 createfile td1/tf1 tf1 @@ -729,40 +693,31 @@ test winFCmd-7.11 {TraverseWinTree: call TraversalCopy: DOTREE_PRED} {pcOnly} { } set r } {1 1} -test winFCmd-7.12 {TraverseWinTree: call TraversalDelete: DOTREE_PRED} {pcOnly} { +test winFCmd-7.12 {TraverseWinTree: call TraversalDelete: DOTREE_PRED} {win testfile} { cleanup file mkdir td1 createfile td1/tf1 tf1 testfile rmdir -force td1 file exists td1 } {0} -test winFCmd-7.13 {TraverseWinTree: append \ to target if necessary} {pcOnly} { +test winFCmd-7.13 {TraverseWinTree: append \ to target if necessary} {win testfile} { cleanup file mkdir td1 createfile td1/tf1 tf1 testfile cpdir td1 td2 contents td2/tf1 -} {tf1} -test winFCmd-7.14 {TraverseWinTree: append \ to target if necessary} {pcOnly 95} { +} {tf1} +test winFCmd-7.14 {TraverseWinTree: append \ to target if necessary} -constraints {win testfile} -body { cleanup file mkdir td1 list [catch {testfile cpdir td1 /} msg] $msg -} {1 {/ EEXIST}} -test winFCmd-7.15 {TraverseWinTree: append \ to target if necessary} -setup { - cleanup -} -constraints {pcOnly nt} -body { - file mkdir td1 - testfile cpdir td1 / -} -cleanup { - cleanup - # Windows7 returns EEXIST, XP returns EACCES -} -returnCodes error -match regexp -result {^/ E(ACCES|EXIST)$} -test winFCmd-7.16 {TraverseWinTree: recurse on files: no files} {pcOnly} { +} -match regexp -result {1 \{/ (EEXIST|EACCES)\}} +test winFCmd-7.16 {TraverseWinTree: recurse on files: no files} {win testfile} { cleanup file mkdir td1 testfile cpdir td1 td2 } {} -test winFCmd-7.17 {TraverseWinTree: recurse on files: one file} {pcOnly} { +test winFCmd-7.17 {TraverseWinTree: recurse on files: one file} {win testfile} { cleanup file mkdir td1 createfile td1/td2 @@ -770,7 +725,7 @@ test winFCmd-7.17 {TraverseWinTree: recurse on files: one file} {pcOnly} { glob td2/* } {td2/td2} test winFCmd-7.18 {TraverseWinTree: recurse on files: several files and dir} \ - {pcOnly} { + {win testfile} { cleanup file mkdir td1 createfile td1/tf1 @@ -781,7 +736,7 @@ test winFCmd-7.18 {TraverseWinTree: recurse on files: several files and dir} \ testfile cpdir td1 td2 lsort [glob td2/*] } {td2/td2 td2/tf1 td2/tf2 td2/tf3 td2/tf4} -test winFCmd-7.19 {TraverseWinTree: call TraversalCopy: DOTREE_POSTD} {pcOnly} { +test winFCmd-7.19 {TraverseWinTree: call TraversalCopy: DOTREE_POSTD} {win testfile testchmod} { cleanup file mkdir td1 createfile td1/tf1 tf1 @@ -797,24 +752,24 @@ test winFCmd-7.19 {TraverseWinTree: call TraversalCopy: DOTREE_POSTD} {pcOnly} { set r } {1 1} test winFCmd-7.20 {TraverseWinTree: call TraversalDelete: DOTREE_POSTD} \ - {pcOnly} { + {win testfile} { cleanup file mkdir td1 createfile td1/tf1 tf1 testfile rmdir -force td1 file exists td1 } {0} -test winFCmd-7.21 {TraverseWinTree: fill errorPtr} {pcOnly} { +test winFCmd-7.21 {TraverseWinTree: fill errorPtr} {win testfile} { cleanup list [catch {testfile cpdir td1 td2} msg] $msg } {1 {td1 ENOENT}} -test winFCmd-8.1 {TraversalCopy: DOTREE_F} {pcOnly} { +test winFCmd-8.1 {TraversalCopy: DOTREE_F} {win testfile} { cleanup file mkdir td1 list [catch {testfile cpdir td1 td1} msg] $msg } {1 {td1 EEXIST}} -test winFCmd-8.2 {TraversalCopy: DOTREE_PRED} {pcOnly} { +test winFCmd-8.2 {TraversalCopy: DOTREE_PRED} {win testfile testchmod} { cleanup file mkdir td1/td2 testchmod 000 td1 @@ -828,19 +783,19 @@ test winFCmd-8.2 {TraversalCopy: DOTREE_PRED} {pcOnly} { } set r } {0 1} -test winFCmd-8.3 {TraversalCopy: DOTREE_POSTD} {pcOnly} { +test winFCmd-8.3 {TraversalCopy: DOTREE_POSTD} {win testfile} { cleanup file mkdir td1 testfile cpdir td1 td2 } {} -test winFCmd-9.1 {TraversalDelete: DOTREE_F} {pcOnly} { +test winFCmd-9.1 {TraversalDelete: DOTREE_F} {win testfile} { cleanup file mkdir td1 createfile td1/tf1 testfile rmdir -force td1 } {} -test winFCmd-9.2 {TraversalDelete: DOTREE_F} {pcOnly 95} { +test winFCmd-9.2 {TraversalDelete: DOTREE_F} {win 95 testfile} { cleanup file mkdir td1 set fd [open td1/tf1 w] @@ -848,7 +803,7 @@ test winFCmd-9.2 {TraversalDelete: DOTREE_F} {pcOnly 95} { close $fd set msg } {1 {td1\tf1 EACCES}} -test winFCmd-9.3 {TraversalDelete: DOTREE_PRED} {pcOnly} { +test winFCmd-9.3 {TraversalDelete: DOTREE_PRED} {win testfile testchmod} { cleanup file mkdir td1/td2 testchmod 000 td1 @@ -862,42 +817,42 @@ test winFCmd-9.3 {TraversalDelete: DOTREE_PRED} {pcOnly} { } set r } {0} -test winFCmd-9.4 {TraversalDelete: DOTREE_POSTD} {pcOnly} { +test winFCmd-9.4 {TraversalDelete: DOTREE_POSTD} {win testfile} { cleanup file mkdir td1/td1/td3/td4/td5 testfile rmdir -force td1 } {} -test winFCmd-10.1 {AttributesPosixError - get} {pcOnly} { +test winFCmd-10.1 {AttributesPosixError - get} {win} { cleanup list [catch {file attributes td1 -archive} msg] $msg } {1 {could not read "td1": no such file or directory}} -test winFCmd-10.2 {AttributesPosixError - set} {pcOnly} { +test winFCmd-10.2 {AttributesPosixError - set} {win} { cleanup list [catch {file attributes td1 -archive 0} msg] $msg } {1 {could not read "td1": no such file or directory}} -test winFCmd-11.1 {GetWinFileAttributes} {pcOnly} { +test winFCmd-11.1 {GetWinFileAttributes} {win} { cleanup close [open td1 w] list [catch {file attributes td1 -archive} msg] $msg [cleanup] } {0 1 {}} -test winFCmd-11.2 {GetWinFileAttributes} {pcOnly} { +test winFCmd-11.2 {GetWinFileAttributes} {win} { cleanup close [open td1 w] list [catch {file attributes td1 -readonly} msg] $msg [cleanup] } {0 0 {}} -test winFCmd-11.3 {GetWinFileAttributes} {pcOnly} { +test winFCmd-11.3 {GetWinFileAttributes} {win} { cleanup close [open td1 w] list [catch {file attributes td1 -hidden} msg] $msg [cleanup] } {0 0 {}} -test winFCmd-11.4 {GetWinFileAttributes} {pcOnly} { +test winFCmd-11.4 {GetWinFileAttributes} {win} { cleanup close [open td1 w] list [catch {file attributes td1 -system} msg] $msg [cleanup] } {0 0 {}} -test winFCmd-11.5 {GetWinFileAttributes} {pcOnly} { +test winFCmd-11.5 {GetWinFileAttributes} {win} { # attr of relative paths that resolve to root was failing # don't care about answer, just that test runs. @@ -908,124 +863,124 @@ test winFCmd-11.5 {GetWinFileAttributes} {pcOnly} { file attr . cd $old } {} -test winFCmd-11.6 {GetWinFileAttributes} {pcOnly} { +test winFCmd-11.6 {GetWinFileAttributes} {win} { file attr c:/ -hidden } {0} -test winFCmd-12.1 {ConvertFileNameFormat} {pcOnly} { +test winFCmd-12.1 {ConvertFileNameFormat} {win} { cleanup close [open td1 w] list [catch {string tolower [file attributes td1 -longname]} msg] $msg [cleanup] } {0 td1 {}} -test winFCmd-12.2 {ConvertFileNameFormat} {pcOnly} { +test winFCmd-12.2 {ConvertFileNameFormat} {win} { cleanup file mkdir td1 close [open td1/td1 w] list [catch {string tolower [file attributes td1/td1 -longname]} msg] $msg [cleanup] } {0 td1/td1 {}} -test winFCmd-12.3 {ConvertFileNameFormat} {pcOnly} { +test winFCmd-12.3 {ConvertFileNameFormat} {win} { cleanup file mkdir td1 file mkdir td1/td2 close [open td1/td3 w] list [catch {string tolower [file attributes td1/td2/../td3 -longname]} msg] $msg [cleanup] } {0 td1/td2/../td3 {}} -test winFCmd-12.4 {ConvertFileNameFormat} {pcOnly} { +test winFCmd-12.4 {ConvertFileNameFormat} {win} { cleanup close [open td1 w] list [catch {string tolower [file attributes ./td1 -longname]} msg] $msg [cleanup] } {0 ./td1 {}} -test winFCmd-12.5 {ConvertFileNameFormat: absolute path} {pcOnly} { +test winFCmd-12.5 {ConvertFileNameFormat: absolute path} {win} { list [file attributes / -longname] [file attributes \\ -longname] } {/ /} -test winFCmd-12.6 {ConvertFileNameFormat: absolute path with drive} {pcOnly} { +test winFCmd-12.6 {ConvertFileNameFormat: absolute path with drive} {win} { catch {file delete -force -- c:/td1} close [open c:/td1 w] list [catch {string tolower [file attributes c:/td1 -longname]} msg] $msg [file delete -force -- c:/td1] } {0 c:/td1 {}} -test winFCmd-12.7 {ConvertFileNameFormat} {nonPortable pcOnly} { +test winFCmd-12.7 {ConvertFileNameFormat} {nonPortable win} { string tolower [file attributes //bisque/tcl/ws -longname] } {//bisque/tcl/ws} -test winFCmd-12.8 {ConvertFileNameFormat} {pcOnly longFileNames} { +test winFCmd-12.8 {ConvertFileNameFormat} {win longFileNames} { cleanup close [open td1 w] list [catch {string tolower [file attributes td1 -longname]} msg] $msg [cleanup] } {0 td1 {}} -test winFCmd-12.10 {ConvertFileNameFormat} {longFileNames pcOnly} { +test winFCmd-12.10 {ConvertFileNameFormat} {longFileNames win} { cleanup close [open td1td1td1 w] list [catch {file attributes td1td1td1 -shortname}] [cleanup] } {0 {}} -test winFCmd-12.11 {ConvertFileNameFormat} {longFileNames pcOnly} { +test winFCmd-12.11 {ConvertFileNameFormat} {longFileNames win} { cleanup close [open td1 w] list [catch {string tolower [file attributes td1 -shortname]} msg] $msg [cleanup] } {0 td1 {}} -test winFCmd-13.1 {GetWinFileLongName} {pcOnly} { +test winFCmd-13.1 {GetWinFileLongName} {win} { cleanup close [open td1 w] list [catch {string tolower [file attributes td1 -longname]} msg] $msg [cleanup] } {0 td1 {}} -test winFCmd-14.1 {GetWinFileShortName} {pcOnly} { +test winFCmd-14.1 {GetWinFileShortName} {win} { cleanup close [open td1 w] list [catch {string tolower [file attributes td1 -shortname]} msg] $msg [cleanup] } {0 td1 {}} -test winFCmd-15.1 {SetWinFileAttributes} {pcOnly} { +test winFCmd-15.1 {SetWinFileAttributes} {win} { cleanup list [catch {file attributes td1 -archive 0} msg] $msg } {1 {could not read "td1": no such file or directory}} -test winFCmd-15.2 {SetWinFileAttributes - archive} {pcOnly} { +test winFCmd-15.2 {SetWinFileAttributes - archive} {win} { cleanup close [open td1 w] list [catch {file attributes td1 -archive 1} msg] $msg [file attributes td1 -archive] [cleanup] } {0 {} 1 {}} -test winFCmd-15.3 {SetWinFileAttributes - archive} {pcOnly} { +test winFCmd-15.3 {SetWinFileAttributes - archive} {win} { cleanup close [open td1 w] list [catch {file attributes td1 -archive 0} msg] $msg [file attributes td1 -archive] [cleanup] } {0 {} 0 {}} -test winFCmd-15.4 {SetWinFileAttributes - hidden} {pcOnly} { +test winFCmd-15.4 {SetWinFileAttributes - hidden} {win} { cleanup close [open td1 w] list [catch {file attributes td1 -hidden 1} msg] $msg [file attributes td1 -hidden] [file attributes td1 -hidden 0] [cleanup] } {0 {} 1 {} {}} -test winFCmd-15.5 {SetWinFileAttributes - hidden} {pcOnly} { +test winFCmd-15.5 {SetWinFileAttributes - hidden} {win} { cleanup close [open td1 w] list [catch {file attributes td1 -hidden 0} msg] $msg [file attributes td1 -hidden] [cleanup] } {0 {} 0 {}} -test winFCmd-15.6 {SetWinFileAttributes - readonly} {pcOnly} { +test winFCmd-15.6 {SetWinFileAttributes - readonly} {win} { cleanup close [open td1 w] list [catch {file attributes td1 -readonly 1} msg] $msg [file attributes td1 -readonly] [cleanup] } {0 {} 1 {}} -test winFCmd-15.7 {SetWinFileAttributes - readonly} {pcOnly} { +test winFCmd-15.7 {SetWinFileAttributes - readonly} {win} { cleanup close [open td1 w] list [catch {file attributes td1 -readonly 0} msg] $msg [file attributes td1 -readonly] [cleanup] } {0 {} 0 {}} -test winFCmd-15.8 {SetWinFileAttributes - system} {pcOnly} { +test winFCmd-15.8 {SetWinFileAttributes - system} {win} { cleanup close [open td1 w] list [catch {file attributes td1 -system 1} msg] $msg [file attributes td1 -system] [cleanup] } {0 {} 1 {}} -test winFCmd-15.9 {SetWinFileAttributes - system} {pcOnly} { +test winFCmd-15.9 {SetWinFileAttributes - system} {win} { cleanup close [open td1 w] list [catch {file attributes td1 -system 0} msg] $msg [file attributes td1 -system] [cleanup] } {0 {} 0 {}} -test winFCmd-15.10 {SetWinFileAttributes - failing} {pcOnly cdrom} { +test winFCmd-15.10 {SetWinFileAttributes - failing} {win cdrom} { cleanup catch {file attributes $cdfile -archive 1} } {1} -test winFCmd-16.1 {Windows file normalization} {pcOnly} { +test winFCmd-16.1 {Windows file normalization} {win} { list [file normalize c:/] [file normalize C:/] } {C:/ C:/} -test winFCmd-16.2 {Windows file normalization} {pcOnly} { +test winFCmd-16.2 {Windows file normalization} {win} { close [open td1... w] set res [file tail [file normalize td1]] file delete td1... @@ -1035,48 +990,113 @@ test winFCmd-16.2 {Windows file normalization} {pcOnly} { set pwd [pwd] set d [string index $pwd 0] -test winFCmd-16.3 {Windows file normalization} {pcOnly} { +test winFCmd-16.3 {Windows file normalization} {win} { file norm ${d}:foo } [file join $pwd foo] -test winFCmd-16.4 {Windows file normalization} {pcOnly} { +test winFCmd-16.4 {Windows file normalization} {win} { file norm [string tolower ${d}]:foo } [file join $pwd foo] -test winFCmd-16.5 {Windows file normalization} {pcOnly} { +test winFCmd-16.5 {Windows file normalization} {win} { file norm ${d}:foo/bar } [file join $pwd foo/bar] -test winFCmd-16.6 {Windows file normalization} {pcOnly} { +test winFCmd-16.6 {Windows file normalization} {win} { file norm ${d}:foo\\bar } [file join $pwd foo/bar] -test winFCmd-16.7 {Windows file normalization} {pcOnly} { +test winFCmd-16.7 {Windows file normalization} {win} { file norm /bar } "${d}:/bar" -test winFCmd-16.8 {Windows file normalization} {pcOnly} { +test winFCmd-16.8 {Windows file normalization} {win} { file norm ///bar } "${d}:/bar" -test winFCmd-16.9 {Windows file normalization} {pcOnly} { +test winFCmd-16.9 {Windows file normalization} {win} { file norm /bar/foo } "${d}:/bar/foo" if {$d eq "C"} { set dd "D" } else { set dd "C" } -test winFCmd-16.10 {Windows file normalization} {pcOnly} { +test winFCmd-16.10 {Windows file normalization} {win} { file norm ${dd}:foo } "${dd}:/foo" -test winFCmd-16.11 {Windows file normalization} {pcOnly cdrom} { +test winFCmd-16.11 {Windows file normalization} -constraints {win cdrom} \ +-body { cd ${d}: cd $cdrom cd ${d}: cd $cdrom # Must not crash set result "no crash" -} {no crash} -test winFCmd-16.12 {Windows file normalization} {pcOnly} { +} -cleanup { + cd $pwd +} -result {no crash} + +test winFCmd-16.12 {Windows file normalization - no crash} \ + -constraints win -setup { set oldhome "" catch {set oldhome $::env(HOME)} +} -body { + set expectedResult [file normalize ${d}:] set ::env(HOME) ${d}: cd + # At one point this led to an infinite recursion in Tcl set result [pwd]; # <- Must not crash + set result "no crash" +} -cleanup { set ::env(HOME) $oldhome - set result -} ${d}:/ + cd $pwd +} -result {no crash} + +test winFCmd-16.13 {Windows file normalization} -constraints win -setup { + set oldhome "" + catch {set oldhome $::env(HOME)} +} -body { + # Test 'cd' normalization when HOME is absolute + set expectedResult [file normalize ${d}:/] + set ::env(HOME) ${d}:/ + cd + set result [pwd] + if { [string equal $result $expectedResult] } { + concat ok + } else { + list $result != $expectedResult + } +} -cleanup { + set ::env(HOME) $oldhome + cd $pwd +} -result ok + +test winFCmd-16.14 {Windows file normalization} -constraints win -setup { + set oldhome "" + catch {set oldhome $::env(HOME)} +} -body { + # Test 'cd' normalization when HOME is relative + set ::env(HOME) ${d}: + cd + set result [pwd] + if { [string equal $result $pwd] } { + concat ok + } else { + list $result != $pwd + } +} -cleanup { + set ::env(HOME) $oldhome + cd $pwd +} -result ok + +test winFCmd-17.1 {Windows bad permissions cd} -constraints win -body { + set d {} + foreach dd {c:/ d:/ e:/} { + eval lappend d [glob -nocomplain \ + -types hidden -dir $dd "System Volume Information"] + } + # Old versions of Tcl gave a misleading error that the + # directory in question didn't exist. + if {[llength $d] && [catch {cd [lindex $d 0]} err]} { + regsub ".*: " $err "" err + set err + } else { + set err "permission denied" + } +} -cleanup { + cd $pwd +} -result "permission denied" cd $pwd unset d dd pwd @@ -1084,46 +1104,140 @@ unset d dd pwd test winFCmd-18.1 {Windows reserved path names} -constraints win -body { file pathtype com1 } -result "absolute" + test winFCmd-18.1.2 {Windows reserved path names} -constraints win -body { file pathtype com4 } -result "absolute" + test winFCmd-18.1.3 {Windows reserved path names} -constraints win -body { file pathtype com5 } -result "relative" + test winFCmd-18.1.4 {Windows reserved path names} -constraints win -body { file pathtype lpt3 } -result "absolute" + test winFCmd-18.1.5 {Windows reserved path names} -constraints win -body { file pathtype lpt4 } -result "relative" + test winFCmd-18.1.6 {Windows reserved path names} -constraints win -body { file pathtype nul } -result "absolute" + test winFCmd-18.1.7 {Windows reserved path names} -constraints win -body { file pathtype null } -result "relative" + test winFCmd-18.2 {Windows reserved path names} -constraints win -body { file pathtype com1: } -result "absolute" + test winFCmd-18.3 {Windows reserved path names} -constraints win -body { file pathtype COM1 } -result "absolute" + test winFCmd-18.4 {Windows reserved path names} -constraints win -body { file pathtype CoM1: } -result "absolute" + test winFCmd-18.5 {Windows reserved path names} -constraints win -body { file normalize com1: } -result COM1 + test winFCmd-18.6 {Windows reserved path names} -constraints win -body { file normalize COM1: } -result COM1 + test winFCmd-18.7 {Windows reserved path names} -constraints win -body { file normalize cOm1 } -result COM1 + test winFCmd-18.8 {Windows reserved path names} -constraints win -body { file normalize cOm1: } -result COM1 + +test winFCmd-19.1 {Windows extended path names} -constraints nt -body { + file normalize //?/c:/windows/win.ini +} -result //?/c:/windows/win.ini + +test winFCmd-19.2 {Windows extended path names} -constraints nt -body { + file normalize //?/c:/windows/../windows/win.ini +} -result //?/c:/windows/win.ini + +test winFCmd-19.3 {Windows extended path names} -constraints nt -setup { + set tmpfile [file join $::env(TEMP) tcl[string repeat x 20].tmp] + set tmpfile [file normalize $tmpfile] +} -body { + list [catch { + set f [open $tmpfile [list WRONLY CREAT]] + close $f + } res] $res +} -cleanup { + catch {file delete $tmpfile} +} -result [list 0 {}] + +test winFCmd-19.4 {Windows extended path names} -constraints nt -setup { + set tmpfile [file join $::env(TEMP) tcl[string repeat x 20].tmp] + set tmpfile //?/[file normalize $tmpfile] +} -body { + list [catch { + set f [open $tmpfile [list WRONLY CREAT]] + close $f + } res] $res +} -cleanup { + catch {file delete $tmpfile} +} -result [list 0 {}] + +test winFCmd-19.5 {Windows extended path names} -constraints nt -setup { + set tmpfile [file join $::env(TEMP) tcl[string repeat x 248].tmp] + set tmpfile [file normalize $tmpfile] +} -body { + list [catch { + set f [open $tmpfile [list WRONLY CREAT]] + close $f + } res] errormsg ;#$res +} -cleanup { + catch {file delete $tmpfile} +} -result [list 1 errormsg] + +test winFCmd-19.6 {Windows extended path names} -constraints nt -setup { + set tmpfile [file join $::env(TEMP) tcl[string repeat x 248].tmp] + set tmpfile //?/[file normalize $tmpfile] +} -body { + list [catch { + set f [open $tmpfile [list WRONLY CREAT]] + close $f + } res] $res +} -cleanup { + catch {file delete $tmpfile} +} -result [list 0 {}] + +test winFCmd-19.7 {Windows extended path names} -constraints nt -setup { + set tmpfile [file join $::env(TEMP) "tcl[pid].tmp "] + set tmpfile [file normalize $tmpfile] +} -body { + list [catch { + set f [open $tmpfile [list WRONLY CREAT]] + close $f + } res] $res [glob -directory $::env(TEMP) -tails tcl[pid].*] +} -cleanup { + catch {file delete $tmpfile} +} -result [list 0 {} [list tcl[pid].tmp]] + +test winFCmd-19.8 {Windows extended path names} -constraints nt -setup { + set tmpfile [file join $::env(TEMP) "tcl[pid].tmp "] + set tmpfile //?/[file normalize $tmpfile] +} -body { + list [catch { + set f [open $tmpfile [list WRONLY CREAT]] + close $f + } res] $res [glob -directory $::env(TEMP) -tails tcl[pid].*] +} -cleanup { + catch {file delete $tmpfile} +} -result [list 0 {} [list "tcl[pid].tmp "]] + # This block of code used to occur after the "return" call, so I'm # commenting it out and assuming that this code is still under construction. #foreach source {tef ted tnf tnd "" nul com1} { diff --git a/tests/winFile.test b/tests/winFile.test index 756144e..bfba9cf 100644 --- a/tests/winFile.test +++ b/tests/winFile.test @@ -1,29 +1,41 @@ # This file tests the tclWinFile.c file. # -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. # # Copyright (c) 1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. -if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest - namespace import -force ::tcltest::* +if {[catch {package require tcltest 2.0.2}]} { + puts stderr "Skipping tests in [info script]. tcltest 2.0.2 required." + return } +namespace import -force ::tcltest::* -test winFile-1.1 {TclpGetUserHome} {pcOnly} { +testConstraint testvolumetype [llength [info commands testvolumetype]] +testConstraint notNTFS 0 +testConstraint win2000 0 + +if {[testConstraint testvolumetype]} { + testConstraint notNTFS [expr {[testvolumetype] eq "NTFS"}] +} +if {[testConstraint nt] && $::tcl_platform(osVersion) >= 5.0} { + testConstraint win2000 1 +} + +test winFile-1.1 {TclpGetUserHome} {win} { list [catch {glob ~nosuchuser} msg] $msg } {1 {user "nosuchuser" doesn't exist}} -test winFile-1.2 {TclpGetUserHome} {pcOnly nt nonPortable} { +test winFile-1.2 {TclpGetUserHome} {win nt nonPortable} { # The administrator account should always exist. catch {glob ~administrator} } {0} -test winFile-1.3 {TclpGetUserHome} {pcOnly 95} { +test winFile-1.3 {TclpGetUserHome} {win 95} { # Find some user in system.ini and then see if they have a home. set f [open $::env(windir)/system.ini] @@ -42,25 +54,24 @@ test winFile-1.3 {TclpGetUserHome} {pcOnly 95} { close $f set x } {0} -test winFile-1.4 {TclpGetUserHome} {pcOnly nt nonPortable} { +test winFile-1.4 {TclpGetUserHome} {win nt nonPortable} { catch {glob ~stanton@workgroup} } {0} -test winFile-2.1 {TclpMatchFiles: case sensitivity} {pcOnly} { +test winFile-2.1 {TclpMatchFiles: case sensitivity} {win} { makeFile {} GlobCapS set result [list [glob -nocomplain GlobC*] [glob -nocomplain globc*]] removeFile GlobCapS set result } {GlobCapS GlobCapS} - -test winFile-2.2 {TclpMatchFiles: case sensitivity} {pcOnly} { +test winFile-2.2 {TclpMatchFiles: case sensitivity} {win} { makeFile {} globlower set result [list [glob -nocomplain globl*] [glob -nocomplain gLOBl*]] removeFile globlower set result } {globlower globlower} -test winFile-3.1 {file system} {pcOnly} { +test winFile-3.1 {file system} {win testvolumetype} { set res "volume types ok" foreach vol [file volumes] { # Have to catch in case there is a removable drive (CDROM, floppy) @@ -76,18 +87,157 @@ test winFile-3.1 {file system} {pcOnly} { set res } {volume types ok} -# cleanup -::tcltest::cleanupTests -return - - - - - +proc cacls {fname args} { + string trim [eval [list exec cacls [file nativename $fname]] $args <<y] +} +# dir/q output: +# 2003-11-03 20:36 598 OCTAVIAN\benny filename.txt +# Note this output from a german win2k machine: +# 14.12.2007 14:26 30 VORDEFINIERT\Administratest.dat +# +# Modified to cope with Msys environment and use ls -l. +proc getuser {fname} { + global env + set tryname $fname + if {[file isdirectory $fname]} { + set tryname [file dirname $fname] + } + set owner "" + set tail [file tail $tryname] + if {[info exists env(OSTYPE)] && [string equal $env(OSTYPE) "msys"]} { + set dirtext [exec ls -l $fname] + foreach line [split $dirtext "\n"] { + set owner [lindex $line 2] + } + } else { + set dirtext [exec cmd /c dir /q [file nativename $fname]] + foreach line [split $dirtext "\n"] { + if {[string match -nocase "*$tail" $line]} { + set attrs [string range $line \ + 0 end-[string length $tail]] + regexp { [^ \\]+\\.*$} $attrs owner + set owner [string trim $owner] + } + } + } + if {[string length $owner] == 0} { + error "getuser: Owner not found in output of dir/q" + } + return $owner +} +proc test_read {fname} { + if {[catch {set ifs [open $fname r]}]} { + return 0 + } + set readfailed [catch {read $ifs}] + return [expr {![catch {close $ifs}] && !$readfailed}] +} +proc test_writ {fname} { + if {[catch {set ofs [open $fname w]}]} { + return 0 + } + set writefailed [catch {puts $ofs "Hello"}] + return [expr {![catch {close $ofs}] && !$writefailed}] +} +proc test_access {fname read writ} { + set problem {} + foreach type {read writ} { + if {[set $type] != [file ${type}able $fname]} { + lappend problem "[set $type] != \[file ${type}able $fname\]" + } + if {[set $type] != [test_${type} $fname]} { + lappend problem "[set $type] != \[test_${type} $fname\]" + } + } + if {[llength $problem]} { + return "Problem [join $problem \n]\nActual rights are: [cacls $fname]" + } else { + return "" + } +} +if {[testConstraint win]} { + # Create the test file + # NOTE: [tcltest::makeFile] not used. Presumably to force file + # creation in a particular filesystem? If not, try [makeFile] + # in a -setup script. + set fname test.dat + file delete $fname + close [open $fname w] +} +test winFile-4.0 { + Enhanced NTFS user/group permissions: test no acccess +} -constraints { + win nt notNTFS win2000 +} -setup { + set owner [getuser $fname] + set user $::env(USERDOMAIN)\\$::env(USERNAME) +} -body { + # Clean out all well-known ACLs + catch {cacls $fname /E /R "Everyone"} result + catch {cacls $fname /E /R $user} result + catch {cacls $fname /E /R $owner} result + cacls $fname /E /P $user:N + test_access $fname 0 0 +} -result {} +test winFile-4.1 { + Enhanced NTFS user/group permissions: test readable only +} -constraints { + win nt notNTFS +} -setup { + set user $::env(USERDOMAIN)\\$::env(USERNAME) +} -body { + cacls $fname /E /P $user:N + cacls $fname /E /G $user:R + test_access $fname 1 0 +} -result {} +test winFile-4.2 { + Enhanced NTFS user/group permissions: test writable only +} -constraints { + win nt notNTFS +} -setup { + set user $::env(USERDOMAIN)\\$::env(USERNAME) +} -body { + catch {cacls $fname /E /R $user} result + cacls $fname /E /P $user:N + cacls $fname /E /G $user:W + test_access $fname 0 1 +} -result {} +test winFile-4.3 { + Enhanced NTFS user/group permissions: test read+write +} -constraints { + win nt notNTFS +} -setup { + set user $::env(USERDOMAIN)\\$::env(USERNAME) +} -body { + catch {cacls $fname /E /R $user} result + cacls $fname /E /P $user:N + cacls $fname /E /G $user:R + cacls $fname /E /G $user:W + test_access $fname 1 1 +} -result {} +test winFile-4.4 { + Enhanced NTFS user/group permissions: test full access +} -constraints { + win nt notNTFS +} -setup { + set user $::env(USERDOMAIN)\\$::env(USERNAME) +} -body { + catch {cacls $fname /E /R $user} result + cacls $fname /E /P $user:N + cacls $fname /E /G $user:F + test_access $fname 1 1 +} -result {} + +if {[testConstraint win]} { + file delete $fname +} +# cleanup +cleanupTests +return diff --git a/tests/winNotify.test b/tests/winNotify.test index c237bd3..f9c75a3 100644 --- a/tests/winNotify.test +++ b/tests/winNotify.test @@ -15,18 +15,17 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -set ::tcltest::testConstraints(testeventloop) \ - [expr {[info commands testeventloop] != {}}] +testConstraint testeventloop [expr {[info commands testeventloop] != {}}] # There is no explicit test for InitNotifier or NotifierExitHandler -test winNotify-1.1 {Tcl_SetTimer: positive timeout} {pcOnly} { +test winNotify-1.1 {Tcl_SetTimer: positive timeout} {win} { set done 0 after 1000 { set done 1 } vwait done set done } 1 -test winNotify-1.2 {Tcl_SetTimer: positive timeout, message pending} {pcOnly} { +test winNotify-1.2 {Tcl_SetTimer: positive timeout, message pending} {win} { set x 0 set y 1 set a1 [after 0 { incr y }] @@ -35,7 +34,7 @@ test winNotify-1.2 {Tcl_SetTimer: positive timeout, message pending} {pcOnly} { vwait x list $x $y } {1 1} -test winNotify-1.3 {Tcl_SetTimer: cancelling positive timeout} {pcOnly} { +test winNotify-1.3 {Tcl_SetTimer: cancelling positive timeout} {win} { set x 0 set y 1 set id [after 10000 { incr y }] @@ -44,7 +43,7 @@ test winNotify-1.3 {Tcl_SetTimer: cancelling positive timeout} {pcOnly} { after cancel $id list $x $y } {1 1} -test winNotify-1.4 {Tcl_SetTimer: null timeout, message pending} {pcOnly} { +test winNotify-1.4 {Tcl_SetTimer: null timeout, message pending} {win} { set x 0 set y 1 after 0 { incr x } @@ -53,14 +52,14 @@ test winNotify-1.4 {Tcl_SetTimer: null timeout, message pending} {pcOnly} { list $x $y } {1 2} -test winNotify-2.1 {Tcl_ResetIdleTimer} {pcOnly} { +test winNotify-2.1 {Tcl_ResetIdleTimer} {win} { set x 0 update after idle { incr x } vwait x set x } 1 -test winNotify-2.2 {Tcl_ResetIdleTimer: message pending} {pcOnly} { +test winNotify-2.2 {Tcl_ResetIdleTimer: message pending} {win} { set x 0 set y 1 update @@ -70,7 +69,7 @@ test winNotify-2.2 {Tcl_ResetIdleTimer: message pending} {pcOnly} { list $x $y } {1 2} -test winNotify-3.1 {NotifierProc: non-modal normal timer} {pcOnly testeventloop} { +test winNotify-3.1 {NotifierProc: non-modal normal timer} {win testeventloop} { update set x 0 foreach i [after info] { @@ -80,7 +79,7 @@ test winNotify-3.1 {NotifierProc: non-modal normal timer} {pcOnly testeventloop} testeventloop wait set x } 1 -test winNotify-3.2 {NotifierProc: non-modal normal timer, rescheduled} {pcOnly testeventloop} { +test winNotify-3.2 {NotifierProc: non-modal normal timer, rescheduled} {win testeventloop} { update set x 0 foreach i [after info] { @@ -90,7 +89,7 @@ test winNotify-3.2 {NotifierProc: non-modal normal timer, rescheduled} {pcOnly t testeventloop wait set x } 2 -test winNotify-3.3 {NotifierProc: modal normal timer} {pcOnly} { +test winNotify-3.3 {NotifierProc: modal normal timer} {win} { update set x 0 foreach i [after info] { @@ -100,7 +99,7 @@ test winNotify-3.3 {NotifierProc: modal normal timer} {pcOnly} { vwait x set x } 1 -test winNotify-3.4 {NotifierProc: modal normal timer, rescheduled} {pcOnly} { +test winNotify-3.4 {NotifierProc: modal normal timer, rescheduled} {win} { update set x 0 foreach i [after info] { @@ -111,7 +110,7 @@ test winNotify-3.4 {NotifierProc: modal normal timer, rescheduled} {pcOnly} { vwait x list $x $y } {1 1} -test winNotify-3.5 {NotifierProc: non-modal idle timer} {pcOnly testeventloop} { +test winNotify-3.5 {NotifierProc: non-modal idle timer} {win testeventloop} { update set x 0 foreach i [after info] { @@ -121,7 +120,7 @@ test winNotify-3.5 {NotifierProc: non-modal idle timer} {pcOnly testeventloop} { testeventloop wait set x } 1 -test winNotify-3.6 {NotifierProc: non-modal idle timer, rescheduled} {pcOnly testeventloop} { +test winNotify-3.6 {NotifierProc: non-modal idle timer, rescheduled} {win testeventloop} { update set x 0 foreach i [after info] { @@ -131,7 +130,7 @@ test winNotify-3.6 {NotifierProc: non-modal idle timer, rescheduled} {pcOnly tes testeventloop wait set x } 2 -test winNotify-3.7 {NotifierProc: modal idle timer} {pcOnly} { +test winNotify-3.7 {NotifierProc: modal idle timer} {win} { update set x 0 foreach i [after info] { @@ -141,7 +140,7 @@ test winNotify-3.7 {NotifierProc: modal idle timer} {pcOnly} { vwait x set x } 1 -test winNotify-3.8 {NotifierProc: modal idle timer, rescheduled} {pcOnly} { +test winNotify-3.8 {NotifierProc: modal idle timer, rescheduled} {win} { update set x 0 foreach i [after info] { @@ -158,15 +157,3 @@ test winNotify-3.8 {NotifierProc: modal idle timer, rescheduled} {pcOnly} { # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - diff --git a/tests/winPipe.test b/tests/winPipe.test index e2687ea..3f983e1 100644 --- a/tests/winPipe.test +++ b/tests/winPipe.test @@ -1,10 +1,10 @@ -# +# # winPipe.test -- # # This file contains a collection of tests for tclWinPipe.c # -# Sourcing this file into Tcl runs the tests and generates output for -# errors. No output means no errors were found. +# Sourcing this file into Tcl runs the tests and generates output for errors. +# No output (except for one message) means no errors were found. # # Copyright (c) 1996 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. @@ -16,18 +16,14 @@ package require tcltest namespace import -force ::tcltest::* unset -nocomplain path -testConstraint exec [llength [info commands exec]] set bindir [file join [pwd] [file dirname [info nameofexecutable]]] set cat32 [file join $bindir cat32.exe] -set ::tcltest::testConstraints(cat32) [file exists $cat32] - -if {[catch {puts console1 ""}]} { - set ::tcltest::testConstraints(AllocConsole) 1 -} else { - set ::tcltest::testConstraints(.console) 1 -} +testConstraint exec [llength [info commands exec]] +testConstraint cat32 [file exists $cat32] +testConstraint AllocConsole [catch {puts console1 ""}] +testConstraint RealConsole [expr {![testConstraint AllocConsole]}] set big bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n append big $big @@ -63,90 +59,90 @@ set path(more) [makeFile { set path(stdout) [makeFile {} stdout] set path(stderr) [makeFile {} stderr] -test winpipe-1.1 {32 bit comprehensive tests: from little file} {pcOnly exec cat32} { +test winpipe-1.1 {32 bit comprehensive tests: from little file} {win exec cat32} { exec $cat32 < $path(little) > $path(stdout) 2> $path(stderr) list [contents $path(stdout)] [contents $path(stderr)] } {little stderr32} -test winpipe-1.2 {32 bit comprehensive tests: from big file} {pcOnly exec cat32} { +test winpipe-1.2 {32 bit comprehensive tests: from big file} {win exec cat32} { exec $cat32 < $path(big) > $path(stdout) 2> $path(stderr) list [contents $path(stdout)] [contents $path(stderr)] } "{$big} stderr32" -test winpipe-1.3 {32 bit comprehensive tests: a little from pipe} {pcOnly nt exec cat32} { +test winpipe-1.3 {32 bit comprehensive tests: a little from pipe} {win nt exec cat32} { exec [interpreter] more < little | $cat32 > $path(stdout) 2> $path(stderr) list [contents $path(stdout)] [contents $path(stderr)] } {little stderr32} -test winpipe-1.4 {32 bit comprehensive tests: a lot from pipe} {pcOnly nt exec cat32} { +test winpipe-1.4 {32 bit comprehensive tests: a lot from pipe} {win nt exec cat32} { exec [interpreter] more < big | $cat32 > $path(stdout) 2> $path(stderr) list [contents $path(stdout)] [contents $path(stderr)] } "{$big} stderr32" -test winpipe-1.5 {32 bit comprehensive tests: a lot from pipe} {pcOnly 95 exec cat32} { +test winpipe-1.5 {32 bit comprehensive tests: a lot from pipe} {win 95 exec cat32} { exec command /c type big |& $cat32 > $path(stdout) 2> $path(stderr) list [contents $path(stdout)] [contents $path(stderr)] } "{$big} stderr32" test winpipe-1.6 {32 bit comprehensive tests: from console} \ - {pcOnly cat32 AllocConsole} { + {win cat32 AllocConsole} { # would block waiting for human input } {} -test winpipe-1.7 {32 bit comprehensive tests: from NUL} {pcOnly exec cat32} { +test winpipe-1.7 {32 bit comprehensive tests: from NUL} {win exec cat32} { exec $cat32 < nul > $path(stdout) 2> $path(stderr) list [contents $path(stdout)] [contents $path(stderr)] } {{} stderr32} -test winpipe-1.8 {32 bit comprehensive tests: from socket} {pcOnly cat32} { +test winpipe-1.8 {32 bit comprehensive tests: from socket} {win cat32} { # doesn't work } {} test winpipe-1.9 {32 bit comprehensive tests: from nowhere} \ - {pcOnly exec cat32 .console} { + {win exec cat32 RealConsole} { exec $cat32 > $path(stdout) 2> $path(stderr) list [contents $path(stdout)] [contents $path(stderr)] } {{} stderr32} test winpipe-1.10 {32 bit comprehensive tests: from file handle} \ - {pcOnly exec cat32} { + {win exec cat32} { set f [open $path(little) r] exec $cat32 <@$f > $path(stdout) 2> $path(stderr) close $f list [contents $path(stdout)] [contents $path(stderr)] } {little stderr32} test winpipe-1.11 {32 bit comprehensive tests: read from application} \ - {pcOnly exec cat32} { - set f [open "|[list $cat32] < $path(little)" r] + {win exec cat32} { + set f [open "|[list $cat32] < [list $path(little)]" r] gets $f line catch {close $f} msg list $line $msg } {little stderr32} test winpipe-1.12 {32 bit comprehensive tests: a little to file} \ - {pcOnly exec cat32} { + {win exec cat32} { exec $cat32 < $path(little) > $path(stdout) 2> $path(stderr) list [contents $path(stdout)] [contents $path(stderr)] } {little stderr32} test winpipe-1.13 {32 bit comprehensive tests: a lot to file} \ - {pcOnly exec cat32} { + {win exec cat32} { exec $cat32 < $path(big) > $path(stdout) 2> $path(stderr) list [contents $path(stdout)] [contents $path(stderr)] } "{$big} stderr32" test winpipe-1.14 {32 bit comprehensive tests: a little to pipe} \ - {pcOnly exec stdio cat32} { + {win exec stdio cat32} { exec $cat32 < $path(little) | [interpreter] $path(more) > $path(stdout) 2> $path(stderr) list [contents $path(stdout)] [contents $path(stderr)] } {little stderr32} test winpipe-1.15 {32 bit comprehensive tests: a lot to pipe} \ - {pcOnly exec stdio cat32} { + {win exec stdio cat32} { exec $cat32 < $path(big) | [interpreter] $path(more) > $path(stdout) 2> $path(stderr) list [contents $path(stdout)] [contents $path(stderr)] } "{$big} stderr32" -test winpipe-1.16 {32 bit comprehensive tests: to console} {pcOnly exec cat32} { +test winpipe-1.16 {32 bit comprehensive tests: to console} {win exec cat32} { catch {exec $cat32 << "You should see this\n" >@stdout} msg set msg } stderr32 -test winpipe-1.17 {32 bit comprehensive tests: to NUL} {pcOnly exec cat32} { +test winpipe-1.17 {32 bit comprehensive tests: to NUL} {win exec cat32} { # some apps hang when sending a large amount to NUL. $cat32 isn't one. catch {exec $cat32 < $path(big) > nul} msg set msg } stderr32 test winpipe-1.18 {32 bit comprehensive tests: to nowhere} \ - {pcOnly exec cat32 .console} { - exec $cat32 < $path(big) >&@stdout + {win exec cat32 RealConsole} { + exec $cat32 < $path(big) >&@stdout } {} -test winpipe-1.19 {32 bit comprehensive tests: to file handle} {pcOnly exec cat32} { +test winpipe-1.19 {32 bit comprehensive tests: to file handle} {win exec cat32} { set f1 [open $path(stdout) w] set f2 [open $path(stderr) w] exec $cat32 < $path(little) >@$f1 2>@$f2 @@ -155,14 +151,14 @@ test winpipe-1.19 {32 bit comprehensive tests: to file handle} {pcOnly exec cat3 list [contents $path(stdout)] [contents $path(stderr)] } {little stderr32} test winpipe-1.20 {32 bit comprehensive tests: write to application} \ - {pcOnly exec cat32} { + {win exec cat32} { set f [open |[list $cat32 >$path(stdout)] w] puts -nonewline $f "foo" catch {close $f} msg list [contents $path(stdout)] $msg } {foo stderr32} test winpipe-1.21 {32 bit comprehensive tests: read/write application} \ - {pcOnly exec cat32} { + {win exec cat32} { set f [open "|[list $cat32]" r+] puts $f $big puts $f \032 @@ -171,13 +167,13 @@ test winpipe-1.21 {32 bit comprehensive tests: read/write application} \ catch {close $f} set r } "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" -test winpipe-1.22 {Checking command.com for Win95/98 hanging} {pcOnly 95 exec} { +test winpipe-1.22 {Checking command.com for Win95/98 hanging} {win 95 exec} { exec command.com /c dir /b set result 1 } 1 file delete more -test winpipe-4.1 {Tcl_WaitPid} {pcOnly nt exec cat32} { +test winpipe-4.1 {Tcl_WaitPid} {win nt exec cat32} { proc readResults {f} { global x result if { [eof $f] } { @@ -197,29 +193,29 @@ test winpipe-4.1 {Tcl_WaitPid} {pcOnly nt exec cat32} { vwait x list $result $x [contents $path(stderr)] } "{$big} 1 stderr32" -test winpipe-4.2 {Tcl_WaitPid: return of exception codes, SIGFPE} {pcOnly exec} { - set f [open "|[tcltest::interpreter]" w+] +test winpipe-4.2 {Tcl_WaitPid: return of exception codes, SIGFPE} {win exec} { + set f [open "|[list [interpreter]]" w+] set pid [pid $f] puts $f "testexcept float_underflow" set status [catch {close $f}] list $status [expr {$pid == [lindex $::errorCode 1]}] [lindex $::errorCode 2] } {1 1 SIGFPE} -test winpipe-4.3 {Tcl_WaitPid: return of exception codes, SIGSEGV} {pcOnly exec} { - set f [open "|[tcltest::interpreter]" w+] +test winpipe-4.3 {Tcl_WaitPid: return of exception codes, SIGSEGV} {win exec} { + set f [open "|[list [interpreter]]" w+] set pid [pid $f] puts $f "testexcept access_violation" set status [catch {close $f}] list $status [expr {$pid == [lindex $::errorCode 1]}] [lindex $::errorCode 2] } {1 1 SIGSEGV} -test winpipe-4.4 {Tcl_WaitPid: return of exception codes, SIGILL} {pcOnly exec} { - set f [open "|[tcltest::interpreter]" w+] +test winpipe-4.4 {Tcl_WaitPid: return of exception codes, SIGILL} {win exec} { + set f [open "|[list [interpreter]]" w+] set pid [pid $f] puts $f "testexcept illegal_instruction" set status [catch {close $f}] list $status [expr {$pid == [lindex $::errorCode 1]}] [lindex $::errorCode 2] } {1 1 SIGILL} -test winpipe-4.5 {Tcl_WaitPid: return of exception codes, SIGINT} {pcOnly exec} { - set f [open "|[tcltest::interpreter]" w+] +test winpipe-4.5 {Tcl_WaitPid: return of exception codes, SIGINT} {win exec} { + set f [open "|[list [interpreter]]" w+] set pid [pid $f] puts $f "testexcept ctrl+c" set status [catch {close $f}] @@ -235,7 +231,7 @@ catch {set env_temp $env(TEMP)} set env(TMP) c:/ set env(TEMP) c:/ -test winpipe-5.1 {TclpCreateTempFile: cleanup temp files} {pcOnly exec} { +test winpipe-5.1 {TclpCreateTempFile: cleanup temp files} {win exec} { set x {} set existing [glob -nocomplain c:/tcl*.tmp] exec [interpreter] < nothing @@ -246,7 +242,7 @@ test winpipe-5.1 {TclpCreateTempFile: cleanup temp files} {pcOnly exec} { } set x } {} -test winpipe-5.2 {TclpCreateTempFile: TMP and TEMP not defined} {pcOnly exec} { +test winpipe-5.2 {TclpCreateTempFile: TMP and TEMP not defined} {win exec} { set tmp $env(TMP) set temp $env(TEMP) unset env(TMP) @@ -257,7 +253,7 @@ test winpipe-5.2 {TclpCreateTempFile: TMP and TEMP not defined} {pcOnly exec} { set x {} } {} test winpipe-5.3 {TclpCreateTempFile: TMP specifies non-existent directory} \ - {pcOnly exec } { + {win exec } { set tmp $env(TMP) set env(TMP) snarky exec [interpreter] < nothing @@ -265,7 +261,7 @@ test winpipe-5.3 {TclpCreateTempFile: TMP specifies non-existent directory} \ set x {} } {} test winpipe-5.4 {TclpCreateTempFile: TEMP specifies non-existent directory} \ - {pcOnly exec} { + {win exec} { set tmp $env(TMP) set temp $env(TEMP) unset env(TMP) @@ -277,7 +273,7 @@ test winpipe-5.4 {TclpCreateTempFile: TEMP specifies non-existent directory} \ } {} test winpipe-6.1 {PipeSetupProc & PipeCheckProc: read threads} \ - {pcOnly exec cat32} { + {win exec cat32} { set f [open "|[list $cat32]" r+] fconfigure $f -blocking 0 fileevent $f writable { set x writable } @@ -298,7 +294,7 @@ test winpipe-6.1 {PipeSetupProc & PipeCheckProc: read threads} \ } {writable timeout readable {foobar } timeout 1 stderr32} test winpipe-6.2 {PipeSetupProc & PipeCheckProc: write threads} \ - {pcOnly exec cat32} { + {win exec cat32} { set f [open "|[list $cat32]" r+] fconfigure $f -blocking 0 fileevent $f writable { set x writable } @@ -315,120 +311,121 @@ set path(echoArgs.tcl) [makeFile { puts "[list $argv0 $argv]" } echoArgs.tcl] + ### validate the raw output of BuildCommandLine(). ### -test winpipe-7.1 {BuildCommandLine: null arguments} {pcOnly exec} { +test winpipe-7.1 {BuildCommandLine: null arguments} {win exec} { exec $env(COMSPEC) /c echo foo "" bar } {foo "" bar} -test winpipe-7.2 {BuildCommandLine: null arguments} {pcOnly exec} { +test winpipe-7.2 {BuildCommandLine: null arguments} {win exec} { exec $env(COMSPEC) /c echo foo {} bar } {foo "" bar} -test winpipe-7.3 {BuildCommandLine: dbl quote quoting #1} {pcOnly exec} { - exec $env(COMSPEC) /c echo foo {"} bar +test winpipe-7.3 {BuildCommandLine: dbl quote quoting #1} {win exec} { + exec $env(COMSPEC) /c echo foo "\"" bar } {foo \" bar} -test winpipe-7.4 {BuildCommandLine: dbl quote quoting #2} {pcOnly exec} { +test winpipe-7.4 {BuildCommandLine: dbl quote quoting #2} {win exec} { exec $env(COMSPEC) /c echo foo {""} bar } {foo \"\" bar} -test winpipe-7.5 {BuildCommandLine: dbl quote quoting #3} {pcOnly exec} { - exec $env(COMSPEC) /c echo foo {" } bar +test winpipe-7.5 {BuildCommandLine: dbl quote quoting #3} {win exec} { + exec $env(COMSPEC) /c echo foo "\" " bar } {foo "\" " bar} -test winpipe-7.6 {BuildCommandLine: dbl quote quoting #4} {pcOnly exec} { +test winpipe-7.6 {BuildCommandLine: dbl quote quoting #4} {win exec} { exec $env(COMSPEC) /c echo foo {a="b"} bar } {foo a=\"b\" bar} -test winpipe-7.7 {BuildCommandLine: dbl quote quoting #5} {pcOnly exec} { +test winpipe-7.7 {BuildCommandLine: dbl quote quoting #5} {win exec} { exec $env(COMSPEC) /c echo foo {a = "b"} bar } {foo "a = \"b\"" bar} -test winpipe-7.8 {BuildCommandLine: dbl quote quoting #6} {pcOnly exec} { - exec $env(COMSPEC) /c echo {"hello"} {""hello""} {"""hello"""} {"\"hello\""} {he llo} {he " llo} +test winpipe-7.8 {BuildCommandLine: dbl quote quoting #6} {win exec} { + exec $env(COMSPEC) /c echo {"hello"} {""hello""} {"""hello"""} {"\"hello\""} {he llo} "he \" llo" } {\"hello\" \"\"hello\"\" \"\"\"hello\"\"\" \"\\\"hello\\\"\" "he llo" "he \" llo"} -test winpipe-7.9 {BuildCommandLine: N backslashes followed a quote rule #1} {pcOnly exec} { +test winpipe-7.9 {BuildCommandLine: N backslashes followed a quote rule #1} {win exec} { exec $env(COMSPEC) /c echo foo \\ bar } {foo \ bar} -test winpipe-7.10 {BuildCommandLine: N backslashes followed a quote rule #2} {pcOnly exec} { +test winpipe-7.10 {BuildCommandLine: N backslashes followed a quote rule #2} {win exec} { exec $env(COMSPEC) /c echo foo \\\\ bar } {foo \\ bar} -test winpipe-7.11 {BuildCommandLine: N backslashes followed a quote rule #3} {pcOnly exec} { +test winpipe-7.11 {BuildCommandLine: N backslashes followed a quote rule #3} {win exec} { exec $env(COMSPEC) /c echo foo \\\ \\ bar } {foo "\ \\" bar} -test winpipe-7.12 {BuildCommandLine: N backslashes followed a quote rule #4} {pcOnly exec} { +test winpipe-7.12 {BuildCommandLine: N backslashes followed a quote rule #4} {win exec} { exec $env(COMSPEC) /c echo foo \\\ \\\\ bar } {foo "\ \\\\" bar} -test winpipe-7.13 {BuildCommandLine: N backslashes followed a quote rule #5} {pcOnly exec} { +test winpipe-7.13 {BuildCommandLine: N backslashes followed a quote rule #5} {win exec} { exec $env(COMSPEC) /c echo foo \\\ \\\\\\ bar } {foo "\ \\\\\\" bar} -test winpipe-7.14 {BuildCommandLine: N backslashes followed a quote rule #6} {pcOnly exec} { +test winpipe-7.14 {BuildCommandLine: N backslashes followed a quote rule #6} {win exec} { exec $env(COMSPEC) /c echo foo \\\ \\\" bar } {foo "\ \\\"" bar} -test winpipe-7.15 {BuildCommandLine: N backslashes followed a quote rule #7} {pcOnly exec} { +test winpipe-7.15 {BuildCommandLine: N backslashes followed a quote rule #7} {win exec} { exec $env(COMSPEC) /c echo foo \\\ \\\\\" bar } {foo "\ \\\\\"" bar} -test winpipe-7.16 {BuildCommandLine: N backslashes followed a quote rule #8} {pcOnly exec} { +test winpipe-7.16 {BuildCommandLine: N backslashes followed a quote rule #8} {win exec} { exec $env(COMSPEC) /c echo foo \\\ \\\\\\\" bar } {foo "\ \\\\\\\"" bar} -test winpipe-7.17 {BuildCommandLine: special chars #4} {pcOnly exec} { +test winpipe-7.17 {BuildCommandLine: special chars #4} {win exec} { exec $env(COMSPEC) /c echo foo \{ bar } "foo \{ bar" -test winpipe-7.18 {BuildCommandLine: special chars #5} {pcOnly exec} { +test winpipe-7.18 {BuildCommandLine: special chars #5} {win exec} { exec $env(COMSPEC) /c echo foo \} bar } "foo \} bar" ### validate the pass-thru from BuildCommandLine() to the crt's parse_cmdline(). ### -test winpipe-8.1 {BuildCommandLine/parse_cmdline pass-thru: null arguments} {pcOnly exec} { +test winpipe-8.1 {BuildCommandLine/parse_cmdline pass-thru: null arguments} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo "" bar } [list $path(echoArgs.tcl) [list foo {} bar]] -test winpipe-8.2 {BuildCommandLine/parse_cmdline pass-thru: null arguments} {pcOnly exec} { +test winpipe-8.2 {BuildCommandLine/parse_cmdline pass-thru: null arguments} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo {} bar } [list $path(echoArgs.tcl) [list foo {} bar]] -test winpipe-8.3 {BuildCommandLine/parse_cmdline pass-thru: dbl quote quoting #1} {pcOnly exec} { - exec [interpreter] $path(echoArgs.tcl) foo {"} bar -} [list $path(echoArgs.tcl) [list foo {"} bar]] -test winpipe-8.4 {BuildCommandLine/parse_cmdline pass-thru: dbl quote quoting #2} {pcOnly exec} { +test winpipe-8.3 {BuildCommandLine/parse_cmdline pass-thru: dbl quote quoting #1} {win exec} { + exec [interpreter] $path(echoArgs.tcl) foo "\"" bar +} [list $path(echoArgs.tcl) [list foo "\"" bar]] +test winpipe-8.4 {BuildCommandLine/parse_cmdline pass-thru: dbl quote quoting #2} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo {""} bar } [list $path(echoArgs.tcl) [list foo {""} bar]] -test winpipe-8.5 {BuildCommandLine/parse_cmdline pass-thru: dbl quote quoting #3} {pcOnly exec} { - exec [interpreter] $path(echoArgs.tcl) foo {" } bar -} [list $path(echoArgs.tcl) [list foo {" } bar]] -test winpipe-8.6 {BuildCommandLine/parse_cmdline pass-thru: dbl quote quoting #4} {pcOnly exec} { +test winpipe-8.5 {BuildCommandLine/parse_cmdline pass-thru: dbl quote quoting #3} {win exec} { + exec [interpreter] $path(echoArgs.tcl) foo "\" " bar +} [list $path(echoArgs.tcl) [list foo "\" " bar]] +test winpipe-8.6 {BuildCommandLine/parse_cmdline pass-thru: dbl quote quoting #4} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo {a="b"} bar } [list $path(echoArgs.tcl) [list foo {a="b"} bar]] -test winpipe-8.7 {BuildCommandLine/parse_cmdline pass-thru: dbl quote quoting #5} {pcOnly exec} { +test winpipe-8.7 {BuildCommandLine/parse_cmdline pass-thru: dbl quote quoting #5} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo {a = "b"} bar } [list $path(echoArgs.tcl) [list foo {a = "b"} bar]] -test winpipe-8.8 {BuildCommandLine/parse_cmdline pass-thru: dbl quote quoting #6} {pcOnly exec} { +test winpipe-8.8 {BuildCommandLine/parse_cmdline pass-thru: dbl quote quoting #6} {win exec} { exec [interpreter] $path(echoArgs.tcl) {"hello"} {""hello""} {"""hello"""} {"\"hello\""} {he llo} {he " llo} } [list $path(echoArgs.tcl) [list {"hello"} {""hello""} {"""hello"""} {"\"hello\""} {he llo} {he " llo}]] -test winpipe-8.9 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #1} {pcOnly exec} { +test winpipe-8.9 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #1} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo \\ bar } [list $path(echoArgs.tcl) [list foo \\ bar]] -test winpipe-8.10 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #2} {pcOnly exec} { +test winpipe-8.10 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #2} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo \\\\ bar } [list $path(echoArgs.tcl) [list foo \\\\ bar]] -test winpipe-8.11 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #3} {pcOnly exec} { +test winpipe-8.11 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #3} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo \\\ \\ bar } [list $path(echoArgs.tcl) [list foo \\\ \\ bar]] -test winpipe-8.12 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #4} {pcOnly exec} { +test winpipe-8.12 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #4} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo \\\ \\\\ bar } [list $path(echoArgs.tcl) [list foo \\\ \\\\ bar]] -test winpipe-8.13 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #5} {pcOnly exec} { +test winpipe-8.13 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #5} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo \\\ \\\\\\ bar } [list $path(echoArgs.tcl) [list foo \\\ \\\\\\ bar]] -test winpipe-8.14 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #6} {pcOnly exec} { +test winpipe-8.14 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #6} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo \\\ \\\" bar } [list $path(echoArgs.tcl) [list foo \\\ \\\" bar]] -test winpipe-8.15 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #7} {pcOnly exec} { +test winpipe-8.15 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #7} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo \\\ \\\\\" bar } [list $path(echoArgs.tcl) [list foo \\\ \\\\\" bar]] -test winpipe-8.16 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #8} {pcOnly exec} { +test winpipe-8.16 {BuildCommandLine/parse_cmdline pass-thru: N backslashes followed a quote rule #8} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo \\\ \\\\\\\" bar } [list $path(echoArgs.tcl) [list foo \\\ \\\\\\\" bar]] -test winpipe-8.17 {BuildCommandLine/parse_cmdline pass-thru: special chars #1} {pcOnly exec} { +test winpipe-8.17 {BuildCommandLine/parse_cmdline pass-thru: special chars #1} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo \{ bar } [list $path(echoArgs.tcl) [list foo \{ bar]] -test winpipe-8.18 {BuildCommandLine/parse_cmdline pass-thru: special chars #2} {pcOnly exec} { +test winpipe-8.18 {BuildCommandLine/parse_cmdline pass-thru: special chars #2} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo \} bar } [list $path(echoArgs.tcl) [list foo \} bar]] -test winpipe-8.19 {ensure parse_cmdline isn't doing wildcard replacement} {pcOnly exec} { +test winpipe-8.19 {ensure parse_cmdline isn't doing wildcard replacement} {win exec} { exec [interpreter] $path(echoArgs.tcl) foo * makefile.?c bar } [list $path(echoArgs.tcl) [list foo * makefile.?c bar]] diff --git a/tests/winTime.test b/tests/winTime.test index 9ce6b12..278db32 100644 --- a/tests/winTime.test +++ b/tests/winTime.test @@ -20,13 +20,13 @@ testConstraint testwinclock [llength [info commands testwinclock]] # The next two tests will crash on Windows if the check for negative # clock values is not done properly. -test winTime-1.1 {TclpGetDate} {pcOnly} { +test winTime-1.1 {TclpGetDate} {win} { set ::env(TZ) JST-9 set result [clock format -1 -format %Y] unset ::env(TZ) set result } {1970} -test winTime-1.2 {TclpGetDate} {pcOnly} { +test winTime-1.2 {TclpGetDate} {win} { set ::env(TZ) PST8 set result [clock format 1 -format %Y] unset ::env(TZ) |