]> Cypherpunks repositories - keks.git/commitdiff
EQ schema command tests
authorSergey Matveev <stargrave@stargrave.org>
Wed, 18 Jun 2025 13:32:36 +0000 (16:32 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Wed, 18 Jun 2025 13:32:36 +0000 (16:32 +0300)
c/cmd/deatomiser/deatomiser.c
c/cmd/pp/pp.c
c/lib/atom.h
c/lib/cm/pub.c
c/lib/dec.c
c/lib/items.c
go/schema/check.go
tcl/schema.t/generic.t

index 9e89f6fad8da704880fb47e03d261e80cad063edd194f790035cfed816e95f67..ba3c21d1301549cb8acddda0dd057bdba95ce4f94e74743a57c0e8fd510449c1 100644 (file)
@@ -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:
index bbd8286e38857acea61ac976e5c9e111fc124a8075afa8087d741b916e471905..5cdd4bd418423562ef9a5e3622d9eecea7c3a5cd96c96ad8e9801ec2d14ba296 100644 (file)
@@ -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:
index c13edbe18ea8f3fa78cd70fceb8745598789bf481c2bd4688740154f14cdca6a..74b7c56327088be0588da2151f077c6936666c131a1d9f7e953647eddcba3519 100644 (file)
@@ -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 {
index 04d8fb19bec8d1fc024aabf7d269531cd719c4dd953324339fdef0bc102b9584..06206b5e935a77329b5edff7c807308b0639ac2b15a603bb6b1ca21924656c54 100644 (file)
@@ -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(
index c2d8b39e76834f117f33709a49ad9b45bd42691e6d81eac6fafcac14baf84e00..408f83e7098dedfa4c84c41d80cfd01329dda28ad00290281306bd0124843d88 100644 (file)
@@ -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;
index 71853710281b0583115d5241bb72c7d61b89c45ed723d42bfe6ae461e1d1c0c9..e0285b9f4ff1c9851d8da1747b56e515a881240199f25a965bf13a1b0e19447e 100644 (file)
@@ -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(
index 0d74f8ce433762b8d48ef2892acd022252f3a06de704f3a9b33123b0d9c6f6ea..7edeed90acea3e8da2bf5b14dd18259f1bc8843fd5a5acd67c0834fd59a4a7fa 100644 (file)
@@ -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)
index dde238e6b510555ac6c93180273882ad8db02277fdd444f00cda274886e04f7f..e384b3bf37568ca366c1d5cf1c909a613335a9d667e9e10c92f9119d11604381 100755 (executable)
@@ -379,6 +379,66 @@ test_expect_success "int len=0" "$SCHEMA_VALIDATE schema.keks e <data.keks"
 
 ########################################################################
 
+cat >schema.tcl <<EOF
+e {{field . {str} =hello}}
+EOF
+$root/schema.tcl schema.tcl | xxd -r -p >schema.keks
+$root/keks.tcl >data.keks.hex <<EOF
+STR hello
+EOF
+xxd -r -p <data.keks.hex >data.keks
+test_expect_success "str =" "$SCHEMA_VALIDATE schema.keks e <data.keks"
+
+$root/keks.tcl >data.keks.hex <<EOF
+STR foobar
+EOF
+xxd -r -p <data.keks.hex >data.keks
+test_expect_success "str !=" "! $SCHEMA_VALIDATE schema.keks e <data.keks"
+
+cat >schema.tcl <<EOF
+e {{field . {str} =[encoding convertto utf-8 привет]}}
+EOF
+$root/schema.tcl schema.tcl | xxd -r -p >schema.keks
+$root/keks.tcl >data.keks.hex <<EOF
+STR привет
+EOF
+xxd -r -p <data.keks.hex >data.keks
+test_expect_success "str cyrillic =" "$SCHEMA_VALIDATE schema.keks e <data.keks"
+
+cat >schema.tcl <<EOF
+e {{field . {hexlet} =[binary decode hex "0e875e3fd38549eb87b4be42d641c367"]}}
+EOF
+$root/schema.tcl schema.tcl | xxd -r -p >schema.keks
+$root/keks.tcl >data.keks.hex <<EOF
+HEXLET 0e875e3f-d385-49eb-87b4-be42d641c367
+EOF
+xxd -r -p <data.keks.hex >data.keks
+test_expect_success "hexlet =" "$SCHEMA_VALIDATE schema.keks e <data.keks"
+
+$root/keks.tcl >data.keks.hex <<EOF
+HEXLET 0e875e3f-d385-49eb-87b4-be42d641c368
+EOF
+xxd -r -p <data.keks.hex >data.keks
+test_expect_success "hexlet !=" "! $SCHEMA_VALIDATE schema.keks e <data.keks"
+
+cat >schema.tcl <<EOF
+e {{field foo {magic} =world}}
+EOF
+$root/schema.tcl schema.tcl | xxd -r -p >schema.keks
+$root/keks.tcl >data.keks.hex <<EOF
+MAP {foo {MAGIC world}}
+EOF
+xxd -r -p <data.keks.hex >data.keks
+test_expect_success "magic =" "$SCHEMA_VALIDATE schema.keks e <data.keks"
+
+$root/keks.tcl >data.keks.hex <<EOF
+MAP {foo {MAGIC мир}}
+EOF
+xxd -r -p <data.keks.hex >data.keks
+test_expect_success "magic !=" "! $SCHEMA_VALIDATE schema.keks e <data.keks"
+
+########################################################################
+
 cat >schema.tcl <<EOF
 fpr {{field . {bin} len=4}}
 e {