]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add randomjson.c to testfixture. Use it for a new set of invariant tests
authordrh <>
Mon, 18 Dec 2023 14:24:13 +0000 (14:24 +0000)
committerdrh <>
Mon, 18 Dec 2023 14:24:13 +0000 (14:24 +0000)
against JSON functions.

FossilOrigin-Name: f1c040606bfe784804134d8f3ca130908fad5212b47e3c32792baab977470943

Makefile.in
Makefile.msc
main.mk
manifest
manifest.uuid
src/test1.c
test/json105.test
test/json106.test [new file with mode: 0644]

index a461685bf2caddbda7515eaf5e4c739127c534df..cb894666d981fb18484bda991e93f66f46853d8f 100644 (file)
@@ -447,6 +447,7 @@ TESTSRC += \
   $(TOP)/ext/misc/percentile.c \
   $(TOP)/ext/misc/prefixes.c \
   $(TOP)/ext/misc/qpvtab.c \
+  $(TOP)/ext/misc/randomjson.c \
   $(TOP)/ext/misc/regexp.c \
   $(TOP)/ext/misc/remember.c \
   $(TOP)/ext/misc/series.c \
@@ -1295,6 +1296,7 @@ TESTFIXTURE_FLAGS += -DSQLITE_ENABLE_STMTVTAB
 TESTFIXTURE_FLAGS += -DSQLITE_ENABLE_DBPAGE_VTAB
 TESTFIXTURE_FLAGS += -DSQLITE_ENABLE_BYTECODE_VTAB
 TESTFIXTURE_FLAGS += -DSQLITE_CKSUMVFS_STATIC
+TESTFIXTURE_FLAGS += -DSQLITE_STATIC_RANDOMJSON
 TESTFIXTURE_FLAGS += -DSQLITE_STRICT_SUBTYPE=1
 
 TESTFIXTURE_SRC0 = $(TESTSRC2) libsqlite3.la
index 81ee6bb56171fa9d93f92ce10540baee0a77cab5..15c44b62f9319ca96cc3bf0ea687e3c3e15cfcda 100644 (file)
@@ -1584,6 +1584,7 @@ TESTEXT = \
   $(TOP)\ext\misc\percentile.c \
   $(TOP)\ext\misc\prefixes.c \
   $(TOP)\ext\misc\qpvtab.c \
+  $(TOP)\ext\misc\randomjson.c \
   $(TOP)\ext\misc\regexp.c \
   $(TOP)\ext\misc\remember.c \
   $(TOP)\ext\misc\series.c \
@@ -2437,6 +2438,7 @@ TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_DBPAGE_VTAB=1
 TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_BYTECODE_VTAB=1
 TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_CKSUMVFS_STATIC=1
 TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) $(TEST_CCONV_OPTS)
+TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_STATIC_RANDOMJSON
 TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_STRICT_SUBTYPE=1
 
 TESTFIXTURE_SRC0 = $(TESTEXT) $(TESTSRC2)
diff --git a/main.mk b/main.mk
index f746b1bb67a74887426469b2624a0287497d2cde..081e0cd3b5b4e83d37a8aab0ec6bd3f318223dab 100644 (file)
--- a/main.mk
+++ b/main.mk
@@ -360,6 +360,7 @@ TESTSRC += \
   $(TOP)/ext/misc/percentile.c \
   $(TOP)/ext/misc/prefixes.c \
   $(TOP)/ext/misc/qpvtab.c \
+  $(TOP)/ext/misc/randomjson.c \
   $(TOP)/ext/misc/regexp.c \
   $(TOP)/ext/misc/remember.c \
   $(TOP)/ext/misc/series.c \
@@ -901,6 +902,8 @@ TESTFIXTURE_FLAGS += -DSQLITE_ENABLE_DBPAGE_VTAB
 TESTFIXTURE_FLAGS += -DSQLITE_ENABLE_BYTECODE_VTAB
 TESTFIXTURE_FLAGS += -DTCLSH_INIT_PROC=sqlite3TestInit
 TESTFIXTURE_FLAGS += -DSQLITE_CKSUMVFS_STATIC
+TESTFIXTURE_FLAGS += -DSQLITE_STATIC_RANDOMJSON
+TESTFIXTURE_FLAGS += -DSQLITE_STRICT_SUBTYPE=1
 
 testfixture$(EXE): $(TESTSRC2) libsqlite3.a $(TESTSRC) $(TOP)/src/tclsqlite.c
        $(TCCX) $(TCL_FLAGS) $(TESTFIXTURE_FLAGS)                            \
