Index: test/btree01.test ================================================================== --- test/btree01.test +++ test/btree01.test @@ -28,7 +28,105 @@ INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c; UPDATE t1 SET b=zeroblob(3000); UPDATE t1 SET b=zeroblob(64000) WHERE a=2; PRAGMA integrity_check; } {ok} + +# The previous test is sufficient to prevent a regression. But we +# add a number of additional tests to stress the balancer in similar +# ways, looking for related problems. +# +for {set i 1} {\$i<=30} {incr i} { + do_test btree01-1.2.\$i { + db eval { + DELETE FROM t1; + WITH RECURSIVE + c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30) + INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c; + UPDATE t1 SET b=zeroblob(3000); + UPDATE t1 SET b=zeroblob(64000) WHERE a=\$::i; + PRAGMA integrity_check; + } + } {ok} +} +for {set i 1} {\$i<=30} {incr i} { + do_test btree01-1.3.\$i { + db eval { + DELETE FROM t1; + WITH RECURSIVE + c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30) + INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c; + UPDATE t1 SET b=zeroblob(2000); + UPDATE t1 SET b=zeroblob(64000) WHERE a=\$::i; + PRAGMA integrity_check; + } + } {ok} +} +for {set i 1} {\$i<=30} {incr i} { + do_test btree01-1.4.\$i { + db eval { + DELETE FROM t1; + WITH RECURSIVE + c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30) + INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c; + UPDATE t1 SET b=zeroblob(6499) WHERE (a%3)==0; + UPDATE t1 SET b=zeroblob(6499) WHERE (a%3)==1; + UPDATE t1 SET b=zeroblob(6499) WHERE (a%3)==2; + UPDATE t1 SET b=zeroblob(64000) WHERE a=\$::i; + PRAGMA integrity_check; + } + } {ok} +} +for {set i 1} {\$i<=30} {incr i} { + do_test btree01-1.5.\$i { + db eval { + DELETE FROM t1; + WITH RECURSIVE + c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30) + INSERT INTO t1(a,b) SELECT i, zeroblob(6542) FROM c; + UPDATE t1 SET b=zeroblob(2331); + UPDATE t1 SET b=zeroblob(65496) WHERE a=\$::i; + PRAGMA integrity_check; + } + } {ok} +} +for {set i 1} {\$i<=30} {incr i} { + do_test btree01-1.6.\$i { + db eval { + DELETE FROM t1; + WITH RECURSIVE + c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30) + INSERT INTO t1(a,b) SELECT i, zeroblob(6542) FROM c; + UPDATE t1 SET b=zeroblob(2332); + UPDATE t1 SET b=zeroblob(65496) WHERE a=\$::i; + PRAGMA integrity_check; + } + } {ok} +} +for {set i 1} {\$i<=30} {incr i} { + do_test btree01-1.7.\$i { + db eval { + DELETE FROM t1; + WITH RECURSIVE + c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30) + INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c; + UPDATE t1 SET b=zeroblob(1); + UPDATE t1 SET b=zeroblob(65000) WHERE a=\$::i; + PRAGMA integrity_check; + } + } {ok} +} +for {set i 1} {\$i<=31} {incr i} { + do_test btree01-1.8.\$i { + db eval { + DELETE FROM t1; + WITH RECURSIVE + c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<31) + INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c; + UPDATE t1 SET b=zeroblob(4000); + UPDATE t1 SET b=zeroblob(65000) WHERE a=\$::i; + PRAGMA integrity_check; + } + } {ok} +} finish_test