From: Sergey Matveev Date: Fri, 22 Nov 2024 15:19:44 +0000 (+0300) Subject: Better TAI-related testing X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0ad5ff58a8b95f213fa6e60b7d2b3a9e8c86ae0c867e07d398328ba79eda7a4d;p=keks.git Better TAI-related testing --- diff --git a/cyac/lib/enctai.c b/cyac/lib/enctai.c index 9aa8074..eab6f7f 100644 --- a/cyac/lib/enctai.c +++ b/cyac/lib/enctai.c @@ -38,17 +38,12 @@ YACTimespecToTAI64(unsigned char *buf, const struct timespec *ts) bool YACTimespecToTAI(struct timespec *ts) { - int64_t v = (int64_t)(ts->tv_sec); - int64_t i = 0; - for (; i < YACLeapsecsN; i++) { - if (v < YACLeapsecs[i]) { - break; + int64_t v = 10 + (int64_t)(ts->tv_sec); + for (int64_t i = 0; i < YACLeapsecsN; i++) { + if (v >= YACLeapsecs[i]) { + v++; } } - v += (int64_t)10 + i; - if (v == YACLeapsecs[i]) { - v++; - } if (((uint64_t)1 << ((sizeof(time_t) * 8) - 1)) < (uint64_t)v) { return false; } diff --git a/gyac/go.mod b/gyac/go.mod index e8990e9..7ec9b5a 100644 --- a/gyac/go.mod +++ b/gyac/go.mod @@ -2,7 +2,7 @@ module go.cypherpunks.su/yac/gyac go 1.22 -require go.cypherpunks.su/tai64n/v4 v4.0.0 +require go.cypherpunks.su/tai64n/v4 v4.1.0 require ( github.com/google/uuid v1.6.0 diff --git a/gyac/go.sum b/gyac/go.sum index 4fea018..063c682 100644 --- a/gyac/go.sum +++ b/gyac/go.sum @@ -2,5 +2,5 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -go.cypherpunks.su/tai64n/v4 v4.0.0 h1:jFEoz3XLOdimA0ZXarzRvGYNublOpgFv04r656UrYiI= -go.cypherpunks.su/tai64n/v4 v4.0.0/go.mod h1:/uKUdhLOy8UciRKpapPaFXSOoa/SiXjs3XsDDpAz7OA= +go.cypherpunks.su/tai64n/v4 v4.1.0 h1:jW0EyklKXpSy9DSFMcDbu7XuLlMkn6kkpNWiMG6UT5c= +go.cypherpunks.su/tai64n/v4 v4.1.0/go.mod h1:/uKUdhLOy8UciRKpapPaFXSOoa/SiXjs3XsDDpAz7OA= diff --git a/pyac/pyac.py b/pyac/pyac.py index 5d9a0b2..d3708ef 100755 --- a/pyac/pyac.py +++ b/pyac/pyac.py @@ -154,12 +154,10 @@ def _str(v, utf8): def utc2tai(secs): """Add leapseconds to UTC """ - for diff, leapsec in enumerate(Leapsecs): - if secs < leapsec: - break - secs += Leapsecs1972 + diff - if secs == leapsec: - secs += 1 + secs += Leapsecs1972 + for leapsec in Leapsecs: + if secs >= leapsec: + secs += 1 return secs @@ -175,13 +173,15 @@ def dumps(v): if isinstance(v, float): raise NotImplementedError("no FLOAT* support") if isinstance(v, datetime): + ms = v.microsecond + v = v.replace(microsecond=0) secs = int(v.replace(tzinfo=timezone.utc).timestamp()) secs = utc2tai(secs) + TAI64Base - if v.microsecond == 0: + if ms == 0: return _byte(TagTAI64) + secs.to_bytes(8, "big") return ( _byte(TagTAI64N) + secs.to_bytes(8, "big") + - (v.microsecond * 1000).to_bytes(4, "big") + (ms * 1000).to_bytes(4, "big") ) if isinstance(v, Raw): return _byte(v.t) + v.v