index c15311e551a70ef85d2243d89fa787d0a641b0d7..b37b609b85274b804b4615589a5a1dbaab398327 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,11 +1,11 @@
-C Ensure\sthat\sall\sobject\slabels\sfor\sindividual\sobjects\sgenerated\sby\nrandomjson.c\sare\sunique.
-D 2023-12-18T14:16:58.155
+C Add\srandomjson.c\sto\stestfixture.\s\sUse\sit\sfor\sa\snew\sset\sof\sinvariant\stests\nagainst\sJSON\sfunctions.
+D 2023-12-18T14:24:13.030
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
-F Makefile.in 8e458bac73ffdbd46bc486d243a9aebb589fca36c189bac7ae6c7a53c4013b22
+F Makefile.in 24be65ae641c5727bbc247d60286a15ecc24fb80f14f8fb2d32533bf0ec96e79
 F Makefile.linux-gcc f3842a0b1efbfbb74ac0ef60e56b301836d05b4d867d014f714fa750048f1ab6
-F Makefile.msc 2b563f70c18211698d9fc7720007cde52f37549e0802e172ae11d022ced3fcf8
+F Makefile.msc ddca98e096947fc26e3bb1a20678999dd0a590456278ad7dc55b882fca108bd6
 F README.md 6358805260a03ebead84e168bbf3740ddf3f683b477e478567186aa7afb490d3
 F VERSION 73573d4545343f001bf5dc5461173a7c78c203dd046cabcf99153878cf25d3a6
 F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
@@ -656,7 +656,7 @@ F ext/wasm/wasmfs.make 8a4955882aaa0783b3f60a9484a1f0f3d8b6f775c0fcd17c082f31966
 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
 F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
-F main.mk c6690ad32427ca98ba66e13a4747f3bcf644b2973e2a3a9d8921db7e163055a3
+F main.mk ef8d6b0e76b27d2b32d7b71ea30a2b2626b668f998a4f32f6171c9623a310a53
 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421
@@ -746,7 +746,7 @@ F src/sqliteLimit.h 33b1c9baba578d34efe7dfdb43193b366111cdf41476b1e82699e14c11ee
 F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749
 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
 F src/tclsqlite.c ecbc3c99c0d0c3ed122a913f143026c26d38d57f33e06bb71185dd5c1efe37cd
-F src/test1.c f9620e8f0d0fa4edb239201a732c4dd1562f0cdd9741955c89332d49e14a5edd
+F src/test1.c ac6542cddd1f405e332d869946b977b2ce8b4dc28b9f7cc61df38abe1fe49bc3
 F src/test2.c 54520d0565ef2b9bf0f8f1dcac43dc4d06baf4ffe13d10905f8d8c3ad3e4b9ab
 F src/test3.c e5178558c41ff53236ae0271e9acb3d6885a94981d2eb939536ee6474598840e
 F src/test4.c 4533b76419e7feb41b40582554663ed3cd77aaa54e135cf76b3205098cd6e664
@@ -1338,7 +1338,8 @@ F test/json101.test 70587d7d35ef9e2126364ba70f0c951f70827cfbd28649d779ff3df7e8f8
 F test/json102.test 557a46e16df1aa9bdbc4076a71a45814ea0e7503d6621d87d42a8c04cbc2b0ef
 F test/json103.test 53df87f83a4e5fa0c0a56eb29ff6c94055c6eb919f33316d62161a8880112dbe
 F test/json104.test 1b844a70cddcfa2e4cd81a5db0657b2e61e7f00868310f24f56a9ba0114348c1
-F test/json105.test e64a8d73677fbae67886642cd5076e2ef3efe89f8483b87595cf9c030216c9bd
+F test/json105.test 043838b56e68f3252a0dcf5be1689016f6f3f05056f8dcfcdc9d074f4d932988
+F test/json106.test 71008c4341539445e85a6124dc77a2938c9a9b175af30826a50975e8fe79a8dc
 F test/json501.test ab168a12eb6eb14d479f8c1cdae3ac062fd5a4679f17f976e96f1af518408330
 F test/json502.test 84634d3dbb521d2814e43624025b760c6198456c8197bbec6c977c0236648f5b
 F test/jsonb01.test cace70765b36a36aec9a85a41ea65667d3bbf647d4400ddc3ac76f8fe7d94f90
