]> Cypherpunks repositories - keks.git/commitdiff
Do not forcefully convert to TAI
authorSergey Matveev <stargrave@stargrave.org>
Tue, 15 Apr 2025 08:09:08 +0000 (11:09 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Tue, 15 Apr 2025 08:09:31 +0000 (11:09 +0300)
go/cmd/pp/tcl.go
tcl/keks.tcl
tcl/mk-fuzz-inputs
tcl/test-vector.tcl

index b739d2c3517db29255bf9386d070f93ce8cb68f5bda963c55c1c1d70833e4e41..aeb0daacf173339f27532c7da709519094bd5dd4ce280d0de381b35e4fa52e27 100644 (file)
@@ -38,7 +38,7 @@ func tclTAI(t time.Time, ns int, as uint64) {
        if isLeap || year > 9999 {
                fmt.Printf("TAI64 %d %d %d", t.Unix(), ns, as)
        } else {
-               fmt.Printf("TAI64 [UTCFromISO \"%s\"] %d %d",
+               fmt.Printf("TAI64 [ToTAI [ISOToSec \"%s\"]] %d %d",
                        utc.Format("2006-01-02 15:04:05"), ns, as)
        }
 }
index b0255e99d9f09565dd305662c53ab835f5ab22b3120fc34886e7398169281eed..64600ef20dd9844bd7a1b5ca1ad600222d0f99f0f4e544f5a51ac9f6c2480a8c 100755 (executable)
@@ -224,7 +224,8 @@ proc BLOB {chunkLen v} {
     }
 }
 
-proc UTCFromISO {v} {
+# v is a "2006-01-02 15:04:05"-formatted string that is converted to seconds.
+proc ISOToSec {v} {
     return [clock scan $v -format {%Y-%m-%d %H:%M:%S} -gmt 1]
 }
 
@@ -259,12 +260,12 @@ variable Leapsecs {
 }
 for {set i 0} {$i < [llength $Leapsecs]} {incr i} {
     set v [lindex $Leapsecs $i]
-    set v [UTCFromISO "$v-01 00:00:00"]
+    set v [ISOToSec "$v-01 00:00:00"]
     set v [expr {$v + 10 + $i}]
     lset Leapsecs $i $v
 }
 
-proc toTAI64 {v} {
+proc ToTAI {v} {
     variable Leapsecs
     set i 0
     for {} {$i < [llength $Leapsecs]} {incr i} {
@@ -279,30 +280,29 @@ proc toTAI64 {v} {
     if {$v == [lindex $Leapsecs $i]} {
         incr v
     }
-    set v [expr {$v + (1<<62)}]
-    upvar buf buf
-    toBE 8 $v
+    return $v
 }
 
 proc TAI64 {v {n 0} {a 0}} {
     upvar buf buf
+    set v [expr {$v + (1<<62)}]
     if {$a != 0} {
         char [expr 0x1A]
-        toTAI64 $v
+        toBE 8 $v
         toBE 4 $n
         toBE 4 $a
     } elseif {$n != 0} {
         char [expr 0x19]
-        toTAI64 $v
+        toBE 8 $v
         toBE 4 $n
     } else {
         char [expr 0x18]
-        toTAI64 $v
+        toBE 8 $v
     }
 }
 
 namespace export EOC NIL FALSE TRUE HEXLET MAGIC INT STR BIN RAW
-namespace export TAI64 UTCFromISO
+namespace export TAI64 ToTAI ISOToSec
 namespace export LIST MAP SET LenFirstSort BLOB
 
 }
index 54667e58cc22c99962c40b812c2f7daba4ea1b726874ec73724f39f3533b8891..3771b884d3fc25fe01d5bf564cc275db02c228cd70f81edd9e046e1315a79684 100755 (executable)
@@ -26,7 +26,7 @@ dump 'LIST {NIL}' >list-nil
 dump 'LIST {TRUE FALSE}' >list-bool
 dump 'MAP {}' >map-empty
 dump 'MAP {a {LIST {NIL}}}' >map-foo
-dump 'TAI64 [UTCFromISO "1970-01-01 00:00:00"]' >tai-utc0
+dump 'TAI64 [ToTAI [ISOToSec "1970-01-01 00:00:00"]]' >tai-utc0
 dump 'TAI64 -11' >tai-before
 dump 'RAW [binary decode hex "1840000000586846A4"]' >tai-leap
 dump 'TAI64 1234 1234' >tai-ns
index f63b061636f52547a9b7c7dfc1fdc3f2128f65278ebf24f78b0e84f7991a916c..8ee7fe0cbe0c6332be118ad4483a61e061281142e2723e1fb58ef9caffa5f9ef 100644 (file)
@@ -61,10 +61,10 @@ MAP {
         {RAW [binary decode hex "180000000000000000"]}
     }}
     dates {LIST {
-        {TAI64 1234567890}
-        {TAI64 1234567890 456000}
-        {TAI64 1234567890 456789}
-        {TAI64 1234567890 456789 123456789}
+        {TAI64 [ToTAI 1234567890]}
+        {TAI64 [ToTAI 1234567890] 456000}
+        {TAI64 [ToTAI 1234567890] 456789}
+        {TAI64 [ToTAI 1234567890] 456789 123456789}
     }}
     uuid {HEXLET 0e875e3f-d385-49eb-87b4-be42d641c367}
     ip {HEXLET 2001:0db8:85a3:08d3:1319:8a2e:0370:7348}