From 6e755d5f769e62b10ce029ce726659708d9549e5a943522ed071e0f41c25f710 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Wed, 18 Jun 2025 16:32:36 +0300 Subject: [PATCH] EQ schema command tests --- c/cmd/deatomiser/deatomiser.c | 2 +- c/cmd/pp/pp.c | 2 +- c/lib/atom.h | 3 -- c/lib/cm/pub.c | 2 +- c/lib/dec.c | 3 +- c/lib/items.c | 2 +- go/schema/check.go | 2 +- tcl/schema.t/generic.t | 60 +++++++++++++++++++++++++++++++++++ 8 files changed, 67 insertions(+), 9 deletions(-) diff --git a/c/cmd/deatomiser/deatomiser.c b/c/cmd/deatomiser/deatomiser.c index 9e89f6f..ba3c21d 100644 --- a/c/cmd/deatomiser/deatomiser.c +++ b/c/cmd/deatomiser/deatomiser.c @@ -76,7 +76,7 @@ main(void) fputs("TRUE\n", stdout); break; case KEKSItemHexlet: - UUIDPrint(atom.v.hexlet); + UUIDPrint(atom.v.str.ptr); fputs("\n", stdout); break; case KEKSItemMagic: diff --git a/c/cmd/pp/pp.c b/c/cmd/pp/pp.c index bbd8286..5cdd4bd 100644 --- a/c/cmd/pp/pp.c +++ b/c/cmd/pp/pp.c @@ -121,7 +121,7 @@ printer( // NOLINT(misc-no-recursion) fputs("TRUE\n", stdout); break; case KEKSItemHexlet: - UUIDPrint(item->atom.v.hexlet); + UUIDPrint(item->atom.v.str.ptr); fputs("\n", stdout); break; case KEKSItemMagic: diff --git a/c/lib/atom.h b/c/lib/atom.h index c13edbe..74b7c56 100644 --- a/c/lib/atom.h +++ b/c/lib/atom.h @@ -79,8 +79,6 @@ enum KEKSItemType { // @item .typ // High level @ref{KEKSItemType, type} of the atom's value. As a rule // you should look solely on it. -// @item .v.hexlet -// Pointer to 16-byte hexlet value. // @item .v.pint // Value of the positive integer. // @item .v.nint @@ -104,7 +102,6 @@ enum KEKSItemType { // @end deftp struct KEKSAtom { union { - const unsigned char *hexlet; uint64_t pint; int64_t nint; struct { diff --git a/c/lib/cm/pub.c b/c/lib/cm/pub.c index 04d8fb1..06206b5 100644 --- a/c/lib/cm/pub.c +++ b/c/lib/cm/pub.c @@ -76,7 +76,7 @@ KEKSCMPubParse( } cer->sig = items->list[idx].atom.v.list.head; idx = KEKSItemsGetByKey(items, cer->sig, "tbs"); - cer->cid = items->list[KEKSItemsGetByKey(items, idx, "cid")].atom.v.hexlet; + cer->cid = items->list[KEKSItemsGetByKey(items, idx, "cid")].atom.v.str.ptr; cer->sid = items->list[KEKSItemsGetByKey(items, idx, "sid")].atom.v.str.ptr; idx = KEKSItemsGetByKey(items, idx, "exp"); err = KEKSTAI64ToTimespec( diff --git a/c/lib/dec.c b/c/lib/dec.c index c2d8b39..408f83e 100644 --- a/c/lib/dec.c +++ b/c/lib/dec.c @@ -115,7 +115,8 @@ KEKSAtomDecode( // NOLINT(misc-no-recursion) if (len < (*got)) { return KEKSErrNotEnough; } - atom->v.hexlet = buf + 1; + atom->v.str.ptr = buf + 1; + atom->v.str.len = 16; break; case KEKSAtomMagic: atom->typ = KEKSItemMagic; diff --git a/c/lib/items.c b/c/lib/items.c index 7185371..e0285b9 100644 --- a/c/lib/items.c +++ b/c/lib/items.c @@ -330,7 +330,7 @@ KEKSItemsEncode( // NOLINT(misc-no-recursion) ok = KEKSAtomBoolEncode(&got, buf + *off, cap - (*off), true); break; case KEKSItemHexlet: - ok = KEKSAtomHexletEncode(&got, buf + *off, cap - (*off), item->atom.v.hexlet); + ok = KEKSAtomHexletEncode(&got, buf + *off, cap - (*off), item->atom.v.str.ptr); break; case KEKSItemMagic: ok = KEKSAtomMagicEncode( diff --git a/go/schema/check.go b/go/schema/check.go index 0d74f8c..7edeed9 100644 --- a/go/schema/check.go +++ b/go/schema/check.go @@ -233,7 +233,7 @@ func Check(schemaName string, schemas map[string][][]any, data any) error { eq = got == string(expect) case []byte: eq = bytes.Equal(got, expect) - case keks.Hexlet: + case *keks.Hexlet: eq = bytes.Equal(got[:], expect) case *tai64n.TAI64: eq = bytes.Equal(got[:], expect) diff --git a/tcl/schema.t/generic.t b/tcl/schema.t/generic.t index dde238e..e384b3b 100755 --- a/tcl/schema.t/generic.t +++ b/tcl/schema.t/generic.t @@ -379,6 +379,66 @@ test_expect_success "int len=0" "$SCHEMA_VALIDATE schema.keks e schema.tcl <schema.keks +$root/keks.tcl >data.keks.hex <data.keks +test_expect_success "str =" "$SCHEMA_VALIDATE schema.keks e data.keks.hex <data.keks +test_expect_success "str !=" "! $SCHEMA_VALIDATE schema.keks e schema.tcl <schema.keks +$root/keks.tcl >data.keks.hex <data.keks +test_expect_success "str cyrillic =" "$SCHEMA_VALIDATE schema.keks e schema.tcl <schema.keks +$root/keks.tcl >data.keks.hex <data.keks +test_expect_success "hexlet =" "$SCHEMA_VALIDATE schema.keks e data.keks.hex <data.keks +test_expect_success "hexlet !=" "! $SCHEMA_VALIDATE schema.keks e schema.tcl <schema.keks +$root/keks.tcl >data.keks.hex <data.keks +test_expect_success "magic =" "$SCHEMA_VALIDATE schema.keks e data.keks.hex <data.keks +test_expect_success "magic !=" "! $SCHEMA_VALIDATE schema.keks e schema.tcl <