@@ -2154,8 +2155,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 1f3a33df530dbe330ea8b14a69369b807b413b25a167d1a3938f8f0faf97cc91
-R 52287023e6071fa0fbc19b0133af9058
+P 29c46aca231b3f1e997ef306a5a651408185bf3ad09ab9fc1fe21ed18caa4d02
+R 3b15382c1a769a7c8cb14a6589eb5342
 U drh
-Z 09d32bf163b956d3c1ed37f12088104f
+Z 9a206cabf99e0d7c9b2e0213613cb0fd
 # Remove this line to create a well-formed Fossil manifest.
index 90e206a8b23d1bbe58797bd497089e1c6dce9ae9..3f84658ba84a8b2cbde21d314932df795bfe6bd3 100644 (file)
@@ -1 +1 @@
-29c46aca231b3f1e997ef306a5a651408185bf3ad09ab9fc1fe21ed18caa4d02
\ No newline at end of file
+f1c040606bfe784804134d8f3ca130908fad5212b47e3c32792baab977470943
\ No newline at end of file
index 55be0596b08305df8ded26931017a82b622aca48..9c28259b41ae29b95d53e39cf44a8115975f329f 100644 (file)
@@ -8120,6 +8120,7 @@ static int SQLITE_TCLAPI tclLoadStaticExtensionCmd(
   extern int sqlite3_prefixes_init(sqlite3*,char**,const sqlite3_api_routines*);
 #endif
   extern int sqlite3_qpvtab_init(sqlite3*,char**,const sqlite3_api_routines*);
+  extern int sqlite3_randomjson_init(sqlite3*,char**,const sqlite3_api_routines*);
   extern int sqlite3_regexp_init(sqlite3*,char**,const sqlite3_api_routines*);
   extern int sqlite3_remember_init(sqlite3*,char**,const sqlite3_api_routines*);
   extern int sqlite3_series_init(sqlite3*,char**,const sqlite3_api_routines*);
@@ -8152,6 +8153,7 @@ static int SQLITE_TCLAPI tclLoadStaticExtensionCmd(
     { "prefixes",              sqlite3_prefixes_init             },
 #endif
     { "qpvtab",                sqlite3_qpvtab_init               },
+    { "randomjson",            sqlite3_randomjson_init           },
     { "regexp",                sqlite3_regexp_init               },
     { "remember",              sqlite3_remember_init             },
     { "series",                sqlite3_series_init               },
index 5592191c22a9b20c1e5b8108b4e6bca2c7a8ba78..509db94e1178ef051b8d19474d9642cfa03e5bd8 100644 (file)
@@ -13,7 +13,7 @@
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
-set testprefix json104
+set testprefix json105
 
 # This is the example from pages 2 and 3 of RFC-7396
 db eval {
diff --git a/test/json106.test b/test/json106.test
new file mode 100644 (file)
index 0000000..e5a1ac5
--- /dev/null
@@ -0,0 +1,44 @@
+# 2023-12-18
+#
+# The author disclaims copyright to this source code.  In place of
+# a legal notice, here is a blessing:
+#
+#    May you do good and not evil.
+#    May you find forgiveness for yourself and forgive others.
+#    May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# Invariant tests for JSON built around the randomjson extension
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+set testprefix json106
+
+load_static_extension db randomjson
+db eval {
+  CREATE TEMP TABLE t1(j0,j5);
+}
+unset -nocomplain ii
+for {set ii 1} {$ii<=5000} {incr ii} {
+  do_execsql_test $ii.1 {
+    DELETE FROM t1;
+    INSERT INTO t1(j0,j5) VALUES(random_json($ii),random_json5($ii));
+    SELECT json_valid(j0), json_valid(j5,2) FROM t1;
+  } {1 1}
+  do_execsql_test $ii.2 {
+    SELECT count(*)
+      FROM t1, json_tree(j0) AS rt
+     WHERE rt.type NOT IN ('object','array')
+       AND rt.atom IS NOT (j0 ->> rt.fullkey);
+  } 0
+  do_execsql_test $ii.3 {
+    SELECT count(*)
+      FROM t1, json_tree(j5) AS rt
+     WHERE rt.type NOT IN ('object','array')
+       AND rt.atom IS NOT (j0 ->> rt.fullkey);
+  } 0
+}
+
+
+finish_test